{"version":3,"sources":["webpack:///./node_modules/monaco-editor/esm/vs/base/browser/globalMouseMoveMonitor.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/editor.api.js?7a37","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorColumns.js","webpack:///./node_modules/monaco-editor/esm/vs/base/parts/storage/common/storage.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/storage/common/storage.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/supports.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/platform.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/configuration/common/configurationRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/uint.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/instantiation/common/instantiation.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/canIUse.js","webpack:///./node_modules/monaco-editor/esm/vs/language/json/fillers/monaco-editor-core.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/functional.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/browser.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/supports/richEditBrackets.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/dom.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/assert.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarArrow.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/abstractScrollbar.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarState.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/horizontalScrollbar.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/verticalScrollbar.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollableElement.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/modelService.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/widget.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/buffer.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/cancellation.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/iterator.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/languageConfiguration.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/commands/replaceCommand.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/theme/common/colorRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/event.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/platform.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/characterClassifier.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/path.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/textModelEvents.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/editor.api.js?1155","webpack:///./node_modules/monaco-editor/esm/vs/base/common/strings.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/undoRedo/common/undoRedo.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/aria/aria.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/extpath.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/map.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/tokensStore.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/scrollable.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/numbers.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/keybindings.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/severity.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/token.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/process.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/contextkey/common/contextkey.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextView.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/codicons.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/services/codeEditorService.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/modeService.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionbar.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/mouseEvent.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/telemetry/common/telemetry.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/async.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/decorators.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/dnd.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/fastDomNode.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/range.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/uri.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybinding.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/position.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/sash/sash.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/supports/characterPair.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/supports/electricCharacter.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/supports/indentRules.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/supports/onEnter.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/languageConfigurationRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/stringBuilder.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/standalone/promise-polyfill/polyfill.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/actions/common/actions.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/filters.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/selection.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/resources.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/registry/common/platform.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/nullMode.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/textModelSearch.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/view/editorColorRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/glob.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/theme/common/theme.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/commands/common/commands.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybindingsRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/editStack.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/find/findDecorations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/find/replaceAllCommand.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/search.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/find/replacePattern.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/find/findModel.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/checkbox/checkbox.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/findInputCheckboxes.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/find/findOptionsWidget.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/find/findState.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/findInput.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/replaceInput.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/snippet/snippetParser.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggest.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/browser/contextScopedHistoryWidget.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/browser/historyWidgetKeybindingHint.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/find/findWidget.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/find/findController.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/touch.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/lifecycle.js","webpack:///./node_modules/monaco-editor/esm/vs/language/json/monaco.contribution.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/objects.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/instantiation/common/descriptors.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/notification/common/notification.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/editorExtensions.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/indentationGuesser.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/intervalTree.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/textModelTokens.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/bracketPairs.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/impl/length.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/impl/beforeEditPositionMapper.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/impl/smallImmutableSet.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/impl/ast.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/impl/tokenizer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/impl/brackets.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/impl/concat23Trees.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/impl/nodeReader.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/impl/parser.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/bracketPairsImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairs/colorizedBracketPairsDecorationProvider.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/textModel.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/network.js","webpack:///./node_modules/monaco-editor-vue/dist/index.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/languageSelector.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/languageFeatureRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/tokenizationRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/resolverService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/theme/common/themeService.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/keyboardEvent.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/mime.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/theme/common/iconRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/editorContextKeys.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/process.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/color.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/wordHelper.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/log/common/log.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/formattedTextRenderer.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/navigator.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/history.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/inputbox/inputBox.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/nls.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/wordHelper.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/config/editorOptions.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/errors.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/functional.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/lifecycle.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/iterator.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/event.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/linkedList.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/cancellation.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/keyCodes.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/uri.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/core/position.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneEnums.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/core/range.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/core/selection.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/core/token.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneBase.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/instantiation/common/instantiation.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/services/codeEditorService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/browser.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/event.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/keyboardEvent.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/iframe.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/mouseEvent.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/async.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/network.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/arrays.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/canIUse.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/dom.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/marshalling.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/strings.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/path.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/extpath.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/resources.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/types.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/map.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/editor/common/editor.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/commands/common/commands.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/opener/common/opener.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/services/openerService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/assert.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/objects.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/widget/diffNavigator.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/config/editorZoom.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/config/fontInfo.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/editorCommon.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/glob.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/languageSelector.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/modelService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/languageFeatureRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/tokenizationRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/nullMode.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/editorWorkerService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/resolverService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/worker/simpleWorker.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/worker/defaultWorkerFactory.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/languageConfiguration.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/supports.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/characterPair.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/richEditBrackets.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/electricCharacter.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/indentRules.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/onEnter.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/languageConfigurationRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/diff/diffChange.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/hash.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/diff/diff.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/diff/diffComputer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/uint.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewModel/prefixSumComputer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/mirrorTextModel.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/core/characterClassifier.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/linkComputer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/inplaceReplaceSupport.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/editorSimpleWorker.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/resourceConfiguration.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/log/common/log.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/stopwatch.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/editorWorkerServiceImpl.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/webWorker.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/core/stringBuilder.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/core/lineTokens.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/lineDecorations.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLineRenderer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModel.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchCommon.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchLexer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/browser/colorizer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/severity.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/editorBrowser.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/registry/common/platform.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/jsonschemas/common/jsonContributionRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/configuration/common/configurationRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/collections.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/config/commonEditorConfig.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/core/editOperation.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/configuration/common/configuration.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/configuration/common/configurationModels.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/keybinding/common/abstractKeybindingService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/contextkey/common/contextkey.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybindingResolver.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybindingsRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/keybinding/common/resolvedKeybindingItem.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/keybindingLabels.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/keybinding/common/baseResolvedKeybinding.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/workspace/common/workspace.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/keybinding/common/usLayoutResolvedKeybinding.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/notification/common/notification.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/standaloneStrings.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/browser/simpleServices.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/aria/aria.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/config/charWidthReader.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/config/elementSizeObserver.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/config/configuration.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/actions.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/actions/common/actions.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/editorExtensions.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/telemetry/common/telemetry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/fastDomNode.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/decorators.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/touch.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/globalMouseMoveMonitor.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/editorDom.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewEventHandler.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/view/viewPart.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/view/renderingContext.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/rangeUtil.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/theme/common/themeService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLine.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/editStack.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/indentationGuesser.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/intervalTree.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/wordCharacterClassifier.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/textModelSearch.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/textModelEvents.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/tokensStore.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/textModelTokens.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/color.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/model/textModel.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorCommon.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/controller/mouseTarget.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/controller/mouseHandler.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/controller/pointerHandler.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaState.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaInput.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/view/dynamicViewOverlay.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/theme/common/colorRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/view/editorColorRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lineNumbers/lineNumbers.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/margin/margin.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/view/viewEvents.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaHandler.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorColumnSelection.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/commands/replaceCommand.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorMoveOperations.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorDeleteOperations.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorWordOperations.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorMoveCommands.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/commands/shiftCommand.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/editorContextKeys.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/commands/surroundSelectionCommand.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorTypeOperations.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/controller/coreCommands.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/view/viewController.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/view/viewOutgoingEvents.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/view/viewLayer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/view/viewOverlays.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/decorations/decorations.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/widget.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarArrow.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/abstractScrollbar.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarState.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/horizontalScrollbar.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/verticalScrollbar.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/scrollable.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollableElement.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/indentGuides/indentGuides.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLines.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/linesDecorations/linesDecorations.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/marginDecorations/marginDecorations.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/core/rgba.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewModel/minimapTokensColorTracker.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharSheet.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRenderer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapPreBaked.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRendererFactory.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimap.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/view/overviewZoneManager.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/rulers/rulers.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/selections/selections.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursor.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursors.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewZones/viewZones.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/view/viewContext.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/view/viewEventDispatcher.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLinesViewportData.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/view/viewImpl.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/oneCursor.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorCollection.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/controller/cursor.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/editorAction.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/textToHtmlTokenizer.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/linesLayout.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLayout.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewModel/splitLinesCollection.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewModel/characterHardWrappingLineMapper.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelDecorations.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelImpl.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/instantiation/common/serviceCollection.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/accessibility/common/accessibility.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/widget/codeEditorWidget.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/sash/sash.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/instantiation/common/descriptors.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/instantiation/common/extensions.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/core/keybindingCancellation.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/core/editorState.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/dnd.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionbar.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/widget/diffReview.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextView.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/widget/inlineDiffMargin.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/progress/common/progress.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditorWidget.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/common/standaloneThemeService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybinding.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/clipboard/common/clipboardService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneCodeEditor.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/services/bulkEditService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/modeService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/abstractMode.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/mime.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/modesRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/languagesRegistry.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/modeServiceImpl.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/modelServiceImpl.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/services/abstractCodeEditorService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/browser/services/codeEditorServiceImpl.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneCodeServiceImpl.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/tokenization.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/common/themes.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneThemeServiceImpl.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/contextkey/browser/contextKeyService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/menu/menu.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/theme/common/styler.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextMenuHandler.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/range.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextMenuService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/contextview/contextview.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/layout/browser/layoutService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextViewService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/dialogs/common/dialogs.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/instantiation/common/graph.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/list/list.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/instantiation/common/instantiationService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/label/common/label.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/list/rangeMap.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/list/rowCache.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/list/listView.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/list/splice.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/numbers.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/common/filters.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/list/listWidget.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/contextkey/common/contextkeys.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/tree.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/indexTreeModel.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/abstractTree.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/objectTreeModel.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/objectTree.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/asyncDataTree.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/dataTree.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/list/browser/listService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/markers/common/markers.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/markers/common/markerService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/storage/common/storage.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/actions/common/menuService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/markersDecorationService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/common/services/markerDecorationsServiceImpl.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneServices.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/accessibility/common/abstractAccessibilityService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/platform/accessibility/common/accessibilityService.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneEditor.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchCompile.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneLanguages.js","webpack:///./node_modules/monaco-editor-vue/node_modules/monaco-editor/esm/vs/editor/editor.api.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/linkedList.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/jsonschemas/common/jsonContributionRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/nls.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/lineTokens.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/event.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/stopwatch.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/textChange.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/wordCharacterClassifier.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/iframe.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/arrays.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/hash.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/types.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionViewItems.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/actions.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneEnums.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneBase.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/marshalling.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/editor/common/editor.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/opener/common/opener.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/services/openerService.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/widget/diffNavigator.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/config/editorZoom.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/config/fontInfo.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/editorCommon.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/editorWorkerService.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/worker/simpleWorker.js","webpack:///./node_modules/monaco-editor/esm/vs/base/worker/defaultWorkerFactory.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/diff/diffChange.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/diff/diff.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/diff/diffComputer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/prefixSumComputer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/mirrorTextModel.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/linkComputer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/supports/inplaceReplaceSupport.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/editorSimpleWorker.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/textResourceConfigurationService.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/editorWorkerServiceImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/webWorker.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewLayout/lineDecorations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLineRenderer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModel.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchCommon.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchLexer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/browser/colorizer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/editorBrowser.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/services/bulkEditService.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/collections.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/config/commonEditorConfig.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/editOperation.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/configuration/common/configurationModels.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/keybinding/common/abstractKeybindingService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybindingResolver.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/keybinding/common/resolvedKeybindingItem.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/keybindingLabels.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/keybinding/common/baseResolvedKeybinding.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/keybinding/common/usLayoutResolvedKeybinding.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/workspace/common/workspace.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/standaloneStrings.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/browser/simpleServices.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/markersDecorationService.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/services/markerDecorations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/config/charWidthReader.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/config/elementSizeObserver.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/config/configuration.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/editorDom.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewEventHandler.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/view/viewPart.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/view/renderingContext.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/rangeUtil.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLine.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorCommon.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorAtomicMoveOperations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/controller/mouseTarget.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/controller/mouseHandler.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaState.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaInput.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/controller/pointerHandler.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/view/dynamicViewOverlay.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lineNumbers/lineNumbers.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/margin/margin.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/mouseCursor/mouseCursor.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaHandler.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorColumnSelection.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorMoveCommands.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorMoveOperations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorDeleteOperations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorWordOperations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/commands/shiftCommand.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/commands/surroundSelectionCommand.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorTypeOperations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/controller/coreCommands.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/view/viewLayer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/view/viewController.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/view/viewUserInputEvents.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/view/viewOverlays.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/decorations/decorations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/indentGuides/indentGuides.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLines.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/linesDecorations/linesDecorations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/marginDecorations/marginDecorations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/rgba.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/minimapTokensColorTracker.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharSheet.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRenderer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapPreBaked.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRendererFactory.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimap.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/view/overviewZoneManager.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/rulers/rulers.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/selections/selections.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursor.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursors.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewZones/viewZones.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/view/viewContext.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLinesViewportData.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/view/viewImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/oneCursor.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursorCollection.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/view/viewEvents.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelEventDispatcher.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/controller/cursor.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/editorAction.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/textToHtmlTokenizer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewLayout/linesLayout.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLayout.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/splitLinesCollection.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelDecorations.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/modesRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/instantiation/common/serviceCollection.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/accessibility/common/accessibility.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/monospaceLineBreaksComputer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/view/domLineBreaksComputer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/widget/codeEditorWidget.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/core/keybindingCancellation.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/core/editorState.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/widget/diffReview.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/widget/inlineDiffMargin.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/progress/common/progress.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditorWidget.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/common/standaloneThemeService.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/services/abstractCodeEditorService.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/browser/services/codeEditorServiceImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneCodeServiceImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneCodeEditor.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/languagesRegistry.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/modeServiceImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/semanticTokensProviderStyling.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/semanticTokensDto.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/getSemanticTokens.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/modelServiceImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/supports/tokenization.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/common/themes.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/theme/browser/iconsStyleSheet.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneThemeServiceImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/contextkey/browser/contextKeyService.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/range.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/codicons/codiconStyles.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/contextview/contextview.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/iconLabels.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/menu/menu.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/theme/common/styler.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextMenuHandler.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextMenuService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/layout/browser/layoutService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextViewService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/dialogs/common/dialogs.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/instantiation/common/graph.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/instantiation/common/instantiationService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/label/common/label.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/list/splice.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/list/list.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/list/rangeMap.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/list/rowCache.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/list/listView.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/list/listWidget.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/list/listPaging.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/splitview/splitview.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/tree/tree.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/table/tableWidget.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/tree/indexTreeModel.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/tree/treeIcons.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/tree/abstractTree.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/tree/objectTreeModel.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/tree/objectTree.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/tree/asyncDataTree.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/tree/dataTree.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/contextkey/common/contextkeys.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/list/browser/listService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/markers/common/markers.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/markers/common/markerService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/actions/common/menuService.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/markerDecorationsServiceImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/accessibility/browser/accessibilityService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/clipboard/browser/clipboardService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/undoRedo/common/undoRedoService.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabels.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/button/button.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/countBadge/countBadge.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/progressbar/progressbar.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/idGenerator.js","webpack:///./node_modules/monaco-editor/esm/vs/base/parts/quickinput/browser/quickInputUtils.js","webpack:///./node_modules/monaco-editor/esm/vs/base/parts/quickinput/common/quickInput.js","webpack:///./node_modules/monaco-editor/esm/vs/base/parts/quickinput/browser/quickInputBox.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/highlightedlabel/highlightedLabel.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/htmlContent.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabelHover.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabel.js","webpack:///./node_modules/monaco-editor/esm/vs/base/browser/ui/keybindingLabel/keybindingLabel.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/comparers.js","webpack:///./node_modules/monaco-editor/esm/vs/base/parts/quickinput/browser/quickInputList.js","webpack:///./node_modules/monaco-editor/esm/vs/base/parts/quickinput/browser/quickInput.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/quickinput/common/quickAccess.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/quickinput/common/quickInput.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickAccess.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickInput.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneServices.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneEditor.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchCompile.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneLanguages.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/extensions/common/extensions.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/contrib/format/format.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/editor.api.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/clipboard/common/clipboardService.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/instantiation/common/extensions.js","webpack:///./node_modules/monaco-editor/esm/vs/platform/configuration/common/configuration.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/config/editorOptions.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/errors.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/keyCodes.js"],"names":["standardMouseMoveMerger","lastEvent","currentEvent","ev","preventDefault","leftButton","buttons","posx","posy","GlobalMouseMoveMonitor","this","_hooks","_mouseMoveEventMerger","_mouseMoveCallback","_onStopCallback","stopMonitoring","dispose","invokeStopCallback","browserEvent","isMonitoring","clear","onStopCallback","initialElement","initialButtons","mouseMoveEventMerger","mouseMoveCallback","windowChain","getSameOriginWindowChain","mouseMove","mouseUp","listenTo","map","element","window","document","shadowRoot","unshift","add","data","e","hasDifferentOriginAncestor","lastSameOriginAncestor","length","target","tagName","toLowerCase","body","self","paths","stripTrailingSlash","str","replace","globalAPI","getWorkerUrl","moduleId","label","pathPrefix","result","test","currentUrl","String","location","currentOrigin","substr","hash","search","pathname","substring","protocol","js","blob","Blob","type","URL","createObjectURL","module","exports","CursorColumns","lineContent","column","tabSize","lineContentLength","endOffset","i","codePoint","nextRenderTabStop","graphemeBreakType","nextCodePoint","nextGraphemeBreakType","Array","push","pos","config","model","position","visibleColumnFromColumn","getLineContent","lineNumber","visibleColumn","lineLength","beforeVisibleColumn","beforeColumn","afterVisibleColumn","afterColumn","beforeDelta","afterDelta","columnFromVisibleColumn","minColumn","getLineMinColumn","maxColumn","getLineMaxColumn","indentSize","Math","max","StorageState","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","rejected","done","then","apply","database","options","Object","create","super","_onDidChangeStorage","_register","onDidChangeStorage","event","state","None","cache","Map","flushDelayer","DEFAULT_FLUSH_DELAY","pendingDeletes","Set","pendingInserts","whenFlushedCallbacks","registerListeners","onDidChangeItemsExternal","_a","_b","changed","forEach","key","accept","deleted","undefined","Closed","delete","currentValue","get","set","fire","fallbackValue","parseInt","valueStr","trigger","flushPending","wasDeleted","has","size","hasPending","updateRequest","insert","updateItems","finally","pop","items","request","TARGET_KEY","IStorageService","WillSaveStateReason","flushInterval","DEFAULT_FLUSH_INTERVAL","_onDidChangeValue","_onDidChangeTarget","_onWillSaveState","onWillSaveState","_workspaceKeyTargets","_globalKeyTargets","scope","getKeyTargets","getStorage","getBoolean","getNumber","remove","withPausedEmitters","updateKeyTarget","fn","pause","resume","keyTargets","JSON","stringify","loadKeyTargets","globalKeyTargets","workspaceKeyTargets","keysRaw","parse","error","globalStorage","workspaceStorage","emitDidChangeValue","createScopedLineTokens","context","offset","tokenCount","getCount","tokenIndex","findTokenIndexAtOffset","desiredLanguageId","getLanguageId","lastTokenIndex","firstTokenIndex","ScopedLineTokens","getStartOffset","getEndOffset","actual","languageId","firstCharOffset","lastCharOffset","_scopedLineTokensBrand","_actual","_firstTokenIndex","_lastTokenIndex","_lastCharOffset","actualLineContent","getStandardTokenType","ignoreBracketsInToken","standardTokenType","LANGUAGE_DEFAULT","_isWindows","_isMacintosh","_isLinux","_isNative","_isWeb","_isIOS","_locale","_userAgent","isElectronRenderer","process","versions","electron","navigator","platform","rawNlsConfig","nlsConfig","resolved","availableLanguages","locale","_translationsConfigFile","userAgent","indexOf","maxTouchPoints","language","isWindows","isMacintosh","isLinux","isNative","isWeb","isIOS","_globals","global","globals","setImmediate","bind","postMessage","importScripts","pending_1","addEventListener","vscodeSetImmediateId","len","candidate","id","splice","callback","lastId_1","myId","nextTick","_promise","OS","Extensions","Configuration","allSettings","properties","patternProperties","applicationSettings","machineSettings","machineOverridableSettings","windowSettings","resourceSettings","resourceLanguageSettingsSchemaId","contributionRegistry","as","JSONContribution","ConfigurationRegistry","overrideIdentifiers","_onDidSchemaChange","_onDidUpdateConfiguration","defaultValues","defaultLanguageConfigurationOverridesNode","title","configurationContributors","resourceLanguageSettingsSchema","additionalProperties","errorMessage","allowTrailingCommas","allowComments","configurationProperties","excludedConfigurationProperties","registerSchema","configuration","validate","registerConfigurations","configurations","doRegisterConfigurations","overrideIdentifier","updateOverridePropertyPatternKey","validateAndRegisterProperties","extensionInfo","registerJSONConfiguration","propertyKeys","validateProperty","property","updatePropertyDefaultValue","OVERRIDE_PROPERTY_PATTERN","restricted","restrictedConfigurations","includes","hasOwnProperty","included","deprecationMessage","markdownDeprecationMessage","subNodes","allOf","node","register","updateSchema","values","overrideIdentifierProperty","resourceLanguagePropertiesSchema","description","$ref","defaultValue","default","getDefaultValue","OVERRIDE_PROPERTY","RegExp","overrideIdentifierFromKey","t","isArray","configurationRegistry","trim","getConfigurationProperties","toUint8","v","toUint32","_util","getServiceDependencies","ctor","DI_DEPENDENCIES","serviceIds","DI_TARGET","IInstantiationService","createDecorator","storeServiceDependency","index","optional","serviceId","arguments","Error","toString","serviceIdentifier","BrowserFeatures","clipboard","writeText","queryCommandSupported","readText","keyboard","touch","pointerEvents","PointerEvent","once","_this","didCall","WindowManager","_zoomLevel","_lastZoomLevelChangeTime","_onDidChangeZoomLevel","onDidChangeZoomLevel","_zoomFactor","Date","now","ctx","createElement","getContext","dpr","devicePixelRatio","bsr","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","getZoomLevel","INSTANCE","getTimeSinceLastZoomLevelChanged","getZoomFactor","getPixelRatio","isFirefox","isWebKit","isChrome","isSafari","isWebkitWebView","isAndroid","isStandalone","matchMedia","matches","RichEditBracket","open","close","forwardRegex","reversedRegex","_richEditBracketBrand","_openSet","_toSet","_closeSet","text","arr","groupFuzzyBrackets","brackets","N","b","group","areOverlapping","a","aOpen","aClose","bOpen","bClose","mergeGroups","g1","g2","newG","min","oldG","j","g","currentOpen","currentClose","RichEditBrackets","_brackets","_richEditBracketsBrand","getRegexForBracketPair","getReversedRegexForBracketPair","getRegexForBrackets","getReversedRegexForBrackets","textIsBracket","textIsOpenBracket","maxBracketLength","bracket","collectSuperstrings","currentIndex","dest","lengthcmp","unique","seen","pieces","concat","sort","reverse","createBracketOrRegExp","toReversedString","prepareBracketForRegExp","insertWordBoundaries","regexStr","join","Uint16Array","charCodeAt","decode","resultLen","charAt","lastInput","lastOutput","BracketsUtils","reversedBracketRegex","reversedText","m","match","matchOffset","matchLength","absoluteMatchOffset","lineText","startOffset","reversedLineText","reversedSubstr","_findPrevBracketInText","bracketRegex","findNextBracketInText","clearNode","firstChild","isInDOM","isConnected","DomListener","handler","_node","_type","_handler","_options","removeEventListener","addDisposableListener","useCaptureOrOptions","_wrapAsStandardMouseEvent","_wrapAsStandardKeyboardEvent","addStandardDisposableListener","useCapture","wrapHandler","addDisposableNonBubblingMouseOutListener","toElement","parentNode","addDisposableNonBubblingPointerOutListener","runAtThisOrScheduleAtNextAnimationFrame","scheduleAtNextAnimationFrame","_animationFrame","doRequestAnimationFrame","emulatedRequestAnimationFrame","setTimeout","getTime","requestAnimationFrame","msRequestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","call","AnimationFrameQueueItem","runner","priority","_runner","_canceled","NEXT_QUEUE","CURRENT_QUEUE","animFrameRequested","inAnimationFrameRunner","animationFrameRunner","top","shift","execute","item","MINIMUM_TIME_MS","DEFAULT_EVENT_MERGER","TimeoutThrottledDomListener","eventMerger","minimumTimeMs","lastHandlerTime","timeout","invokeHandler","elapsedTime","cancel","setIfNotSet","addDisposableThrottledListener","getComputedStyle","el","defaultView","getClientArea","Dimension","clientWidth","clientHeight","visualViewport","width","height","innerWidth","innerHeight","documentElement","SizeUtils","parseFloat","cssPropertyName","jsPropertyName","computedStyle","getPropertyValue","getAttribute","convertToPixels","getDimension","obj","getTopLeftOffset","offsetParent","offsetTop","left","offsetLeft","scrollTop","c","isShadowRoot","direction","scrollLeft","getBorderLeftWidth","getBorderTopWidth","getDomNodePagePosition","domNode","bb","getBoundingClientRect","StandardWindow","scrollX","scrollY","getTotalWidth","margin","getMarginLeft","getMarginRight","offsetWidth","getContentWidth","border","getBorderRightWidth","padding","getPaddingLeft","getPaddingRight","getContentHeight","getBorderBottomWidth","getPaddingTop","getPaddingBottom","offsetHeight","getTotalHeight","getMarginTop","getMarginBottom","isAncestor","testChild","testAncestor","findParentWithClass","clazz","stopAtClazzOrNode","nodeType","ELEMENT_NODE","classList","contains","hasParentWithClass","host","mode","isInShadowDOM","getShadowRoot","getActiveElement","activeElement","createStyleSheet","container","getElementsByTagName","style","media","appendChild","_sharedStyleSheet","getSharedStyleSheet","getDynamicStyleSheetRules","sheet","rules","cssRules","createCSSRule","selector","cssText","insertRule","removeCSSRulesContainingSelector","ruleName","toDelete","rule","selectorText","deleteRule","isHTMLElement","o","HTMLElement","nodeName","EventType","CLICK","AUXCLICK","DBLCLICK","MOUSE_UP","MOUSE_DOWN","MOUSE_OVER","MOUSE_MOVE","MOUSE_OUT","MOUSE_ENTER","MOUSE_LEAVE","MOUSE_WHEEL","POINTER_UP","POINTER_DOWN","POINTER_MOVE","CONTEXT_MENU","WHEEL","KEY_DOWN","KEY_PRESS","KEY_UP","LOAD","BEFORE_UNLOAD","UNLOAD","ABORT","ERROR","RESIZE","SCROLL","FULLSCREEN_CHANGE","WK_FULLSCREEN_CHANGE","SELECT","CHANGE","SUBMIT","RESET","FOCUS","FOCUS_IN","FOCUS_OUT","BLUR","INPUT","STORAGE","DRAG_START","DRAG","DRAG_ENTER","DRAG_LEAVE","DRAG_OVER","DROP","DRAG_END","ANIMATION_START","ANIMATION_END","ANIMATION_ITERATION","EventHelper","stop","cancelBubble","returnValue","stopPropagation","saveParentsScrollTop","r","restoreParentsScrollTop","FocusTracker","_onDidFocus","onDidFocus","_onDidBlur","onDidBlur","hasFocus","loosingFocus","onFocus","onBlur","_refreshStateHandler","currentNodeHasFocus","trackFocus","append","parent","children","reset","innerText","SELECTOR_REGEX","Namespace","_$","namespace","attrs","exec","assign","HTML","createElementNS","className","keys","name","setAttribute","$","show","elements","display","removeAttribute","hide","tag","prototype","slice","computeScreenAwareSize","cssPx","screenPx","floor","windowOpenNoOpener","url","animate","stepDisposable","asCSSUrl","uri","asBrowserUri","asCSSPropertyValue","SVG","setPreferredWebSchema","href","ModifierKeyEmitter","_subscriptions","_keyStatus","altKey","shiftKey","ctrlKey","metaKey","defaultPrevented","keyCode","repeat","lastKeyPressed","lastKeyReleased","resetKeyStatus","doResetKeyStatus","instance","addMatchMediaChangeListener","query","mediaQueryList","addListener","ok","message","ARROW_IMG_SIZE","opts","_onActivate","onActivate","bgDomNode","bgWidth","bgHeight","bottom","right","icon","classNamesArray","_mouseMoveMonitor","onmousedown","_arrowMouseDown","_mousedownRepeatTimer","_mousedownScheduleRepeatTimer","scheduleRepeater","cancelAndSet","startMonitoring","mouseMoveData","visibility","visibleClassName","invisibleClassName","_visibility","_visibleClassName","_invisibleClassName","_domNode","_isVisible","_isNeeded","_rawShouldBeVisible","_shouldBeVisible","_revealTimer","_updateShouldBeVisible","rawShouldBeVisible","shouldBeVisible","_applyVisibilitySetting","ensureVisibility","isNeeded","setClassName","setShouldBeVisible","_reveal","_hide","withFadeAway","MOUSE_DRAG_RESET_DISTANCE","_lazyRender","lazyRender","_host","_scrollable","scrollable","_scrollByPage","scrollByPage","_scrollbarState","scrollbarState","_visibilityController","extraScrollbarClassName","setIsNeeded","_shouldRender","setDomNode","setPosition","_domNodeMouseDown","arrow","slider","setTop","setLeft","setWidth","setHeight","setLayerHinting","setContain","_sliderMouseDown","onclick","visibleSize","setVisibleSize","render","elementScrollSize","setScrollSize","elementScrollPosition","setScrollPosition","_renderDomNode","getRectangleLargeSize","getRectangleSmallSize","_updateSlider","getSliderSize","getArrowSize","getSliderPosition","_onMouseDown","domTop","getClientRects","sliderStart","sliderStop","mousePos","_sliderMousePosition","offsetX","offsetY","domNodePosition","dom","_mouseDownRelativePosition","_setDesiredScrollPositionNow","getDesiredScrollPositionFromOffsetPaged","getDesiredScrollPositionFromOffset","onDragFinished","initialMousePosition","initialMouseOrthogonalPosition","_sliderOrthogonalMousePosition","initialScrollbarState","clone","toggleClassName","mouseOrthogonalPosition","mouseOrthogonalDelta","abs","getScrollPosition","mousePosition","mouseDelta","getDesiredScrollPositionFromDelta","onDragEnd","onDragStart","_desiredScrollPosition","desiredScrollPosition","writeScrollPosition","setScrollPositionNow","scrollbarSize","_updateScrollbarSize","setScrollbarSize","MINIMUM_SLIDER_SIZE","ScrollbarState","arrowSize","oppositeScrollbarSize","scrollSize","scrollPosition","_scrollbarSize","round","_oppositeScrollbarSize","_arrowSize","_visibleSize","_scrollSize","_scrollPosition","_computedAvailableSize","_computedIsNeeded","_computedSliderSize","_computedSliderRatio","_computedSliderPosition","_refreshComputedValues","iVisibleSize","iScrollSize","iScrollPosition","computedAvailableSize","computedRepresentableSize","computedIsNeeded","computedSliderSize","computedSliderRatio","computedSliderPosition","_computeValues","desiredSliderPosition","correctedOffset","delta","scrollbarButtonLeftIcon","triangleLeft","scrollbarButtonRightIcon","triangleRight","scrollDimensions","getScrollDimensions","getCurrentScrollPosition","horizontalHasArrows","horizontal","horizontalScrollbarSize","vertical","verticalScrollbarSize","scrollWidth","arrowDelta","scrollbarDelta","_createArrow","onMouseWheel","_createSlider","horizontalSliderSize","sliderSize","sliderPosition","largeSize","smallSize","setBottom","_onElementScrollSize","_onElementScrollPosition","_onElementSize","updateScrollbarSize","setOppositeScrollbarSize","setVisibility","scrollbarButtonUpIcon","triangleUp","scrollbarButtonDownIcon","triangleDown","verticalHasArrows","scrollHeight","verticalSliderSize","setRight","HIDE_TIMEOUT","SCROLL_WHEEL_SENSITIVITY","SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED","MouseWheelClassifierItem","timestamp","deltaX","deltaY","score","MouseWheelClassifier","_capacity","_memory","_front","_rear","remainingInfluence","iteration","influence","pow","_computeScore","_isAlmostInt","_onScroll","onScroll","_onWillScroll","overflow","resolveOptions","_onDidScroll","scrollbarHost","mouseWheelEvent","_onMouseWheel","_onDragStart","_onDragEnd","_verticalScrollbar","_horizontalScrollbar","useShadows","_leftShadowDomNode","_topShadowDomNode","_topLeftShadowDomNode","_listenOnDomNode","listenOnDomNode","_mouseWheelToDispose","_setListeningToMouseWheel","handleMouseWheel","onmouseover","_onMouseOver","onnonbubblingmouseout","_onMouseOut","_hideTimeout","_isDragging","_mouseIsOver","_revealOnScroll","insertBefore","delegateMouseDown","dimensions","setScrollDimensions","newClassName","newOptions","mouseWheelScrollSensitivity","fastScrollSensitivity","scrollPredominantAxis","updateOptions","_render","shouldListen","isListening","passive","classifier","osZoomFactor","didScroll","flipAxes","shiftConvert","scrollYToX","futureScrollPosition","getFutureScrollPosition","deltaScrollTop","desiredScrollTop","ceil","deltaScrollLeft","desiredScrollLeft","validateScrollPosition","canPerformSmoothScroll","mouseWheelSmoothScroll","isPhysicalMouseWheel","setScrollPositionSmooth","consumeMouseWheel","alwaysConsumeMouseWheel","consumeMouseWheelIfScrollbarIsNeeded","onDidScroll","scrollState","enableTop","enableLeft","leftClassName","topClassName","topLeftClassName","beginReveal","_scheduleHide","beginHide","update","SmoothScrollableElement","reuseAnimation","DomScrollableElement","_element","scrollTopChanged","scrollLeftChanged","scanDomNode","IModelService","shouldSynchronizeModel","isTooLargeForSyncing","isForSimpleWidget","Widget","listener","ignoreTarget","hasBuffer","Buffer","textDecoder","VSBuffer","buffer","byteLength","isBuffer","from","byteOffset","TextDecoder","readUInt16LE","source","writeUInt16LE","destination","readUInt32BE","writeUInt32BE","readUInt8","writeUInt8","shortcutEvent","freeze","handle","clearTimeout","CancellationToken","isCancellationToken","thing","Cancelled","MutableToken","isCancellationRequested","onCancellationRequested","_isCancelled","_emitter","CancellationTokenSource","_token","_parentListener","Iterable","is","Symbol","iterator","_empty","empty","single","iterable","isEmpty","first","some","predicate","find","filter","iterables","concatNested","reduce","reducer","initialValue","to","consume","atMost","Number","POSITIVE_INFINITY","consumed","equals","comparator","at","bt","ai","bi","an","bn","IndentAction","StandardAutoClosingPairConditional","_standardAutoClosingPairConditionalBrand","_standardTokenMask","notIn","standardToken","AutoClosingPairs","autoClosingPairs","autoClosingPairsOpenByStart","autoClosingPairsOpenByEnd","autoClosingPairsCloseByStart","autoClosingPairsCloseByEnd","autoClosingPairsCloseSingleChar","pair","appendEntry","ReplaceCommand","range","insertsAutoWhitespace","_range","_text","builder","addTrackedEditOperation","helper","inverseEditOperations","getInverseEditOperations","srcRange","endLineNumber","endColumn","ReplaceCommandWithoutChangingPosition","startLineNumber","startColumn","ReplaceCommandWithOffsetCursorState","lineNumberDeltaOffset","columnDeltaOffset","_columnDeltaOffset","_lineNumberDeltaOffset","ReplaceCommandThatPreservesSelection","editRange","initialSelection","forceMoveMarkers","_initialSelection","_forceMoveMarkers","_selectionId","trackSelection","getTrackedSelection","ColorContribution","ColorRegistry","_onDidChangeSchema","onDidChangeSchema","colorSchema","colorReferenceSchema","enum","enumDescriptions","colorsById","defaults","needsTransparency","colorContribution","propertySchema","format","defaultSnippets","theme","colorDesc","colorValue","resolveColorValue","sorter","cat1","cat2","localeCompare","k","colorRegistry","registerColor","foreground","dark","light","hc","errorForeground","focusBorder","contrastBorder","activeContrastBorder","widgetShadow","black","transparent","inputBackground","white","inputForeground","inputBorder","inputActiveOptionBorder","inputActiveOptionBackground","inputActiveOptionForeground","inputValidationInfoBackground","inputValidationInfoForeground","inputValidationInfoBorder","inputValidationWarningBackground","inputValidationWarningForeground","inputValidationWarningBorder","inputValidationErrorBackground","inputValidationErrorForeground","inputValidationErrorBorder","selectBackground","selectForeground","buttonForeground","buttonBackground","buttonHoverBackground","lighten","darken","badgeBackground","badgeForeground","scrollbarShadow","scrollbarSliderBackground","fromHex","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","progressBarBackground","editorErrorBackground","editorErrorForeground","editorErrorBorder","editorWarningBackground","editorWarningForeground","editorWarningBorder","editorInfoBackground","editorInfoForeground","editorInfoBorder","editorHintForeground","editorHintBorder","editorBackground","editorForeground","editorWidgetBackground","editorWidgetForeground","editorWidgetBorder","editorWidgetResizeBorder","quickInputBackground","quickInputForeground","quickInputTitleBackground","pickerGroupForeground","pickerGroupBorder","keybindingLabelBackground","keybindingLabelForeground","keybindingLabelBorder","keybindingLabelBottomBorder","editorSelectionBackground","editorSelectionForeground","editorInactiveSelection","editorSelectionHighlight","lessProminent","editorFindMatch","editorFindMatchHighlight","editorFindRangeHighlight","editorFindMatchBorder","editorFindMatchHighlightBorder","editorFindRangeHighlightBorder","editorHoverBackground","editorInlayHintForeground","blue","cyan","editorInlayHintBackground","defaultInsertColor","defaultRemoveColor","diffInserted","diffRemoved","diffInsertedOutline","diffRemovedOutline","diffBorder","diffDiagonalFill","listFocusBackground","listFocusForeground","listFocusOutline","listActiveSelectionBackground","listActiveSelectionForeground","listActiveSelectionIconForeground","listInactiveSelectionBackground","listInactiveSelectionForeground","listInactiveSelectionIconForeground","listInactiveFocusBackground","listInactiveFocusOutline","listHoverBackground","listHoverForeground","listDropBackground","listHighlightForeground","listFilterWidgetBackground","ifDefinedThenElse","listFilterWidgetOutline","listFilterWidgetNoMatchesOutline","treeIndentGuidesStroke","tableColumnsBorder","_deprecatedQuickInputListFocusBackground","quickInputListFocusForeground","quickInputListFocusIconForeground","quickInputListFocusBackground","oneOf","menuBorder","menuForeground","menuBackground","menuSelectionForeground","menuSelectionBackground","menuSelectionBorder","menuSeparatorBackground","toolbarHoverBackground","overviewRulerFindMatchForeground","minimapFindMatch","minimapSelection","minimapError","minimapWarning","minimapBackground","minimapForegroundOpacity","minimapSliderBackground","minimapSliderHoverBackground","minimapSliderActiveBackground","executeTransform","transform","_c","op","factor","color","defines","if","else","backgroundColor","background","isDarkerThan","getLighterColor","transparency","getDarkerColor","colorValues","ifArg","thenArg","elseArg","backgroundColorValue","getColor","workbenchColorsSchemaId","schemaRegistry","getColorSchema","delayer","notifySchemaChanged","isScheduled","schedule","Event","thisArgs","disposables","didFire","snapshot","each","signal","any","events","merge","initial","output","emitter","Emitter","debounce","delay","leading","leakWarningThreshold","subscription","numDebouncedCalls","cur","_output","latch","firstCall","shouldEmit","split","isT","_buffer","flush","ChainableEvent","chain","fromNodeEventEmitter","eventName","args","onFirstListenerAdd","on","onLastListenerRemove","removeListener","fromDOMEventEmitter","toPromise","EventProfiling","_listenerCount","_invocationCount","_elapsedOverall","_name","_idPool","listenerCount","_stopWatch","elapsed","console","info","toFixed","_globalLeakWarningThreshold","LeakageMonitor","customThreshold","random","_warnCountdown","_stacks","threshold","stack","count","topStack","topCount","warn","_disposed","_leakageMon","_perfMon","_profName","_event","_listeners","firstListener","onFirstListenerDidAdd","onListenerDidAdd","removeMonitor","check","hasListeners","_deliveryQueue","start","_d","_e","PauseableEmitter","_isPaused","_eventQueue","_mergeFn","DebounceEmitter","_delay","_handle","EventBufferer","buffers","Relay","listening","inputEvent","inputEventListener","_isLinuxSnap","_language","nodeProcess","vscode","env","_platform","pending","lastId","_isLittleEndian","_isLittleEndianComputed","isLittleEndian","Uint8Array","view","CharacterClassifier","_defaultValue","_asciiMap","_createAsciiMap","_map","asciiMap","charCode","_value","CHAR_UPPERCASE_A","CHAR_LOWERCASE_A","CHAR_UPPERCASE_Z","CHAR_LOWERCASE_Z","CHAR_DOT","CHAR_FORWARD_SLASH","CHAR_BACKWARD_SLASH","CHAR_COLON","CHAR_QUESTION_MARK","ErrorInvalidArgType","expected","determiner","msg","code","validateString","isPathSeparator","isPosixPathSeparator","isWindowsDeviceRoot","normalizeString","path","allowAboveRoot","separator","res","lastSegmentLength","lastSlash","dots","lastSlashIndex","lastIndexOf","_format","sep","pathObject","dir","root","base","ext","win32","pathSegments","resolvedDevice","resolvedTail","resolvedAbsolute","rootEnd","device","isAbsolute","last","firstPart","tail","joined","arg","needsReplace","slashCount","firstLen","normalize","fromOrig","toOrig","fromStart","fromEnd","fromLen","toStart","toEnd","toLen","lastCommonSep","fromCode","out","resolvedPath","end","matchedSlash","extIdx","firstNonSlashEnd","startDot","startPart","preDotState","ret","delimiter","posix","trailingSeparator","hasRoot","relative","dirname","basename","extname","OverviewRulerLane","MinimapPosition","HorizontalGuidesState","TextModelResolvedOptions","src","_textModelResolvedOptionsBrand","insertSpaces","Boolean","defaultEOL","trimAutoWhitespace","bracketPairColorizationOptions","other","newOpts","FindMatch","_findMatchBrand","IndentGuide","horizontalLine","IndentGuideHorizontalLine","ValidAnnotatedEditOperation","identifier","isAutoWhitespaceEdit","_isTracked","ApplyEditsResult","reverseEdits","changes","trimAutoWhitespaceLineNumbers","ModelRawFlush","changeType","LineInjectedText","ownerId","order","injectedTexts","lastOriginalOffset","injectedText","content","decorations","decoration","before","after","ModelRawLineChanged","detail","ModelRawLinesDeleted","fromLineNumber","toLineNumber","ModelRawLinesInserted","ModelRawEOLChanged","ModelRawContentChangedEvent","versionId","isUndoing","isRedoing","resultingSelection","change","ModelInjectedTextChangedEvent","InternalModelContentChangeEvent","rawContentChangedEvent","contentChangedEvent","_mergeChangeEvents","eol","isFlush","isFalsyOrWhitespace","_formatRegexp","idx","isNaN","escape","html","escapeRegExpCharacters","ltrim","haystack","needle","needleLen","rtrim","haystackLen","convertSimple2RegExpPattern","pattern","createRegExp","searchString","isRegex","wholeWord","modifiers","matchCase","multiline","unicode","regExpLeadsToEndlessLoop","regexp","lastIndex","regExpFlags","ignoreCase","splitLines","firstNonWhitespaceIndex","chCode","getLeadingWhitespace","lastNonWhitespaceIndex","startIndex","compare","compareSubstring","aStart","aEnd","bStart","bEnd","codeA","codeB","aLen","bLen","compareIgnoreCase","compareSubstringIgnoreCase","isLowerAsciiLetter","diff","isUpperAsciiLetter","equalsIgnoreCase","startsWithIgnoreCase","candidateLength","commonPrefixLength","commonSuffixLength","aLastIndex","bLastIndex","isHighSurrogate","isLowSurrogate","computeCodePoint","highSurrogate","lowSurrogate","getNextCodePoint","nextCharCode","getPrevCodePoint","prevCharCode","nextCharLength","graphemeBreakTree","GraphemeBreakTree","getInstance","initialOffset","initialCodePoint","getGraphemeBreakType","breakBetweenGraphemeBreakType","prevCharLength","prevCodePoint","prevGraphemeBreakType","CONTAINS_RTL","containsRTL","CONTAINS_EMOJI","containsEmoji","IS_BASIC_ASCII","isBasicASCII","UNUSUAL_LINE_TERMINATORS","containsUnusualLineTerminators","containsFullWidthCharacter","isFullWidthCharacter","isEmojiImprecise","x","UTF8_BOM_CHARACTER","fromCharCode","startsWithUTF8BOM","containsUppercaseCharacter","ignoreEscapedChars","singleLetterHash","n","LETTERS_CNT","breakTypeA","breakTypeB","_data","getGraphemeBreakRawData","_INSTANCE","nodeCount","nodeIndex","getLeftDeleteOffset","emojiOffset","getOffsetBeforeLastEmojiComponent","getUTF16Length","isEmojiModifier","optionalZwjCodePoint","IUndoRedoService","ResourceEditStackSnapshot","resource","UndoRedoGroup","_ID","UndoRedoSource","MAX_MESSAGE_LENGTH","ariaContainer","alertContainer","alertContainer2","statusContainer","statusContainer2","setARIAContainer","createAlertContainer","createStatusContainer","alert","textContent","insertMessage","status","__webpack_amd_options__","toSlashes","osPath","toPosixPath","isEqualOrParent","parentCandidate","beginsWith","sepOffset","StringIterator","_pos","aCode","thisCode","ConfigKeysIterator","_caseSensitive","_from","_to","justSeps","ch","PathIterator","_splitOnBackslash","UriIterator","_ignorePathCasing","_states","_stateIdx","scheme","authority","_pathIterator","fragment","hasNext","cmp","TernarySearchTreeNode","tmp","updateHeight","heightLeft","heightRight","TernarySearchTree","segments","_iter","ignorePathCasing","_root","iter","segment","val","mid","oldElement","bf","balanceFactor","d1","d2","rotateLeft","rotateRight","_getNode","_delete","superStr","_min","newChild","_entries","ResourceMapEntry","ResourceMap","mapOrKeyFn","toKey","defaultToKey","clb","_","entry","toStringTag","LinkedMap","_head","_tail","_size","_state","previous","addItemLast","addItemFirst","removeItem","callbackfn","current","entries","newSize","currentSize","LRUCache","limit","ratio","_limit","_ratio","checkTrim","trimOld","countEOL","eolCount","firstLineLength","lastLineStart","chr","getDefaultMetadata","topLevelLanguageId","EMPTY_LINE_TOKENS","Uint32Array","MultilineTokensBuilder","tokens","lineTokens","lastLineNumber","MultilineTokens","SparseEncodedTokens","_tokens","_tokenCount","_getDeltaLine","_getStartCharacter","_getEndCharacter","_getTokenCount","startChar","maxDeltaLine","endChar","deltaLine","low","high","midDeltaLine","LineTokens2","subarray","startDeltaLine","endDeltaLine","newTokenCount","hasDeletedTokens","firstDeltaLine","srcOffset","tokenDeltaLine","tokenStartCharacter","tokenEndCharacter","tokenMetadata","destOffset","aTokens","bTokens","destTokens","destFirstDeltaLine","horizontalShiftForFirstLineTokens","startCharacter","endCharacter","deletedLineCount","character","lastLineLength","firstCharCode","isInsertingPreciselyOneWordCharacter","tokenLength","MultilineTokens2","getMaxDeltaLine","getLineTokens","deltaRange","getRange","startLineIndex","endLineIndex","removeTokens","_updateEndLineNumber","bDeltaLine","acceptEdit","_acceptDeleteRange","_acceptInsertText","firstLineIndex","lastLineIndex","deletedLinesCount","tokenMaxDeltaLine","deletedBefore","acceptDeleteRange","lineIndex","acceptInsertText","toUint32Array","TokensStore2","languageIdCodec","_pieces","_isComplete","_languageIdCodec","isComplete","_firstRange","_lastRange","plusRange","insertPosition","piece","pieceIndex","_findFirstPieceWithLine","aIndex","lastEndOffset","emitToken","metadata","bIndex","bStartCharacter","getStartCharacter","bEndCharacter","getEndCharacter","bMetadata","getMetadata","bMask","aMask","aMergeIndex","TokensStore","_lineTokens","_len","rawLineTokens","encodeLanguageId","lineTextLength","hasDifferentLanguageId","deleteCount","insertIndex","insertCount","checkEquality","_massageTokens","_ensureLine","oldTokens","_equals","_deleteEnding","lastLineTokens","_deleteBeginning","_append","_deleteLines","_insert","_insertLines","toChIndex","fromChIndex","tokensCount","fromTokenIndex","findIndexInTokensArray","fromTokenStartOffset","fromTokenEndOffset","lastEnd","tokenEndOffset","_otherTokens","myTokens","otherTokens","otherTokensCount","chIndex","textLength","ScrollState","_scrollStateBrand","rawScrollLeft","rawScrollTop","useRawScrollPositions","inSmoothScrolling","widthChanged","scrollWidthChanged","heightChanged","scrollHeightChanged","oldWidth","oldScrollWidth","oldScrollLeft","oldHeight","oldScrollHeight","oldScrollTop","Scrollable","smoothScrollDuration","_scrollableBrand","_smoothScrollDuration","_scheduleAtNextAnimationFrame","_smoothScrolling","withScrollPosition","newState","withScrollDimensions","_setState","acceptScrollDimensions","validTarget","newSmoothScrolling","SmoothScrollingOperation","startTime","duration","combine","animationFrameDisposable","_performSmoothScrolling","tick","isDone","oldState","createScrollEvent","SmoothScrollingUpdate","createEaseOutCubic","completion","easeOutCubic","createComposed","cut","_initAnimations","_initAnimation","viewportSize","stop1","stop2","_tick","newScrollLeft","newScrollTop","easeInCubic","clamp","MovingAverage","_n","_val","createKeybinding","keybinding","chordPart","ChordKeybinding","createSimpleKeybinding","ctrlCmd","winCtrl","SimpleKeybinding","parts","ResolvedKeybindingPart","kbLabel","kbAriaLabel","keyLabel","keyAriaLabel","ResolvedKeybinding","Severity","_error","_warning","_warn","_info","_ignore","fromValue","Warning","Info","Ignore","severity","Token","_tokenBrand","TokenizationResult","endState","_tokenizationResultBrand","TokenizationResult2","_tokenizationResult2Brand","safeProcess","cwd","CONSTANT_VALUES","ContextKeyExpr","ContextKeyDefinedExpr","ContextKeyEqualsExpr","ContextKeyRegexExpr","ContextKeyNotExpr","expr","ContextKeyAndExpr","ContextKeyOrExpr","serialized","strict","_deserializeOrExpression","p","_deserializeAndExpression","_deserializeOne","serializedOne","ContextKeyNotEqualsExpr","_deserializeValue","_deserializeRegexValue","ContextKeyInExpr","ContextKeyGreaterEqualsExpr","ContextKeyGreaterExpr","ContextKeySmallerEqualsExpr","ContextKeySmallerExpr","serializedValue","caseIgnoreFlag","expressionsAreEqualWithConstantSubstitution","aExpr","substituteConstants","bExpr","ContextKeyFalseExpr","ContextKeyTrueExpr","negated","constantValue","cmp1","getValue","trueValue","cmp2","valueKey","ContextKeyNotInExpr","evaluate","falseValue","withFloatOrStr","thisSource","otherSource","ContextKeyNotRegexExpr","eliminateConstantsInArray","newArr","newExpr","_expr","_normalizeArr","exprArr","hasTrue","lastElement","secondToLastElement","isFinished","resultElement","serialize","negate","extraRedundantCheck","hasFalse","implies","LEFT","RIGHT","all","getTerminals","RawContextKey","metaOrHide","createKey","getContextKeyValue","IContextKeyService","SET_CONTEXT_COMMAND_ID","key1","key2","value1","value2","q","qTerm","notP","notA","IContextViewService","IContextMenuService","Registry","_icons","_onDidRegister","existing","_registry","iconRegistry","registerCodicon","def","Codicon","getCodiconAriaLabel","_match","codiconName","definition","CSSIcon","iconNameSegment","iconNameExpression","iconModifierExpression","cssIconIdRegex","asClassNameArray","modifier","classNames","asClassName","asCSSSelector","fontCharacter","plus","gistNew","repoCreate","lightbulb","lightBulb","repo","repoDelete","gistFork","repoForked","gitPullRequest","gitPullRequestAbandoned","recordKeys","tagAdd","tagRemove","person","personFollow","personOutline","personFilled","gitBranch","gitBranchCreate","gitBranchDelete","sourceControl","mirror","mirrorPublic","star","starAdd","starDelete","starEmpty","comment","commentAdd","warning","searchSave","logOut","signOut","logIn","signIn","eye","eyeUnwatch","eyeWatch","circleFilled","primitiveDot","closeDirty","debugBreakpoint","debugBreakpointDisabled","debugHint","primitiveSquare","edit","pencil","issueOpened","gistPrivate","gitForkPrivate","lock","mirrorPrivate","removeClose","repoSync","sync","desktopDownload","beaker","microscope","vm","deviceDesktop","file","fileText","more","ellipsis","kebabHorizontal","mailReply","reply","organization","organizationFilled","organizationOutline","newFile","fileAdd","newFolder","fileDirectoryCreate","trash","trashcan","history","clock","folder","fileDirectory","symbolFolder","logoGithub","markGithub","github","terminal","repl","zap","symbolEvent","variable","symbolVariable","array","symbolArray","symbolModule","symbolPackage","symbolNamespace","symbolObject","symbolMethod","symbolFunction","symbolConstructor","symbolBoolean","symbolNull","symbolNumeric","symbolNumber","symbolStructure","symbolStruct","symbolParameter","symbolTypeParameter","symbolKey","symbolText","symbolReference","goToFile","symbolEnum","symbolValue","symbolRuler","symbolUnit","activateBreakpoints","archive","arrowBoth","arrowDown","arrowLeft","arrowRight","arrowSmallDown","arrowSmallLeft","arrowSmallRight","arrowSmallUp","arrowUp","bell","bold","book","bookmark","debugBreakpointConditionalUnverified","debugBreakpointConditional","debugBreakpointConditionalDisabled","debugBreakpointDataUnverified","debugBreakpointData","debugBreakpointDataDisabled","debugBreakpointLogUnverified","debugBreakpointLog","debugBreakpointLogDisabled","briefcase","broadcast","browser","bug","calendar","caseSensitive","checklist","chevronDown","dropDownButton","chevronLeft","chevronRight","chevronUp","chromeClose","chromeMaximize","chromeMinimize","chromeRestore","circleOutline","debugBreakpointUnverified","circleSlash","circuitBoard","clearAll","clippy","closeAll","cloudDownload","cloudUpload","collapseAll","colorMode","commentDiscussion","compareChanges","creditCard","dash","dashboard","debugContinue","debugDisconnect","debugPause","debugRestart","debugStart","debugStepInto","debugStepOut","debugStepOver","debugStop","debug","deviceCameraVideo","deviceCamera","deviceMobile","diffAdded","diffIgnored","diffModified","diffRenamed","discard","editorLayout","emptyWindow","exclude","extensions","eyeClosed","fileBinary","fileCode","fileMedia","filePdf","fileSubmodule","fileSymlinkDirectory","fileSymlinkFile","fileZip","files","flame","foldDown","foldUp","fold","folderActive","folderOpened","gear","gift","gistSecret","gist","gitCommit","gitCompare","gitMerge","githubAction","githubAlt","globe","grabber","graph","gripper","heart","home","horizontalRule","hubot","inbox","issueClosed","issueReopened","issues","italic","jersey","json","kebabVertical","law","lightbulbAutofix","linkExternal","link","listOrdered","listUnordered","liveShare","loading","mailRead","mail","markdown","megaphone","mention","milestone","mortarBoard","move","multipleWindows","mute","noNewline","note","octoface","openPreview","package_","paintcan","pin","play","run","plug","preserveCase","preview","project","pulse","question","quote","radioTower","reactions","references","refresh","regex","remoteExplorer","remote","replaceAll","repoClone","repoForcePush","repoPull","repoPush","report","requestChanges","rocket","rootFolderOpened","rootFolder","rss","ruby","saveAll","saveAs","save","screenFull","screenNormal","searchStop","server","settingsGear","settings","shield","smiley","sortPrecedence","splitHorizontal","splitVertical","squirrel","starFull","starHalf","symbolClass","symbolColor","symbolConstant","symbolEnumMember","symbolField","symbolFile","symbolInterface","symbolKeyword","symbolMisc","symbolOperator","symbolProperty","wrench","wrenchSubaction","symbolSnippet","tasklist","telescope","textSize","threeBars","thumbsdown","thumbsup","tools","twitter","unfold","unlock","unmute","unverified","verified","vmActive","vmOutline","vmRunning","watch","whitespace","wordWrap","zoomIn","zoomOut","listFilter","listFlat","listSelection","selection","listTree","debugBreakpointFunctionUnverified","debugBreakpointFunction","debugBreakpointFunctionDisabled","debugStackframeActive","debugStackframeDot","debugStackframe","debugStackframeFocused","debugBreakpointUnsupported","symbolString","debugReverseContinue","debugStepBack","debugRestartFrame","callIncoming","callOutgoing","menu","expandAll","feedback","groupByRefType","ungroupByRefType","account","bellDot","debugConsole","library","runAll","syncIgnored","pinned","githubInverted","debugAlt","serverProcess","serverEnvironment","pass","stopCircle","playCircle","record","debugAltSmall","vmConnect","cloud","exportIcon","graphLeft","magnet","notebook","redo","checkAll","pinnedDirty","passFilled","circleLargeFilled","circleLargeOutline","gather","table","variableGroup","typeHierarchy","typeHierarchySub","typeHierarchySuper","gitPullRequestCreate","runAbove","runBelow","notebookTemplate","debugRerun","workspaceTrusted","workspaceUntrusted","workspaceUnspecified","terminalCmd","terminalDebian","terminalLinux","terminalPowershell","terminalTmux","terminalUbuntu","terminalBash","arrowSwap","copy","personAdd","filterFilled","wand","debugLineByLine","inspect","layers","layersDot","layersActive","compass","compassDot","compassActive","azure","issueDraft","gitPullRequestClosed","gitPullRequestDraft","debugAll","debugCoverage","runErrors","folderLibrary","debugContinueSmall","beakerStop","graphLine","graphScatter","pieChart","bracketDot","bracketError","lockSmall","azureDevops","verifiedFilled","ICodeEditorService","IModeService","ActionBar","_f","previousKeys","nextKeys","triggerKeyDown","focusable","_onDidCancel","cancelHasListener","onDidCancel","_onDidRun","onDidRun","_onBeforeRun","onBeforeRun","_context","_orientation","orientation","_triggerKeys","keyDown","triggerKeys","actionRunner","_actionRunner","_actionIds","viewItems","focusedItem","animated","eventHandled","focusPrevious","focusNext","focusFirst","focusLast","trapsArrowNavigation","isTriggerKeyEvent","doTrigger","updateFocusedItem","focusTracker","actionsList","ariaLabel","elem","setActionContext","actions","action","actionViewItemElement","allowContextMenu","actionViewItemProvider","setFocusable","focus","selectFirst","firstEnabled","findIndex","isEnabled","updateFocus","preventLoopNavigation","focusOnlyEnabledItems","fromRight","preventScroll","actionViewItem","focusItem","blur","_action","getContainer","StandardMouseEvent","button","middleButton","rightButton","pageX","pageY","clientX","clientY","iframeOffsets","getPositionOfChildWindowRelativeToAncestorWindow","StandardWheelEvent","targetNode","srcElement","e1","e2","wheelDeltaY","VERTICAL_AXIS","axis","deltaMode","DOM_DELTA_LINE","wheelDeltaX","HORIZONTAL_AXIS","wheelDelta","ITelemetryService","isThenable","createCancelablePromise","thenable","token","promise","err","onfinally","Throttler","activePromise","queuedPromise","queuedPromiseFactory","promiseFactory","onComplete","queue","Delayer","defaultDelay","completionPromise","doResolve","doReject","task","cancelTimeout","ThrottledDelayer","throttler","millis","disposable","disposableTimeout","timer","TimeoutTimer","IntervalTimer","clearInterval","interval","setInterval","RunOnceScheduler","timeoutToken","timeoutHandler","onTimeout","doRun","runWhenIdle","requestIdleCallback","cancelIdleCallback","didTimeout","disposed","IdleValue","executor","_didRun","_executor","Promises","settled","promises","firstError","withAsyncBody","bodyFn","memoize","_target","descriptor","fnKey","memoizeKey","defineProperty","configurable","enumerable","writable","DataTransfers","RESOURCES","DOWNLOAD_URL","FILES","TEXT","TERMINALS","DragAndDropData","StaticDND","CurrentDragAndDropData","FastDomNode","_maxWidth","_width","_height","_top","_left","_bottom","_right","_fontFamily","_fontWeight","_fontSize","_fontFeatureSettings","_lineHeight","_letterSpacing","_className","_display","_position","_backgroundColor","_layerHint","_contain","_boxShadow","maxWidth","fontFamily","fontWeight","fontSize","fontFeatureSettings","lineHeight","letterSpacing","shouldHaveIt","toggle","layerHint","boxShadow","contain","child","removeChild","createFastDomNode","Range","containsPosition","containsRange","otherRange","strictContainsRange","intersectRanges","resultStartLineNumber","resultStartColumn","resultEndLineNumber","resultEndColumn","otherStartLineNumber","otherStartColumn","otherEndLineNumber","otherEndColumn","equalsRange","getEndPosition","getStartPosition","collapseToStart","aStartLineNumber","bStartLineNumber","aStartColumn","bStartColumn","aEndLineNumber","bEndLineNumber","aEndColumn","bEndColumn","aExists","bExists","_schemePattern","_singleSlashStart","_doubleSlashStart","_validateUri","_strict","_schemeFix","_referenceResolution","_slash","_regexp","URI","schemeOrData","fsPath","with","uriToFsPath","Uri","percentDecode","components","pathFragment","newPath","skipEncoding","_asFormatted","_formatted","external","_fsPath","_sep","_pathSepMarker","$mid","encodeTable","encodeURIComponentFast","uriComponent","allowSlash","nativeEncodePos","encodeURIComponent","escaped","encodeURIComponentMinimal","keepDriveLetterCasing","encoder","userinfo","decodeURIComponentGraceful","decodeURIComponent","_rEncodedAsHex","IKeybindingService","Position","newLineNumber","newColumn","deltaLineNumber","deltaColumn","isBefore","isBeforeOrEqual","aLineNumber","bLineNumber","aColumn","bColumn","__decorate","decorators","desc","d","getOwnPropertyDescriptor","Reflect","decorate","DEBUG","OrthogonalEdge","globalSize","onDidChangeGlobalSize","globalHoverDelay","onDidChangeHoverDelay","MouseEventFactory","GestureEventFactory","Change","End","OrthogonalPointerEventFactory","factory","onPointerMove","onPointerUp","Sash","layoutProvider","hoverDelay","hoverDelayer","_onDidEnablementChange","onDidEnablementChange","_onDidStart","onDidStart","_onDidChange","onDidChange","_onDidReset","onDidReset","_onDidEnd","onDidEnd","linkedSash","orthogonalStartSashDisposables","orthogonalStartDragHandleDisposables","orthogonalEndSashDisposables","orthogonalEndDragHandleDisposables","orthogonalEdge","onMouseDown","onPointerStart","onMouseDoubleClick","onPointerDoublePress","onMouseEnter","onMouseLeave","addTarget","onTouchStart","Start","initialTarget","onTap","Tap","onDoubleTap","layout","hidden","orthogonalStartSash","orthogonalEndSash","_orthogonalStartSash","sash","onChange","_orthogonalStartDragHandle","_orthogonalEndSash","_orthogonalEndDragHandle","pointerEventFactory","isMultisashResize","__orthogonalSashEvent","orthogonalSash","getOrthogonalSash","__linkedSashEvent","iframes","iframe","startX","startY","startEvent","currentX","currentY","updateStyle","cursor","fromLinkedSash","verticalProvider","getVerticalSashLeft","getVerticalSashTop","getVerticalSashHeight","horizontalProvider","getHorizontalSashTop","getHorizontalSashLeft","getHorizontalSashWidth","_autoClosingPairs","colorizedBracketPairs","_colorizedBracketPairs","filterValidBrackets","__electricCharacterSupport","docComment","_autoCloseBefore","autoCloseBefore","DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED","_surroundingPairs","surroundingPairs","autoClosingPair","getTokenCount","isOK","bracketPairs","richEditBrackets","_richEditBrackets","lastChar","findPrevBracketInRange","bracketText","isOpen","textBeforeBracket","getActualLineContentBefore","matchOpenBracket","resetGlobalRegex","reg","IndentRulesSupport","indentationRules","_indentationRules","increaseIndentPattern","decreaseIndentPattern","indentNextLinePattern","unIndentedLinePattern","shouldIncrease","shouldDecrease","shouldIndentNextLine","shouldIgnore","openRegExp","_createOpenBracketRegExp","closeRegExp","_createCloseBracketRegExp","_regExpRules","onEnterRules","autoIndent","previousLineText","beforeEnterText","afterEnterText","regResult","beforeText","afterText","every","indentAction","IndentOutdent","Indent","strings","_safeRegExp","__param","paramIndex","decorator","LanguageConfigurationServiceChangeEvent","ILanguageConfigurationService","configurationService","modeService","onDidChangeEmitter","languageConfigKeys","customizedLanguageConfigKeys","onDidChangeConfiguration","globalConfigChanged","localConfigChanged","overrides","overrideLangName","validateLanguageId","LanguageConfigurationRegistry","computeConfig","languageConfig","getLanguageConfiguration","validLanguageId","customizedConfig","getCustomizedLanguageConfig","combineLanguageConfigurations","underlyingConfig","validateBracketPairs","LanguageConfigurationChangeEvent","getResolvedConfiguration","electricCharacter","electricCharacterSupport","_getElectricCharacterSupport","getElectricCharacters","scopedLineTokens","onElectricCharacter","comments","characterPair","characterPairSupport","_getCharacterPairSupport","getAutoClosingPairs","getAutoCloseBeforeSet","getSurroundingPairs","shouldAutoClosePair","wordDefinition","foldingRules","indentRulesSupport","languageID","getLanguageIdAtPosition","resultLineNumber","honorIntentialIndent","getIndentRulesSupport","indentation","precedingUnIgnoredLine","getPrecedingValidLine","precedingUnIgnoredLineContent","line","previousLine","previousLineIndentMetadata","getIndentMetadata","stopLine","virtualModel","indentConverter","richEditSupport","indent","getInheritIndentForLine","inheritLine","enterResult","onEnter","removeText","shiftIndent","Outdent","unshiftIndent","appendText","forceTokenization","scopedLineText","embeddedLanguage","endScopedLineTokens","getScopedLineTokens","beforeEnterResult","beforeEnterIndent","currentLineIndent","afterEnterAction","beforeEnter","afterEnter","afterEnterIndent","beforeTypeText","afterTypeText","getLineCount","oneLineAboveScopedLineTokens","getIndentationAtPosition","columnNumber","_resolved","_order","LanguageConfigurationContribution","_resolve","configs","wordPattern","folding","_electricCharacter","_onEnterSupport","_handleComments","conf","commentRule","lineComment","lineCommentToken","blockComment","blockStart","blockEnd","blockCommentStartToken","blockCommentEndToken","_utf16LE_TextDecoder","_utf16BE_TextDecoder","_platformTextDecoder","getUTF16LE_TextDecoder","getUTF16BE_TextDecoder","getPlatformTextDecoder","hasTextDecoder","createStringBuilder","decodeUTF16LE","standardDecodeUTF16LE","compatDecodeUTF16LE","capacity","StringBuilder","CompatStringBuilder","_completedStrings","_bufferLength","_flushBuffer","_buildBuffer","bufferString","remainingSpace","strLen","_piecesLen","finallyConstructor","constructor","reason","setTimeoutFunc","noop","TypeError","_handled","_deferreds","deferred","_immediateFn","cb","onFulfilled","onRejected","newValue","finale","_unhandledRejectionFn","Handler","ex","prom","remaining","race","globalNS","isIMenuItem","command","MenuId","debugName","_debugName","CommandPalette","EditorContext","SimpleEditorContext","EditorContextCopy","EditorContextPeek","MenubarEditMenu","MenubarCopy","MenubarGoMenu","MenubarSelectionMenu","InlineCompletionsActions","IMenuService","MenuRegistry","_commands","_menuItems","_onDidChangeMenu","onDidChangeMenu","_commandPaletteChangeEvent","addCommands","commands","didChange","appendMenuItems","changedIds","toRemove","list","_appendImplicitItems","alt","SubmenuItemAction","_menuService","_contextKeyService","submenu","createMenu","groups","getActions","MenuItemAction","contextKeyService","_commandService","renderShortTitle","shortTitle","tooltip","enabled","precondition","contextMatchesRules","checked","toggled","condition","isThemeIcon","class","runArgs","shouldForwardArgs","executeCommand","or","word","wordToMatchAgainst","matchesPrefix","_matchesPrefix","matchesContiguousSubString","matchesSubString","_matchesSubString","isLower","isUpper","isNumber","isWhitespace","wordSeparators","isAlphanumeric","head","nextAnchor","camelCaseWord","_matchesCamelCase","nextUpperIndex","analyzeCamelCaseWord","upper","lower","alpha","numeric","upperPercent","lowerPercent","alphaPercent","numericPercent","isUpperCaseWord","analysis","isCamelCaseWord","isCamelCasePattern","matchesCamelCase","s","fuzzyContiguousFilter","fuzzySeparateFilter","fuzzyRegExpCache","matchesFuzzy","enableSeparateSubstringMatching","_maxLen","initTable","row","initArr","maxLen","_minWordMatchPos","_maxWordMatchPos","_diag","_table","_arrows","_debug","printTable","patternLen","wordLen","pad","printTables","patternStart","wordStart","log","isSeparatorAtPos","codePointAt","isWhitespaceAtPos","isUpperCaseAtPos","wordLow","isPatternInWord","patternLow","patternPos","wordPos","fillMinWordPosArr","FuzzyScore","fuzzyScore","firstMatchCanBeWeak","_fillInMaxWordMatchPos","hasStrongFirstMatch","minWordMatchPos","maxWordMatchPos","nextMaxWordMatchPos","MIN_SAFE_INTEGER","canComeDiag","_doScore","diagScore","MAX_SAFE_INTEGER","canComeLeft","leftScore","canComeLeftLeft","leftLeftScore","backwardsDiagLength","maxMatchColumn","diagColumn","skippedCharsCount","newMatchStart","outFirstMatchStrong","isGapLocation","isDefault","Default","Selection","selectionStartLineNumber","selectionStartColumn","positionLineNumber","positionColumn","selectionsEqual","getDirection","sel","originalFSPath","ExtUri","uri1","uri2","ignoreFragment","getComparisonKey","joinPath","normalizedPath","newURI","extUri","isEqual","basenameOrAuthority","normalizePath","resolvePath","DataUri","parseMetaData","dataUri","meta","mime","META_DATA_MIME","META_DATA_LABEL","META_DATA_DESCRIPTION","META_DATA_SIZE","RegistryImpl","NullStateImpl","NULL_STATE","NULL_MODE_ID","nullTokenize","deltaOffset","nullTokenize2","LIMIT_FIND_COUNT","SearchParams","isMultilineRegexSource","canUseSimpleSearch","toUpperCase","SearchData","nextChCode","simpleSearch","createFindMatch","rawMatches","captureMatches","LineFeedCounter","lineFeedsOffsets","lineFeedsOffsetsLen","textLen","_lineFeedsOffsets","TextModelSearch","searchParams","searchRange","limitResultCount","searchData","parseSearchRequest","_doFindMatchesMultiline","Searcher","_doFindMatchesLineByLine","lfCounter","matchIndex","match0","lineFeedCountBeforeMatch","findLineFeedCountBeforeOffset","lineFeedCountBeforeEndOfMatch","lineFeedCountInMatch","startPosition","getPositionAt","endPosition","searcher","getOffsetAt","getValueInRange","getEOL","counter","_getMultilineMatchRange","_findMatchesInLine","searchStringLen","lastMatchIndex","isValidMatch","searchStart","_doFindNextMatchMultiline","_doFindNextMatchLineByLine","searchTextStart","lineCount","_findFirstMatchInLine","fromColumn","_doFindPreviousMatchMultiline","_doFindPreviousMatchLineByLine","_findLastMatchInLine","bestResult","leftIsWordBounday","matchStartIndex","charBefore","firstCharInMatch","rightIsWordBounday","charAfter","lastCharInMatch","searchRegex","_wordSeparators","_searchRegex","_prevMatchStartIndex","_prevMatchLength","editorLineHighlight","editorLineHighlightBorder","editorRangeHighlight","editorRangeHighlightBorder","editorSymbolHighlight","editorSymbolHighlightBorder","editorCursorForeground","editorCursorBackground","editorWhitespaces","editorIndentGuides","editorActiveIndentGuides","editorLineNumbers","deprecatedEditorActiveLineNumber","editorActiveLineNumber","editorRuler","lightgrey","editorOverviewRulerBorder","editorOverviewRulerBackground","editorGutter","editorUnnecessaryCodeBorder","editorUnnecessaryCodeOpacity","rulerRangeDefault","overviewRulerError","overviewRulerWarning","overviewRulerInfo","editorBracketHighlightingForeground1","editorBracketHighlightingForeground2","editorBracketHighlightingForeground3","editorBracketHighlightingForeground4","editorBracketHighlightingForeground5","editorBracketHighlightingForeground6","editorBracketHighlightingUnexpectedBracketForeground","editorBracketPairGuideBackground1","editorBracketPairGuideBackground2","editorBracketPairGuideBackground3","editorBracketPairGuideBackground4","editorBracketPairGuideBackground5","editorBracketPairGuideBackground6","editorBracketPairGuideActiveBackground1","editorBracketPairGuideActiveBackground2","editorBracketPairGuideActiveBackground3","editorBracketPairGuideActiveBackground4","editorBracketPairGuideActiveBackground5","editorBracketPairGuideActiveBackground6","collector","addRule","gutter","rangeHighlight","rangeHighlightBorder","symbolHighlight","symbolHighlightBorder","invisibles","GLOBSTAR","GLOB_SPLIT","PATH_REGEX","NO_PATH_REGEX","ALL_FORWARD_SLASHES","starsToRegExp","starCount","splitGlobAware","splitChar","inBraces","inBrackets","curVal","char","parseRegExp","regEx","previousSegmentWasGlobStar","braceVal","bracketVal","choices","braceRegExp","T1","T2","T3","T3_2","T4","T5","CACHE","FALSE","NULL","parsePattern","arg1","patternKey","trimForExclusions","parsedPattern","wrapRelativePattern","endsWith","trivia2","trivia3","trivia4and5","toRegExp","arg2","originalPattern","slashBase","backslashBase","basenames","patterns","allBasenames","parsedPatterns","aggregateBasenameMatches","withBasenames","allPaths","targetPath","matchPathEnds","usingPosixSep","nativePath","nativePathEnd","targetPathEnd","testPath","regExp","hasSibling","isRelativePattern","resultPattern","parsedExpression","rp","expression","getOwnPropertyNames","parseExpressionPattern","requiresSiblings","resultExpression","when","clausePattern","matched","basenamePatterns","aggregate","aggregatedPatterns","ColorScheme","ICommandService","CommandsRegistry","_onDidRegisterCommand","onDidRegisterCommand","idOrCommand","registerCommand","constraints","constraint","actualHandler","accessor","removeFn","oldId","newId","getCommand","KeybindingsRegistryImpl","_coreKeybindings","_extensionKeybindings","_cachedMergedKeybindings","kb","win","mac","linux","actualKb","bindToCurrentPlatform","primary","kk","_registerDefaultKeybinding","weight","secondary","registerKeybindingRule","commandId","_mightProduceChar","commandArgs","weight1","weight2","_assertNoCtrlAlt","extensionId","isBuiltinExtension","KeybindingsRegistry","EditorModes","uriGetComparisonKey","SingleModelEditStackData","beforeVersionId","afterVersionId","beforeEOL","afterEOL","beforeCursorState","afterCursorState","alternativeVersionId","getAlternativeVersionId","getModelEOL","textChanges","selections","necessarySize","_writeSelectionsSize","writeSize","_writeSelections","write","_readSelections","changeCount","read","SingleModelEditStackElement","isUri","deserialize","_applyUndo","_applyRedo","MultiModelEditStackElement","editStackElements","_isOpen","_editStackElementsArr","_editStackElementsMap","editStackElement","_delegate","prepareUndoRedo","setModel","canAppend","undo","heapSize","isEditStackElement","EditStack","undoRedoService","_model","_undoRedoService","getLastElement","removeElements","newElement","pushElement","_getOrCreateEditStackElement","setEOL","editOperations","cursorStateComputer","applyEdits","_computeCursorState","textChange","oldPosition","editor","_editor","_decorations","_overviewRulerApproximateDecorations","_findScopeDecorationIds","_rangeHighlightDecorationId","_highlightedDecorationId","_startPosition","getPosition","deltaDecorations","_allDecorations","getModel","getDecorationRange","scopes","findScopeDecorationId","newStartPosition","setCurrentFindMatch","decorationId","desiredRange","candidates","getDecorationsInRange","candidateOpts","_FIND_MATCH_DECORATION","_CURRENT_FIND_MATCH_DECORATION","_getDecorationIndex","nextMatch","newCurrentDecorationId","matchPosition","changeDecorations","changeAccessor","changeDecorationOptions","removeDecoration","rng","lineBeforeEnd","lineBeforeEndMaxColumn","addDecoration","_RANGE_HIGHLIGHT_DECORATION","findMatches","findScopes","findMatchesOptions","newOverviewRulerApproximateDecorations","_FIND_MATCH_NO_OVERVIEW_DECORATION","getLayoutInfo","approxPixelsPerLine","mergeLinesDelta","prevStartLineNumber","prevEndLineNumber","_FIND_MATCH_ONLY_OVERVIEW_DECORATION","newFindMatchesDecorations","findScope","_FIND_SCOPE_DECORATION","stickiness","zIndex","showIfCollapsed","overviewRuler","Center","minimap","Inline","isWholeLine","editorSelection","ranges","replaceStrings","_editorSelection","_ranges","_replaceStrings","_trackedEditorSelectionId","ops","o1","o2","compareRangesUsingStarts","resultOps","previousOp","addEditOperation","buildReplaceStringWithCasePreserved","containsHyphens","validateSpecificSpecialCharacter","containsUnderscores","buildReplaceStringForSpecificSpecialCharacter","specialCharacter","doesContainSpecialCharacter","splitPatternAtSpecialCharacter","splitMatchAtSpecialCharacter","replaceString","splitValue","StaticValueReplacePattern","staticValue","kind","DynamicPiecesReplacePattern","ReplacePiece","_substitute","caseOps","lenOps","opIdx","remainder","ReplacePieceBuilder","_source","_lastCharIndex","_result","_resultLen","_currentStaticPiece","toCharIndex","_emitStatic","emitUnchanged","parseReplaceString","emitStatic","emitMatchIndex","nextNextChCode","finalize","CONTEXT_FIND_WIDGET_VISIBLE","CONTEXT_FIND_INPUT_FOCUSED","CONTEXT_REPLACE_INPUT_FOCUSED","ToggleCaseSensitiveKeybinding","ToggleWholeWordKeybinding","ToggleRegexKeybinding","ToggleSearchScopeKeybinding","TogglePreserveCaseKeybinding","FIND_IDS","StartFindAction","StartFindWithSelection","NextMatchFindAction","PreviousMatchFindAction","NextSelectionMatchFindAction","PreviousSelectionMatchFindAction","StartFindReplaceAction","CloseFindWidgetCommand","ToggleCaseSensitiveCommand","ToggleWholeWordCommand","ToggleRegexCommand","ToggleSearchScopeCommand","TogglePreserveCaseCommand","ReplaceOneAction","ReplaceAllAction","SelectAllMatchesAction","MATCHES_LIMIT","RESEARCH_DELAY","_toDispose","_isDisposed","_startSearchingTimer","_updateDecorationsScheduler","research","onDidChangeCursorPosition","setStartPosition","_ignoreModelContentChanged","onDidChangeModelContent","onFindReplaceStateChange","_onStateChanged","searchScope","hasModel","isReplaceRevealed","moveCursor","getFullModelRange","newFindScope","getFindScopes","_findMatches","getSelection","currentMatchesPosition","getCurrentMatchesPosition","matchAfterSelection","changeMatchInfo","getOption","cursorMoveOnType","_moveToNextMatch","matchesCount","_hasMatches","getFindScope","revealRangeInCenterIfOutsideViewport","matchesPosition","setSelection","isUsingLineStops","isRecursed","canNavigateBack","nextMatchRange","matchAfterPosition","_setCurrentFindMatch","prevMatchRange","matchBeforePosition","_prevSearchPosition","_cannotFind","_getSearchRange","prevMatch","findPreviousMatch","_moveToPrevMatch","canNavigateForward","_nextSearchPosition","_getNextMatch","forceMove","findNextMatch","fromStaticValue","replacePattern","_getReplacePattern","buildReplaceString","_executeEditorCommand","searchRanges","_largeReplaceAll","_regularReplaceAll","mod","modelText","fullModelRange","resultText","hasReplacementPatterns","setSelections","pushUndoStop","defaultOpts","_onChange","_onKeyDown","onKeyDown","_opts","_checked","isChecked","classes","actionClassName","notFocusable","tabIndex","applyStyles","ignoreGesture","onkeydown","keyboardEvent","newIsChecked","styles","borderColor","NLS_CASE_SENSITIVE_CHECKBOX_LABEL","nls","NLS_WHOLE_WORD_CHECKBOX_LABEL","NLS_REGEX_CHECKBOX_LABEL","appendTitle","keybindingService","themeService","_hideSoon","_keybindingService","inputActiveOptionBorderColor","getColorTheme","inputActiveOptionForegroundColor","inputActiveOptionBackgroundColor","_keybindingLabelFor","wholeWords","addOverlayWidget","somethingChanged","isRevealed","_revealTemporarily","_applyTheme","onDidColorThemeChange","actionId","lookupKeybinding","getLabel","removeOverlayWidget","ID","preference","_show","inputStyles","effectiveOptionValue","override","widgetBackground","widgetForeground","widgetShadowColor","hcBorder","_onFindReplaceStateChange","_searchString","_replaceString","_isRevealed","_isReplaceRevealed","_isRegex","_isRegexOverride","_wholeWord","_wholeWordOverride","_matchCase","_matchCaseOverride","_preserveCase","_preserveCaseOverride","_searchScope","_matchesPosition","_matchesCount","_currentMatch","_loop","currentMatch","changeEvent","updateHistory","loop","oldEffectiveIsRegex","oldEffectiveWholeWords","oldEffectiveMatchCase","oldEffectivePreserveCase","newSearchScope","existingSearchScope","isRegexOverride","wholeWordOverride","matchCaseOverride","preserveCaseOverride","canNavigateInLoop","NLS_DEFAULT_LABEL","contextViewProvider","_showOptionButtons","fixFocusOnOptionClickEnabled","imeSessionInProgress","_onDidOptionChange","onDidOptionChange","_onInput","_onKeyUp","_onCaseSensitiveKeyDown","onCaseSensitiveKeyDown","_onRegexKeyDown","onRegexKeyDown","_lastHighlightFindOptions","placeholder","validation","appendCaseSensitiveLabel","appendWholeWordsLabel","appendRegexLabel","flexibleHeight","flexibleWidth","flexibleMaxHeight","inputBox","validationOptions","showHistoryHint","viaKeyboard","paddingRight","indexes","newIndex","controls","inputElement","onkeyup","oninput","enable","disable","checkBoxStyles","inputBoxStyles","select","hideMessage","NLS_PRESERVE_CASE_LABEL","cachedOptionsWidth","_onPreserveCaseKeyDown","onPreserveCaseKeyDown","appendPreserveCaseLabel","newWidth","Scanner","isDigitCharacter","isVariableCharacter","Marker","_children","Text","others","newChildren","_fixParent","TextmateSnippet","prev","TransformableMarker","Placeholder","isFinalTabstop","Choice","marker","Transform","didMatch","_replace","FormatString","elseValue","shorthandName","ifValue","toLocaleUpperCase","toLocaleLowerCase","_toPascalCase","_toCamelCase","Variable","resolver","walk","visitor","recurse","_placeholders","placeholderInfo","found","SnippetParser","_scanner","template","insertFinalTabstop","enforceFinalTabstop","snippet","_parse","placeholderDefaultValues","incompletePlaceholders","placeholderCount","tokenText","nextToken","_parseEscaped","_parseTabstopOrVariableName","_parseComplexPlaceholder","_parseComplexVariable","_parseAnything","_accept","_backTo","_parseTransform","choice","_parseChoiceElement","regexValue","regexOptions","_parseFormatString","complex","shorthand","_until","Context","Visible","DetailsVisible","MultipleSuggestions","MakesTextEdit","AcceptSuggestionsOnEnter","HasInsertAndReplaceRange","InsertMode","CanResolve","provider","isInvalid","distance","textLabel","labelLow","sortTextLow","sortText","filterTextLow","filterText","isIRange","editStart","editInsertEnd","editReplaceEnd","spansMultipleLines","resolveCompletionItem","_resolveCache","_isResolved","sub","CompletionOptions","snippetSortOrder","kindFilter","providerFilter","showDeprecated","_snippetSuggestSupport","CompletionItemModel","needsClipboard","durations","provideSuggestionItems","triggerKind","sw","getWordAtPosition","defaultReplaceRange","fromPositions","defaultRange","setEndPosition","onCompletionList","suggestion","suggestions","tags","insertTextRules","guessNeedsClipboard","insertText","providerName","_debugDisplayName","elapsedProvider","elapsedOverall","snippetCompletions","provideCompletionItems","providerGroup","modes","orderedGroups","lenBefore","getSuggestionComparator","defaultComparator","snippetUpComparator","snippetDownComparator","_snippetComparators","snippetConfig","triggerCharacter","maxItemsToResolve","isIPosition","ref","createModelReference","incomplete","resolving","completions","object","textEditorModel","lift","_provider","onlyOnceSuggestions","HistoryNavigationWidgetContext","HistoryNavigationForwardsEnablementContext","HistoryNavigationBackwardsEnablementContext","bindContextScopedWidget","widget","contextKey","bindTo","createWidgetScopedContextKeyService","createScoped","getContextScopedWidget","createAndBindHistoryNavigationWidgetScopedContextKeyService","scopedContextKeyService","historyNavigationForwardsEnablement","historyNavigationBackwardsEnablement","showFindOptions","historyNavigator","showReplaceOptions","showHistoryKeybindingHint","getElectronAccelerator","registerCommandAndKeybindingRule","and","isEqualTo","historyInputBox","showPreviousValue","showNextValue","findSelectionIcon","findCollapsedIcon","findExpandedIcon","findReplaceIcon","findReplaceAllIcon","findPreviousMatchIcon","findNextMatchIcon","NLS_FIND_INPUT_LABEL","NLS_FIND_INPUT_PLACEHOLDER","NLS_PREVIOUS_MATCH_BTN_LABEL","NLS_NEXT_MATCH_BTN_LABEL","NLS_TOGGLE_SELECTION_FIND_TITLE","NLS_CLOSE_BTN_LABEL","NLS_REPLACE_INPUT_LABEL","NLS_REPLACE_INPUT_PLACEHOLDER","NLS_REPLACE_BTN_LABEL","NLS_REPLACE_ALL_BTN_LABEL","NLS_TOGGLE_REPLACE_MODE_BTN_LABEL","NLS_MATCHES_COUNT_LIMIT_TITLE","NLS_MATCHES_LOCATION","NLS_NO_RESULTS","FIND_WIDGET_INITIAL_WIDTH","PART_WIDTH","FIND_INPUT_AREA_WIDTH","MAX_MATCHES_COUNT_WIDTH","FIND_INPUT_AREA_HEIGHT","ctrlEnterReplaceAllWarningPromptedKey","ctrlKeyMod","FindWidgetViewZone","afterLineNumber","heightInPx","suppressMouseDown","stopPropagationForMultiLineUpwards","textarea","isMultiline","selectionStart","stopPropagationForMultiLineDownwards","selectionEnd","codeEditor","controller","storageService","notificationService","_cachedHeight","_revealTimeouts","_codeEditor","_controller","_contextViewProvider","_storageService","_notificationService","_ctrlEnterReplaceAllWarningPrompted","_isReplaceVisible","_ignoreChangeEvent","_updateHistoryDelayer","_buildDomNode","_updateButtons","_tryUpdateWidgetWidth","_findInput","hasChanged","updateAccessibilitySupport","addExtraSpaceOnTop","_viewZone","_showViewZone","_removeViewZone","onDidChangeCursorSelection","_updateToggleSelectionFindButton","onDidFocusEditorWidget","globalBufferTerm","getGlobalBufferTerm","_findInputFocused","_findFocusTracker","_updateSearchScope","_replaceInputFocused","_replaceFocusTracker","_replaceInput","onDidChangeModel","_viewZoneId","onDidScrollChange","_layoutViewZone","setValue","_tryUpdateHeight","setRegex","setWholeWords","setCaseSensitive","setPreserveCase","_toggleSelectionFind","showRedOutline","_updateMatchesCount","_delayedUpdateHistory","_updateHistory","addToHistory","minWidth","createTextNode","_getAriaLabel","isSelection","setEnabled","_closeBtn","findInputIsNonEmpty","_prevBtn","_nextBtn","_replaceBtn","_replaceAllBtn","_toggleReplaceBtn","setExpanded","canReplace","autoFindInSelection","isSelectionMultipleLine","layoutOverlayWidget","adjustEditorScrollTop","seedSearchStringFromSelection","getDomNode","editorCoords","startCoords","getScrolledVisiblePosition","startLeft","startTop","leftOfFindWidget","endCoords","endLeft","focusTheEditor","clearMessage","targetScrollTop","viewZone","changeViewZones","_getHeight","addZone","setScrollTop","getScrollTop","adjustScroll","newHeight","scrollAdjustment","layoutZone","removeZone","layoutInfo","editorContentWidth","contentWidth","editorWidth","minimapWidth","collapsedFindWidget","reducedFindWidget","narrowFindWidget","_resized","widgetWidth","findInputWidth","totalheight","totalHeight","highlightFindOptions","getSelections","dispatchEvent","insertAtCursor","focusOnCaseSensitive","querySelector","store","_sash","getRegex","_onFindInputKeyDown","getWholeWords","getCaseSensitive","focusOnPreserve","onDidHeightChange","_onFindInputMouseDown","onTrigger","getAction","findPart","actionsContainer","_onReplaceInputKeyDown","getPreserveCase","replacePart","replaceActionsContainer","_resizeSash","originalWidth","evt","currentWidth","setFocusInputOnOptionClick","expanded","addBackgroundColorRule","findMatchHighlightBorder","findMatchBorder","findRangeHighlightBorder","resizeBorderBackground","toolbarHoverBackgroundColor","focusOutline","SEARCH_STRING_MAX_LENGTH","getSelectionSearchString","seedSearchStringFromNonEmptySelection","wordAtPosition","getConfiguredWordAtPosition","getValueLengthInRange","CommonFindController","clipboardService","_findWidgetVisible","_clipboardService","loadQueryState","shouldRestartFind","disposeModel","_start","forceRevealReplace","seedSearchStringFromGlobalClipboard","shouldFocus","shouldAnimate","updateSearchScope","getContribution","saveQueryState","setGlobalBufferTerm","actualIsRegex","actualWholeWord","actualMatchCase","actualPreserveCase","ignoreWhenVisible","stateChanges","selectionSearchString","currentSelections","moveToNextMatch","moveToPrevMatch","selectAllMatches","globalFindClipboard","readFindText","writeFindText","_contextViewService","_themeService","_widget","_findOptionsWidget","_super","_createFindWidget","focusReplaceInput","focusFindInput","alias","kbOpts","kbExpr","menuOpts","menuId","addImplementation","getState","_run","setSearchString","currentSelection","findInputFocused","isFindInputFocused","FindCommand","bindToContribution","closeFindWidget","not","toggleCaseSensitive","toggleWholeWords","toggleRegex","toggleSearchScope","togglePreserveCase","Contextmenu","Gesture","dispatched","activeTouches","targets","ignoreTargets","_lastSetTapCountTime","onTouchEnd","onTouchMove","isTouchDevice","targetTouches","initialTimeStamp","initialPageX","initialPageY","rollingTimestamps","rollingPageX","rollingPageY","newGestureEvent","activeTouchCount","changedTouches","holdTime","HOLD_DELAY","finalX","finalY","deltaT","dispatchTo","Node","inertia","createEvent","initEvent","tapCount","currentTime","setTapCount","CLEAR_TAP_COUNT_TIME","t1","vX","dirX","vY","dirY","y","delta_pos_x","delta_pos_y","stopped","SCROLL_FRICTION","translationX","translationY","TRACK_DISPOSABLES","disposableTracker","setDisposableTracker","tracker","__is_disposable_tracked__","Disposable","trackDisposable","markAsDisposed","setParentOfDisposable","setParent","setParentOfDisposables","markAsSingleton","singleton","MultiDisposeError","errors","isDisposable","combinedDisposable","toDisposable","DisposableStore","DISABLE_DISPOSED_WARNING","_store","MutableDisposable","oldValue","ImmortalReference","LanguageServiceDefaultsImpl","diagnosticsOptions","modeConfiguration","_languageId","setDiagnosticsOptions","setModeConfiguration","_modeConfiguration","_diagnosticsOptions","diagnosticDefault","schemas","enableSchemaRequest","schemaRequest","schemaValidation","trailingCommas","modeConfigurationDefault","documentFormattingEdits","documentRangeFormattingEdits","completionItems","hovers","documentSymbols","colors","foldingRanges","diagnostics","selectionRanges","jsonDefaults","getMode","aliases","mimetypes","onLanguage","setupMode","deepClone","deepFreeze","_hasOwnProperty","prop","isFrozen","mixin","overwrite","one","oneKeys","otherKeys","getOrDefault","SyncDescriptor","staticArguments","supportsDelayedInstantiation","INotificationService","NoOpNotification","EditorExtensionsRegistry","Command","_kbOpts","_menuOpts","_description","_registerMenuItem","kbOptsArr","kbWhen","runCommand","appendMenuItem","MultiCommand","_implementations","implementation","logService","trace","impl","ProxyCommand","EditorCommand","controllerGetter","_callback","codeEditorService","getFocusedCodeEditor","getActiveCodeEditor","invokeWithinContext","editorAccessor","kbService","runEditorCommand","EditorAction","convertOptions","withDefaults","contextMenuOpts","reportTelemetry","publicLog2","MultiEditorAction","registerEditorCommand","editorCommand","EditorContributionRegistry","registerEditorAction","registerMultiEditorAction","registerEditorContribution","getEditorCommand","getEditorActions","getEditorContributions","getSomeEditorContributions","ids","getDiffEditorContributions","EditorCommonContributions","editorContributions","diffEditorContributions","editorActions","editorCommands","UndoCommand","RedoCommand","SelectAllCommand","SpacesDiffResult","spacesDiff","looksLikeAlignment","aLength","bLength","aCharCode","bCharCode","aSpacesCnt","aTabsCount","bSpacesCnt","bTabsCount","tabsDiff","guessIndentation","defaultTabSize","defaultInsertSpaces","linesCount","linesIndentedWithTabsCount","linesIndentedWithSpacesCount","previousLineIndentation","ALLOWED_TAB_SIZE_GUESSES","MAX_ALLOWED_TAB_SIZE_GUESS","spacesDiffCount","currentLineLength","getLineLength","currentLineText","useCurrentLineText","currentLineHasContent","currentLineIndentation","currentLineSpacesCount","currentLineTabsCount","lenJ","getLineCharCode","currentSpacesDiff","tabSizeScore","possibleTabSize","possibleTabSizeScore","getNodeColor","setNodeColor","getNodeIsVisited","setNodeIsVisited","getNodeIsForValidation","setNodeIsForValidation","getNodeStickiness","_setNodeStickiness","getCollapseOnReplaceEdit","setCollapseOnReplaceEdit","IntervalNode","maxEnd","cachedVersionId","cachedAbsoluteStart","cachedAbsoluteEnd","collapseOnReplaceEdit","absoluteStart","absoluteEnd","SENTINEL","IntervalTree","requestNormalizeDelta","filterOwnerId","filterOutValidation","intervalSearch","collectNodesFromOwner","collectNodesPostOrder","rbTreeInsert","_normalizeDeltaIfNecessary","rbTreeDelete","initialNode","nodeStart","nodeEnd","setCachedOffsets","nodesOfInterest","searchForEditing","noOverlapReplace","nodeAcceptEdit","normalizeDelta","T","recomputeMaxEnd","adjustMarkerBeforeColumn","markerOffset","markerStickToPreviousCharacter","checkOffset","moveSemantics","nodeStickiness","startStickToPreviousCharacter","endStickToPreviousCharacter","deletingCnt","insertingCnt","commonLength","startDone","endDone","nodeMaxEnd","editDelta","include","intervalStart","intervalEnd","newNode","treeInsert","recomputeMaxEndWalkToRoot","leftRotate","rightRotate","z","zAbsoluteStart","zAbsoluteEnd","intervalCompare","leftest","detach","resetSentinel","w","yWasRed","computeMaxEnd","leftMaxEnd","rightMaxEnd","TreeNode","size_left","lf_left","righttest","calculateSize","calculateLF","lineFeedCnt","tree","rbDelete","recomputeTreeMetadata","newSizeLeft","newLFLeft","lf_delta","updateTreeMetadata","fixInsert","lineFeedCntDelta","AverageBufferSize","createUintArray","LineStarts","lineStarts","cr","lf","crlf","createLineStartsFast","readonly","rLength","createLineStarts","Piece","bufferIndex","StringBuffer","BOM","_tree","_BOM","_index","iterate","getPieceContent","PieceTreeSearchCache","_cache","nodePos","nodeStartOffset","nodeStartLineNumber","nodePosition","hasInvalidVal","chunks","eolNormalized","_buffers","_lastChangeBufferPos","_lineCnt","_length","_EOL","_EOLLength","_EOLNormalized","lastNode","rbInsertRight","_searchCache","_lastVisitedLine","computeBufferMetadata","averageBufferSize","tempChunk","tempChunkLen","getNodeContent","newEOL","normalizeEOL","leftLen","accumualtedValInCurrentIndex","getAccumulatedValue","lfCnt","originalOffset","getIndexOf","lineStartOffset","nodeAt2","getValueInRange2","offsetInBuffer","lines","linesLength","currentLine","danglingCR","pieceLength","pieceStartLine","pieceEndLine","pieceStartOffset","getLineRawContent","matchingNode","targetOffset","_getCharCode","getLength","startCursor","endCursor","searchText","startOffsetInBuffer","positionInBuffer","getLineFeedCnt","retStartColumn","retEndColumn","findMatchesInNode","currentNode","lineBreakCnt","nextLineStartOffset","nodeAt","insertPosInBuffer","appendToNode","insertContentToNodeLeft","nodesToDel","newRightPiece","shouldCheckCRLF","endWithCR","headOfRight","nodeCharCodeAt","newStart","startWithLF","tailOfLeft","previousPos","deleteNodeTail","newPieces","createNewPieces","tmpNode","deleteNodes","insertContentToNodeRight","rbInsertLeft","cnt","startNode","endNode","startSplitPosInBuffer","endSplitPosInBuffer","validateCRLFWithPrevNode","deleteNodeHead","validateCRLFWithNextNode","shrinkNode","secondNode","nPiece","adjustCarriageReturnFromNext","midStop","midStart","previousCharOffset","nodes","splitText","endIndex","endPos","newPiece","get2","prevAccumulatedValue","accumulatedValue","originalLineNumber","lineCnt","realLineCnt","expectedLineStartIndex","originalLFCnt","originalEndOffset","newEnd","newEndOffset","newLineFeedCnt","size_delta","newLength","originalStartOffset","newStartOffset","originalStartPos","originalEndPos","oldLength","oldLFCnt","hitCRLF","prevStartOffset","oldLineFeedCnt","prevAccumualtedValue","offsetOfNode","newOffset","nextLineOffset","nextNode","fixCRLF","prevNewLength","prevNewLFCnt","leftRet","currentContent","prevNode","_onDidChangeContent","_mightContainNonBasicASCII","_mightContainRTL","_mightContainUnusualLineTerminators","_pieceTree","preserveBOM","createSnapshot","lineEnding","_getEndOfLine","fromOffset","toOffset","getLinesContent","rawOperations","recordTrimAutoWhitespace","computeUndoEdits","mightContainRTL","mightContainUnusualLineTerminators","mightContainNonBasicASCII","canReduceOperations","operations","validatedRange","textMightContainNonBasicASCII","validText","strEOL","bufferEOL","expectedStrEOL","sortIndex","rangeOffset","rangeLength","_sortOpsAscending","hasTouchingRanges","rangeEnd","nextRangeStart","_reduceOperations","reverseRanges","_getInverseEditRanges","newTrimAutoWhitespaceCandidates","reverseRange","currentLineContent","oldContent","reverseOperations","reverseRangeDeltaOffset","bufferText","reverseRangeOffset","contentChanges","_doApplyEdits","prevContent","_toSingleEditOperation","firstEditRange","lastEditRange","entireEditRange","lastEndLineNumber","lastEndColumn","operation","_sortOpsDescending","contentChangeRange","findMatchesLineByLine","prevOpEndLineNumber","prevOpEndColumn","prevOp","resultRange","compareRangesUsingEnds","_chunks","_bom","_cr","_lf","_crlf","_containsRTL","_containsUnusualLineTerminators","_isBasicASCII","_normalizeEOL","totalEOLCount","totalCRCount","_getEOL","newLineStart","textBuffer","_hasPreviousChar","_previousChar","_tmpLineStarts","chunk","_acceptChunk1","allowEmptyStrings","_acceptChunk2","_finish","lastChunk","newLineStarts","_beginState","_valid","_invalidLineStartIndex","initialState","_setBeginState","_reset","beginState","valid","arrays","_setValid","previousEndState","getBeginState","_invalidateLine","_isValid","deletingLinesCnt","insertingLinesCnt","editingLinesCnt","_textModel","_tokenizationStateStore","_tokenizationSupport","changedLanguages","_resetTokenizationState","clearTokens","onDidChangeContentFast","_beginBackgroundTokenization","onDidChangeAttached","onDidChangeLanguage","tokenizationSupport","initializeTokenization","isAttachedToEditor","_hasLinesToTokenize","_revalidateTokensNow","textModelLastLineNumber","MAX_ALLOWED_TIME","tokenizedLineNumber","_tokenizeOneInvalidLine","setTokens","_tokenizeViewport","_updateTokensUntilLine","firstInvalidLineNumber","invalidLineStartIndex","lineStartState","safeTokenize","setEndState","nonWhitespaceColumn","getLineFirstNonWhitespaceColumn","fakeLines","newNonWhitespaceIndex","getInitialState","setFakeTokens","textModel","isTooLargeForTokenization","hasEOL","tokenize2","convertToEndOffset","BracketInfo","nestingLevel","BracketPairInfo","openingBracketRange","closingBracketRange","BracketPairWithMinIndentationInfo","minVisibleColumnIndentation","LengthObj","columnCount","lengthDiff","startLineCount","startColumnCount","endLineCount","endColumnCount","toLength","lengthZero","lengthIsZero","lengthToObj","l","lengthGetLineCount","lengthGetColumnCountIfZeroLineCount","lengthAdd","l1","l2","lengthDiffNonNegative","length1","length2","lineCount1","lineCount2","colCount2","colCount1","lengthLessThan","lengthLessThanEqual","lengthGreaterThanEqual","positionToLength","lengthsToRange","lengthStart","lengthEnd","colCount","lengthOfString","lengthHash","TextEditInfo","edits","documentLength","nextEditIdx","deltaOldToNewLineCount","deltaOldToNewColumnCount","deltaLineIdxInOld","adjustNextEdit","translateCurToOld","nextEdit","nextChangeOffset","translateOldToCur","offsetObj","oldOffsetObj","nextEditEndOffsetInCur","endOffsetAfterObj","nextEditEndOffsetInCurObj","nextEditEndOffsetBeforeInCurObj","endOffsetBeforeObj","lineDelta","previousColumnDelta","columnDelta","emptyArr","SmallImmutableSet","additionalItems","cached","keyProvider","getKey","newItem","newItems","merged","item1","item2","identityKeyProvider","DenseKeyProvider","BaseAstNode","openingBracket","closingBracket","missingOpeningBracketIds","getEmpty","openBracketIds","intersects","computeMinIndentation","listHeight","_missingOpeningBracketIds","cachedMinIndentation","item3","immutable","missingBracketIds","Immutable23ListAstNode","TwoThreeListAstNode","ImmutableArrayListAstNode","throwIfImmutable","childCount","childrenLength","lastChild","getChild","mutable","toMutable","setChild","lastLength","canBeReused","unopenedBrackets","minIndentation","childOffset","_item1","_item2","_item3","handleChildrenChanged","ArrayListAstNode","emptyArray","ImmutableLeafAstNode","_openedBracketIds","firstNonWsColumn","getOptions","lengthKey","cacheByLength","InvalidBracketAstNode","closingBrackets","openedBracketIds","bracketId","bracketIds","astNode","bracketTokens","reader","_offset","didPeek","peeked","textBufferLineCount","textBufferLastLineLength","lineIdx","lineCharOffset","lineTokenOffset","peekedToken","startLineIdx","startLineCharOffset","lengthHeuristic","peekedBracketToken","isOther","getTokenType","getSingleLanguageBracketTokens","regExpGlobal","getToken","regExpStr","getRegExpStr","curLineCount","lastLineBreakOffset","lastTokenEndOffset","lastTokenEndLine","smallTextTokens0Line","smallTextTokens1Line","curOffset","hasRegExp","_regExpGlobal","denseKeyProvider","getId","openingText","getColorizedBrackets","openingBrackets","closingText","openingTextId","needsWordBoundaries","LanguageAgnosticBracketTokens","languageIdToBracketTokens","newRegExpStr","createFromLanguage","singleLanguageBracketTokens","concat23Trees","readNode","concat23TreesOfSameHeight","second","heightDiff","createImmutableLists","create23","node1","node2","prepend","nodeToAppend","curNode","parents","nodeToAppendOfCorrectHeight","makeLastElementMutable","unappendChild","appendChildOfSameHeight","makeFirstElementMutable","nodeToPrependOfCorrectHeight","unprependChild","prependChildOfSameHeight","lastOffset","nextNodes","offsets","idxs","lastOrUndefined","curNodeOffset","nextNodeAfterCurrent","nextChildIdx","getNextChildIdx","currentOffset","curIdx","parseDocument","tokenizer","oldNode","parser","_itemsConstructed","_itemsFromCache","oldNodeReader","positionMapper","parseList","peek","parseChild","maxCacheableLength","getDistanceToNextChange","cachedNode","readLongestNodeAt","getOffsetBeforeChange","skip","languageConfigurationService","bracketsRequested","onDidChangeOptions","updateCache","didLanguageChange","maxSupportedDocumentLength","getValueLength","isDocumentSupported","createDisposableRef","handleContentChanged","getBracketPairsInRange","getBracketsInRange","didChangeEmitter","onBackgroundTokenizationStateChanged","backgroundTokenizationState","wasUndefined","initialAstWithoutTokens","onDidChangeTokens","astWithTokens","parseDocumentFromTextBuffer","previousAst","isPure","previousAstClone","collectBrackets","includeMinIndentation","startLength","endLength","CollectBracketPairsContext","collectBracketPairs","nodeOffsetStart","nodeOffsetEnd","level","nodeOffset","openingBracketEnd","colorProvider","ColorProvider","colorizationOptions","bracketsInRange","inlineClassName","getInlineClassName","unexpectedClosingBracketClassName","getInlineClassNameOfLevel","isTransparent","createTextBufferBuilder","createTextBufferFactory","acceptChunk","finish","createTextBuffer","MODEL_ID","LONG_LINE_BOUNDARY","TextModelSnapshot","_eos","resultCnt","resultLength","invalidFunc","BracketSearchCanceled","_searchCanceledBrand","stripBracketSearchCanceled","TextModel","creationOptions","associatedResource","_modeService","_languageConfigurationService","_onWillDispose","onWillDispose","_onDidChangeDecorations","affectedInjectedTextLines","handleBeforeFireDecorationsChangedEvent","onDidChangeDecorations","_onDidChangeLanguage","_onDidChangeLanguageConfiguration","onDidChangeLanguageConfiguration","_onDidChangeTokens","_onDidChangeOptions","_onDidChangeAttached","_onDidChangeContentOrInjectedText","onDidChangeContentOrInjectedText","_eventEmitter","_backgroundTokenizationState","_onBackgroundTokenizationStateChanged","fastEvent","_associatedResource","_attachedEditorCount","_bufferDisposable","bufferLineCount","bufferTextLength","largeFileOptimizations","_isTooLargeForTokenization","LARGE_FILE_SIZE_THRESHOLD","LARGE_FILE_LINE_COUNT_THRESHOLD","_isTooLargeForSyncing","MODEL_SYNC_LIMIT","_versionId","_alternativeVersionId","_initialUndoRedoSnapshot","_isDisposing","_languageRegistryListener","affects","_instanceId","_lastDecorationId","_decorationsTree","_commandManager","_isUndoing","_isRedoing","_trimAutoWhitespaceLines","_tokens2","_tokenization","_bracketPairColorizer","_decorationProvider","beginDeferredEmit","endDeferredEmit","detectIndentation","guessedIndentation","slowEvent","completed","emptyDisposedTextBuffer","rawChange","_assertNotDisposed","_setValueFromTextBuffer","getVersionId","textBufferDisposable","oldFullModelRange","oldModelValueLength","_increaseVersionId","_emitContentChangedEvent","_createContentChanged2","_onBeforeEOLChange","_onAfterEOLChange","ensureAllNodesHaveRanges","allDecorations","smallLineCharCount","longLineCharCount","_newOpts","bracketColorizationOptions","createChangeEvent","spacesCnt","tabsCnt","_normalizeIndentationFromWhitespace","normalizeIndentation","resetMightContainUnusualLineTerminators","pushEditOperations","rawPosition","_validatePosition","rawOffset","newAlternativeVersionId","newInitialUndoRedoSnapshot","fullModelValue","getBOM","rawRange","validateRange","getCharacterCountInRange","getLineLastNonWhitespaceColumn","initialStartLineNumber","initialStartColumn","initialEndLineNumber","initialEndColumn","validationType","charCodeBefore","_lineNumber","_column","_isValidPosition","charCodeBeforeStart","charCodeBeforeEnd","startInsideSurrogatePair","endInsideSurrogatePair","_isValidRange","rawSearchScope","uniqueSearchRanges","matchMapper","curr","areIntersecting","rawSearchStart","validatePosition","pushStackElement","popStackElement","currentEOL","pushEOL","rawOperation","_validateEditOperation","_pushEditOperations","_validateEditOperations","incomingEdits","editsAreNearCursors","foundEditNearSel","selIsAbove","selIsBelow","trimLineNumber","maxLineColumn","allowTrimLine","editText","trimRange","pushEditOperation","resultingAlternativeVersionId","rangeStart","newPosition","oldText","_applyUndoRedoEdits","oldEnd","newText","_overwriteAlternativeVersionId","oldLineCount","newLineCount","acceptReplace","rawContentChanges","changeLineCountDelta","currentEditStartLineNumber","firstEditLineNumber","lastInsertedLineNumber","decorationsWithInjectedTextInEditedRange","getInjectedTextInInterval","injectedTextInEditedRange","fromDecorations","injectedTextInEditedRangeQueue","editLineNumber","currentEditLineNumber","takeFromEndWhile","decorationsInCurrentLine","spliceStartLineNumber","spliceLineNumber","newLines","takeWhile","canUndo","canRedo","affectedLines","lineChangeEvents","_getInjectedTextInLine","_changeDecorations","_deltaDecorationsImpl","changeDecoration","newRange","_changeDecorationImpl","_changeDecorationOptionsImpl","_normalizeOptions","oldDecorations","newDecorations","newStickiness","TRACKED_RANGE_OPTIONS","_validateRangeRelaxedNoAllocations","setOptions","getNodeRange","getLinesDecorations","_startLineNumber","_endLineNumber","_getDecorationsInRange","getAll","getAllInjectedText","getAllDecorations","filterRange","getAllInInterval","getRangeAt","oldRange","recordLineAffectedByInjectedText","checkAffectedAndFire","nodeWasInOverviewRuler","nodeIsInOverviewRuler","nodeRange","oldDecorationsIds","oldDecorationsLen","oldDecorationIndex","newDecorationsLen","newDecorationIndex","internalDecorationId","newDecoration","backgroundTokenizationCompleted","minChangedLineNumber","maxChangedLineNumber","hasChange","lineHasChange","_emitModelTokensChangedEvent","tokenizationSupportChanged","semanticTokensApplied","handleTokenizationProgress","hasCompleteSemanticTokens","changedRange","setPartial","tokenizeViewport","isCheapToTokenize","_getLineTokens","syntacticTokens","getTokens","addSemanticTokens","oldLanguage","newLanguage","rbStartOffset","rbEndOffset","_findLanguageBoundaries","rightBiasedWord","getWordDefinition","lbStartOffset","lbEndOffset","leftBiasedWord","_bracket","bracketsSupport","_findMatchingBracketUp","_matchBracket","modeBrackets","currentLanguageId","searchStartOffset","searchEndOffset","tokenStartOffset","currentModeBrackets","_establishBracketSearchOffsets","foundBracket","findNextBracketInRange","foundBracketText","_matchFoundBracket","prevTokenIndex","prevModeBrackets","continueSearchPredicate","_findMatchingBracketDown","totalCallCount","searchPrevMatchingBracketInRange","hitText","isClose","prevSearchInToken","searchInToken","searchNextMatchingBracketInRange","tokenLanguageId","_toFoundBracket","maxDuration","savedCounts","counts","resetCounts","searchInRange","computeIndentLevel","minLineNumber","maxLineNumber","offSide","up_aboveContentLineIndex","up_aboveContentLineIndent","up_belowContentLineIndex","up_belowContentLineIndent","up_resolveIndents","_computeIndentLevel","down_aboveContentLineIndex","down_aboveContentLineIndent","down_belowContentLineIndex","down_belowContentLineIndent","down_resolveIndents","goUp","goDown","initialIndent","upLineNumber","downLineNumber","upLineIndentLevel","currentIndent","_getIndentLevelForWhitespaceLine","downLineIndentLevel","activePosition","getBracketPairsInRangeWithMinIndentation","activeBracketPairRange","bracketsContainingActivePosition","bp","activeGuides","nextGuides","BracketPairGuidesClassNames","guides","guideVisibleColumn","getVisibleColumnFromPosition","renderHorizontalEndLineAtTheBottom","firstNonWsIndex","visibleStartColumn","visibleEndColumn","bracketPair","isActive","highlightActive","activeClassName","horizontalGuides","Disabled","includeInactive","Enabled","lastVisibleColumnCount","aboveContentLineIndex","aboveContentLineIndent","belowContentLineIndex","belowContentLineIndent","resultIndex","affinity","indentOfLine","DEFAULT_CREATION_OPTIONS","isNodeInOverviewRuler","isNodeInjectedText","_decorationsTree0","_decorationsTree1","_injectedTextDecorationsTree","_intervalSearch","_ensureNodesHaveRanges","r0","r1","r2","overviewRulerOnly","_search","_resolveNode","resolveNode","cleanClassName","DecorationOptions","darkColor","_resolvedColor","_resolveColor","ModelDecorationInjectedTextOptions","inlineClassNameAffectsLetterSpacing","ModelDecorationOptions","hoverMessage","glyphMarginHoverMessage","glyphMarginClassName","linesDecorationsClassName","firstLineDecorationClassName","marginClassName","beforeContentClassName","afterContentClassName","EMPTY","createDynamic","handleBeforeFire","_affectedInjectedTextLines","_deferredCnt","_shouldFire","_affectsMinimap","_affectsOverviewRuler","affectsMinimap","affectsOverviewRuler","_fastEmitter","_slowEmitter","_deferredEvent","Schemas","inMemory","internal","walkThrough","walkThroughSnippet","http","https","mailto","untitled","vscodeRemote","vscodeRemoteResource","userData","vscodeCustomEditor","vscodeNotebook","vscodeNotebookCell","vscodeNotebookCellMetadata","vscodeNotebookCellOutput","vscodeInteractive","vscodeInteractiveInput","vscodeSettings","vscodeWorkspaceTrust","vscodeTerminal","webviewPanel","vscodeWebview","extension","vscodeFileResource","RemoteAuthoritiesImpl","_hosts","_ports","_connectionTokens","_preferredWebSchema","schema","port","connectionToken","RemoteAuthorities","FileAccessImpl","uriOrModule","moduleIdToUrl","toUri","rewrite","origin","FALLBACK_AUTHORITY","toUrl","FileAccess","monaco","_interopRequireWildcard","__esModule","newObj","_objectSpread","ownKeys","getOwnPropertySymbols","sym","_defineProperty","_default2","props","diffEditor","original","editorMounted","Function","editorBeforeMount","deep","_getValue","_setValue","_this$editor$getModel","modified","setModelLanguage","setTheme","$nextTick","computed","mounted","initMonaco","beforeDestroy","h","methods","_editorBeforeMount","$el","_setModel","_editorMounted","_getEditor","modifiedEditor","originalModel","createModel","modifiedModel","_this2","onDidUpdateDiff","_emitChange","$emit","candidateUri","candidateLanguage","candidateIsSynchronized","hasAccessToAllModels","normalizedPattern","isExclusive","exclusive","_clock","_score","_time","_lastCandidate","_updateScores","_orderedForEach","lastBucket","lastBucketScore","_compareByScoreAndTime","WeakMap","_promises","_colorMap","languages","changedColorMap","support","supportPromise","registration","isDisposed","colorMap","TokenMetadata","getForeground","fontStyle","getFontStyle","InlineCompletionTriggerKind","SignatureHelpTriggerKind","DocumentHighlightKind","InlayHintKind","SymbolKinds","byName","byKind","fromString","toCssClassName","inline","symbolName","codicon","FoldingRangeKind","Comment","Imports","Region","ReferenceProviderRegistry","RenameProviderRegistry","CompletionProviderRegistry","InlineCompletionsProviderRegistry","SignatureHelpProviderRegistry","HoverProviderRegistry","DocumentSymbolProviderRegistry","DocumentHighlightProviderRegistry","LinkedEditingRangeProviderRegistry","DefinitionProviderRegistry","DeclarationProviderRegistry","ImplementationProviderRegistry","TypeDefinitionProviderRegistry","CodeLensProviderRegistry","InlayHintsProviderRegistry","CodeActionProviderRegistry","DocumentFormattingEditProviderRegistry","DocumentRangeFormattingEditProviderRegistry","OnTypeFormattingEditProviderRegistry","LinkProviderRegistry","ColorProviderRegistry","SelectionRangeRegistry","FoldingRangeProviderRegistry","DocumentSemanticTokensProviderRegistry","DocumentRangeSemanticTokensProviderRegistry","TokenizationRegistry","ITextModelService","IThemeService","ThemeColor","ThemeIcon","themeColorFromId","getThemeTypeSelector","DARK","HIGH_CONTRAST","isThemeColor","_regexFromString","modify","tildeIndex","ti1","ti2","asThemeIcon","ThemingContribution","ThemingRegistry","themingParticipants","onThemingParticipantAddedEmitter","participant","themingRegistry","registerThemingParticipant","onColorThemeChange","Themable","onThemeChange","updateStyles","extractKeyCode","altKeyMod","shiftKeyMod","metaKeyMod","StandardKeyboardEvent","_standardKeyboardEventBrand","_asKeybinding","_computeKeybinding","_asRuntimeKeybinding","_computeRuntimeKeybinding","Mimes","binary","unknown","latex","registeredAssociations","nonUserRegisteredAssociations","userRegisteredAssociations","registerTextMime","association","warnOnOverwrite","associationItem","toTextMimeAssociationItem","userConfigured","filename","filepattern","firstline","filenameLowercase","extensionLowercase","filepatternLowercase","filepatternOnPath","clearTextMimes","onlyUserConfigured","guessMimeTypes","firstLine","configuredMime","guessMimeTypeByPath","registeredMime","firstlineMime","guessMimeTypeByFirstline","associations","filenameMatch","patternMatch","extensionMatch","IconContribution","IconRegistry","iconSchema","definitions","icons","fontId","iconReferenceSchema","iconsById","iconFontsById","markdownDescription","enumIndex","iconContribution","i1","i2","reference","contributions","registerIcon","getIconRegistry","initialize","onDidRegister","iconsSchemaId","getIconSchema","widgetClose","EditorContextKeys","editorSimpleInput","editorTextFocus","textInputFocus","readOnly","inDiffEditor","columnSelection","toNegated","hasNonEmptySelection","hasOnlyEmptySelection","hasMultipleSelections","hasSingleSelection","tabMovesFocus","tabDoesNotMoveFocus","isInWalkThroughSnippet","hoverVisible","inCompositeEditor","notInCompositeEditor","hasCompletionItemProvider","hasCodeActionsProvider","hasCodeLensProvider","hasDefinitionProvider","hasDeclarationProvider","hasImplementationProvider","hasTypeDefinitionProvider","hasHoverProvider","hasDocumentHighlightProvider","hasDocumentSymbolProvider","hasReferenceProvider","hasRenameProvider","hasSignatureHelpProvider","hasInlayHintsProvider","hasDocumentFormattingProvider","hasDocumentSelectionFormattingProvider","hasMultipleDocumentFormattingProvider","hasMultipleDocumentSelectionFormattingProvider","sandboxProcess","arch","roundFloat","number","decimalPoints","decimal","RGBA","_rgbaBrand","HSLA","_hslaBrand","rgba","chroma","hsla","_hue2rgb","HSVA","_hsvaBrand","cmax","cmin","hsva","Color","_hsla","toRGBA","_hsva","hex","Format","CSS","parseHex","red","fromRGBA","R","_relativeLuminanceForComponent","G","B","luminance","yiq","another","lum1","getRelativeLuminance","lum2","_toString","of","isLighterThan","formatRGB","formatRGBA","formatHSL","formatHSLA","_toTwoDigitHex","formatHex","formatHexA","compact","isOpaque","_parseHexDigit","USUAL_WORD_SEPARATORS","createWordRegExp","allowInWords","DEFAULT_WORD_REGEXP","ensureValidWordDefinition","flags","_defaultConfig","windowSize","timeBudget","getWordAtText","textOffset","prevRegexIndex","regexIndex","thisMatch","_findRegexMatchEnclosingPosition","stopPos","ILogService","LogLevel","DEFAULT_LOG_LEVEL","AbstractLogger","_onDidChangeLogLevel","ConsoleLogger","logLevel","setLevel","getLevel","Trace","Debug","LogService","logger","renderText","renderFormattedText","formattedText","_renderFormattedText","parseFormattedText","renderCodeSegments","actionHandler","StringStream","advance","treeNode","nodeChild","parseCodeSegments","actionViewItemIndex","stream","eos","isEscapedFormatType","formatTagType","isFormatTag","newCurrent","textCurrent","supportCodeSegments","ArrayNavigator","_initialize","_elements","_history","_currentPosition","_navigator","_reduceToLimit","currentElement","maxHeight","_onDidHeightChange","wrapper","input","onfocus","onblur","scrollableElement","whiteSpace","onSelectionChange","onAnchoredSelectionChange","anchorNode","updateScrollDimensions","showPlaceholderOnFocus","setPlaceHolder","setTooltip","onValueChange","updateMirror","actionbar","_hideMessage","_showMessage","placeHolder","cachedHeight","setSelectionRange","disabled","horizontalPadding","paddingLeft","cachedContentHeight","force","classForType","stylesForType","errorMsg","showMessage","hasAttribute","div","alertText","showContextView","getAnchor","anchorAlignment","renderOptions","spanElement","formatContent","onHide","aria","hideContextView","lastCharCode","suffix","mirrorTextContent","borderWidth","borderStyle","previousHeight","NLS_PLACEHOLDER_HISTORY_HINT","NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX","NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS","addSuffix","getHistory","suffixedPlaceholder","observer","MutationObserver","mutationList","mutation","observe","attributeFilter","resetPlaceholder","historyHint","revertedPlaceholder","disconnect","getCurrentValue","getNextValue","getPreviousValue","rest","localize","_i","USUAL_WORD_SEPARATORS_1","getWordAtPosFast","getWordAtPosSlow","__extends","extendStatics","setPrototypeOf","__proto__","__","__assign","MINIMAP_GUTTER_WIDTH","ConfigurationChangedEvent","_values","ValidatedEditorOptions","_read","option","_write","BaseEditorOption","compute","ComputedEditorOption","deps","SimpleEditorOption","EditorBooleanOption","boolean","EditorIntOption","minimum","maximum","clampedInt","EditorFloatOption","validationFn","float","EditorStringOption","string","EditorStringEnumOption","allowedValues","_allowedValues","stringSet","EditorEnumOption","defaultStringValue","convert","_convert","_autoIndentFromString","TextEditorCursorStyle","EditorAccessibilitySupport","accessibilitySupport","_cursorBlinkingStyleFromString","cursorBlinkingStyle","_cursorStyleFromString","cursorStyle","Line","Block","Underline","LineThin","BlockOutline","UnderlineThin","EditorClassName","extraEditorClassName","EditorEmptySelectionClipboard","emptySelectionClipboard","EditorFind","_input","EditorFontLigatures","OFF","anyOf","ON","EditorFontInfo","fontInfo","EditorFontSize","EDITOR_FONT_DEFAULTS","EditorGoToLocation","multiple","multipleDefinitions","multipleTypeDefinitions","multipleDeclarations","multipleImplementations","multipleReferences","alternativeDefinitionCommand","alternativeTypeDefinitionCommand","alternativeDeclarationCommand","alternativeImplementationCommand","alternativeReferenceCommand","jsonSubset","EditorHover","sticky","EditorLayoutInfoComputer","computeLayout","outerWidth","outerHeight","lineNumbersDigitCount","typicalHalfwidthCharacterWidth","maxDigitWidth","pixelRatio","lineDecorationsWidth","showGlyphMargin","showLineNumbers","renderType","lineNumbersMinChars","minimapEnabled","minimapSide","side","minimapRenderCharacters","renderCharacters","minimapScale","scale","minimapMaxColumn","scrollbar","verticalScrollbarWidth","verticalScrollbarHasArrows","scrollbarArrowSize","horizontalScrollbarHeight","rawLineDecorationsWidth","lineNumbersWidth","digitCount","glyphMarginWidth","renderMinimap","minimapLeft","glyphMarginLeft","lineNumbersLeft","decorationsLeft","contentLeft","remainingWidth","minimapCharWidth","minimapColumns","viewportColumn","verticalArrowSize","glyphMarginHeight","lineNumbersHeight","decorationsWidth","decorationsHeight","contentHeight","EditorLightbulb","EditorLineHeight","EditorMinimap","showSlider","_multiCursorModifierFromString","multiCursorModifier","EditorParameterHints","cycle","EditorPixelRatio","EditorQuickSuggestions","EditorRenderLineNumbersOption","renderFn","lineNumbers","EditorRulers","rulers","input_1","_scrollbarVisibilityFromString","EditorScrollbar","EditorSuggest","insertMode","insertHighlight","filterGraceful","snippetsPreventQuickSuggestions","localityBonus","shareSuggestSelections","showIcons","maxVisibleSuggestions","showMethods","showFunctions","showConstructors","showFields","showVariables","showClasses","showStructs","showInterfaces","showModules","showProperties","showEvents","showOperators","showUnits","showValues","showConstants","showEnums","showEnumMembers","showKeywords","showWords","showColors","showFiles","showReferences","showFolders","showTypeParameters","showSnippets","EditorTabFocusMode","tabFocusMode","_wrappingIndentFromString","wrappingIndent","EditorWrappingInfoComputer","wordWrapColumn","wordWrapMinified","bareWrappingInfo","isWordWrapMinified","isViewportWrapping","wrappingColumn","isDominatedByLongLines","DEFAULT_WINDOWS_FONT_FAMILY","DEFAULT_MAC_FONT_FAMILY","DEFAULT_LINUX_FONT_FAMILY","EDITOR_MODEL_DEFAULTS","editorOptionsRegistry","EditorOptions","acceptSuggestionOnCommitCharacter","acceptSuggestionOnEnter","markdownEnumDescriptions","accessibilityPageSize","autoClosingBrackets","autoClosingOvertype","autoClosingQuotes","automaticLayout","autoSurround","codeLens","colorDecorators","contextmenu","copyWithSyntaxHighlighting","cursorBlinking","cursorSmoothCaretAnimation","cursorSurroundingLines","cursorSurroundingLinesStyle","cursorWidth","disableLayerHinting","disableMonospaceOptimizations","dragAndDrop","fixedOverflowWidgets","foldingStrategy","fontLigatures2","formatOnPaste","formatOnType","glyphMargin","gotoLocation","hideCursorInOverviewRuler","highlightActiveIndentGuide","hover","links","matchBrackets","mouseStyle","mouseWheelZoom","multiCursorMergeOverlapping","multiCursorPaste","occurrencesHighlight","overviewRulerBorder","overviewRulerLanes","parameterHints","quickSuggestions","quickSuggestionsDelay","renderControlCharacters","renderIndentGuides","renderFinalNewline","renderLineHighlight","renderWhitespace","revealHorizontalRightPadding","roundedSelection","scrollBeyondLastColumn","scrollBeyondLastLine","selectionClipboard","selectionHighlight","selectOnLineNumbers","showFoldingControls","showUnused","snippetSuggestions","smoothScrolling","stopRenderingLineAfter","suggest","suggestFontSize","suggestLineHeight","suggestOnTriggerCharacters","suggestSelection","tabCompletion","useTabStops","wordWrapBreakAfterCharacters","wordWrapBreakBeforeCharacters","wordWrapBreakObtrusiveCharacters","editorClassName","wrappingInfo","ErrorHandler","listeners","unexpectedErrorHandler","emit","onUnexpectedError","onUnexpectedExternalError","errorHandler","isPromiseCanceledError","transformErrorForSerialization","name_1","stacktrace","$isError","canceledName","canceled","illegalArgument","illegalState","markTracked","Iterator","FIN","fromArray","fromNativeIterator","it","collect","iterators","ChainableIterator","getSequenceIterator","ArrayIterator","MappedIterator","Undefined","LinkedList","_first","_last","atTheEnd","oldLast","oldFirst","didRemove","_remove","anchor","toArray","stopwatch","fromPromise","topStack_1","topCount_1","_noop","event_1","EventMultiplexer","hook","unhook","wrapEvent","bufferEvents","KeyCodeUtils","KeyCodeStrMap","_keyCodeToStr","_strToKeyCode","define","keyCodeToStr","strToKeyCode","uiMap","userSettingsUSMap","userSettingsGeneralMap","KeyChord","secondPart","uiLabel","usUserSettingsLabel","generalUserSettingsLabel","toUserSettingsUS","toUserSettingsGeneral","fromUserSettings","isModifierKey","toChord","isDuplicateModifierCase","_makeFsPath","_URI","toJSON","revive","AccessibilitySupport","CompletionItemInsertTextRule","CompletionItemKind","CompletionItemTag","CompletionTriggerKind","ContentWidgetPositionPreference","CursorChangeReason","DefaultEndOfLine","EditorAutoIndentStrategy","EditorOption","EndOfLinePreference","EndOfLineSequence","KeyCode","MarkerTag","MouseTargetType","OverlayWidgetPositionPreference","RenderLineNumbersType","RenderMinimap","ScrollType","ScrollbarVisibility","SelectionDirection","SymbolKind","SymbolTag","TextEditorCursorBlinkingStyle","TrackedRangeStickiness","WrappingIndent","areIntersectingOrTouching","equalsSelection","liftSelection","selectionsArrEqual","isISelection","createWithDirection","MarkerSeverity","KeyMod","chord","CtrlCmd","Shift","Alt","WinCtrl","createMonacoBaseAPI","isIE","isEdge","isEdgeOrIE","isIPad","isEdgeWebView","domEvent","KEY_CODE_MAP","INVERSE_KEY_CODE_MAP","toKeybinding","hasDifferentOriginAncestorFlag","sameOriginWindowChainCache","getParentWindowIfSameOrigin","location_1","parentLocation","hostname","findIframeElementInParentWindow","parentWindow","childWindow","parentWindowIframes","contentWindow","IframeUtils","parent_1","iframeElement","ancestorWindow","windowChain_1","windowChainEl","boundingRect","DragMouseEvent","dataTransfer","class_1","catch","task_1","isTriggered","dummyIdle_1","timeRemaining","tail2","itemEquals","binarySearch","comp","mergeSort","_sort","_merge","lo","hi","aux","leftIdx","rightIdx","coalesce","isFalsyOrEmpty","isNonEmptyArray","distinct","keyFn","distinctES6","fromSet","firstIndex","notFoundValue","firstOrDefault","arrayInsert","insertArr","richText","version","msMaxTouchPoints","__spreadArrays","il","jl","removeNode","_manualClassList","_lastStart","_lastEnd","_findClassName","classesLen","classLen","idxEnd","hasClass","addClasses","nameValue","addClass","removeClass","removeClasses","toggleClass","_nativeClassList","class_2","_classList","relatedTarget","top_1","class_3","elements_1","elements_2","findParentWithAttribute","attribute","removeTabIndexAndUpdateFocus","parentFocusable","parentElement","newTab","opener","asDomUri","depth","startsWith","isAsciiLetter","doEqualsIgnoreCase","stopAt","_getCharContainingOffset","initialGraphemeBreakType","getCharContainingOffset","toCode","toNamespacedPath","drive","isWindowsDriveLetter","char0","joinedPath","uriPath","_typeof","function","isString","isObject","isBoolean","isUndefined","isUndefinedOrNull","isEmptyObject","isFunction","validateConstraints","validateConstraint","getAllPropertyNames","proto","getPrototypeOf","getAllMethodNames","createProxyObject","methodNames","invoke","createProxyMethod","method","methodNames_1","methodName","withNullAsUndefined","withUndefinedAsNull","forEachable","EditorOpenContext","aPos","thisPos","forPaths","forStrings","findSubstr","_forEach","constraints_1","actualHandler_1","registerCommandAlias","getCommands","__generator","f","sent","trys","verb","IOpenerService","_serviceBrand","registerOpener","registerValidator","registerExternalUriResolver","setExternalOpener","resolveExternalUri","matchesScheme","CommandOpener","EditorOpener","_editorService","openCodeEditor","fromUserGesture","USER","API","openToSide","OpenerService","editorService","commandService","_openers","_validators","_resolvers","_externalOpener","openExternal","_doOpenExternal","validator","opener_1","handled","shouldOpen","encodeURI","obj_1","defaultOptions","followsCaret","ignoreCharChanges","alwaysRevealFirst","DiffNavigator","_onDidUpdate","nextIdx","ignoreSelectionChange","revealFirst","onDidDispose","_onDiffUpdated","getModifiedEditor","_init","getLineChanges","_compute","lineChanges","lineChange","charChanges","charChange","rhs","modifiedStartLineNumber","modifiedStartColumn","modifiedEndLineNumber","modifiedEndColumn","_initIdx","fwd","_move","scrollType","canNavigate","revealPositionInCenter","EditorZoom","setZoomLevel","zoomLevel","GOLDEN_LINE_HEIGHT_RATIO","MINIMUM_LINE_HEIGHT","BareFontInfo","createFromValidatedSettings","ignoreEditorZoom","_create","editorZoomLevelMultiplier","getMassagedFontFamily","FontInfo","isTrusted","isMonospace","typicalFullwidthCharacterWidth","canUseHalfwidthRightwardsArrow","spaceWidth","EditorType","ICodeEditor","IDiffEditor","ExecuteCommand","ExecuteCommands","Type","ReplacePreviousChar","CompositionStart","CompositionEnd","Paste","Cut","Undo","Redo","pattern_1","previousSegmentWasGlobStar_1","segment_1","base_1","n_1","regExp_1","parsedPattern_1","resultExpression_1","n_2","withBasenames_1","allPaths_1","n_3","when_1","selector_1","LanguageFeatureRegistry","ordered","getLanguageIdentifier","entry_1","TokenizationRegistryImpl","registerPromise","getPromise","setColorMap","getColorMap","getDefaultBackground","LanguageIdentifier","getBackground","getClassNameFromMetadata","getInlineStyleFromMetadata","isResourceTextEdit","SemanticTokensProviderRegistry","NULL_LANGUAGE_IDENTIFIER","modeId","ID_EDITOR_WORKER_SERVICE","IEditorWorkerService","INITIALIZE","webWorkerWarningLogged","logOnceWebWorkerWarning","SimpleWorkerProtocol","_workerId","_lastSentReq","_pendingReplies","setWorkerId","workerId","sendMessage","req","_send","vsWorker","handleMessage","_handleMessage","seq","replyMessage","requestMessage","transfer","ArrayBuffer","SimpleWorkerClient","workerFactory","lazyProxyReject","_worker","_protocol","loaderConfiguration","require","getConfig","requirejs","contexts","hostMethods","_onModuleLoaded","proxyMethodRequest","_request","_lazyProxy","availableMethods","_onError","getProxyObject","SimpleWorkerServer","requestHandlerFactory","_requestHandlerFactory","_requestHandler","onmessage","loaderConfig","hostProxy","baseUrl","vs","catchError","getWorker","MonacoEnvironment","Worker","isPromiseLike","WebWorker","onMessageCallback","onErrorCallback","workerOrPromise","worker","onmessageerror","terminate","DefaultWorkerFactory","_label","_webWorkerFailedBeforeError","LAST_WORKER_ID","CharacterPairSupport","languageIdentifier","arr_1","open_1","close_1","open_2","close_2","open_3","close_3","arr_2","brackets_1","open_4","close_4","brackets_2","open_5","close_5","reversedStr","BracketElectricCharacterSupport","OnEnterSupport","oneLineAboveText","RichEditSupport","rawConf","_languageIdentifier","_conf","_mergeConf","LanguageConfigurationRegistryImpl","_getRichEditSupport","getComments","getFoldingRules","getGoodIndentForLine","getIndentForEnter","getIndentActionForType","getEnterAction","getBracketsSupport","DiffChange","originalStart","originalLength","modifiedStart","modifiedLength","getOriginalEnd","getModifiedEnd","numberHash","initialHashVal","stringHash","hashVal","length_1","StringDiffSequence","getElements","characters","Int32Array","stringDiff","pretty","ComputeDiff","Assert","MyArray","Copy","sourceArray","sourceIndex","destinationArray","destinationIndex","Copy2","DiffChangeHelper","m_changes","m_originalStart","m_modifiedStart","m_originalCount","m_modifiedCount","MarkNextChange","AddOriginalElement","originalIndex","modifiedIndex","AddModifiedElement","getChanges","getReverseChanges","LcsDiff","originalSequence","modifiedSequence","continueProcessingPredicate","ContinueProcessingPredicate","_getElements","originalStringElements","originalElementsOrHash","originalHasStrings","modifiedStringElements","modifiedElementsOrHash","modifiedHasStrings","_hasStrings","_originalStringElements","_originalElementsOrHash","_modifiedStringElements","_modifiedElementsOrHash","m_forwardHistory","m_reverseHistory","_isStringArray","sequence","hashes","ElementsAreEqual","OriginalElementsAreEqual","index1","index2","ModifiedElementsAreEqual","_ComputeDiff","originalEnd","modifiedEnd","quitEarlyArr","ComputeDiffRecursive","PrettifyChanges","quitEarly","midOriginalArr","midModifiedArr","ComputeRecursionPoint","midOriginal","midModified","leftChanges","rightChanges","ConcatenateChanges","WALKTRACE","diagonalForwardBase","diagonalForwardStart","diagonalForwardEnd","diagonalForwardOffset","diagonalReverseBase","diagonalReverseStart","diagonalReverseEnd","diagonalReverseOffset","forwardPoints","reversePoints","deltaIsEven","forwardChanges","reverseChanges","changeHelper","diagonalMin","diagonalMax","diagonalRelative","lastOriginalIndex","historyIndex","diagonal","originalStartPoint","modifiedStartPoint","lastForwardChange","maxDifferences","numDiagonals","numDifferences","furthestOriginalIndex","furthestModifiedIndex","ClipDiagonalBound","tempOriginalIndex","matchLengthOfLongest","temp","originalStop","modifiedStop","checkOriginal","checkModified","mergedChangeArr","ChangesOverlap","prevChange","bestDelta","bestScore","_boundaryScore","_OriginalIsBoundary","_OriginalRegionIsBoundary","_ModifiedIsBoundary","_ModifiedRegionIsBoundary","originalScore","modifiedScore","diagonalBaseIndex","diagonalsBelow","diagonalsAbove","diffEven","lowerBoundEven","upperBoundEven","MINIMUM_MATCHING_CHARACTER_LENGTH","computeDiff","diffAlgo","LineSequence","startColumns","endColumns","getFirstNonBlankColumn","getLastNonBlankColumn","_startColumns","_endColumns","getStartLineNumber","getEndLineNumber","createCharSequence","shouldIgnoreTrimWhitespace","charCodes","columns","col","CharSequence","_charCodes","_lineNumbers","_columns","getStartColumn","getEndColumn","CharChange","originalStartLineNumber","originalStartColumn","originalEndLineNumber","originalEndColumn","createFromDiffChange","diffChange","originalCharSequence","modifiedCharSequence","postProcessCharChanges","rawChanges","currChange","originalMatchingLength","modifiedMatchingLength","matchingLength","LineChange","createFromDiffResult","originalLineSequence","modifiedLineSequence","continueCharDiff","shouldComputeCharChanges","shouldPostProcessCharChanges","length_2","DiffComputer","originalLines","modifiedLines","shouldMakePrettyDiff","continueLineDiff","createContinueProcessingPredicate","maxComputationTime","diffResult","length_3","originalLineIndex","modifiedLineIndex","nextChange","originalLine","modifiedLine","originalChar","modifiedChar","_pushTrimWhitespaceCharChange","originalMaxColumn","modifiedMaxColumn","modifiedLineNumber","_mergeTrimWhitespaceCharChange","txt","maximumRuntime","PrefixSumIndexOfResult","PrefixSumComputer","prefixSum","prefixSumValidIndex","insertValues","oldValues","oldPrefixSum","insertValuesLen","changeValue","removeValues","maxCnt","getTotalValue","_getAccumulatedValue","PrefixSumComputerWithCache","_cacheAccumulatedValueStart","_bustCache","cacheIndex","warmUpCache","accumulatedValueStart","accumulatedValueEnd","newCache","MirrorTextModel","_uri","_lines","_eol","_lineStarts","getText","onEvents","changes_1","_ensureLineStarts","eolLength","lineStartValues","_setLineText","insertLines","newLengths","Uint8Matrix","CharacterSet","rows","cols","StateMachine","edges","maxCharCode","maxState","states","_maxCharCode","nextState","currentState","_stateMachine","getStateMachine","_classifier","getClassifier","FORCE_TERMINATION_CHARACTERS","CANNOT_END_WITH_CHARACTERS","LinkComputer","_createLink","linkBeginIndex","linkEndIndex","lastIncludedCharIndex","chClass","charCodeBeforeLink","lastCharCodeInLink","computeLinks","stateMachine","linkBeginChCode","hasOpenParens","hasOpenSquareBracket","hasOpenCurlyBracket","resetStateMachine","BasicInplaceReplace","_defaultValueSet","navigateValueSet","range1","text1","range2","text2","up","doNavigateValueSet","numberResult","numberReplace","textReplace","precision","n1","n2","valueSetsReplace","valueSets","valueSetReplace","valueSet","MirrorModel","wordAtText","createWordIterator","wordRangesIdx","wordRanges","_wordenize","getLineWords","words","ranges_1","_validateRange","resultLines","offsetAt","positionAt","maxCharacter","EditorSimpleWorker","foreignModuleFactory","_models","_foreignModuleFactory","_foreignModule","_getModel","_getModels","acceptNewModel","EOL","acceptModelChanged","strURL","acceptRemovedModel","originalUrl","modifiedUrl","ignoreTrimWhitespace","diffComputer","identical","_modelsAreIdentical","originalLineCount","modifiedLineCount","computeMoreMinimalEdits","modelUrl","lastEol","edits_1","editOffset","newEdit","aRng","bRng","_diffLimit","textualSuggest","wordDef","wordDefFlags","wordDefRegExp","wordAt","_suggestionsLimit","computeWordRanges","words_1","selectionText","wordRange","loadForeignModule","createData","foreignHostMethods","fhr","foreignHost","getMirrorModels","fmr","ITextResourceConfigurationService","ITextResourcePropertiesService","NullLogService","hasPerformanceNow","performance","StopWatch","highResolution","_highResolution","_startTime","_now","_stopTime","STOP_SYNC_MODEL_DELTA_TIME_MS","STOP_WORKER_DELTA_TIME_MS","canSyncModel","modelService","EditorWorkerServiceImpl","_modelService","_workerManager","_logService","provideLinks","withWorker","client","canComputeDiff","sw_1","canNavigateValueSet","canComputeWordRanges","WordBasedCompletionItemProvider","workerManager","_configurationService","wordBasedSuggestions","WorkerManager","_editorWorkerClient","_lastWorkerUsedTime","stopWorkerInterval","_checkStopIdleWorker","onModelRemoved","_checkStopEmptyWorker","models","getModels","timeSinceLastWorkerUsedTime","EditorModelManager","proxy","keepIdleModels","_syncedModels","_syncedModelsLastUsedTime","_proxy","_checkStopModelSync","ensureSyncedResources","resources","resources_1","resourceStr","_beginModelSync","toRemove_1","_stopModelSync","toDispose","onDidChangeContent","SynchronousWorkerClient","_instance","_proxyObj","EditorWorkerHost","workerClient","_workerClient","EditorWorkerClient","_keepIdleModels","_workerFactory","_modelManager","_getOrCreateWorker","_getProxy","_getOrCreateModelManager","_withSyncedResources","createWebWorker","MonacoWebWorkerImpl","_foreignModuleId","_foreignModuleCreateData","_foreignModuleHost","_foreignProxy","_getForeignProxy","foreignMethods","foreignProxy","foreignMethods_1","foreignMethod","getProxy","withSyncedResources","LineTokens","_tokensCount","slicedEquals","sliceFromTokenIndex","sliceTokenCount","getClassName","getInlineStyle","inflate","sliceAndInflate","SlicedLineTokens","desiredIndex","_startOffset","_endOffset","_deltaOffset","_decoder","build","write1","appendASCII","appendASCIIString","LineDecoration","equalsArr","lineDecorations","minLineColumn","DecorationSegment","Stack","stopOffsets","consumeLowerThan","maxStopOffset","nextStartOffset","stopOffset","LineDecorationsNormalizer","currentStartOffset","currentEndOffset","LinePart","LineRange","otherLineRange","RenderLineInput","useMonospaceOptimizations","continuesWithWrappedLine","fauxIndentLength","fontLigatures","selectionsOnLine","sameSelection","otherSelections","CharacterMapping","partCount","_absoluteOffsets","getPartIndex","partData","getCharIndex","setPartData","charOffset","partIndex","charIndex","partAbsoluteOffset","getAbsoluteOffsets","charOffsetToPartData","partDataToCharOffset","partLength","searchEntry","midEntry","minEntry","maxEntry","maxCharIndex","minPartIndex","minCharIndex","maxPartIndex","minEntryDistance","maxEntryDistance","RenderLineOutput","characterMapping","containsForeignElements","renderViewLine","sb","lineDecoration","_renderLine","resolveRenderLineInput","RenderLineOutput2","renderViewLine2","ResolvedRenderLineInput","fontIsMonospace","isOverflowing","transformAndRemoveOverflowing","_applyRenderWhitespace","len_1","_applyInlineDecorations","splitLargeTokens","tokensLen","onlyAtSpaces","lastTokenEndIndex","tokenEndIndex","tokenType","lastSpaceOffset","currTokenStart","piecesCount","pieceEndIndex","onlyBoundary","tokensLength","tmpIndent","wasInWhitespace","currentSelectionIndex","isInWhitespace","generateWhitespace","isSingleTrailingSpace","_lineDecorations","lineDecorationsLen","lineDecorationIndex","lastResultEndIndex","len_2","tabsCharDelta","charOffsetInPart","prevPartContentCnt","part","partEndIndex","partType","partRendersWhitespace","partContentCnt","_charIndex","_tabsCharDelta","insertSpacesCount","partIsOnlyWhitespace","Viewport","MinimapLinesRenderingData","ViewLineData","ViewLineRenderingData","inlineDecorations","InlineDecoration","ViewModelDecoration","isFuzzyActionArr","what","isFuzzyAction","isIAction","fixCase","lexer","sanitize","createError","substituteMatches","re","stateMatches","full","dollar","attr","ofs","total","findRules","inState","stateExists","exist","stateNames","CACHE_STACK_DEPTH","MonarchStackElementFactory","maxCacheDepth","_maxCacheDepth","MonarchStackElement","stackElementId","getStackElementId","popall","switchTo","EmbeddedModeData","stateClone","MonarchLineStateFactory","embeddedModeData","MonarchLineState","embeddedModeDataClone","MonarchClassicTokensCollector","_lastTokenType","_lastTokenLanguage","enterMode","nestedModeTokenize","embeddedModeLine","offsetDelta","nestedModeId","embeddedModeState","nestedModeTokenizationSupport","nestedResult","tokenize","MonarchModernTokensCollector","_theme","_prependTokens","_currentLanguageId","_lastTokenMetadata","cLen","MonarchTokenizer","standaloneThemeService","_standaloneThemeService","_modeId","_lexer","_embeddedModes","embeddedLoaded","emitting","_tokenizationRegistryListener","isOneOfMyEmbeddedModes","getLoadStatus","nestedModeStatus","loaded","tokenizationSupportPromise","rootState","lineState","tokensCollector","endLineState","_tokenize","getTheme","tokenTheme","_nestedTokenize","_myTokenize","_findLeavingNestedModeOffset","popOffset","hasEmbeddedPopRule","rules_1","nextEmbedded","regexSource","nestedEndState","nestedModeLine","restOfTheLine","_safeRuleName","groupMatching","forceEvaluation","pos0","stackLen0","groupLen0","enteringEmbeddedMode","groupEntry","restOfLine","rules_2","rule_1","matchOnlyAtLineStart","defaultToken","tokenSubst","goBack","maxStack","totalLen","findBracket","tokenPostfix","enteringEmbeddedModeId","getModeIdForLanguageName","embeddedModeData_1","_getNestedEmbeddedModeData","mimetypeOrModeId","_locateMode","isRegisteredMode","getModeId","triggerMode","bracketType","createTokenizationSupport","Colorizer","colorizeElement","mimeType","nodeValue","innerHTML","colorize","_fakeColorize","_colorize","colorizeLine","renderResult","colorizeModelLine","inflatedTokens","_actualColorize","status_1","defaultMetadata","tokenizeResult","_displayStrings","isCodeEditor","getEditorType","normalizeId","JSONContributionRegistry","schemasById","unresolvedSchemaContent","jsonContributionRegistry","editorConfigurationSchemaId","defaultOverridesConfigurationNode","editorConfigurationSchema","overridePropertyPattern","computeOverridePropertyPattern","registerConfiguration","updateSchemaForOverrideSettingsConfiguration","registerOverrideIdentifiers","overridable","subNodes_1","SETTINGS_OVERRRIDE_NODE_ID","subNode","OVERRIDE_PATTERN_WITH_SUBSTITUTION","_loop_1","state_1","SetMap","TabFocus","_tabFocus","_onDidChangeTabFocus","onDidChangeTabFocus","getTabFocusMode","setTabFocusMode","ComputedEditorOptions","RawEditorOptions","EditorConfiguration2","readOptions","editorOptionsRegistry_2","editorOption","validateOptions","editorOptionsRegistry_3","computeOptions","editorOptionsRegistry_4","_deepEquals","checkEquals","editorOptionsRegistry_5","migrateOptions","filteredTypes","mapping","deepCloneAndMigrateOptions","CommonEditorConfiguration","isSimpleWidget","_isDominatedByLongLines","_lineNumbersDigitCount","_rawOptions","_readOptions","_validatedOptions","_recomputeOptions","observeReferenceElement","dimension","oldOptions","_computeInternalOptions","getRawOptions","partialEnv","_getEnvConfiguration","bareFontInfo","readConfiguration","_subsetEquals","subset","subsetValue","baseValue","_newOptions","setIsDominatedByLongLines","setMaxLineNumber","_digitCount","editorConfigurationBaseNode","editorConfiguration","isConfigurationPropertySchema","editorOptionsRegistry_1","cachedEditorConfigurationKeys","getEditorConfigurationKeys","isEditorConfigurationKey","editorConfigurationKeys","isDiffEditorConfigurationKey","EditOperation","replaceMove","IConfigurationService","toValuesTree","conflictReporter","addToValueTree","settingsTreeRoot","removeFromValueTree","valueTree","doRemoveFromValueTree","getConfigurationValue","settingPath","accessSetting","path_1","component","getConfigurationKeys","getDefaultValues","valueTreeRoot","getMigratedSettingValue","currentSettingName","legacySettingName","setting","legacySetting","user","workspace","workspaceFolder","ConfigurationModel","_contents","_keys","_overrides","checkAndFreeze","section","contents","overrideContents","getContentsForOverrideIdentifer","contentsForKey","overrideContentsForKey","mergeContents","others_1","otherOverride","identifiers","this_1","addKey","removeValue","removeKey","DefaultConfigurationModel","_defaultConfiguration","_localUserConfiguration","_remoteUserConfiguration","_workspaceConfiguration","_folderConfigurations","_memoryConfiguration","_memoryConfigurationByResource","_freeze","_workspaceConsolidatedConfiguration","_foldersConsolidatedConfigurations","_userConfiguration","consolidateConfigurationModel","getConsolidateConfigurationModel","updateValue","memoryConfiguration","folderConfigurationModel","getFolderConfigurationModelForResource","memoryConfigurationModel","userConfiguration","userLocal","localUserConfiguration","userRemote","remoteUserConfiguration","memory","configurationModel","getConsolidatedConfigurationModelForResource","consolidateConfiguration","getWorkspaceConsolidatedConfiguration","getFolder","getFolderConsolidatedConfiguration","memoryConfigurationForResource","folderConsolidatedConfiguration","workspaceConsolidateConfiguration","folderConfiguration","AbstractKeybindingService","_telemetryService","_onDidUpdateKeybindings","_currentChord","_currentChordChecker","_currentChordStatusMessage","getKeybindings","_getResolver","lookupPrimaryKeybinding","resolvedKeybinding","softDispatch","resolveKeyboardEvent","isChord","getDispatchParts","contextValue","currentChord","keypress","_enterChordMode","keypressLabel","chordEnterTime","_documentHasFocus","_leaveChordMode","_dispatch","_doDispatch","shouldPreventDefault","resolveResult","enterChord","hideAfter","bubble","mightProducePrintableCharacter","aType","getType","bType","terminals","KeybindingResolver","defaultKeybindings","_defaultKeybindings","_defaultBoundCommands","_lookupMap","_keybindings","keypressParts","_addKeyPress","_isTargetedForRemoval","defaultKb","keypressFirstPart","keypressChordPart","rawOverrides","rawOverrides_1","conflicts","_addToLookupMap","conflict","conflictIsChord","itemIsChord","whenIsEntirelyIncluded","_removeFromLookupMap","_implies","lookupMap","_findCommand","getDefaultKeybindings","ResolvedKeybindingItem","removeElementsAfterNulls","ModifierLabelProvider","windows","modifierLabels","toLabel","keyLabelProvider","_simpleAsString","UILabelProvider","AriaLabelProvider","labels","IWorkspace","BaseResolvedKeybinding","os","_os","_parts","_getLabel","getAriaLabel","getParts","_getPart","_getDispatchPart","USLayoutResolvedKeybinding","_keyCodeToUILabel","getDispatchStr","IWorkspaceContextService","isIWorkspace","folders","IWorkspaceFolder","isIWorkspaceFolder","toResource","Workspace","_id","_configuration","_foldersMap","_folders","updateFoldersMap","WorkspaceFolder","raw","relativePath","AccessibilityHelpNLS","noSelection","singleSelectionRange","singleSelection","multiSelectionRange","multiSelection","emergencyConfOn","openingDocs","readonlyDiffEditor","editableDiffEditor","readonlyEditor","editableEditor","changeConfigToOnMac","changeConfigToOnWinLinux","auto_on","auto_off","tabFocusModeOnMsg","tabFocusModeOnMsgNoKb","tabFocusModeOffMsg","tabFocusModeOffMsgNoKb","openDocMac","openDocWinLinux","outroMsg","showAccessibilityHelpAction","InspectTokensNLS","inspectTokensAction","GoToLineNLS","gotoLineLabelValidLineAndColumn","gotoLineLabelValidLine","gotoLineLabelEmptyWithLineLimit","gotoLineLabelEmptyWithLineAndColumnLimit","gotoLineAriaLabel","gotoLineActionInput","gotoLineActionLabel","QuickCommandNLS","ariaLabelEntryWithKey","ariaLabelEntry","quickCommandActionInput","quickCommandActionLabel","QuickOutlineNLS","entryAriaLabel","quickOutlineActionInput","quickOutlineActionLabel","_symbols_","_modules_","_class_","_interface_","_method_","_function_","_property_","_variable_","_variable2_","_constructor_","_call_","StandaloneCodeEditorNLS","editorViewAccessibleLabel","accessibilityHelpMessageIE","accessibilityHelpMessage","ToggleHighContrastNLS","toggleHighContrast","SimpleServicesNLS","bulkEditServiceSummary","SimpleModel","_onDispose","withTypedEditor","codeEditorCallback","diffEditorCallback","SimpleEditorModelResolverService","setEditor","findModel","getOriginalEditor","SimpleEditorProgressService","NULL_PROGRESS_RUNNER","showWhile","worked","SimpleDialogService","SimpleNotificationService","notify","notification","NO_OP","StandaloneCommandService","instantiationService","_onWillExecuteCommand","_onDidExecuteCommand","_instantiationService","_dynamicCommands","addCommand","invokeFunction","StandaloneKeybindingService","telemetryService","_cachedResolver","_dynamicKeybindings","keyEvent","addDynamicKeybinding","_keybinding","updateResolver","_toNormalizedKeybindingItems","items_1","resolvedKeybindings","resolveKeybinding","resolvedKeybindings_1","isConfigurationOverrides","SimpleConfigurationService","_onDidChangeConfiguration","arg3","arg4","SimpleResourceConfigurationService","SimpleResourcePropertiesService","StandaloneTelemetryService","publicLog","SimpleWorkspaceContextService","SCHEME","getWorkspace","getWorkspaceFolder","applyConfigurationValues","isDiffEditor","SimpleBulkEditService","workspaceEdit","totalEdits","totalFiles","ariaSummary","SimpleUriLabelService","getUriLabel","SimpleLayoutService","_container","onLayout","CharWidthRequest","fulfill","DomCharWidthReader","requests","_bareFontInfo","_requests","_testElements","_createDomElements","_readFromDomElements","regularDomNode","boldDomNode","italicDomNode","testElements","testElement","htmlString","testString","readCharWidths","ElementSizeObserver","referenceDomElement","changeCallback","measureReferenceDomElementToken","measureReferenceDomElement","stopObserving","getWidth","getHeight","startObserving","callChangeCallback","observedWidth","observedHeight","CSSBasedConfigurationCache","itemId","put","getValues","clearAllFontInfos","clearCache","CSSBasedConfiguration","_evictUntrustedReadingsTimeout","_writeToCache","_evictUntrustedReadings","somethingRemoved","readConfig","_actualReadConfiguration","createRequest","monospace","typicalHalfwidthCharacter","typicalFullwidthCharacter","space","digit0","digit1","digit2","digit3","digit4","digit5","digit6","digit7","digit8","digit9","rightwardsArrow","halfwidthRightwardsArrow","referenceWidth","canTrustBrowserZoomLevel","accessibilityService","_elementSizeObserver","_onReferenceDomElementSizeChanged","_onCSSBasedConfigurationChanged","onDidChangeAccessibilitySupport","applyFontInfoSlow","applyFontInfo","setFontFamily","setFontWeight","setFontSize","setFontFeatureSettings","setLineHeight","setLetterSpacing","_getExtraEditorClassName","extra","getAccessibilitySupport","Action","cssClass","actionCallback","_enabled","_cssClass","_actionCallback","_setLabel","_tooltip","_setTooltip","_setClass","_setEnabled","_setChecked","ActionRunner","_onDidBeforeRun","onDidBeforeRun","error_1","runAction","getMenuItems","temp_1","ExecuteCommandAction","EditorControllerCommandImpl","setMaxWidth","unsetTop","setDisplay","memoizeId","createMemoizer","memoizeKeyPrefix","hooks","PageCoordinates","toClientCoordinates","ClientCoordinates","toPageCoordinates","EditorPagePosition","createEditorPagePosition","editorViewDomNode","editorPos","EditorMouseEvent","EditorMouseEventFactory","_editorViewDomNode","onContextMenu","onMouseUp","onMouseMoveThrottled","merger","myMerger","EditorPointerEventFactory","onPointerDown","onPointerLeave","onPointerMoveThrottled","GlobalEditorMouseMoveMonitor","_globalMouseMoveMonitor","_keydownListener","ViewEventHandler","shouldRender","forceShouldRender","setShouldRender","onDidRender","onConfigurationChanged","onCursorStateChanged","onDecorationsChanged","onFlushed","onFocusChanged","onLanguageConfigurationChanged","onLineMappingChanged","onLinesChanged","onLinesDeleted","onLinesInserted","onRevealRangeRequest","onScrollChanged","onTokensChanged","onTokensColorsChanged","onZonesChanged","onThemeChanged","handleEvents","ViewPart","addEventHandler","removeEventHandler","PartFingerprints","partId","RestrictedRenderingContext","viewLayout","viewportData","_viewLayout","getScrollWidth","getScrollHeight","visibleRange","bigNumbersDelta","vInfo","getCurrentViewport","viewportWidth","viewportHeight","getScrolledTopFromAbsoluteTop","absoluteTop","getVerticalOffsetForLineNumber","getDecorationsInViewport","RenderingContext","viewLines","_viewLines","linesVisibleRangesForRange","includeNewLines","visibleRangeForPosition","LineVisibleRanges","outsideRenderedLine","HorizontalRange","HorizontalPosition","VisibleRanges","FloatHorizontalRange","RangeUtil","_createRange","_handyReadyRange","createRange","_detachRange","selectNodeContents","_readClientRects","startElement","endElement","setStart","setEnd","_mergeAdjacentRanges","prevLeft","prevWidth","myLeft","myWidth","_createHorizontalRangesFromClientRects","clientRects","clientRectDeltaLeft","clientRect","readHorizontalRanges","startChildIndex","endChildIndex","getThemingParticipants","canUseFastRenderedViewLine","alwaysRenderInlineSelection","DomReadingContext","_clientRectDeltaLeft","_clientRectDeltaLeftRead","ViewLineOptions","themeType","ViewLine","_isMaybeInvalid","_renderedViewLine","onContentChanged","onOptionsChanged","onSelectionChanged","renderLine","deltaTop","lineData","getViewLineRenderingData","actualInlineDecorations","selections_1","renderLineInput","CLASS_NAME","renderedViewLine","createRenderedLine","layoutLine","getWidthIsFast","getVisibleRangesForRange","horizontalRanges","getColumnOfNodeOffset","spanNode","FastRenderedViewLine","_characterMapping","_charWidth","_getCharPosition","spanNodeTextContentLength","spanIndex","previousSibling","RenderedViewLine","_isWhitespaceOnly","_containsForeignElements","_cachedWidth","_pixelOffsetCache","_getReadingTarget","myDomNode","_readPixelOffset","_readVisibleRangesForRange","pixelOffset","_readRawVisibleRangesForRange","cachedPixelOffset","_actualReadPixelOffset","r_1","startPartData","startPartIndex","startCharOffsetInPart","endPartData","endPartIndex","endCharOffsetInPart","WebKitRenderedViewLine","endPixelOffset","lastRange","createWebKitRenderedLine","createNormalRenderedLine","EditStackElement","EOLStackElement","redoEOL","undoEOL","currentOpenStackElement","past","future","prevEOL","stackElement","inverseEditOperation","pastStackElement","recordedVersionId","futureStackElement","tabSizeScore_1","getNodeIsInOverviewRuler","setNodeIsInOverviewRuler","WordCharacterClassifier","computeFn","getMapForWordSeparators","text_1","text_2","text_3","text_4","r_2","valdiate","tmp_1","PieceTreeBase","buffer_1","startOffset_1","buffer_2","startOffset_2","getContentOfSubTree","startColumn_1","startColumn_2","startColumn_3","startSplitPosInBuffer_1","endSplitPosInBuffer_1","lineStarts_1","lineStarts_2","accumualtedValue","nodeStartOffset_1","nodeStartOffset_2","PieceTreeTextBuffer","newLinesContent","lastLine","PieceTreeTextBufferFactory","PieceTreeTextBufferBuilder","containsEvent","getDeltaLine","startTokenIndex","endTokenIndex","_startTokenIndex","_endTokenIndex","findResult","_findTokensWithLine","applyEdit","aMetadata","tokens_1","delta_1","TokenizationStateStore","TextModelTokenization","onDidChangeRawContentFast","isLighter","opposite","createFromString","onDidChangeRawContent","setValueFromTextBuffer","onBeforeAttached","onBeforeDetached","getAttachedEditorCount","getFormattingOptions","charStartOffset","startLineContent","endLineContent","charEndOffset","modifyPosition","_applyEdits","i_1","_undo","_redo","_getTrackedRange","_setTrackedRange","removeAllDecorationsWithOwnerId","getDecorationOptions","_getRangeAt","getLineDecorations","getOverviewRulerDecorations","setLineTokens","setSemanticTokens","resetTokenization","tokenizeIfCheap","setMode","getWordUntilPosition","findMatchingBracketUp","matchBracket","findPrevBracket","findNextBracket","findEnclosingBrackets","getActiveIndentGuide","indent_1","indent_2","indent_3","indent_4","getLinesIndentGuides","DecorationsTrees","ModelDecorationOverviewRulerOptions","invalidateCachedColor","ModelDecorationMinimapOptions","DidChangeDecorationsEmitter","DidChangeContentEmitter","autoCloseAlways","autoCloseNever","autoCloseBeforeWhitespace","CursorConfiguration","modelOptions","pageSize","autoClosingPairsOpen2","autoClosingPairsClose2","_electricChars","shouldAutoCloseBefore","_getShouldAutoClose","_getAutoClosingPairs","autoClosingPairs_1","_getSurroundingPairs","surroundingPairs_1","shouldRecreate","electricChars","_getElectricCharacters","electricChars_1","autoCloseConfig","_getLanguageDefinedShouldAutoClose","autoCloseBeforeSet_1","SingleCursorState","selectionStartLeftoverVisibleColumns","leftoverVisibleColumns","_computeSelection","hasSelection","inSelectionMode","CursorContext","viewModel","validateViewPosition","viewPosition","modelPosition","coordinatesConverter","validateViewRange","viewRange","expectedModelRange","convertViewRangeToModelRange","convertViewPositionToModelPosition","convertModelPositionToViewPosition","convertModelRangeToViewRange","modelRange","getCurrentScrollTop","getCompletelyVisibleViewRange","getCompletelyVisibleModelRange","getCompletelyVisibleViewRangeAtScrollTop","getVerticalOffsetForViewLine","viewLineNumber","PartialModelCursorState","modelState","viewState","PartialViewCursorState","CursorState","fromModelState","fromViewState","fromModelSelection","modelSelection","fromModelSelections","modelSelections","EditOperationResult","shouldPushStackElementBefore","shouldPushStackElementAfter","visibleColumnFromColumn2","columnFromVisibleColumn2","nextIndentTabStop","prevRenderTabStop","prevIndentTabStop","isQuote","PointerHandlerLastRenderData","lastViewCursorsRenderData","lastTextareaPosition","MouseTarget","mouseColumn","_typeToString","ElementPath","isTextArea","isChildOfViewLines","isStrictChildOfViewLines","isChildOfScrollableElement","isChildOfMinimap","isChildOfContentWidgets","isChildOfOverflowingContentWidgets","isChildOfOverlayWidgets","HitTestContext","viewHelper","lastRenderData","viewDomNode","_viewHelper","getZoneAtCoord","mouseVerticalOffset","viewZoneWhitespace","getWhitespaceAtVerticalOffset","viewZoneMiddle","verticalOffset","positionBefore","positionAfter","viewZoneId","getFullLineRangeAtCoord","isAfterLines","lineNumber_1","maxLineColumn_1","getLineNumberAtVerticalOffset","findAttribute","_findAttribute","getLineWidth","getPositionFromDOMInfo","getCurrentScrollLeft","BareHitTestRequest","mouseContentHorizontalOffset","isInMarginArea","isInContentArea","_getMouseColumn","HitTestRequest","_ctx","outerHTML","withTarget","EMPTY_CONTENT_AFTER_LINES","createEmptyContentDataInLines","horizontalDistanceToText","MouseTargetFactory","mouseTargetIsWidget","createMouseTarget","_createMouseTarget","domHitTestExecuted","hitTestResult","_doHitTest","createMouseTargetFromHitTestPosition","hitTarget","resolvedRequest","_hitTestContentWidget","_hitTestOverlayWidget","_hitTestMinimap","_hitTestScrollbarSlider","_hitTestViewZone","_hitTestMargin","_hitTestViewCursor","_hitTestTextArea","_hitTestViewLines","_hitTestScrollbar","widgetId","lastViewCursorsRenderData_1","lastViewCursorsRenderData_2","cursorVerticalOffset","viewZoneData","mouseTargetType","lineWidth_1","lineWidth","possibleLineNumber","getMouseColumn","chars","detail_1","columnHorizontalOffset","points","visibleRange_1","lineMaxColumn","visibleRange_2","_doHitTestWithCaretRangeFromPoint","lineVerticalOffset","lineCenteredVerticalOffset","adjustedPageY","adjustedPage","_actualDoHitTestWithCaretRangeFromPoint","coords","caretRangeFromPoint","startContainer","TEXT_NODE","parent1","parent2","parent3","parent3ClassName","parent2ClassName","_doHitTestWithCaretPositionFromPoint","hitResult","caretPositionFromPoint","offsetNode","_doHitTestWithMoveToPoint","resultPosition","resultHitTarget","textRange","createTextRange","moveToPoint","collapse","rangeToContainEntireSpan","duplicate","moveToElementText","setEndPoint","createMouseMoveEventMerger","mouseTargetFactory","targetIsWidget","MouseHandler","viewController","_isFocused","_mouseDownOperation","testEventTarget","_asyncFocus","focusTextArea","lastMouseLeaveTime","mouseEvents","_onContextMenu","_onMouseMove","MOUSE_MOVE_MINIMUM_TIME","_onMouseUp","_onMouseLeave","emitMouseWheel","capture","isFocused","getTargetAtClientPoint","clientPos","getLastRenderData","emitContextMenu","actualMouseMoveTime","emitMouseMove","emitMouseLeave","emitMouseUp","targetIsContent","targetIsGutter","targetIsLineNumbers","targetIsViewZone","shouldHandle","shouldSuppressMouseDownOnViewZone","shouldSuppressMouseDownOnWidget","emitMouseDown","MouseDownOperation","_viewController","_onScrollTimeout","_mouseState","MouseDownState","_currentSelection","_isActive","_lastMouseEvent","_onMouseDownThenMove","setModifiers","_findMousePosition","isDragAndDrop","emitMouseDrag","_dispatchMouse","targetType","setStartedOnLineNumbers","setStartButtons","trySetCount","emitMouseDrop","_stop","_getPositionOutsideEditor","editorContent","_helpPositionJumpOverViewZone","aboveLineNumber","belowLineNumber","positionOutsideEditor","hintedPosition","dispatchMouse","startedOnLineNumbers","mouseDownCount","_altKey","_ctrlKey","_metaKey","_shiftKey","_leftButton","_middleButton","_startedOnLineNumbers","_lastMouseDownPosition","_lastMouseDownPositionEqualCount","_lastMouseDownCount","_lastSetMouseDownCountTime","setMouseDownCount","newMouseDownPosition","CLEAR_MOUSE_DOWN_COUNT_TIME","gestureChangeEventMerger","MsPointerHandler","linesContentDomNode","msTouchAction","msContentZooming","_installGestureHandlerTimeout","MSGesture","touchGesture_1","penGesture_1","pointerType","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","_lastPointerType","addPointer","pointerId","_onGestureChange","_onCaptureGestureTap","rawEvent","moveTo","fromElement","deltaScrollNow","StandardPointerHandler","touchAction","touchGesture_2","penGesture_2","PointerEventHandler","TouchHandler","PointerHandler","msPointerEnabled","TouchEvent","pointerEnabled","TextAreaState","selectionStartPosition","selectionEndPosition","readFromTextArea","textArea","getSelectionStart","getSelectionEnd","collapseSelection","writeToTextArea","deduceEditorPosition","_finishDeduceEditorPosition","str1","str2","deltaText","signum","lastLineFeedIndex","selectedText","deduceInput","previousState","couldBeEmojiInput","couldBeTypingAtOffset0","replaceCharCnt","previousValue","previousSelectionStart","previousSelectionEnd","currentSelectionStart","currentSelectionEnd","previousSuffix","currentSuffix","suffixLength","previousPrefix","currentPrefix","prefixLength","potentialEmojiInput","replacePreviousCharacters_1","replacePreviousCharacters","PagedScreenReaderStrategy","_getPageOfLine","linesPerPage","_getRangeForPage","page","fromEditorSelection","trimLongText","selectionStartPage","selectionStartPageRange","selectionEndPage","selectionEndPageRange","pretextRange","pretext","lastLineMaxColumn","posttextRange","posttext","selectionRange1","selectionRange2","LIMIT_CHARS","CopyOptions","forceCopyWithSyntaxHighlighting","InMemoryClipboardMetadataManager","_lastState","lastCopiedValue","pastedText","TextAreaInput","_onFocus","_onBlur","onKeyUp","_onCut","onCut","_onPaste","onPaste","_onType","onType","_onCompositionStart","onCompositionStart","_onCompositionUpdate","onCompositionUpdate","_onCompositionEnd","onCompositionEnd","_onSelectionChangeRequest","onSelectionChangeRequest","_textArea","_lastTextAreaEvent","_asyncTriggerCut","_textAreaState","_selectionChangeListener","writeScreenReaderContent","_hasFocus","_isDoingComposition","_nextCommand","_setAndWriteTextAreaState","deduceInputFromTextAreaValue","deduceComposition","typeInput","compositionDataInValid","newState_1","typeInput_1","previousEventWasFocus","setIgnoreSelectionChangeTime","_firePaste","_ensureClipboardGetsEditorSelection","ClipboardEventUtils","canUseTextData","getTextData","pastePlainText","_setHasFocus","_installSelectionChangeListener","previousSelectionChangeEventTime","delta1","delta2","getIgnoreSelectionChangeTime","resetSelectionChangeTime","newSelectionStart","newSelectionEnd","_newSelectionStartPosition","newSelectionStartPosition","deduceModelPosition","_newSelectionEndPosition","newSelectionEndPosition","newSelection","newHasFocus","textAreaState","getScreenReaderContent","dataToCopy","getDataToCopy","storedMetadata","isFromEmptySelection","multicursorText","setTextData","clipboardData","getData","rawmetadata","setData","TextAreaWrapper","_ignoreSelectionChangeTime","currentIsFocused","DynamicViewOverlay","resolveDefaultColor","LineNumbersOverlay","_readConfig","_lastCursorModelPosition","_renderResult","_renderLineNumbers","_renderCustomLineNumbers","_renderFinalNewline","_lineNumbersLeft","_lineNumbersWidth","primaryViewPosition","_getLineRenderLineNumber","modelLineNumber","prepareRender","lineHeightClassName","visibleStartLineNumber","visibleEndLineNumber","common","renderLineNumber","activeLineNumber","Margin","_canUseLayerHinting","_contentLeft","_glyphMarginLeft","_glyphMarginWidth","OUTER_CLASS_NAME","_glyphMarginBackgroundDomNode","adjustedScrollTop","ViewConfigurationChangedEvent","ViewCursorStateChangedEvent","ViewDecorationsChangedEvent","ViewFlushedEvent","ViewFocusChangedEvent","ViewLineMappingChangedEvent","ViewLinesChangedEvent","ViewLinesDeletedEvent","ViewLinesInsertedEvent","ViewRevealRangeRequestEvent","verticalType","revealHorizontal","ViewScrollChangedEvent","ViewTokensChangedEvent","ViewThemeChangedEvent","ViewTokensColorsChangedEvent","ViewZonesChangedEvent","ViewLanguageConfigurationEvent","ViewEventEmitter","_collector","_collectorCnt","_beginEmit","ViewEventsCollector","_endEmit","_emit","safeInvokeListener","_eventsLen","_events","VisibleTextAreaData","canUseZeroSizeTextarea","TextAreaHandler","_primaryCursorPosition","_primaryCursorVisibleRange","_scrollLeft","_scrollTop","_accessibilitySupport","_accessibilityPageSize","_contentWidth","_contentHeight","_fontInfo","_emptySelectionClipboard","_copyWithSyntaxHighlighting","_visibleTextArea","_selections","_lastRenderPosition","textAreaCover","simpleModel","textAreaInputHost","generateHTML","rawTextToCopy","getPlainTextToCopy","newLineCharacter","getHTMLToCopy","textBefore","_getWordBeforePosition","_getCharacterBeforePosition","viewAnchorPosition","deduceModelPositionRelativeToViewPosition","_textAreaInput","emitKeyDown","emitKeyUp","pasteOnNewLine","paste","replacePreviousChar","privateViewEventBus","visibleRangeForPositionRelativeToEditor","compositionStart","measureText","compositionEnd","charClass","_renderInsideEditor","_renderAtTopLeft","renderedPosition","ta","tac","canvasElem","font","createFontString","metrics","doCreateFontString","ColumnSelection","columnSelect","fromVisibleColumn","toVisibleColumn","reversed","isRTL","isLTR","viewStates","fromVisualColumn","toVisualColumn","columnSelectLeft","prevColumnSelectData","toViewVisualColumn","fromViewLineNumber","fromViewVisualColumn","toViewLineNumber","columnSelectRight","maxVisualViewColumn","minViewLineNumber","maxViewLineNumber","lineMaxViewColumn","lineMaxVisualViewColumn","columnSelectUp","isPaged","columnSelectDown","getEditOperations","computeCursorState","ReplaceCommandThatSelectsText","CursorPosition","MoveOperations","leftPosition","moveLeft","noOfColumns","rightPosition","moveRight","down","allowMoveOnLastLine","currentVisibleColumn","moveDown","translateDown","allowMoveOnFirstLine","moveUp","translateUp","moveToBeginningOfLine","firstNonBlankColumn","relevantColumnNumber","moveToEndOfLine","moveToBeginningOfBuffer","moveToEndOfBuffer","lastColumn","DeleteOperations","deleteRight","prevEditOperationType","deleteSelection","rightOfPosition","_isAutoClosingPairDelete","autoClosingPairCandidates","afterCharacter","foundAutoClosingPair","autoClosingPairCandidates_1","autoClosingPairCandidate","_runAutoClosingPairDelete","deleteLeft","lastIndentationColumn","toColumn","leftOfPosition","WordOperations","_createWord","wordType","nextCharClass","_findPreviousWordOnLine","_doFindPreviousWordOnLine","_findEndOfWord","_findNextWordOnLine","_doFindNextWordOnLine","_findStartOfWord","moveWordLeft","wordNavigationType","movedToPreviousLine","prevWordOnLine","lastWhitespaceColumn","_moveWordPartLeft","rightRight","moveWordRight","movedDown","nextWordOnLine","_moveWordPartRight","_deleteWordLeftWhitespace","lastNonWhitespace","deleteWordLeft","whitespaceHeuristics","_deleteWordPartLeft","toPosition","_findFirstNonWhitespaceChar","_deleteWordRightWhitespace","firstNonWhitespace","deleteWordRight","_deleteWordPartRight","endColumn_1","prevWord","nextWord","possiblePosition","WordPartOperations","deleteWordPartLeft","enforceDefined","deleteWordPartRight","moveWordPartLeft","moveWordPartRight","CursorMoveCommands","addCursorDown","cursors","useLogicalLine","addCursorUp","_moveToLineStart","currentViewStateColumn","currentModelStateColumn","isFirstLineOfWrappedLine","currentViewStatelineNumber","isBeginningOfViewLine","_moveToLineStartByModel","_moveToLineStartByView","_moveToLineEnd","viewStatePosition","viewModelMaxColumn","isEndOfViewLine","modelStatePosition","modelMaxColumn","isEndLineOfWrappedLine","_moveToLineEndByModel","_moveToLineEndByView","expandLineSelection","selectAll","_viewPosition","selectToLineNumber","selectToColumn","enteringLineNumber","selectToViewLineNumber","selectToViewColumn","endPositionOfSelectionStart","cancelSelection","unit","_moveHalfLineLeft","_moveLeft","_moveHalfLineRight","_moveRight","_moveUpByViewLines","_moveUpByModelLines","_moveDownByViewLines","_moveDownByModelLines","_moveToViewMinColumn","_moveToViewFirstNonWhitespaceColumn","_moveToViewCenterColumn","_moveToViewMaxColumn","_moveToViewLastNonWhitespaceColumn","visibleModelRange","_firstLineNumberInRange","modelColumn","_moveToModelPosition","_lastLineNumberInRange","visibleViewRange","findPositionInViewportIfOutside","viewColumn","_moveToViewPosition","newViewState","newViewModelPosition","halfLine","toViewColumn","toModelLineNumber","toModelColumn","CursorMove","isCursorMoveArgs","cursorMoveArg","by","RawDirection","Left","Right","Up","Down","WrappedLineStart","WrappedLineFirstNonWhitespaceCharacter","WrappedLineColumnCenter","WrappedLineEnd","WrappedLineLastNonWhitespaceCharacter","ViewPortTop","ViewPortBottom","ViewPortCenter","ViewPortIfOutside","RawUnit","WrappedLine","Character","HalfLine","repeatCache","cachedStringRepeat","ShiftCommand","_selection","_useLastEditRangeForCursorEndPosition","_selectionStartColumnStaysPut","contentStartVisibleColumn","desiredTabStop","indentCount","_addEditOperation","startLine","endLine","shouldIndentEmptyLines","previousLineExtraSpaces","extraSpaces","indentationEndIndex","isUnshift","enterAction","desiredIndent","oneIndent","lastOp","SurroundSelectionCommand","charBeforeSelection","charAfterSelection","_charBeforeSelection","_charAfterSelection","firstOperationRange","secondOperationRange","TypeOperations","outdent","_distributedPaste","_simplePaste","typeSelection","_distributePasteToCursors","distributedPaste","_goodIndentForLine","expectedIndentAction","nonWhitespaceIdx","expectedEnterAction","_replaceJumpToNextIndent","typeText","tab","goodIndent","possibleTypeText","_typeCommand","keepPosition","_enter","lineText_1","indentation_1","normalIndent","increasedIndent","actualIndentation","ir","oldEndViewColumn","oldEndColumn","newLineContent","_isAutoIndentType","_runAutoIndentType","currentIndentation","_isAutoClosingOvertype","autoClosedCharacters","chIsQuote","beforeCharacter","autoClosedCharacter","_runAutoClosingOvertype","_isBeforeClosingBrace","characterAfter","otherAutoClosingPairs","thisBraceIsSymmetric","otherAutoClosingPairs_1","otherAutoClosingPair","otherBraceIsSymmetric","_findAutoClosingPairOpen","positions","candidateIsMatch","positions_1","relevantText","_isAutoClosingOpenCharType","insertOpenCharacter","isBeforeCloseBrace","_runAutoClosingOpenCharType","_shouldSurroundChar","_isSurroundSelectionType","isTypingAQuoteCharacter","selectionContainsOnlyWhitespace","_runSurroundSelectionType","closeCharacter","_isTypeInterceptorElectricChar","_typeInterceptorElectricChar","electricAction","matchLine","matchLineIndentation","newIndentation","lineFirstNonBlankColumn","prefix","compositionEndWithInterceptors","selectionsWhenCompositionStarted","currentChar","autoClosingPairOpenCharType","typeWithInterceptors","commands_1","commands_2","autoIndentFails","typeWithoutInterceptors","lineInsertBefore","lineInsertAfter","lineBreakInsert","TypeWithAutoClosingCommand","openCharacter","_openCharacter","_closeCharacter","closeCharacterRange","enclosingRange","isInEmbeddedEditor","CORE_WEIGHT","CoreEditorCommand","_getCursors","runCoreEditorCommand","EditorScroll_","isEditorScrollArgs","scrollArg","revealCursor","Page","HalfPage","RevealLine_","isRevealLineArgs","reveaLineArg","RawAtArgument","Top","Bottom","CoreNavigationCommands","BaseMoveToCommand","_inSelectionMode","setStates","getPrimaryCursor","reveal","MoveTo","MoveToSelect","ColumnSelectCommand","_getColumnSelectResult","getColumnSelectData","setColumnSelectData","isReal","ColumnSelect","validatedPosition","validatedViewPosition","doColumnSelect","CursorColumnSelectLeft","CursorColumnSelectRight","ColumnSelectUpCommand","_isPaged","CursorColumnSelectUp","CursorColumnSelectPageUp","ColumnSelectDownCommand","CursorColumnSelectDown","CursorColumnSelectPageDown","CursorMoveImpl","parsed","_runCursorMove","CursorMoveBasedCommand","_staticArgs","dynamicArgs","CursorLeft","CursorLeftSelect","CursorRight","CursorRightSelect","CursorUp","CursorUpSelect","CursorPageUp","CursorPageUpSelect","CursorDown","CursorDownSelect","CursorPageDown","CursorPageDownSelect","CreateCursor","class_4","wholeLine","newModelPosition","newViewPosition","LastCursorMoveToSelect","class_5","lastAddedCursorIndex","getLastAddedCursorIndex","newStates","HomeCommand","CursorHome","CursorHomeSelect","CursorLineStart","class_6","_exec","EndCommand","CursorEnd","CursorEndSelect","CursorLineEnd","class_7","TopCommand","CursorTop","CursorTopSelect","BottomCommand","CursorBottom","CursorBottomSelect","EditorScrollImpl","_runEditorScroll","_computeDesiredScrollTop","desiredVisibleViewRange","scrollTo","desiredTopModelLineNumber","desiredTopViewPosition","noOfLines","deltaLines","EditorScroll","ScrollLineUp","class_8","ScrollPageUp","class_9","ScrollLineDown","class_10","ScrollPageDown","class_11","WordCommand","WordSelect","WordSelectDrag","LastCursorWordSelect","class_12","lastAddedState","LineCommand","LineSelect","LineSelectDrag","LastCursorLineCommand","LastCursorLineSelect","LastCursorLineSelectDrag","ExpandLineSelection","class_13","CancelSelection","class_14","RemoveSecondaryCursors","class_15","RevealLine","class_16","revealLineArg","revealAt","revealRange","SelectAll","class_17","SetSelection","class_18","CoreEditingCommands","CoreEditingCommand","runCoreEditingCommand","LineBreakInsert","class_19","executeCommands","class_20","Tab","class_21","DeleteLeft","class_22","getPrevEditOperationType","setPrevEditOperationType","DeleteRight","class_23","EditorOrNativeTextInputCommand","_editorHandler","editorHandler","_inputHandler","inputHandler","focusedEditor","hasTextFocus","_runEditorHandler","activeEditor","execCommand","HANDLER","EditorHandlerCommand","handlerId","_handlerId","registerOverwritableCommand","ViewController","outgoingEvents","commandDelegate","_execMouseCommand","executeEditorCommand","_validateViewColumn","_hasMulticursorModifier","_hasNonMulticursorModifier","selectionClipboardIsOn","_columnSelect","_lastCursorLineSelect","_createCursor","_lineSelectDrag","_lineSelect","_selectAll","_lastCursorLineSelectDrag","_lastCursorWordSelect","_wordSelectDrag","_wordSelect","_lastCursorMoveToSelect","_moveToSelect","_usualArgs","_convertViewToModelPosition","ViewOutgoingEvents","onDidGainFocus","onDidLoseFocus","onMouseMove","onMouseDrag","onMouseDrop","_viewModel","emitScrollChanged","emitViewFocusGained","emitViewFocusLost","_convertViewToModelMouseEvent","_convertViewToModelMouseTarget","convertViewToModelMouseTarget","ExternalMouseTarget","RenderedLinesCollection","createLine","_createLine","_set","rendLineNumberStart","_rendLineNumberStart","_get","getLine","deleteFromLineNumber","deleteToLineNumber","deleteCnt","deleteStartIndex","deleteAboveCount","changeFromLineNumber","changeToLineNumber","someoneNotified","changedLineNumber","insertFromLineNumber","insertToLineNumber","insertCnt","beforeLines","afterLines","deletedLines","notifiedSomeone","VisibleLinesCollection","_createDomNode","_linesCollection","createVisibleLine","lineDomNode","getVisibleLine","renderLines","inp","renderer","resCtx","relativeVerticalOffset","ViewLayerRenderer","inContext","stopLineNumber","_finishRendering","_renderUntouchedLines","_insertLinesBefore","removeCnt","_removeLinesBefore","_insertLinesAfter","_removeLinesAfter","deltaLN","newLinesLen","removeCount","removeIndex","_finishRenderingNewLines","domNodeIsEmpty","newLinesHTML","wasNew","insertAdjacentHTML","currChild","_finishRenderingInvalidLines","invalidLinesHTML","wasInvalid","hugeDomNode","replaceChild","_sb","hadNewLine","hadInvalidLine","ViewOverlays","_visibleLines","_dynamicOverlays","dynamicOverlay","addDynamicOverlay","overlay","toRender","_viewOverlaysRender","ViewOverlayLine","dynamicOverlays","_renderedContent","ContentViewOverlays","MarginViewOverlays","Coordinate","ViewContentWidgets","_viewDomNode","_widgets","overflowingContentWidgetsDomNode","keys_1","keys_2","addWidget","myWidget","allowEditorOverflow","setWidgetPosition","removeWidget","onBeforeRender","keys_3","keys_4","keys_5","_fixedOverflowWidgets","_viewRange","_preference","_cachedDomNodeClientWidth","_cachedDomNodeClientHeight","_getMaxWidth","_renderData","_setPosition","validModelPosition","validateModelPosition","modelPositionIsVisible","validModelRange","validateModelRange","_layoutBoxInViewport","topLeft","bottomLeft","aboveLineTop","heightAboveLine","underLineTop","heightUnderLine","aboveTop","fitsAbove","belowTop","fitsBelow","actualAboveLeft","actualBelowLeft","aboveLeft","belowLeft","_layoutBoxInPage","aboveLeft0","belowLeft0","absoluteAboveTop","absoluteBelowTop","absoluteAboveLeft","absoluteBelowLeft","INNER_WIDTH","INNER_HEIGHT","TOP_PADDING","BOTTOM_PADDING","_prepareRenderWidgetAtExactPositionOverflowing","_getTopAndBottomLeft","topForPosition","largestLineNumber","smallestLeft","visibleRangesForRange","visibleRangesForLine","topForBottomLine","_prepareRenderWidget","placement","pref","isRenderedUsingBorder","AbstractLineHighlightOverlay","_renderLineHighlight","_selectionIsEmpty","_cursorLineNumbers","_readFromSelections","renderSelections","cursorsLineNumbers","selectionIsEmpty","_shouldRenderThis","renderedLine","_renderOne","renderData","CurrentLineHighlightOverlay","_shouldRenderOther","CurrentLineMarginHighlightOverlay","lineHighlight","lineHighlightBorder","DecorationsOverlay","_typicalHalfwidthCharacterWidth","decorationsLen","aClassName","bClassName","_renderWholeLineDecorations","_renderNormalDecorations","lenI","decorationOutput","prevClassName","prevShowIfCollapsed","prevRange","_renderNormalDecoration","linesVisibleRanges","lineVisibleRanges","singleVisibleRange","lenK","ScrollbarArrow","ScrollbarVisibilityController","applyVisibilitySetting","AbstractScrollbar","HorizontalScrollbar","VerticalScrollbar","setSmoothScrollDuration","AbstractScrollableElement","getOverviewRulerLayoutInfo","delegateVerticalScrollbarMouseDown","updateClassName","massagedOptions","renderNow","ScrollableElement","linesContent","overflowGuardDomNode","scrollbarOptions","scrollbarDomNode","_setLayout","onBrowserDesperateReveal","lookAtScrollTop","lookAtScrollLeft","newScrollPosition","deltaLeft","DecorationToRender","DedupOverlay","prevEndLineIndex","GlyphMarginOverlay","_glyphMargin","_getDecorations","rLen","IndentGuidesOverlay","_primaryLineNumber","_spaceWidth","_activeIndentEnabled","_maxIndentLeft","newPrimaryLineNumber","indentWidth","indents","activeIndentStartLineNumber","activeIndentEndLineNumber","activeIndentLevel","activeIndentInfo","containsActiveIndentGuide","leftMostVisiblePosition","editorIndentGuidesColor","editorActiveIndentGuidesColor","LastRenderedData","_currentVisibleRange","getCurrentVisibleRange","setCurrentVisibleRange","currentVisibleRange","HorizontalRevealRequest","startScrollTop","stopScrollTop","ViewLines","_linesContent","_textRangeRestingSpot","_isViewportWrapping","_revealHorizontalRightPadding","_cursorSurroundingLines","_cursorSurroundingLinesStyle","_viewLineOptions","_maxLineWidth","_asyncUpdateLineWidths","_updateLineWidthsSlow","_lastRenderedData","_horizontalRevealRequest","_onOptionsMaybeChanged","newViewLineOptions","rendStartLineNumber","rendEndLineNumber","_computeScrollTopToRevealRange","getFutureViewport","scrollTopDelta","onMaxLineWidthChanged","viewLineDomNode","_getViewLineDomNode","_getLineNumberFor","visibleRanges","visibleRangesLen","domReadingContext","nextLineModelLineNumber","currentLineModelLineNumber","_visibleRangesForLineRange","updateLineWidths","_updateLineWidths","_updateLineWidthsFast","fast","localMaxLineWidth","allWidthsComputed","visibleLine","_ensureMaxLineWidth","revealLineNumber","revealStartColumn","revealEndColumn","_computeScrollLeftToRevealRange","maxHorizontalOffset","iLineWidth","viewport","boxStartY","boxEndY","viewportStartY","viewportEndY","shouldIgnoreScrollOff","boxMiddleY","_computeMinimumScrolling","viewportStartX","viewportEndX","boxStartX","boxEndX","HORIZONTAL_EXTRA_PX","viewportStart","viewportEnd","boxStart","boxEnd","revealAtStart","revealAtEnd","viewportLength","boxLength","LinesDecorationsOverlay","_decorationsLeft","_decorationsWidth","lineOutput","MarginViewLineDecorationsOverlay","RGBA8","_clamp","Empty","MinimapTokensColorTracker","_updateColorMap","_colors","_backgroundIsLight","colorId","backgroundLuminosity","backgroundIsLight","allCharCodes","fontScale","MinimapCharRenderer","charData","charDataNormal","soften","charDataLight","Uint8ClampedArray","renderChar","dx","dy","useLighterFont","charWidth","charHeight","destWidth","backgroundR","backgroundG","backgroundB","deltaR","deltaG","deltaB","sourceOffset","blockRenderChar","colorR","colorG","colorB","charTable","A","C","D","E","F","decodeData","prebakedMiniMaps","1","2","MinimapCharRendererFactory","lastCreated","lastFontFamily","createFromSampleData","createSampleData","canvas","fillStyle","textBaseline","allCharCodes_1","fillText","getImageData","expectedLength","_downsample","_downsampleChar","targetIndex","brightest","sourceY1","sourceY2","sourceX1","sourceX2","samples","sy","sourceRow","yBalance","sx","xBalance","final","pixelsPerCharacter","resultOffset","adjust","getMinimapLineHeight","getMinimapCharWidth","GUTTER_DECORATION_WIDTH","MinimapOptions","minimapOpts","charRenderer","minimapHeight","canvasInnerWidth","canvasInnerHeight","canvasOuterWidth","canvasOuterHeight","MinimapLayout","sliderTop","sliderHeight","getDesiredScrollTopFromDelta","getDesiredScrollTopFromTouchLocation","viewportStartLineNumber","viewportEndLineNumber","viewportContainsWhitespaceGaps","previousLayout","maxMinimapSliderTop","minimapLineHeight","minimapLinesFitting","viewportLineCount","expectedViewportLineCount","extraLinesAtTheBottom","MinimapLine","INVALID","RenderData","renderedLayout","imageData","_imageData","_renderedLines","linesEquals","scrollEquals","MinimapBuffers","WIDTH","HEIGHT","_backgroundFillData","_createBackgroundFillData","createImageData","_lastUsedBuffer","getBuffer","Minimap","_renderDecorations","_gestureInProgress","_lastRenderData","_selectionColor","_getMinimapDomNodeClassName","_shadow","_canvas","_decorationsCanvas","_slider","_sliderHorizontal","_tokensColorTracker","_applyLayout","_mouseDownListener","internalOffsetY","_sliderMouseMoveMonitor","_sliderMouseDownListener","initialMousePosition_1","initialMouseOrthogonalPosition_1","initialSliderState_1","_gestureDisposable","_sliderTouchStartListener","scrollDueToTouchEvent","_sliderTouchMoveListener","_sliderTouchEndListener","_getBuffer","invalidateMinimapColorCache","renderingCtx","whitespaceViewportData","scrollLeftChars","horizontalSliderLeft","renderDecorations","characterWidth","canvasContext","clearRect","lineOffsetMap","renderDecorationOnLine","decorationColor","Gutter","renderDecoration","decorationRange","lineIndexToXOffset","isFirstDecorationForLine","endColumnForLine","fillRect","_lastData","_dirtyY1","_dirtyY2","needed","lineInfo","getMinimapLinesRenderingData","renderedLines","dirtyY1","dirtyY2","dirtyHeight","putImageData","lastTargetData","lastStartLineNumber","lastLines","lastLinesLength","targetData","maxDestPixel","dirtyPixel1","dirtyPixel2","copySourceStart","copySourceEnd","copyDestStart","copyDestEnd","dest_dy","source_dy","sourceStart","sourceEnd","destStart","destEnd","colorTracker","minimapCharRenderer","maxDx","tokenColorId","tokenColor","sliderBackground","halfSliderBackground","sliderHoverBackground","halfSliderHoverBackground","sliderActiveBackground","halfSliderActiveBackground","shadow","ViewOverlayWidgets","_verticalScrollbarWidth","_minimapWidth","_horizontalScrollbarHeight","_editorHeight","_editorWidth","widgetData","_renderWidget","widgetHeight","Settings","renderBorder","hideCursor","cursorColor","domWidth","domHeight","canvasWidth","canvasHeight","_initLanes","canvasLeftOffset","laneCount","leftWidth","rightWidth","centerWidth","leftOffset","centerOffset","rightOffset","DecorationsOverviewRuler","_updateSettings","_tokensColorTrackerListener","_cursorPositions","newSettings","_settings","invalidateOverviewRulerColorCache","editorCtx","heightRatio","getAllOverviewRulerDecorations","minDecorationHeight","halfMinDecorationHeight","canvasCtx","cIndex","colorDecorations","prevLane","prevY1","prevY2","lane","y1","y2","yCenter","cursorHeight","halfCursorHeight","cursorX","cursorW","beginPath","strokeStyle","lineTo","stroke","ColorZone","OverviewRulerZone","_colorZone","setColorZone","colorZone","getColorZones","OverviewZoneManager","getVerticalOffsetForLine","_getVerticalOffsetForLine","_zones","_colorZonesInvalid","_domWidth","_domHeight","_outerHeight","_pixelRatio","_lastAssignedId","_color2Id","_id2Color","getId2Color","setZones","newZones","setPixelRatio","getDOMWidth","getCanvasWidth","setDOMWidth","getDOMHeight","getCanvasHeight","setDOMHeight","getOuterHeight","setOuterHeight","resolveColorZones","colorZonesInvalid","halfMinimumHeight","allColorZones","zone","colorZone_1","ycenter","halfHeight","OverviewRuler","cssClassName","_zoneManager","setLayout","zones","colorZones","id2Color","_renderOneLane","currentColorId","currentFrom","currentTo","colorZones_1","zoneColorId","zoneFrom","zoneTo","Rulers","_renderedRulers","_rulers","_ensureRulersCount","currentCount","desiredCount","rulerWidth","addCount","rulerColor","ScrollDecorationViewPart","_updateWidth","_shouldShow","_useShadows","_updateShouldShow","newShouldShow","HorizontalRangeWithStyle","startStyle","endStyle","LineVisibleRangesWithStyle","toStyledRange","toStyled","isIEWithZoomingIssuesNearRoundedBorders","SelectionsOverlay","_previousFrameVisibleRangesWithStyle","_roundedSelection","_visibleRangesHaveGaps","_enrichVisibleRangesWithStyle","previousFrame","epsilon","previousFrameTop","previousFrameBottom","topLineNumber","bottomLineNumber","curLineRange","curLeft","curRight","prevRight","nextLeft","nextRight","_getVisibleRangesWithStyle","_linesVisibleRanges","visibleRangesHaveGaps","_createSelectionPiece","_actualRenderOneSelection","output2","visibleRangesHaveStyle","fullLineHeight","reducedLineHeight","firstLineNumber","innerCornerOutput","restOfSelectionOutput","SELECTION_CLASS_NAME","ROUNDED_PIECE_WIDTH","className_1","EDITOR_BACKGROUND_CLASS_NAME","SELECTION_TOP_RIGHT","SELECTION_BOTTOM_RIGHT","className_2","SELECTION_TOP_LEFT","SELECTION_BOTTOM_LEFT","thisFrameVisibleRangesWithStyle","visibleRangesWithStyle","internalCorners","restOfSelection","editorSelectionColor","editorInactiveSelectionColor","editorSelectionForegroundColor","ViewCursorRenderData","textContentClassName","ViewCursor","_cursorStyle","_lineCursorWidth","_lastRenderedContent","onCursorPositionChanged","_prepareRender","width_1","lineContent_1","nextCharLength_1","visibleRangeForCharacter","firstVisibleRangeForCharacter","getViewLineData","ViewCursors","_readOnly","_cursorBlinking","_cursorSmoothCaretAnimation","_primaryCursor","_secondaryCursors","_updateDomClassName","_startCursorBlinkAnimation","_cursorFlatBlinkInterval","_blinkingEnabled","_editorHasFocus","_updateBlinking","_onCursorPositionChanged","secondaryPositions","addCnt","newCursor","nextSibling","secondaryCursor","_getCursorBlinking","blinkingStyle","isHidden","isSolid","BLINK_INTERVAL","_getClassName","renderDataLen","primaryRenderData","secondaryRenderData","caret","caretBackground","ViewZones","marginDomNode","_recomputeWhitespacesProps","whitespaces","getWhitespaces","oldWhitespaces","whitespaces_1","changeWhitespace","whitespaceAccessor","hadAChange","_computeWhitespaceProps","delegate","oldWhitespace","afterViewLineNumber","changeOneWhitespace","_safeCallOnComputedHeight","onHeightMaybeChanged","_getZoneOrdinal","_heightInPixels","minWidthInPx","_minWidthInPixels","zoneAfterModelPosition","zoneBeforeModelPosition","validAfterLineNumber","getModelLineMaxColumn","isVisible","zonesHaveChanged","_addZone","_removeZone","_layoutZone","safeInvoke1Arg","whitespaceId","insertWhitespace","myZone","removeWhitespace","heightInLines","onComputedHeight","_safeCallOnDomNodeTop","onDomNodeTop","visibleWhitespaces","visibleZones","hasVisibleZone","newTop","newDisplay","func","ViewContext","eventHandler","ViewEventDispatcher","eventHandlerGateKeeper","_eventHandlerGateKeeper","_eventHandlers","_isConsumingQueue","consumeQueue","emitMany","_doConsumeQueue","eventHandlers","ViewportData","partialData","View","_cursor","_renderAnimationFrame","eventDispatcher","_renderOnce","viewParts","_textAreaHandler","createTextAreaHandlerHelper","getEditorClassName","overflowGuardContainer","_scrollbar","viewZones","decorationsOverviewRuler","scrollDecoration","contentViewOverlays","marginViewOverlays","contentWidgets","viewCursors","overlayWidgets","overviewRulerData","pointerHandler","createPointerHandlerHelper","_flushAccumulatedAndRenderNow","_renderNow","focused","setHasFocus","safeInvokeNoArg","_scheduleRender","_onRenderScheduled","_actualRender","_getViewPartsToRender","viewPart","viewPartsToRender","partialViewportData","getLinesViewportData","setViewport","centeredLineNumber","getViewSelections","getWhitespaceViewportData","renderingContext","restoreState","getOffsetForColumn","mouseTarget","createOverviewRuler","everything","addContentWidget","layoutContentWidget","newPreference","removeContentWidget","OneCursor","_selTrackedRange","_trackSelection","_removeTrackedRange","startTrackingSelection","_updateTrackedRange","stopTrackingSelection","asCursorState","readSelectionFromMarkers","ensureValidState","setState","viewSelectionStart","viewSelectionStart1","viewSelectionStart2","CursorCollection","primaryCursor","secondaryCursors","killSecondaryCursors","startTrackingSelections","stopTrackingSelections","updateContext","getViewPositions","_setSecondaryStates","secondaryStates","secondaryCursorsLength","secondaryStatesLength","createCnt","_addSecondaryCursor","_removeSecondaryCursor","_getAll","sortedCursors","sortedCursorIndex","nextSelection","shouldMergeCursors","winnerSortedCursorIndex","looserSortedCursorIndex","looserIndex","winnerIndex","looserSelection","winnerSelection","resultingRange","looserSelectionIsLTR","winnerSelectionIsLTR","resultingSelectionIsLTR","resultingState","sortedCursors_1","sortedCursor","containsLineMappingChanged","CursorStateChangedEvent","modelVersionId","oldSelections","oldModelVersionId","CursorModelState","cursorState","AutoClosedAction","autoClosedCharactersDecorations","autoClosedEnclosingDecorations","_autoClosedCharactersDecorations","_autoClosedEnclosingDecorations","getAllAutoClosedCharacters","autoClosedActions","autoClosedActions_1","autoClosedAction","getAutoClosedCharactersRanges","isValid","enclosingRanges","Cursor","_onDidReachMaxCursorCount","onDidReachMaxCursorCount","_onDidAttemptReadOnlyEdit","onDidAttemptReadOnlyEdit","_knownModelVersionId","_cursors","_isHandling","_selectionsWhenCompositionStarted","_columnSelectData","_autoClosedActions","_prevEditOperationType","hadFlushEvent","_onModelContentChanged","updateCursorContext","_validateAutoClosedActions","MAX_CURSOR_COUNT","_emitStateChangedIfNecessary","columnSelectData","_revealRange","emitCursorRevealRange","saveState","desiredSelections","selectionsFromMarkers","primaryPos","viewVisualColumn","_pushAutoClosedAction","autoClosedCharactersRanges","autoClosedEnclosingRanges","autoClosedCharactersDeltaDecorations","autoClosedEnclosingDeltaDecorations","_executeEditOperation","opResult","_interpretCommandResult","viewSelections","eventsCollector","newCursorState","revealTarget","viewPositions","_findAutoClosingPairs","indices","closeChar","autoClosingPairsCandidates","openChar","closeCharIndex","openCharIndex","executeEdits","autoClosingIndices","undoEdits","openCharInnerIndex","closeCharInnerIndex","undoEdit","payload","H","cursorChangeReason","_replacePreviousChar","_paste","_cut","_externalExecuteCommand","_externalExecuteCommands","_interpretCompositionEnd","charLength","CommandExecutor","selectionsBefore","trackedRanges","trackedRangesDirection","_innerExecuteCommands","_arrayIsEmpty","commandsData","_getEditOperations","loserCursorsMap","_getLoserCursorMap","filteredOperations","major","hadTrackedEditOperation","selectionsAfter","groupedInverseEditOperations","inverseEditOperations_1","minorBasedSorter","minor","cursorSelections","losingCursors","losingCursorIndex","losingCursors_1","losingCursor","_getEditOperationsFromCommand","majorIdentifier","operationMinor","trackPreviousOnEmpty","editOperationBuilder","currentOp","loserMajor","InternalEditorAction","_precondition","isSupported","tokenizeLineToHTML","viewLineTokens","useNbsp","partContent","PendingChanges","_hasPending","_inserts","_changes","_removes","mustCommit","commit","linesLayout","inserts","removes","_commitPendingChanges","EditorWhitespace","ordinal","LinesLayout","INSTANCE_COUNT","_pendingChanges","_lastWhitespaceId","_arr","_prefixSumValidIndex","_minWidth","_lineCount","findInsertionIndex","_checkPendingChanges","newAfterLineNumber","inserts_1","_insertWhitespace","_changeOneWhitespace","removes_1","_findWhitespaceIndex","_removeWhitespace","removes_2","toChange","changes_2","applyRemoveAndChange","getWhitespacesTotalHeight","getWhitespacesAccumulatedHeight","getLinesTotalHeight","linesHeight","whitespacesHeight","getWhitespaceAccumulatedHeightBeforeLineNumber","lastWhitespaceBeforeLineNumber","_findLastWhitespaceBeforeLineNumber","halfDelta","_findFirstWhitespaceAfterLineNumber","firstWhitespaceAfterLineNumber","getFirstWhitespaceIndexAfterLineNumber","previousLinesHeight","previousWhitespacesHeight","getWhitespaceMinWidth","getLineNumberAtOrAfterVerticalOffset","midLineNumber","midLineNumberVerticalOffset","verticalOffset1","verticalOffset2","currentWhitespaceHeight","currentWhitespaceAfterLineNumber","startLineNumberVerticalOffset","whitespaceIndex","whitespaceCount","getWhitespacesCount","getAfterLineNumberForWhitespaceIndex","getHeightForWhitespaceIndex","currentVerticalOffset","currentLineRelativeOffset","STEP_SIZE","linesOffsets","verticalCenter","currentLineTop","currentLineBottom","endLineNumberVerticalOffset","completelyVisibleStartLineNumber","completelyVisibleEndLineNumber","getVerticalOffsetForWhitespaceIndex","getWhitespaceIndexAtOrAfterVerticallOffset","minWhitespaceIndex","maxWhitespaceIndex","maxWhitespaceVerticalOffset","maxWhitespaceHeight","midWhitespaceIndex","midWhitespaceVerticalOffset","midWhitespaceHeight","candidateIndex","candidateTop","candidateHeight","candidateId","getIdForWhitespaceIndex","candidateAfterLineNumber","SMOOTH_SCROLLING_TIME","ViewLayout","_linesLayout","_configureSmoothScrollDuration","_updateHeight","_getTotalHeight","_getHorizontalScrollbarHeight","currentScrollPosition","_computeScrollWidth","maxLineWidth","extraHorizontalSpace","whitespaceMinWidth","newScrollWidth","firstLineNumberInViewport","whitespaceAboveFirstLine","scrollTopWithoutViewZones","visibleBox","getLinesViewportDataAtScrollTop","OutputPosition","outputLineIndex","outputOffset","CoordinatesConverter","expectedModelPosition","validViewStart","validViewEnd","SplitLinesCollection","linePositionMapperFactory","columnsForFullWidthChar","_validModelVersionId","_constructLines","hiddenAreasIds","createCoordinatesConverter","_ensureValidState","modelVersion","resetHiddenAreas","hiddenAreas","areaId","hiddenAreaStart","hiddenAreaEnd","hiddenAreaIdx","nextLineNumberToUpdateHiddenArea","isInHiddenArea","createSplitLine","getViewLineCount","prefixSumComputer","getHiddenAreas","decId","_reduceRanges","currentRangeStart","currentRangeEnd","setHiddenAreas","newRanges","oldRanges","hasDifference","newRanges_1","hasVisibleLine","lineChanged","setVisible","newOutputLineCount","_modelColumn","setTabSize","newTabSize","setWrappingSettings","onModelFlushed","onModelLinesDeleted","outputFromLineNumber","outputToLineNumber","onModelLinesInserted","_toLineNumber","testPosition","hiddenAreas_1","hiddenArea","totalOutputLineCount","insertPrefixSumValues","outputLineCount","onModelLineChanged","oldOutputLineCount","lineMappingChanged","changeFrom","changeTo","insertFrom","insertTo","deleteFrom","deleteTo","viewLinesChangedEvent","viewLinesInsertedEvent","viewLinesDeletedEvent","acceptVersionId","_toValidViewLineNumber","viewLineCount","warmUpLookupCache","viewStartLineNumber","viewEndLineNumber","getViewLineMinColumn","modelMinPosition","modelMaxPosition","viewStartPosition","viewEndPosition","getViewLinesIndentGuides","modelStart","modelEnd","getViewLineMaxColumn","resultRepeatCount","resultRepeatOption","modelStartLineIndex","modelEndLineIndex","reqStart","modelLineIndex","viewLineStartIndex","getViewLineNumberOfModelPosition","viewLineEndIndex","viewIndents","currIndex","blockAtIndex","getViewLineContent","getViewLineLength","getViewLinesData","startModelLineIndex","startRemainder","fromViewLineIndex","remainingViewLineCount","toViewLineIndex","computedModelColumn","getModelColumnOfViewPosition","computedModelPosition","inputColumn","_modelLineNumber","validPosition","inputLineNumber","lineIndexChanged","getViewPositionOfModelPosition","_getViewLineNumberForModelPosition","deltaLineNumber_1","OverviewRulerDecorations","decorations_1","finalResult","finalResultLen","prevDecId","result_1","dec","VisibleIdentitySplitLine","InvisibleIdentitySplitLine","_outputLineIndex","_fromOuputLineIndex","_toOutputLineIndex","globalStartIndex","outputColumn","_inputColumn","_globalStartIndex","_needed","_outputColumn","_deltaLineNumber","SplitLine","wrappedIndent","getWrappedLinesIndent","wrappedIndentLength","getOutputLineCount","getInputStartOffsetOfOutputLineIndex","getInputOffsetOfOutputPosition","getInputEndOffsetOfOutputLineIndex","deltaStartIndex","fromOuputLineIndex","toOutputLineIndex","globalIndex","adjustedColumn","getOutputPositionOfInputOffset","createLineMapping","IdentityCoordinatesConverter","_validPosition","_validRange","IdentityLinesCollection","_newTabSize","_wrappingIndent","_wrappingColumn","_columnsForFullWidthChar","_newText","_viewStartLineNumber","_viewEndLineNumber","_minLineNumber","_maxLineNumber","decorations_2","WrappingCharacterClassifier","BREAK_BEFORE","BREAK_AFTER","BREAK_OBTRUSIVE","CharacterHardWrappingLineMapperFactory","breakBeforeChars","breakAfterChars","breakObtrusiveChars","nextVisibleColumn","isTab","columnSize","breakingColumn","hardWrappingIndent","wrappedTextIndentVisibleColumn","wrappedTextIndent","numberOfAdditionalTabs","lastBreakingOffset","breakingLengths","breakingLengthsIndex","niceBreakOffset","niceBreakVisibleColumn","obtrusiveBreakOffset","obtrusiveBreakVisibleColumn","charCodeIsTab","charCodeClass","prevCode","prevClass","charColumnSize","breakBeforeOffset","restoreVisibleColumnFrom","nextCode","nextClass","CharacterHardWrappingLineMapping","prefixSums","wrappedLinesIndent","_prefixSums","_wrappedLinesIndent","inputOffset","ViewModelDecorations","editorId","linesCollection","_coordinatesConverter","_decorationsCache","_cachedModelDecorationsResolver","_cachedModelDecorationsResolverViewRange","_clearCachedModelDecorationsResolver","onModelDecorationsChanged","_getOrCreateViewModelDecoration","modelDecoration","getDecorationsViewportData","cacheIsValid","_getDecorationsViewportData","viewportRange","modelDecorations","decorationsInViewport","decorationsInViewportLen","decorationOptions","viewModelDecoration","inlineDecoration","intersectedStartLineNumber","intersectedEndLineNumber","USE_IDENTITY_LINES_COLLECTION","ViewModel","_tokenizeViewportSoon","viewportStartLine","viewportStartLineTrackedRange","viewportStartLineDelta","hardWrappingLineMapperFactory","_registerModelEvents","_onConfigurationChanged","linesViewportData","previousViewportStartModelPosition","previousViewportStartViewPosition","restorePreviousViewportStart","viewPositionTop","hadOtherModelChange","hadModelLineChangeThatChangedLineMapping","linesDeletedEvent","linesInsertedEvent","linesChangedEvent","viewRanges","getVisibleRanges","hiddenStartLineNumber","hiddenEndLineNumber","startViewLineNumber","endViewLineNumber","compatViewState","firstViewLineNumber","firstPosition","firstPositionDeltaTop","reduceRestoreState","_reduceRestoreStateCompatibility","getTabSize","viewportStartLineTop","allInlineDecorations","modelAnchor","modelAnchorOffset","forceCRLF","hasEmptyRange","hasNonEmptyRange","modelLineNumbers","viewLineStart","result_2","prevModelLineNumber","ranges_2","ranges_3","_getColorMap","_getHTMLToCopy","ServiceCollection","entries_1","service","instanceOrDescriptor","IAccessibilityService","CONTEXT_ACCESSIBILITY_MODE_ENABLED","EDITOR_ID","ModelData","hasRealView","listenersToRemove","CodeEditorWidget","domElement","codeEditorWidgetOptions","_onDidDispose","_onDidChangeModelContent","_onDidChangeModelLanguage","onDidChangeModelLanguage","_onDidChangeModelLanguageConfiguration","onDidChangeModelLanguageConfiguration","_onDidChangeModelOptions","onDidChangeModelOptions","_onDidChangeModelDecorations","onDidChangeModelDecorations","_onDidChangeModel","_onDidChangeCursorPosition","_onDidChangeCursorSelection","_onDidLayoutChange","onDidLayoutChange","_editorTextFocus","onDidFocusEditorText","onDidChangeToTrue","onDidBlurEditorText","onDidChangeToFalse","_editorWidgetFocus","onDidBlurEditorWidget","_onWillType","onWillType","_onDidType","onDidType","_onDidPaste","onDidPaste","_onMouseDrag","_onMouseDrop","_onDidScrollChange","_onDidChangeViewZones","onDidChangeViewZones","_domElement","_decorationTypeKeysToIds","_decorationTypeSubtypes","_telemetryData","telemetryData","_createConfiguration","_codeEditorService","createChild","_modelData","_contributions","_actions","_focusTracker","_contentWidgets","_overlayWidgets","contributions_1","contribution","createInstance","internalAction","addCodeEditor","removeCodeEditor","contributionId","_removeDecorationTypes","_postDetachModelCleanup","_detachModel","eolPreference","detachedModel","_attachModel","oldModelUrl","newModelUrl","decorationType","subTypes","subType","_removeDecorationType","_getVerticalOffsetForPosition","modelData","getTopForLineNumber","getTopForPosition","_sendRevealRange","validatedModelRange","revealLine","_revealLine","revealLineInCenter","revealLineInCenterIfOutsideViewport","revealType","revealPosition","_revealPosition","revealPositionInCenterIfOutsideViewport","something","isRange","_setSelectionImpl","revealLines","_revealLines","revealLinesInCenter","revealLinesInCenterIfOutsideViewport","revealVerticalInCenter","revealRangeInCenter","revealRangeAtTop","getScrollLeft","setScrollLeft","saveViewState","contributionsState","restoreViewState","codeEditorState","reducedState","getSupportedActions","_triggerEditorCommand","endCursorState","removeDecorations","decorationTypeKey","hasWidgetFocus","hasChanges","forceRedraw","secondarySelections","_createView","viewOutgoingEvents","removeDomNode","removeDecorationType","BooleanEventEmitter","_onDidChangeToTrue","_onDidChangeToFalse","EditorContextKeysManager","_editorFocus","_textInputFocus","_editorTabMovesFocus","_editorReadonly","_hasMultipleSelections","_hasNonEmptySelection","_canUndo","_canRedo","_updateFromConfig","_updateFromSelection","_updateFromFocus","_updateFromModel","EditorModeContext","_langId","_hasCompletionItemProvider","_hasCodeActionsProvider","_hasCodeLensProvider","_hasDefinitionProvider","_hasDeclarationProvider","_hasImplementationProvider","_hasTypeDefinitionProvider","_hasHoverProvider","_hasDocumentHighlightProvider","_hasDocumentSymbolProvider","_hasReferenceProvider","_hasRenameProvider","_hasSignatureHelpProvider","_hasDocumentFormattingProvider","_hasDocumentSelectionFormattingProvider","_hasMultipleDocumentFormattingProvider","_hasMultipleDocumentSelectionFormattingProvider","_isInWalkThrough","_update","bufferChangeEvents","CodeEditorWidgetFocusTracker","_domFocusTracker","squigglyStart","squigglyEnd","getSquigglySVGData","dotdotdotStart","dotdotdotEnd","getDotDotDotSVGData","errorBorderColor","warningBorderColor","warningForeground","infoBorderColor","infoForeground","hintBorderColor","hintForeground","unnecessaryForeground","unnecessaryBorder","deprecatedForeground","setOrientation","onOrthogonalStartSashEnablementChange","onOrthogonalEndSashEnablementChange","iframes_1","mouseDownEvent","mouseMoveEvent","iframes_2","registerSingleton","getSingletonServiceDescriptors","IEditorCancellationTokens","ctxCancellableOperation","cts","EditorKeybindingCancellationTokenSource","_unregister","StableEditorScrollState","EditorState","EditorStateCancellationTokenSource","_listener","TextModelCancellationTokenSource","_visiblePosition","_visiblePositionScrollDelta","visiblePosition","visiblePositionScrollDelta","visiblePositionScrollTop","restore","BaseActionViewItem","handleActionChangeEvent","updateEnabled","updateChecked","updateClass","updateLabel","updateTooltip","newContext","enableDragging","draggable","onClick","isMenu","Separator","ActionViewItem","previousKey","nextKey","DIFF_LINES_PADDING","DiffEntry","originalLineStart","originalLineEnd","modifiedLineStart","modifiedLineEnd","Diff","DiffReview","_diffEditor","actionBarContainer","_actionBar","_content","_diffs","_goToRow","_getNextRow","_getPrevRow","_currentDiff","_findDiffIndex","doLayout","jumpToLineNumber","_getCurrentFocusedRow","previousElementSibling","_getFirstRow","nextElementSibling","_mergeAdjacent","diffs","diffsLength","rLength_1","originalEqualAbove","modifiedEqualAbove","minOriginal","minModified","prevLineChange","fromOriginal","fromModified","originalEqualBelow","modifiedEqualBelow","maxOriginal","maxModified","nextLineChange","toOriginal","toModified","thisDiff","currLast","thisFirst","lastModifiedLine","originalOptions","modifiedOptions","originalModelOpts","modifiedModelOpts","diffIndex","minOriginalLine","maxOriginalLine","minModifiedLine","maxModifiedLine","diffEntry","header","cell","originalChangedLinesCnt","modifiedChangedLinesCnt","getAriaLines","originalChangedLinesCntAria","modifiedChangedLinesCntAria","modLine","_renderSection","rowClassName","lineNumbersExtraClassName","spacerClassName","originalLayoutInfo","originalLineNumbersWidth","modifiedLayoutInfo","modifiedLineNumbersWidth","spacer","DiffReviewNext","findFocusedDiffEditor","diffReviewNext","DiffReviewPrev","diffReviewPrev","diffEditors","listDiffEditors","InlineDiffMargin","_marginDomNode","_contextMenuService","_diffActions","lineFeed","originalContent","currentLineNumberOffset","copyLineAction","showContextMenu","autoSelectFirstItem","_updateLightBulbPosition","lineNumberOffset","IEditorProgressService","VisualEditorState","inlineDiffMargins","_zonesMap","getForeignViewZones","allViewZones","clean","viewChangeAccessor","restoreScrollState","length_4","zoneId","overviewZones","DIFF_EDITOR_ID","DiffEditorWidget","editorWorkerService","contextMenuService","_editorProgressService","_onDidUpdateDiff","_lastOriginalWarning","_lastModifiedWarning","_editorWorkerService","_updatingDiffProgress","_renderSideBySide","renderSideBySide","_maxComputationTime","_ignoreTrimWhitespace","_renderIndicators","renderIndicators","_originalIsEditable","originalEditable","_updateDecorationsRunner","_updateDecorations","_containerDomElement","_overviewViewportDomElement","_overviewDomElement","_originalDomNode","_modifiedDomNode","_beginUpdateDecorationsTimeout","_currentlyChangingViewZones","_diffComputationToken","_originalEditorState","_modifiedEditorState","_isHandlingScrollEvent","_reviewHeight","_diffComputationResult","leftContextKeyService","leftServices","leftScopedInstantiationService","rightContextKeyService","rightServices","rightScopedInstantiationService","originalEditor","_createLeftHandSideEditor","_createRightHandSideEditor","_originalOverviewRuler","_modifiedOverviewRuler","_reviewPane","_measureDomElementToken","_measureDomElement","_enableSplitViewResizing","enableSplitViewResizing","_setStrategy","_createDataSource","_strategy","applyColors","addDiffEditor","_recreateOverviewRulers","_layoutOverviewRulers","_createInnerEditor","_adjustOptionsForLeftHandSide","_layoutOverviewViewport","_onViewZonesChanged","_beginUpdateDecorationsSoon","_adjustOptionsForRightHandSide","removeDiffEditor","_cleanViewZonesAndDecorations","renderSideBySideChanged","beginUpdateDecorations","_beginUpdateDecorations","setEnableSplitViewResizing","originalViewState","modifiedViewState","diffEditorState","forceDoLayoutCall","_doLayout","freeSpace","ENTIRE_DIFF_OVERVIEW_WIDTH","ONE_OVERVIEW_WIDTH","UPDATE_DIFF_DECORATIONS_DELAY","currentOriginalModel","currentModifiedModel","currentToken","foreignOriginal","foreignModified","diffDecorations","getEditorsDiffDecorations","_adjustOptionsForSubEditor","clonedOptions","isEditable","splitPoint","_computeOverviewViewport","computedRatio","getContainerDomNode","relayoutEditors","newStrategy","_getLineChangeAtOrBeforeLineNumber","startLineNumberExtractor","midEnd","_getEquivalentLineForOriginalLineNumber","originalEquivalentLineNumber","modifiedEquivalentLineNumber","lineChangeOriginalLength","lineChangeModifiedLength","_getEquivalentLineForModifiedLineNumber","getDiffLineInformationForOriginal","equivalentLineNumber","getDiffLineInformationForModified","DiffEditorWidgetStyle","dataSource","_dataSource","_insertColor","_removeColor","newInsertColor","newRemoveColor","originalWhitespaces","modifiedWhitespaces","_getViewZones","originalDecorations","_getOriginalEditorDecorations","modifiedDecorations","_getModifiedEditorDecorations","ForeignViewZonesIterator","ViewZonesComputer","originalForeignVZ","originalLineHeight","modifiedForeignVZ","modifiedLineHeight","getViewZones","originalEndEquivalentLineNumber","modifiedEndEquivalentLineNumber","sortMyViewZones","addAndCombineIfPossible","lastItem","length_5","stepOriginal","stepModified","viewZoneLineNumber","_createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion","isChangeOrInsert","_produceOriginalFromDiff","isChangeOrDelete","_produceModifiedFromDiff","stepOriginalIndex","stepModifiedIndex","originalDelta","modifiedDelta","shouldNotShrink","_ensureDomNodes","createFakeLinesDiv","createDecoration","DECORATIONS","charDelete","charDeleteWholeLine","charInsert","charInsertWholeLine","lineInsert","lineInsertWithSign","lineDelete","lineDeleteWithSign","lineDeleteMargin","DiffEditorWidgetSideBySide","_disableSash","_sashRatio","_sashPosition","_startSashPosition","onSashDragStart","onSashDrag","onSashDragEnd","onSashReset","newDisableSash","sashRatio","sashPosition","midPoint","MINIMUM_EDITOR_WIDTH","SideBySideViewZonesComputer","overviewZoneColor","length_6","lengthJ","length_7","DiffEditorWidgetInline","computer","length_8","length_9","InlineViewZonesComputer","modifiedEditorOptions","modifiedEditorTabSize","marginHTML","maxCharsPerLine","_renderOriginalLine","actualDecorations","absoluteOffsets","added","removed","addedOutline","removedOutline","IStandaloneThemeService","IClipboardService","LAST_GENERATED_COMMAND_ID","ariaDomNodeCreated","createAriaDomNode","StandaloneCodeEditor","_standaloneKeybindingService","whenExpression","createContextKey","addAction","_descriptor","keybindings","keybindingsWhen","keybindingContext","contextMenuGroupId","contextMenuOrder","uniqueId","menuItem","keybindings_1","StandaloneEditor","contextViewService","_ownsModel","setContainer","StandaloneDiffEditor","editorProgressService","IBulkEditService","FrankensteinMode","MIME_TEXT","MIME_UNKNOWN","ModesRegistry","EditorModesRegistry","_onDidChangeLanguages","onDidChangeLanguages","_languages","_dynamicLanguages","registerLanguage","getLanguages","PLAINTEXT_MODE_ID","PLAINTEXT_LANGUAGE_IDENTIFIER","LanguagesRegistry","useModesRegistry","_warnOnOverwrite","_nextLanguageId2","_languageIdToLanguage","_languageToLanguageId","_mimeTypesMap","_nameMap","_lowercaseNameMap","_initializeFromRegistry","_registerLanguages","desc_1","_registerLanguage","langId","mimetype","_getLanguageId","lang","resolvedLanguage","filenames","configurationFiles","_mergeLanguage","primaryMime","filenamePatterns","filenamePattern","firstLineRegexStr","firstLineRegex","langAliases","_g","langAliases_1","langAlias","containsAliases","bestName","getModeIdForLanguageNameLowercase","languageNameLower","extractModeIds","commaSeparatedMimetypesOrCommaSeparatedIds","mimeTypeOrId","getModeIdsFromFilepathOrFirstLine","mimeTypes","LanguageSelection","onLanguagesMaybeChanged","_selector","_evaluate","ModeServiceImpl","_onDidCreateMode","onDidCreateMode","_onLanguagesMaybeChanged","_instantiatedModes","getModeIdByFilepathOrFirstLine","modeIds","_createModeAndGetLanguageIdentifier","createByFilepathOrFirstLine","_getOrCreateMode","_modelEventListeners","_languageSelection","_languageSelectionListener","_disposeLanguageSelection","setLanguage","languageSelection","DEFAULT_EOL","ModelServiceImpl","resourcePropertiesService","_onModelAdded","onModelAdded","_onModelRemoved","_onModelModeChanged","onModelModeChanged","_resourcePropertiesService","_modelCreationOptionsByLanguageAndResource","_configurationServiceSubscription","_updateModelOptions","SemanticColoringFeature","_readModelOptions","parsedTabSize","parsedIndentSize","newDefaultEOL","getCreationOptions","oldOptionsByLanguageAndResource","modelId","_setModelOptionsForModel","currentOptions","_createModelData","oldModeId","newModeId","_watchers","_semanticStyling","SemanticStyling","_caches","SemanticColoringProviderStyling","getLegend","HashTableEntry","tokenTypeIndex","tokenModifierSet","HashTable","_elementsCount","_currentLengthIndex","_currentLength","_SIZES","_growCount","_nullOutEntries","_hashFunc","oldElements","oldElements_1","oldNext","_add","_legend","_hashTable","tokenTypes","tokenModifiers","modifierIndex","getTokenStyleMetadata","SemanticTokensResponse","resultId","releaseSemanticTokens","ModelSemanticColoring","stylingProvider","_fetchSemanticTokens","_fetchSemanticTokensNow","_currentResponse","_currentRequestCancellationTokenSource","_setSemanticTokens","_getSemanticColoringProvider","pendingChanges","contentChangeListener","styling","lastResultId","provideSemanticTokens","_isSemanticTokens","_isSemanticTokensEdits","_copy","currentResponse","deltaLength","srcData","destData","srcLastStart","destLastStart","copyCount","tokensPerArea","lastStartCharacter","tokenStartIndex","smallTokenEndIndex","bigTokenEndIndex","areaLine","deltaCharacter","pendingChanges_1","area","singleChange","AbstractCodeEditorService","_onCodeEditorAdd","onCodeEditorAdd","_onCodeEditorRemove","onCodeEditorRemove","_onDiffEditorAdd","_onDiffEditorRemove","_codeEditors","_diffEditors","listCodeEditors","editorWithWidgetFocus","editors","editors_1","CodeEditorServiceImpl","styleSheet","_decorationOptionProviders","_styleSheet","registerDecorationType","parentTypeKey","providerArgs","DecorationSubTypeOptionsProvider","refCount","ed","resolveDecorationOptions","_parentTypeKey","_beforeContentRules","_afterContentRules","DecorationTypeOptionsProvider","_disposables","createCSSRules","hasContent","createInlineCSSRules","hasLetterSpacing","inlineData","rangeBehavior","lightOverviewRulerColor","overviewRulerColor","darkOverviewRulerColor","overviewRulerLane","_CSS_MAP","opacity","outline","outlineColor","outlineStyle","outlineWidth","borderRadius","borderSpacing","textDecoration","gutterIconPath","gutterIconSize","contentText","contentIconPath","DecorationCSSRules","ruleType","_ruleType","_providerArgs","_usesThemeColors","_hasContent","_hasLetterSpacing","CSSNameHelper","_unThemedSelector","getSelector","_buildCSS","_themeListener","_removeCSS","unthemedCSS","lightCSS","darkCSS","getCSSTextForModelDecorationClassName","getCSSTextForModelDecorationInlineClassName","getCSSTextForModelDecorationGlyphMarginClassName","getCSSTextForModelDecorationContentClassName","cssTextArr","collectCSSText","collectBorderSettingsCSSText","truncated","properties_1","resolveValue","parentKey","StandaloneCodeEditorServiceImpl","sideBySide","doOpenEditor","ParsedTokenThemeRule","parseTokenTheme","resolveParsedTokenThemeRules","parsedThemeRules","customTokenColors","strcmp","defaultFontStyle","defaultForeground","defaultBackground","incomingDefaults","customTokenColors_1","foregroundColorId","backgroundColorId","ThemeTrieElementRule","ThemeTrieElement","TokenTheme","colorRegExp","ColorMap","_lastColorId","_id2color","_color2id","createFromRawTokenTheme","createFromParsedTokenTheme","toStandardTokenType","STANDARD_TOKEN_TYPE_REGEXP","_fontStyle","_foreground","_background","acceptOverwrite","mainRule","_mainRule","dotIndex","generateTokensCSSForColorMap","inherit","vs_dark","hc_black","VS_THEME_NAME","VS_DARK_THEME_NAME","HC_BLACK_THEME_NAME","StandaloneTheme","standaloneThemeData","themeData","themeName","defaultColors","_tokenTheme","notifyBaseUpdated","getColors","baseData","getBuiltinRules","useDefault","getDefault","encodedTokensColors","isBuiltinTheme","builtinTheme","newBuiltInTheme","StandaloneThemeServiceImpl","environment","_onThemeChange","_onIconThemeChange","_knownThemes","_styleElement","defineTheme","hasRule","ruleCollector","getIconTheme","hasFileIcons","hasFolderIcons","hidesExplorerArrows","KEYBINDING_CONTEXT_ATTR","_parent","NullContext","ConfigAwareContextValuesContainer","allKeys","ArrayContextKeyChangeEvent","changedKeys","affectedKeys","configKey","_keyPrefix","configValue","ContextKey","_service","_key","setContext","removeContext","SimpleContextKeyChangeEvent","affectsSome","CompositeContextKeyChangeEvent","AbstractContextKeyService","myContextId","_onDidChangeContext","_myContextId","getContextValuesContainer","myContext","findContextAttr","ContextKeyService","_contexts","_lastContextId","contextId","createChildContext","parentContextId","disposeContext","ScopedContextKeyService","onDidChangeContext","NaN","Direction","MENU_MNEMONIC_REGEX","MENU_ESCAPED_MNEMONIC_REGEX","SubmenuAction","Menu","menuElement","doGetActionViewItem","parentData","menuDisposables","enableMnemonics","mnemonics","actions_1","focusItemByElement","lastFocusedItem","setFocusedItem","scrollElement","MenuSeparatorActionViewItem","updatePositionInSet","fgColor","foregroundColor","bgColor","shadowColor","menuActionViewItem","mnemonic","getMnemonic","actionViewItems","menuItemOptions","getKeyBinding","keybindingLabel","BaseMenuActionViewItem","runOnceToEnableMouseUp","applyStyle","setSize","cleanLabel","cleanMnemonic","escMatch","menuStyle","isSelected","selectionForegroundColor","selectionBackgroundColor","selectionBorderColor","SubmenuMenuActionViewItem","submenuActions","submenuOptions","mysubmenu","submenuDisposables","mouseOver","expandDirection","showScheduler","cleanupExistingSubmenu","createSubmenu","hideScheduler","updateAriaExpanded","submenuIndicator","submenuContainer","selectFirstItem","computedStyles","paddingTop","scrollOffset","childBoundingRect","borderBottomColor","separatorColor","mnemonicInText","computeStyles","styleMap","attachStyler","widgetOrCallback","attachListStyler","defaultListStyles","listFocusAndSelectionBackground","listFocusAndSelectionForeground","listSelectionOutline","listHoverOutline","listMatchesShadow","defaultMenuStyles","attachMenuStyler","ContextMenuHandler","focusToReturn","block","blockMouse","configure","canRelayout","getMenuClassName","onActionRun","onDidActionRun","getActionViewItem","getActionsContext","didCancel","ContextMenuService","_onDidContextMenu","contextMenuHandler","intersect","relativeComplement","viewSize","anchorEnd","ContextView","toDisposeOnClean","toDisposeOnSetContainer","toDisposeOnSetContainer_1","BUBBLE_UP_EVENTS","onDOMEvent","BUBBLE_DOWN_EVENTS","around","elementPosition","horizontalAnchor","viewSizeWidth","viewSizeHeight","anchorPosition","verticalAnchor","pageYOffset","containerPosition","onCapture","ILayoutService","ContextViewService","layoutService","contextView","IDialogService","incoming","outgoing","ListAriaRootRole","Graph","_hashFn","_nodes","roots","insertEdge","fromNode","lookupOrInsertNode","toNode","_enableTracing","_canUseProxy","Proxy","CyclicDependencyError","InstantiationService","services","_services","_trace","traceInvocation","_done","isOptional","_getOrCreateServiceInstance","ctorOrDescriptor","traceCreation","_createInstance","serviceDependencies","serviceArgs","serviceDependencies_1","dependency","firstServiceArgPos","_setServiceInstance","_getServiceInstanceOrDescriptor","instanceOrDesc","_createAndCacheServiceInstance","branch","cycleCount","roots_1","_createServiceInstanceWithOwner","_createServiceInstance","_supportsDelayedInstantiation","idle_1","_dep","_None","dur","_totals","causedCreation","printChild","nested","LABEL_SERVICE_ID","ILabelService","ListError","groupIntersect","groups_1","intersection","much","consolidate","previousGroup","groups_2","RangeMap","middle","indexAt","indexAfter","groupCount","newCount","removeFromParent","RowCache","renderers","alloc","templateId","getTemplateCache","getRenderer","templateData","renderTemplate","release","releaseRow","cachedRows","cachedRows_1","cachedRow","disposeTemplate","DefaultOptions","verticalScrollMode","setRowLineHeight","supportDynamicHeights","dnd","getDragElements","getDragURI","onDragOver","drop","horizontalScrolling","ElementsDragAndDropData","ExternalElementsDragAndDropData","DesktopDragAndDropData","types","equalsDragFeedback","f1","f2","ListView","virtualDelegate","domId","InstanceCount","renderWidth","_scrollHeight","scrollableElementUpdateDisposable","scrollableElementWidthDelayer","splicing","dragOverAnimationStopDisposable","dragOverMouseY","canDrop","currentDragFeedbackDisposable","onDragLeaveTimeout","_onDidChangeContentHeight","rangeMap","renderers_1","lastRenderTop","lastRenderHeight","mouseSupport","additionalScrollHeight","ariaProvider","getSetSize","getPosInSet","rowsContainer","onTouchChange","toDragEvent","onDrop","onDragLeave","_splice","previousRenderRange","getRenderRange","deleteRange","removeRange","removeItemFromDOM","previousRestRange","previousRenderedRestRange","previousUnrenderedRestRanges","inserted","getTemplateId","hasDynamicHeight","lastDynamicHeightWidth","dropTarget","dragStartDisposable","renderRange","renderedRestRange","updateRange","updateItemInDOM","removeRanges","removeRanges_1","unrenderedRestRanges","elementsRange","insertRanges","beforeElement","getNextToLastElement","insertRanges_1","insertItemInDOM","eventuallyUpdateScrollDimensions","_rerender","renderHeight","updateScrollWidth","eventuallyUpdateScrollWidth","rerender","elementHeight","elementTop","renderTop","renderLeft","rangesToInsert","rangesToRemove","rangesToInsert_1","rangesToRemove_1","role","getRole","renderElement","measureItemWidth","getElementDomId","disposeElement","toMouseEvent","toTouchEvent","toGestureEvent","getItemIndexFromEventTarget","effectAllowed","setDragImage","getDragLabel","dragImage_1","currentDragData","setupDragAndDropScrollTopAnimation","currentDragFeedback","dropEffect","effect","feedback_1","feedback_2","clearDragOverFeedback","dragData","teardownDragAndDropScrollTopAnimation","dragOverAnimationDisposable","viewTop","animateDragAndDropScrollTop","upperLimit","rawIndex","anchorElementIndex","anchorElementTopDelta","probeDynamicHeight","unrenderRanges","unrenderRanges_1","renderRanges","renderRanges_1","afterIndex","beforeRow","setDynamicHeight","nextToLastItem","CombinedSpliceable","spliceables","thisRow","_scores","diag","_topScore","_wordStart","_firstMatchCanBeWeak","_findAllMatches2","_topMatch2","lastMatched","simpleMatchCount","TraitRenderer","trait","renderedElements","renderedElementIndex","rendered","unrender","renderIndex","renderedElement","renderIndexes","Trait","_trait","sortedIndexes","hasTrait","numericSort","sortedResult","disjunction","FocusTrait","TraitSpliceable","identityProvider","pastElementsWithTrait","elementsWithTrait","isInputElement","TypeLabelControllerState","KeyboardController","multipleSelectionSupport","openController","DefaultOpenController","onUpArrow","onDownArrow","onPageUpArrow","onPageDownArrow","onEscape","onCtrlA","getFocus","focusPreviousPage","focusNextPage","DefaultKeyboardNavigationDelegate","TypeLabelController","keyboardNavigationLabelProvider","Idle","automaticKeyboardNavigation","triggered","enabledDisposables","enableKeyboardNavigation","onChar","onClear","onInput","Typing","getKeyboardNavigationLabel","labelStr","setFocus","DOMFocusController","onTab","focusedDomElement","tabIndexElement","isSelectionSingleChangeEvent","isSelectionRangeChangeEvent","isMouseRightClick","MouseEvent","DefaultMultipleSelectionController","MouseController","multipleSelectionController","onMouseDblClick","onDoubleClick","getHTMLElement","onMouseClick","onPointer","onMouseMiddleClick","isSelectionChangeEvent","domFocus","changeSelection","rangeSelection","contiguousRange","getContiguousRangeContaining","DefaultStyleController","styleElement","selectorSuffix","listBackground","newStyles","defaultStyles","keyboardSupport","ariaRootRole","TREE","PipelineRenderer","_templateId","AccessibiltyRenderer","accessibilityProvider","ariaLevel","getAriaLevel","ListViewDragAndDrop","getSelectedElements","originalEvent","targetElement","List","eventBufferer","_onDidOpen","onDidOpen","_onDidPin","didJustPressContextMenuKey","baseRenderers","onDidChangeActiveDescendant","viewOptions","ariaRole","styleController","spliceable","keyboardNavigationDelegate","typeLabelController","createMouseController","onFocusChange","_onFocusChange","_onSelectionChange","toListEvent","fromKeydown","fromKeyup","fromMouse","optionsUpdate","indexes_1","indexes_2","findNextIndex","findPreviousIndex","lastPageIndex","lastPageElement","currentlyFocusedElement","getFocusedElements","lastGoodPageIndex","previousScrollTop","firstPageIndex","firstPageElement","firstGoodPageIndex","relativeTop","viewItemBottom","wrapperBottom","getRelativeTop","indexes_3","indexes_4","getActiveDescendantId","InputFocusedContextKey","TreeError","WeakMapper","isFilterResult","getVisibleState","isCollapsibleStateUpdate","collapsible","IndexTreeModel","rootElement","rootRef","_onDidChangeCollapseState","onDidChangeCollapseState","_onDidChangeRenderNodeCount","onDidChangeRenderNodeCount","_onDidSplice","onDidSplice","collapseByDefault","autoExpandSingleChildren","visibleChildrenCount","visibleChildIndex","collapsed","renderNodeCount","visible","filterData","toInsert","onDidCreateNode","onDidDeleteNode","getParentNodeWithListIndex","listIndex","revealed","treeListElementsToInsert","nodesToInsertIterator","createTreeNode","visibleChildStartIndex","nodesToInsert","insertedVisibleChildrenCount","deletedNodes","deletedVisibleChildrenCount","deletedNodes_1","visibleDeleteCount","_updateAncestorsRenderNodeCount","visit_1","insertedNodes","getTreeNodeWithListIndex","getListIndex","getListRenderCount","getTreeNode","setCollapsible","_setCollapseState","isCollapsed","setCollapsed","recursive","_setListNodeCollapseState","onlyVisibleChildIndex","_setNodeCollapseState","previousRenderNodeCount","updateNodeAfterCollapseChange","expandTo","refilter","updateNodeAfterFilterChange","treeElement","parentVisibility","treeListElements","_filterNode","childElements","childRevealed","childNodes","_updateNodeAfterCollapseChange","_updateNodeAfterFilterChange","resultStartLength","hasVisibleDescendants","getNode","getNodeLocation","indexTreeNode","getParentNodeLocation","TreeElementsDragAndDropData","asTreeDragAndDropData","TreeNodeListDragAndDrop","modelProvider","autoExpandDisposable","didChangeAutoExpandNode","autoExpandNode","autoExpand","model_1","ref_1","parentRef","parentIndex","asListOptions","simpleKeyboardNavigation","RenderIndentGuides","ComposedTreeDelegate","EventCollection","TreeRenderer","activeNodes","renderedNodes","DefaultIndent","hideTwistiesOfChildlessElements","shouldRenderIndentGuides","renderedIndentGuides","activeIndentNodes","indentGuidesDisposable","onDidChangeNodeTwistieState","onDidChangeTwistieState","_onDidChangeActiveNodes","twistie","renderTwistie","disposableStore","guide","childElementCount","firstElementChild","TypeFilter","_filter","_totalCount","_matchCount","_pattern","_lowercasePattern","onWillRefilter","filterOnType","TypeFilterController","_onDidChangeEmptyState","positionClassName","_onDidChangePattern","messageDomNode","labelDomNode","_filterOnType","filterOnTypeDomNode","updateFilterOnTypeTitle","onDidChangeFilterOnType","clearDomNode","keyboardNavigationEventFilter","onDidSpliceModel","onEventOrInput","containerWidth","midContainerWidth","updatePosition","screenX","noMatches","totalCount","matchCount","shouldAllowFocus","asTreeEvent","dfs","_nodeSet","createNodeSet","silent","that_1","getNodes","nodeSet","onDidModelSplice","set_1","deletedNodesIdSet","deletedNodesVisitor","insertedNodesMap","insertedNodesVisitor","insertedNode","TreeNodeListMouseController","onTwistie","openOnSingleClick","expandOnlyOnTwistieClick","TreeNodeList","focusTrait","selectionTrait","additionalFocus","additionalSelection","fromAPI","AbstractTree","_onWillRefilter","_onDidUpdateOptions","treeDelegate","onDidChangeCollapseStateRelay","onDidChangeActiveNodes","onLeftArrow","onRightArrow","onSpace","delegate_1","typeFilterController","focusNavigationFilter","Always","expand","parentListIndex","focusedIndex","firstChildIndex","ObjectTreeModel","nodesByIdentity","setChildren","getElementLocation","_setChildren","preserveCollapseState","insertedElements","insertedElementIds","_onDidCreateNode","_onDidDeleteNode","MAX_VALUE","noCompress","incompressible","compress","childrenIterator","_decompress","decompress","CompressedObjectTreeModel","compressionEnabled","compressedNode","compressedParentNode","decompressedElement","splicedElement","recompressedElement","parentChildren","compressedChildren","setCompressionEnabled","rootChildren","decompressedRootChildren","recompressedRootChildren","getCompressedNode","DefaultElementMapper","CompressedTreeNodeWrapper","unwrapper","mapList","nodeMapper","mapOptions","compressedNodeUnwrapper","otherNode","CompressibleObjectTreeModel","elementMapper","getCompressedTreeNode","ObjectTree","CompressibleRenderer","_compressedTreeNodeProvider","compressedTreeNode","compressedTreeNodeProvider","renderCompressedElements","disposeCompressedElements","twistieElement","asObjectTreeOptions","getCompressedNodeKeyboardNavigationLabel","CompressibleObjectTree","compressibleRenderers","createAsyncDataTreeNode","refreshPromise","stale","slow","collapsedByDefault","ancestor","descendant","AsyncDataTreeNodeWrapper","AsyncDataTreeRenderer","AsyncDataTreeElementsDragAndDropData","asAsyncDataTreeDragAndDropData","AsyncDataTreeNodeListDragAndDrop","AsyncDataTree","subTreeRefreshPromises","refreshPromises","_onDidRender","_onDidChangeNodeSlowState","createTree","hasChildren","onDidChangeFocus","onDidChangeSelection","objectTreeDelegate","objectTreeRenderers","objectTreeOptions","getInput","setInput","viewStateContext","_updateChildren","getDataNode","refreshAndRenderNode","refreshNode","doRefreshSubTree","childrenToRefresh","doRefreshNode","childrenPromise","slowTimeout_1","err_1","doGetChildren","getChildren","processChildren","childrenElements","nodesToForget","childrenTreeNodesById","asyncDataTreeNode","childAsyncDataTreeNode","node_1","children_1","asTreeElement","CompressibleAsyncDataTreeNodeWrapper","CompressibleAsyncDataTreeRenderer","compressibleNodeMapperProvider","asCompressibleObjectTreeOptions","els","CompressibleAsyncDataTree","compressionDelegate","compressibleNodeMapper","isIncompressible","getUncompressedIds","nodes_1","node_2","node_3","oldSelection","oldFocus","didChangeSelection","didChangeFocus","visit","getVisibility","filterResult","DataTree","IListService","ListService","lists","_lastFocusedWidget","extraContextKeys","registeredList","RawWorkbenchListFocusContextKey","WorkbenchListSupportsMultiSelectContextKey","WorkbenchListHasSelectionOrFocus","WorkbenchListDoubleSelection","WorkbenchListMultiSelection","WorkbenchListSupportsKeyboardNavigation","WorkbenchListAutomaticKeyboardNavigationKey","WorkbenchListAutomaticKeyboardNavigation","didBindWorkbenchListAutomaticKeyboardNavigation","createScopedContextKeyService","multiSelectModifierSettingKey","openModeSettingKey","horizontalScrollingKey","keyboardNavigationSettingKey","automaticKeyboardNavigationSettingKey","treeIndentKey","treeRenderIndentGuidesKey","getHorizontalScrollingSetting","useAltAsMultipleSelectionModifier","useSingleClickToOpen","MultipleSelectionController","affectsConfiguration","WorkbenchOpenController","existingOpenController","isLeftButton","isDoubleClick","toWorkbenchListOptions","createKeyboardNavigationEventFilter","inChord","WorkbenchObjectTree","listService","workbenchTreeDataPreamble","treeOptions","getAutomaticKeyboardNavigation","internals","overrideStyles","WorkbenchDataTree","WorkbenchAsyncDataTree","WorkbenchCompressibleAsyncDataTree","accessibilityOn","keyboardNavigation","workbenchListOptions","IMarkerData","WorkbenchTreeInternals","listSupportsMultiSelect","hasSelectionOrFocus","hasDoubleSelection","hasMultiSelection","_useAltAsMultipleSelectionModifier","interestingContextKeys","updateKeyboardNavigation","fromSeverity","Hint","toSeverity","emptyString","makeKey","markerData","makeKeyOptionalMessage","useMessage","IMarkerService","MapMap","MarkerStats","infos","warnings","unknowns","_subscription","onMarkerChanged","oldStats","_substract","newStats","_resourceStats","MarkerService","_onMarkerChanged","_onMarkerChangedEvent","_debouncer","_byResource","_byOwner","_stats","owner","changeOne","markers","markerData_1","_toMarker","relatedInformation","severities","take","data_1","newLen","_dedupeMap","InMemoryStorageService","globalCache","workspaceCache","getCache","MenuService","_dispoables","_menuGroups","_contextKeys","_build","menuItems","_compareMenuItems","menuItems_1","groupName","_fillInKbExprKeys","activeActions","exp","aGroup","bGroup","aPrio","bPrio","_compareTitles","aStr","bStr","IMarkerDecorationsService","MarkerDecorations","_markersData","getMarker","MarkerDecorationsService","_markerService","_onDidChangeMarker","_markerDecorations","_handleMarkerChange","markerDecorations","changedResources","newModelDecorations","_createDecorationRange","_createDecorationOption","rawMarker","AbstractAccessibilityService","_onDidChangeAccessibilitySupport","_accessibilityModeEnabledContext","_updateContextKey","detected","BrowserAccessibilityService","StaticServices","_serviceCollection","LazyStaticService","_serviceId","_factory","_all","init","configurationServiceImpl","resourceConfigurationService","contextService","labelService","dialogService","markerService","markerDecorationsService","DynamicStandaloneServices","ensure","withAllStandaloneServices","simpleEditorModelResolverService","onDidCreateEditor","createDiffEditor","createDiffNavigator","doCreateModel","firstLF","setModelMarkers","getModelMarkers","onDidCreateModel","onWillDisposeModel","getSafeTokenizationSupport","tokenizationResult","remeasureFonts","createMonacoEditorAPI","isArrayOf","elemType","bool","defValue","arrayToHash","array_1","createKeywordMatcher","caseInsensitive","compileRegExp","selectScrutinee","num","createGuard","tkey","scrut","oppat","tester","pat","inWords_2","re_1","patx_1","patx_2","patexp","inWords_1","scrutinee","compileAction","newAction","usesEmbedded","results","cases","cases_1","def_1","cases_2","_case","didmatch","Rule","sregex","setAction","act","compile","noThrow","lexerMin","addRules","newrules","newrule","rule1","matchOnlyAtStart","getEncodedLanguageId","lid","setLanguageConfiguration","EncodedTokenizationSupport2Adapter","tokenizeEncoded","TokenizationSupport2Adapter","_toClassicTokens","previousStartIndex","actualResult","_toBinaryTokens","isEncodedTokensProvider","setTokensProvider","setMonarchTokensProvider","languageDef","registerReferenceProvider","registerRenameProvider","registerSignatureHelpProvider","registerHoverProvider","provideHover","registerDocumentSymbolProvider","registerDocumentHighlightProvider","registerDefinitionProvider","registerImplementationProvider","registerTypeDefinitionProvider","registerCodeLensProvider","registerCodeActionProvider","provideCodeActions","only","registerDocumentFormattingEditProvider","registerDocumentRangeFormattingEditProvider","registerOnTypeFormattingEditProvider","registerLinkProvider","registerCompletionItemProvider","registerColorProvider","registerFoldingRangeProvider","registerDeclarationProvider","registerSelectionRangeProvider","createMonacoLanguagesAPI","api","ignoreDuplicateModules","decoder","_lineTokensBrand","defaultTokenMetadata","decodeLanguageId","insertTokens","nextOriginalTokenIdx","nextInsertTokenIdx","newTokens","nextOriginalTokenEndOffset","nextInsertToken","DomEmitter","stopEvent","escapeNewLine","TextChange","_writeStringSize","_writeString","_readString","compressConsecutiveTextChanges","prevEdits","currEdits","compressor","TextChangeCompressor","_prevEdits","_currEdits","_prevLen","_prevDeltaOffset","_currLen","_currDeltaOffset","prevIndex","prevEdit","_getPrev","currEdit","_getCurr","_acceptCurr","_acceptPrev","_splitCurr","_splitPrev","mergePrev","mergeCurr","cleaned","_removeNoOps","_rebaseCurr","_rebasePrev","prevDeltaOffset","currDeltaOffset","preText","postText","frameElement","findFirstInSorted","findLast","pushToStart","pushToEnd","asArray","insertInto","startIdx","getActualStartIndex","newItemsLength","ArrayQueue","firstIdx","lastIdx","endIdx","doHash","arrayHash","objectHash","booleanHash","bits","totalBits","mask","fill","leftPad","toHexString","bufferOrValue","bitsize","padStart","StringSHA1","_h0","_h1","_h2","_h3","_h4","_buff","_buffDV","DataView","_buffLen","_totalLen","_leftoverHighSurrogate","_finished","buff","buffLen","leftoverHighSurrogate","_push","_step","_wrapUp","ml","setUint32","bigBlock32","_bigBlock32","getUint32","isDefined","assertType","assertNever","preserveFocus","useEventAsContext","EmptySubmenuAction","allowCommands","editorOptions","_resolvedUriTargets","_externalOpeners","_defaultExternalOpener","externalOpener","targetURI","validationTarget","externalUri","allowContributedOpeners","preferredOpenerId","didOpen","sourceUri","objects","assert","_bareFontInfoBrand","fallbackFontFamily","_wrapInQuotes","SERIALIZED_FONT_INFO_VERSION","_editorStylingBrand","middotWidth","wsmiddotWidth","RequestMessage","ReplyMessage","SubscribeEventMessage","EventMessage","UnsubscribeEventMessage","_pendingEmitters","_pendingEvents","_handleReplyMessage","_handleRequestMessage","_handleSubscribeEventMessage","_handleEventMessage","_handleUnsubscribeEventMessage","handleEvent","propertyIsDynamicEvent","propertyIsEvent","proxyListen","listen","createProxyDynamicEvent","ttPolicy","trustedTypes","createPolicy","createScriptURL","workerUrl","_originalSequence","_modifiedSequence","originalElement","_getStrictElement","modifiedElement","getStrictElement","startStrictEqual","ElementsAreStrictEqual","endStrictEqual","touchingPreviousChange","aChange","bChange","matchedLength","aOriginalStart","bOriginalEnd","abOriginalLength","aModifiedStart","bModifiedEnd","abModifiedLength","_findBetterContiguousSequence","originalMatchStart","modifiedMatchStart","desiredLength","originalMax","modifiedMax","bestOriginalStart","bestModifiedStart","_contiguousSequenceScore","_prefixSumIndexOfResultBrand","maxCount","_getPrefixSum","sum","getTotalSum","_cachedTextValue","inSquareBrackets","wordenize","getPrefixSum","modelUrls","leadingWord","outer","wordBasedSuggestionsMode","forceLargeModels","_lineDecorationBrand","ORDER","typeCmp","_typeCompare","_metadata","_linePartBrand","startVisibleColumn","wsmiddotDiff","middotDiff","renderSpaceWidth","renderSpaceCharCode","DomPosition","domPosition","_renderLineOutputBrand","beforeCount","afterCount","setColumnInfo","extractControlCharacters","isControlCharacter","lastLinePart","onlyTrailing","generateLinePartForEachWhitespace","lineIsEmptyOrWhitespace","lastEndIndex","lastCharacterMappingDefined","partDisplacement","partRendersWhitespaceWithWidth","partIsEmptyAndHasPseudoAfter","isPseudoAfter","_visibleColumn","producedCharacters","to4CharHex","_viewportBrand","baseLineNumber","wrappedTextIndentLength","LineBreakData","breakOffsets","breakOffsetsVisibleColumn","injectionOffsets","injectionOptions","getOutputPositionOfOffsetInUnwrappedLine","offsetInUnwrappedLine","getInjectedTextAtOffset","injectedTextIndex","outputPositionToOffsetInUnwrappedLine","totalInjectedTextLengthBefore","injectedTextStartOffsetInUnwrappedLine","injectedTextEndOffsetInUnwrappedLine","_viewLineDataBrand","_viewModelDecorationBrand","OverviewRulerDecorationsGroup","lineWithoutLF","lineWithoutLFLength","includeLF","computeNewStateForEmbeddedMode","createHTML","trustedhtml","isWorkspaceFileEdit","newUri","oldUri","isWorkspaceTextEdit","ResourceEdit","ResourceTextEdit","ResourceFileEdit","textEdit","oldResource","newResource","highlightActiveIndentation","_onDidChangeFast","onDidChangeFast","_computeOptionsMemory","_viewLineCount","overrideConfigurations","overrideConfigurationModel","createOverrideConfigurationModel","defaultConfiguration","parseConfigurationModel","workspaceConfiguration","currentConfiguraiton","currentWorkspace","_previousConfiguration","keysSet","affectedKeysTree","doesAffectedKeysTreeContains","previousConfiguration","requestedTree","HIGH_FREQ_COMMANDS","_ignoreSingleModifiers","KeybindingModifierSet","_currentSingleModifier","_currentSingleModifierClearTimeout","_logging","singleModifier","getSingleModifierDispatchParts","_log","isSingleModiferChord","dispatchKeyname","printWhenExplanation","printSourceExplanation","leaveChord","_resolvedKeybindingItemBrand","ElectronAcceleratorLabelProvider","_getElectronAccelerator","_getSingleModifierDispatchPart","toElectronAccelerator","scanCode","immutableKeyCode","binding","_scanCodeToKeyCode","_resolveSimpleUserBinding","QuickHelpNLS","helpQuickAccessActionLabel","quickCommandHelp","quickOutlineByCategoryActionLabel","confirmation","doConfirm","confirmed","checkboxChecked","messageText","confirm","onDidExecuteCommand","_singleModifierDispatch","resolveUserBinding","toData","configurationChangeEvent","sourceConfig","updateConfigurationService","toUpdate","updateValues","textEdits","onDidLayout","_dimension","MarkerDecorationsContribution","_markerDecorationsService","resizeObserver","ResizeObserver","contentRect","middot","monospaceTestChars","onDidChangeScreenReaderOptimized","isScreenReaderOptimized","_pageCoordinatesBrand","_clientCoordinatesBrand","_editorPagePositionBrand","_editorMouseEventBrand","_restrictedRenderingContextBrand","_renderingContextBrand","_horizontalRangeBrand","_floatHorizontalRangeBrand","originalLeft","monospaceAssumptionsAreValid","toSlowRenderedLine","expectedWidth","actualWidth","getAbsoluteOffset","getColumn","Float32Array","readingTarget","getDomPosition","expectedResult","startDomPosition","endDomPosition","_cursorMoveConfigurationBrand","stickyTabStops","autoClosingDelete","autoCloseBeforeSet","_singleCursorStateBrand","cursorConfig","_cursorContextBrand","_cursorStateBrand","_editOperationResultBrand","prevTabStopPosition","prevTabStopVisibleColumn","whitespaceVisibleColumn","targetVisibleColumn","UnknownHitTestResult","ContentHitTestResult","HitTestResult","createFromDOMInfo","isInTopPadding","isInBottomPadding","getTextModelOptions","mightBeForeignElement","mouseCoordinates","spanNodeClientRect","mouseIsOverSpanNode","shadowCaretRangeFromPoint","parent1ClassName","tokenSpan","atomicPosition","getInjectedTextAt","normalizedPosition","normalizePosition","_snapToSoftTabBoundary","elementFromPoint","rect","pixelCursor","charWidthReader","CharWidthReader","getCharWidth","cacheKey","doMouseWheelZoom","onHeightChanged","elementsFromPoint","KeyboardEvent","emitMouseDropCanceled","_debugComposition","replacePrevCharCnt","replaceNextCharCnt","positionDelta","TextAreaSyntethicEvents","_asyncFocusGainWriteScreenReaderContent","lastKeyDown","isArrowKey","revealDeltaColumns","deduceAndroidCompositionInput","hadFocus","refreshFocusState","selectionDirection","dispatchTextAreaEvent","_activeLineNumber","MOUSE_CURSOR_TEXT_CSS_CLASS_NAME","_visibleTextAreaBrand","_setAccessibilityOptions","_modelSelections","getRichTextToCopy","positionOffsetInWord","_getAndroidWordAtPosition","compositionType","ANDROID_WORD_SEPARATORS","goingLeft","goingRight","activeDescendant","_cursorPositionBrand","getLineIndentColumn","leftPositionAtomicSoftTabs","normalizedPos","clipPositionColumn","clipRange","rightPositionAtomicSoftTabs","allowMoveOnEdgeLine","wasOnFirstPosition","wasOnLastPosition","wasAtEdgePosition","_isBlankLine","autoClosingPairsOpen","isAutoClosingPairDelete","getDeleteRange","getPositionAfterDeleteLeft","newLine","lastCutRange","_deleteInsideWordWhitespace","_deleteInsideWordDetermineDeleteRange","leftIndex","_charAtIsWhitespace","rightIndex","touchesWord","createRangeWithPosition","deleteWordAndAdjacentWhitespace","expandedToTheRight","_createWordAtPosition","moveToPrevBlankLine","moveToNextBlankLine","newViewLineNumber","PrevBlankLine","NextBlankLine","_compositionType","shouldPushStackElementBetween","lineAfter","nextChar","potentialStartingBraces","potentialClosingBraces","isBeforeStartingBrace","isBeforeClosingBrace","subPairCandidates","subPairMatch","subAutoClosingPairClose","_findSubAutoClosingPairClose","isSubAutoClosingPairPresent","autoClosingPairClose","getTypingOperation","_getAutoClosingPairClose","isDoingComposition","opType","typedText","previousTypingOperation","typingOperation","isTypingOperation","normalizeOperationType","_getViewModel","_runEditorCommand","runDOMCommand","setCursorStates","getPrimaryCursorState","revealPrimaryCursor","getCursorColumnSelectData","setCursorColumnSelectData","revealTopMostCursor","revealBottomMostCursor","getCursorStates","simpleMove","viewportMove","LineStartCommand","CursorLineStartSelect","LineEndCommand","CursorLineEndSelect","lineNumberArg","columnSelectionCondition","registerColumnSelection","getCursorAutoClosedCharacters","userInputEvents","startComposition","endComposition","ViewUserInputEvents","onMouseDropCanceled","_ttPolicy","_coordinateBrand","MIN_LIMIT","MAX_LIMIT","absoluteLeft","_layoutHorizontalSegmentInPage","firstLineMinLeft","lastLineMinLeft","preferredDimensions","beforeRender","safeInvoke","coordinate","afterRender","_renderLineHighlightOnlyWhenFocus","_focused","_shouldRenderMargin","getScrollable","scrollbarShadowColor","scrollbarSliderBackgroundColor","scrollbarSliderHoverBackgroundColor","scrollbarSliderActiveBackgroundColor","_decorationToRenderBrand","_primaryPosition","_bracketPairGuideOptions","activeCursorPosition","getGuidesByLine","bracketGuides","getBracketGuidesInRangeByLine","highlightActiveBracketPair","bracketPairsHorizontal","EnabledForActive","indentGuides","lineGuides","bracketGuidesInLine","bracketGuidesInLineQueue","indentGuidesInLine","indentLvl","indentGuide","transparentToUndefined","bracketColor","guideColor","guideColorActive","effectiveGuideColor","effectiveGuideColorActive","HorizontalRevealRangeRequest","HorizontalRevealSelectionsRequest","_asyncCheckMonospaceFontAssumptions","_checkMonospaceFontAssumptions","setMaxLineWidth","longestLineNumber","longestWidth","needsMonospaceFontCheck","onMonospaceAssumptionsInvalidated","horizontalRevealRequest","_computeScrollLeftToReveal","boxIsSingleRange","desiredGapAbove","minScrollTop","_rgba8Brand","_minimapCharRendererBrand","foregroundAlpha","backgroundAlpha","force1pxHeight","destAlpha","tokensColorTracker","minimapLayout","minimapHeightIsEditorHeight","minimapCanvasInnerWidth","minimapCanvasInnerHeight","minimapCanvasOuterWidth","minimapCanvasOuterHeight","isSampling","minimapIsSampling","editorHeight","defaultBackgroundColor","_getMinimapBackground","_getMinimapForegroundOpacity","themeColor","sliderNeeded","viewportStartLineNumberVerticalOffset","realLineCount","logicalScrollHeight","maxLinesFitting","partialLine","sliderTopAligned","backgroundA","samplingRatio","minimapLines","oldSamplingState","minimapLineCount","computeContainedMinimapLineCount","halfRatio","oldMinimapLines","oldIndex","oldDeltaLineCount","MAX_EVENT_COUNT","oldMinimapLineNumber","_oldIndex","selectedViewLineNumber","fromLineIndex","modelLineToMinimapLine","toLineIndex","sampledLineNumber","minimapLineStart","minimapLineEnd","changeStartIndex","changeEndIndex","insertedLineCount","_minimapSelections","samplingState","_samplingState","_shouldCheckSampling","_recreateLineSampling","minimapLineRange","modelLineRangeToMinimapLineRange","minimapCtx","wasSampling","decorationLineRangeToMinimapLineRange","modelStartLineNumber","modelEndLineNumber","minimapStartLineNumber","minimapEndLineNumber","initialPosY","_startSliderDragging","initialPosX","initialSliderState","handleMouseMove","getRealLineCount","getMinimapDecorationsInViewport","highlightedLines","ContiguousLineMap","_renderSelectionLineHighlights","_renderDecorationsLineHighlights","_renderSelectionsHighlights","_renderDecorationsHighlights","yy1","yy2","highlightColors","minimapOptions","highlightColor","x1","getXOffsetForPosition","x2","minimumXOffset","prevx","baseCharHeight","renderMinimapLineHeight","innerLinePadding","renderBackground","setBackgroundColor","decorationGroup","decorationGroupData","_colorZoneBrand","_overviewRulerZoneBrand","ruler","setBoxShadow","_isComposingInput","visibleWhitespace","EditorTheme","addViewEventHandler","removeViewEventHandler","overflowWidgetsDomNode","_configPixelRatio","_viewParts","_createTextAreaHandlerHelper","_getEditorClassName","_overflowGuardContainer","_viewZones","_viewCursors","_pointerHandler","_createPointerHandlerHelper","updatePixelRatio","setAriaOptions","cacheInput","cacheOutput","sStartPosition","sEndPosition","validSStartPosition","_validatePositionWithCache","validSEndPosition","_validateViewState","ViewCompositionStartEvent","ViewCompositionEndEvent","_onEvent","onEvent","_viewEventQueue","_isConsumingViewEventQueue","_outgoingEvents","_addOutgoingEvent","_emitOutgoingEvents","isNoOp","ViewModelEventsCollector","viewEvents","outgoingEvent","_emitMany","beginEmitViewEvents","emitViewEvent","endEmitViewEvents","_consumeViewEventQueue","ContentSizeChangedEvent","oldContentWidth","oldContentHeight","_oldContentWidth","_oldContentHeight","contentWidthChanged","contentHeightChanged","FocusChangedEvent","oldHasFocus","ScrollChangedEvent","_oldScrollWidth","_oldScrollLeft","_oldScrollHeight","_oldScrollTop","reachedMaxCursorCount","_selectionsAreEqual","ReadOnlyEditAttemptEvent","_emitCursorRevealRange","revealPrimary","_revealPrimaryCursor","getTopMostViewPosition","getBottomMostViewPosition","emitOutgoingEvent","_executeEdit","getAutoClosedCharacters","newSelections","prevIsSpace","paddingBottom","_paddingTop","_paddingBottom","EditorScrollDimensions","_onDidContentSizeChange","onDidContentSizeChange","_dimensions","oldDimensions","setPadding","_getContentHeight","_computeContentWidth","getModelLineViewLineCount","viewLineCounts","_counts","_validEndIndex","_modelToView","_viewToModel","viewLinesAbove","_invalidate","_ensureValid","domLineBreaksComputerFactory","monospaceLineBreaksComputerFactory","wrappingStrategy","_editorId","_domLineBreaksComputerFactory","_monospaceLineBreaksComputerFactory","previousLineBreaks","injectedTextDecorations","getInjectedTextDecorations","lineBreaksComputer","createLineBreaksComputer","injectedTextQueue","lineInjectedText","addRequest","linesBreaks","equalFontInfo","equalWrappingStrategy","equalWrappingColumn","equalWrappingIndent","onlyWrappingColumnChanged","getLineBreakData","lineBreaksComputerFactory","lineBreaks","lineBreakData","ViewLineInfo","viewLineInfo","modelLineWrappedLineIdx","minViewColumn","maxViewColumn","startViewLine","getViewLineInfo","endViewLine","lastVisibleModelPos","getModelStartPositionOfViewLine","curModelLine","lastVisibleModelPos2","ViewLineInfoGroupedByModelRange","getModelEndPositionOfViewLine","activeViewPosition","modelActivePosition","resultPerViewLine","getViewLineInfosGroupedByModelRanges","modelRangeStartLineNumber","bracketGuidesPerModelLine","getLinesBracketGuides","isWrappedLineContinuation","getMinColumnOfViewLine","outputPosition","_lineBreakData","applyInjectedText","spaces","_getViewLineMinColumn","withInserted","lineStartOffsetInUnwrappedLine","lineEndOffsetInUnwrappedLine","baseViewLineNumber","normalizedOffsetInUnwrappedLine","normalizeOffsetAroundInjections","maxOutputLineIndex","getInjectedText","_spaces","_makeSpaces","_wrappingStrategy","previousLineBreakData","PLAINTEXT_EXTENSION","_eventDispatcher","_updateConfigurationViewLineCount","_updateConfigurationViewLineCountNow","_viewportStartLine","_viewportStartLineTrackedRange","_viewportStartLineDelta","emitSingleViewEvent","setViewLineCount","viewVisibleRange","modelVisibleRanges","_toModelVisibleRanges","modelVisibleRange","updateConfiguration","textModelEvents","lineBreaksOffset","insertedLineBreaks","changedLineBreakData","onModelContentChanged","linesAround","getViewLinesBracketGuides","toInlineDecoration","modelRanges","hasBadChars","useDefaultFontFamily","hasQuotesOrIsList","needsQuotes","_withViewEventsCollector","_executeCursorEdit","setIsDoingComposition","_asMap","prevGroup","prevData","arrPool1","arrPool2","MonospaceLineBreaksComputerFactory","previousBreakingData","createLineBreaks","createLineBreaksFromPreviousLineBreaks","firstLineBreakColumn","prevBreakingOffsets","prevBreakingOffsetsVisibleColumn","computeWrappedTextIndentLength","wrappedLineBreakColumn","breakingOffsets","breakingOffsetsVisibleColumn","breakingOffsetsCount","lastBreakingOffsetVisibleColumn","prevLen","bestDistance","prevBreakOffset","prevBreakOffsetVisibleColumn","breakOffset","breakOffsetVisibleColumn","forcedBreakOffset","forcedBreakOffsetVisibleColumn","prevCharCodeClass","entireLineFits","computeCharWidth","canBreak","hitATabCharacter","prevCharWidth","remainingWidthOfNextLine","charCodeAtForcedBreakOffset","_lineText","tabCharacterWidth","DOMLineBreaksComputerFactory","injectedTextsPerLine","createEmptyLineBreakWithPossiblyInjectedText","requestIdx","overallWidth","additionalIndent","additionalIndentSize","additionalIndentLength","containerDomNode","firstNonWhitespaceIndices","wrappedTextIndentLengths","renderLineContents","allCharOffsets","allVisibleColumns","renderLineContent","lineDomNodes","readLineBreaks","visibleColumns","curInjectedTexts","initialVisibleColumn","wrappingIndentLength","hangingOffset","charOffsets","spans","discoverBreaks","lowRects","highRects","readClientRect","midRects","_onDidCompositionStart","onDidCompositionStart","_onDidCompositionEnd","onDidCompositionEnd","_onMouseDropCanceled","_onDidChangeHiddenAreas","onDidChangeHiddenAreas","_overflowWidgetsDomNode","getVisibleRangesPlusViewportAboveBelow","saveCursorState","restoreCursorState","_startComposition","_endComposition","_triggerCommand","viewUserInputEvents","_editorSimpleInput","_inDiffEditor","_editorColumnSelection","_hasInlayHintsProvider","errorBackground","warningBackground","infoBackground","_cursorPosition","currentCursorPosition","diffReviewInsertIcon","diffReviewRemoveIcon","diffReviewCloseIcon","spacerIcon","spacerCodicon","createEmpty","activeCodeEditor","isDeletion","deletedText","eof","getEndOfLineSequence","acc","Progress","_inlineDiffMargins","inlineDiffMargin","diffInsertIcon","diffRemoveIcon","validateDiffEditorOptions","maxFileSize","diffCodeLens","renderOverviewRuler","diffWordWrap","_modifiedEditor","_onDidContainerSizeChanged","_originalEditor","isInDiffLeftEditorKey","isInDiffRightEditorKey","editorWidgetOptions","changedDiffEditorOptions","beginUpdateDecorationsSoon","revealLineNearTop","revealPositionNearTop","revealLinesNearTop","revealRangeNearTop","revealRangeNearTopIfOutsideViewport","reviewHeight","_getReviewHeight","diffLimit","canSyncModelForDiff","wordWrapOverride1","originalAriaLabel","modifiedAriaLabel","_lineChanges","_originalForeignVZ","_modifiedForeignVZ","getViewRange","originalHasWrapping","modifiedHasWrapping","hasWrapping","originalCoordinatesConverter","modifiedCoordinatesConverter","lastOriginalLineNumber","lastModifiedLineNumber","_getViewLineCount","originalViewLineCount","modifiedViewLineCount","_onSashDragStart","_onSashDrag","_onSashDragEnd","_onSashReset","originalViewModel","modifiedViewModel","_originalModel","_pendingLineChange","_pendingViewZones","_lineBreaksComputer","_finalize","lineBreakIndex","hasCharChanges","renderedLineCount","lastBreakOffset","viewLineContent","extractWrapped","marginDomNode2","marginElement","validateDiffWordWrap","diffDiagonalFillColor","_onDecorationTypeRegistered","_modelProperties","innerMap","_refCount","_removeEditorStyleSheets","_editorStyleSheets","_globalStyleSheet","_getOrCreateGlobalStyleSheet","refCountedStyleSheet","_getOrCreateStyleSheet","unref","beforeInjectedText","beforeInlineData","affectsLetterSpacing","afterInjectedText","afterInlineData","verticalAlign","removeRulesContainingSelector","_checkContextKey","_editorIsOpen","_activeCodeEditor","hasCodeEditor","ariaContainerElement","setActiveCodeEditor","themeDomRegistration","registerEditorContainer","autoDetectHighContrast","setAutoDetectHighContrast","createTextModel","_nextLanguageId","instanceCount","_onDidEncounterLanguage","onDidEncounterLanguage","_encounteredLanguages","_hasWarnedOverlappingTokens","encodedLanguageId","modifierSet","tokenStyle","italicBit","boldBit","underline","underlineBit","foregroundBits","toMultilineTokens2","prevLineNumber","prevStartCharacter","prevEndCharacter","warnOverlappingSemanticTokens","_hash2","reverseEndianness","b0","b1","b2","b3","toLittleEndianBuffer","uint8Arr","wrap","encodeSemanticTokensDto","semanticTokens","encodeSemanticTokensDtoSize","deltas","isSemanticTokens","isSemanticTokensEdits","DocumentSemanticTokensResult","hasDocumentSemanticTokensProvider","getDocumentSemanticTokensProviders","getDocumentSemanticTokens","lastProvider","providers","provideDocumentSemanticTokens","_getDocumentSemanticTokensProviderHighestGroup","DocumentRangeSemanticTokensResult","getDocumentRangeSemanticTokensProviders","getDocumentRangeSemanticTokens","provideDocumentRangeSemanticTokens","releaseDocumentSemanticTokens","computeModelSha1","shaComputer","digest","DisposedModelInfo","initialUndoRedoSnapshot","time","sharesUndoRedoStack","sha1","_disposedModels","_disposedModelsHeapSize","bracketPairColorization","disposedModelData","maxModelsHeapSize","disposedModels","disposedModel","_removeDisposedModel","restoreSnapshot","sha1IsEqual","matchesResource","setElementsValidFlag","_overwriteVersionId","_overwriteInitialUndoRedoSnapshot","getUriComparisonKey","maintainUndoRedoStack","_shouldRestoreUndoStack","_schemaShouldMaintainUndoRedoElements","maxMemory","MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK","getInitialUndoRedoSnapshot","_ensureDisposedModelsHeapSize","_insertDisposedModel","SEMANTIC_HIGHLIGHTING_SETTING_ID","isSemanticColoringEnabled","semanticHighlighting","semanticStyling","deregister","modelSemanticColoring","handleSettingOrThemeChange","_fetchDocumentSemanticTokens","_fetchDocumentSemanticTokensNow","FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY","_currentDocumentResponse","_currentDocumentRequestCancellationTokenSource","_documentProvidersChangeListeners","_setDocumentSemanticTokens","bindDocumentChangeListeners","cancellationTokenSource","isExpectedError","rescheduleIfNeeded","_parsedThemeRuleBrand","_themeTrieElementRuleBrand","_themeTrieElementBrand","getIconsStyleSheet","onDidChangeEmmiter","usedFontIds","formatIconRule","getIcon","fontContribution","getIconFont","getIcons","LIGHT","modelLanguage","_onColorThemeChange","_environment","_autoDetectHighContrast","iconsStyleSheet","_codiconCSS","getCSS","_themeCSS","_allCSS","_globalStyleElement","_styleElements","_colorMapOverride","_updateCSS","_updateActualTheme","_registerShadowDomContainer","_registerRegularEditorContainer","colorMapOverride","_updateThemeOrColorMap","_desiredTheme","forConfigKeys","cachedItems","findSuperstr","deleteSuperstr","_parentChangeListener","_updateParentChangeListener","extraInfo","formatRule","LayoutAnchorMode","layoutAfterAnchorBoundary","ALIGN","layoutBeforeAnchorBoundary","shadowRootHostElement","useFixedPosition","useShadowDOM","attachShadow","SHADOW_ROOT_CSS","anchorAxisAlignment","AVOID","iconStartMarker","iconsRegex","escapeIconsRegex","escapeIcons","stripIconsRegex","stripIcons","preWhitespace","postWhitespace","parseLabelWithIcons","firstIconIndex","doParseLabelWithIcons","iconOffsets","textWithoutIcons","appendChars","iconsOffset","currentIconStart","currentIconValue","currentIconLength","matchesFuzzyIconAware","wordToMatchAgainstWithoutIconsTrimmed","leadingWhitespaceOffset","iconOffset","menuSelectionIcon","menuSubmenuIcon","initializeStyleSheet","submenuIds","MENU_WIDGET_CSS","globalStyleSheet","mouseEvent","cssSelector","replaceDoubleEscapes","windowDimensions","entryBox","entryBoxUpdated","viewBox","calculateSubmenuMenuLayout","shadowRootElement","domForShadowRoot","currentViewDisposable","getViewElement","_findCycle","findCycleSlow","_activeInstantiations","_safeCreateAndCacheServiceInstance","idle","setRowHeight","transformOptimization","NativeDragAndDropData","ListViewAccessibilityProvider","_horizontalScrolling","rowsToDispose","updateItemsInDOM","rangesToUpdate","dragImage","getDynamicHeight","SelectionTrait","setAriaSelected","isMonacoEditor","multipleSelectionDisposables","setAnchor","previouslyFocused","_onPointer","onViewPointer","currentFocus","listInactiveFocusForeground","_ariaLabel","getWidgetRole","keyboardController","mouseController","getWidgetAriaLabel","fromKeyDown","fromKeyUp","focusNth","scrollBottom","isResolved","renderPlaceholder","PagedAccessibilityProvider","fromPagedListOptions","pagedRenderers","separatorBorder","_cachedVisibleSize","cachedVisibleSize","viewMinimumSize","viewMaximumSize","minimumSize","maximumSize","snap","layoutContext","layoutContainer","VerticalViewItem","HorizontalViewItem","State","Sizing","Split","Invisible","Distribute","contentSize","proportions","sashItems","_onDidSashChange","onDidSashChange","_onDidSashReset","_startSnappingEnabled","_endSnappingEnabled","inverseAltBehavior","proportionalLayout","getSashOrthogonalSize","sashContainer","viewContainer","scrollbarVisibility","views","viewDescriptor","sizing","doAddView","saveProportions","sashItem","startSnappingEnabled","updateSashEnablement","endSnappingEnabled","removeProperty","setProperty","skipLayout","previousSize","lowPriorityIndexes","highPriorityIndexes","resize","distributeEmptySpace","layoutViews","resetSashDragState","sashDragState","sizes","snapBefore","snapAfter","minDelta","NEGATIVE_INFINITY","maxDelta","isLastSash","viewItem","upIndexes","downIndexes","minDeltaUp","maxDeltaUp","maxDeltaDown","minDeltaDown","snapBeforeIndex","findFirstSnapIndex","snapAfterIndex","halfSize","limitDelta","newDelta","newSizes","viewItemIndex","newMinDelta","newMaxDelta","resizeIndex","relayout","Busy","flexibleViewItems","flexibleSize","onChangeDisposable","onViewChange","containerDisposable","getViewSize","getSashPosition","sashEventMapper","onStart","onStartDisposable","onSashStart","onSashChange","onEnd","onEndDisposable","onSashEnd","onDidResetDisposable","distributeViewSizes","overloadMinDelta","overloadMaxDelta","upItems","upSizes","downItems","downSizes","snapped","snapView","deltaUp","viewDelta","deltaDown","lowPriorityIndex","emptyDelta","updateScrollableElement","collapsesDown","expandsDown","reverseViews","collapsesUp","expandsUp","snappedBefore","snappedAfter","TreeMouseEventTarget","getColumnSize","TemplateId","renderedTemplates","rendererMap","rowContainer","cellContainers","cellTemplateData","cellContainer","asListVirtualDelegate","_onDidLayout","minimumWidth","maximumWidth","onDidChangeWidthConstraints","headers","splitview","headerRowHeight","columnLayoutDisposable","layoutColumn","diffIdentityProvider","spliceSmart","spliceSimple","identity","toInsertIterable","recurseLevels","diffDepth","lastDiffIds","locationPrefix","recurseSplice","lastStartO","lastStartM","lastHadChildren","currentlyHasChildren","hasTreeNode","treeItemExpandedIcon","treeFilterOnTypeOnIcon","treeFilterOnTypeOffIcon","treeFilterClearIcon","treeItemLoadingIcon","twistieRendered","updateFilterOnTypeTitleAndIcon","onRawKeyDown","onClearClick","asTreeMouseEvent","Unknown","Twistie","Element","getFirstViewElementWithTrait","__forceEvent","that","expandOnDoubleClick","anchorTrait","getAnchorElement","isCollapsible","tnode","wrapIdentityProvider","Infinity","updateElementHeight","hasElement","slowTimeout","childrenElementsIterable","_hasCreatedStyleController","WorkbenchListSelectionNavigation","listSmoothScrolling","mouseWheelScrollSensitivityKey","fastScrollSensitivityKey","treeExpandMode","workbenchListOptionsDisposable","listSelectionNavigation","selectionNavigation","listHasSelectionOrFocus","listDoubleSelection","listMultiSelection","ListResourceNavigator","_styler","TableResourceNavigator","onSelectionFromKeyboard","selectionKeyboardEvent","_open","getSelectedElement","isMiddleClick","revealIfVisible","TreeResourceNavigator","updateStyleOverrides","styler","ownerMap","resourceMap","removedA","removedB","emitEventsForSubmenuChanges","eventDebounceDelay","rebuildMenuSoon","contextKeyListener","startContextKeyListener","fireChangeSoon","_collectContextKeys","toggledExpression","oldIds","_hasMarkerTag","_onDidChangeScreenReaderOptimized","updateContextKey","mapTextToType","findText","getResourceLabel","stackElementCounter","ResourceStackElement","resourceLabel","strResource","groupId","groupOrder","sourceId","sourceOrder","confirmBeforeUndo","resourceLabels","strResources","ResourceReasonPair","externalRemoval","noParallelUniverses","messages","WorkspaceStackElement","removedResources","invalidatedResources","_past","_future","locked","removeResource","setValid","_setElementValidFlag","futureElement","snapshotLength","snapshotIndex","removePastAfter","removeFutureBefore","individualMap","EditStackSnapshot","editStacks","_versionIds","missingEditStack","_dialogService","_editStacks","_uriComparisonKeyComputers","uriComparisonKeyComputer","_pushElement","nextOrder","_print","editStack","hasFutureElements","closestPastElement","getClosestPastElement","ignoreResources","individualArr","splitPastWorkspaceElement","splitFutureWorkspaceElement","hasPastElements","matchedElement","matchedStrResource","resourceOrSource","_findClosestUndoElementWithSource","editStackSnapshot","cleanup","continuation","releaseLocks","_acquireLocks","affectedEditStacks","canSplit","_splitPastWorkspaceElement","WorkspaceVerificationError","checkInvalidatedResources","_tryToSplitAndUndo","createMessage","cannotUndoDueToResources","cannotLockDueToResources","undoConfirmed","_getAffectedEditStacks","verificationError","_checkWorkspaceUndo","_confirmAndExecuteWorkspaceUndo","pastElement","secondPastElement","getSecondClosestPastElement","_isPartOfUndoGroup","cancelId","verificationError1","_invokeWorkspacePrepare","verificationError2","moveBackward","_safeInvokeWithLocks","_continueUndoInGroup","_invokeResourcePrepare","flushAllElements","_findClosestUndoElementInGroup","shouldPromptForConfirmation","_confirmAndContinueUndo","_workspaceUndo","_resourceUndo","getClosestFutureElement","_findClosestRedoElementWithSource","_splitFutureWorkspaceElement","_tryToSplitAndRedo","cannotRedoDueToResources","_checkWorkspaceRedo","_executeWorkspaceRedo","moveForward","_continueRedoInGroup","_findClosestRedoElementInGroup","_workspaceRedo","_resourceRedo","labelWithIconsRegex","renderLabelWithIcons","textStart","textStop","renderIcon","_onDidClick","buttonSecondaryForeground","buttonSecondaryBackground","buttonSecondaryHoverBackground","buttonBorder","eventType","setHoverBackground","hoverBackground","supportIcons","badgeBorder","countFormat","titleFormat","setCount","CSS_DONE","CSS_ACTIVE","CSS_INFINITE","CSS_DISCRETE","workedVal","showDelayedScheduler","bit","totalWork","doDone","delayed","off","IdGenerator","_prefix","_lastId","iconPathToClass","iconClassGenerator","getIconClass","iconPath","iconClass","nextId","NO_KEY_MODS","QuickInputHideReason","ItemActivation","isSelectionAtEnd","setAriaLabel","password","highlights","didEverRender","escapeNewLines","highlight","extraClasses","isTrustedOrOptions","supportThemeIcons","supportHtml","newlineStyle","escapeMarkdownSyntaxTokens","isMarkdownString","setupNativeHover","htmlElement","markdownNotSupportedFallback","hoverDelegate","fadeInAnimation","markdownTooltip","_cancellationTokenSource","resolvedContent","_hoverWidget","oldHoverWidget","hoverOptions","showPointer","hoverPosition","skipFadeInAnimation","showHover","setupCustomHover","hoverPreparation","hoverWidget","hideHover","disposeWidget","disposePreparation","onDidHideHover","triggerShowHover","onMouseOver","targetElements","mouseOverDomEmitter","newTooltip","FastLabelNode","_textContent","marginLeft","customHovers","labelContainer","nameContainer","descriptionContainer","supportHighlights","nameNode","supportDescriptionHighlights","descriptionNodeFactory","strikethrough","setupHover","descriptionTitle","setLabel","descriptionNode","descriptionMatches","previousCustomHover","hoverDisposable","singleLabel","splitMatches","labelStart","labelRange","labelEscapeNewLines","highlightedLabel","keyElements","labelBackground","labelForeground","labelBorder","labelBottomBorder","labelShadow","keybindingLabelShadow","areSame","renderPart","renderUnboundKeybindings","renderUnbound","renderKey","createKeyElement","extraClass","keyElement","intlFileNameCollatorBaseNumeric","collator","Intl","Collator","sensitivity","collatorIsNumeric","resolvedOptions","compareFileNames","compareAnything","lookFor","elementAName","elementBName","prefixCompare","compareByPrefix","elementASuffixMatch","elementBSuffixMatch","elementAPrefixMatch","elementBPrefixMatch","_onChecked","onChecked","toDisposeElement","toDisposeTemplate","checkbox","row1","row2","keybindingContainer","detailContainer","actionBar","labelHighlights","descriptionHighlights","detailHighlights","saneDescription","iconClasses","saneLabel","saneDetail","cssClasses","alwaysVisible","fireButtonTriggered","ListElementDelegate","QuickInputListFocus","inputElements","elementsToIndexes","matchOnDescription","matchOnDetail","matchOnLabel","matchOnMeta","sortByLabel","_onChangedAllVisibleChecked","onChangedAllVisibleChecked","_onChangedCheckedCount","onChangedCheckedCount","_onChangedVisibleCount","onChangedVisibleCount","_onChangedCheckedElements","onChangedCheckedElements","_onButtonTriggered","onButtonTriggered","_onLeave","onLeave","_fireCheckedEvents","elementDisposables","createList","toggleCheckbox","focus1","focus2","allVisibleChecked","whenNoneVisible","fireCheckedEvents","saneMeta","saneAriaLabel","Next","First","Previous","Last","Second","NextPage","PreviousPage","currentSeparator","metaHighlights","alwaysShow","shownElements","normalizedSearchValue","compareEntries","getAllVisibleChecked","allChecked","getCheckedCount","getCheckedElements","elementA","elementB","labelHighlightsA","labelHighlightsB","backButtonIcon","backButton","ui","_busy","_ignoreFocusOut","_buttons","noValidationMessage","noPromptMessage","_severity","buttonsUpdated","onDidTriggerButtonEmitter","onDidHideEmitter","onDisposeEmitter","visibleDisposables","onDidHide","_title","_steps","_totalSteps","totalSteps","_contextKey","busy","ignoreFocusOut","shouldUpdate","_validationMessage","validationMessage","onDidTriggerButton","_lastValidationMessage","_lastSeverity","Other","getTitle","getDescription","description1","description2","busyDelay","progressBar","infinite","leftActionBar","leftButtons","rightActionBar","rightButtons","setContextKey","showMessageDecoration","getSteps","showDecoration","onDidChangeValueEmitter","onWillAcceptEmitter","onDidAcceptEmitter","onDidCustomEmitter","_items","itemsUpdated","_canSelectMany","_canAcceptInBackground","_matchOnDescription","_matchOnDetail","_matchOnLabel","_sortByLabel","_autoFocusOnList","_keepScrollPosition","_itemActivation","NONE","FIRST","_activeItems","activeItemsUpdated","activeItemsToConfirm","onDidChangeActiveEmitter","_selectedItems","selectedItemsUpdated","selectedItemsToConfirm","onDidChangeSelectionEmitter","onDidTriggerItemButtonEmitter","valueSelectionUpdated","_ok","_customButton","filterValue","onDidChangeValue","onWillAccept","onDidAccept","onDidChangeActive","onDidTriggerItemButton","_quickNavigate","quickNavigate","_placeholder","canSelectMany","canAcceptInBackground","autoFocusOnList","keepScrollPosition","itemActivation","activeItems","selectedItems","keyMods","valueSelection","_valueSelection","showCustomButton","_customButtonLabel","_customButtonHover","showOkButton","_hideInput","hideInput","didFilter","trySelectFirst","clearFocus","handleAccept","onDidCustom","focusedItems","setSelectedElements","checkedItems","registerQuickNavigation","inBackground","veto","quickNavKeys","wasTriggerKeyPressed","scrollTopBefore","visibilities","_hideCheckAll","checkBox","visibleCount","customButton","setVisibilities","DEFAULT_ARIA_LABEL","setElements","getVisibleCount","SECOND","LAST","setFocusedElements","setCheckedElements","customLabel","customHover","setComboboxAccessibility","comboboxAccessibility","onShowEmitter","onShow","onHideEmitter","idPrefix","registerKeyModsListeners","titleBar","headerContainer","setAllVisibleChecked","extraContainer","filterContainer","visibleCountContainer","countContainer","okContainer","onDidClick","customButtonContainer","getUI","getActiveDescendant","previousFocusElement","Blur","selectors","isDisplayed","stops","querySelectorAll","picks","onKeyMods","createQuickPick","activeItem","keepScrollPositionBefore","canPickMany","ignoreFocusLost","_activeItem","picked","oldController","didHide","backKeybindingLabel","updateLayout","focusChanged","returnFocus","titleBarOffset","MAX_WIDTH","countBadge","DefaultQuickAccessFilterValue","Quickaccess","defaultProvider","providerA","providerB","IQuickInputService","quickInputService","registry","mapProviderToDescriptor","lastAcceptedPickerValues","visibleQuickAccess","doShowOrPick","pick","getOrInstantiateProvider","visibleDescriptor","preserveValue","picker","adjustValueSelection","newValueCandidateWithoutPrefix","defaultFilterValue","quickNavigateConfiguration","pickPromise","pickResolve","registerPickerListeners","provide","providerForValue","providerDescriptor","getQuickAccessProvider","createController","_quickAccess","resetContextKeys","QuickInputEditorContribution","mapEditorToService","newQuickInputService","activeService","quickAccess","QuickInputEditorWidget","onDidChangeMarkers","hadExpansion","inWords","patx","encounteredLanguageId","adaptTokenize","setColorMapOverride","registerLinkedEditingRangeProvider","providedCodeActionKinds","resolveCodeAction","registerDocumentSemanticTokensProvider","registerDocumentRangeSemanticTokensProvider","registerInlineCompletionsProvider","registerInlayHintsProvider","ExtensionIdentifier","_lower","getRealAndSyntheticDocumentFormattersOrdered","docFormatter","formatter","rangeFormatter","displayName","provideDocumentRangeFormattingEdits","_selectors","getDocumentRangeFormattingEditsUntilResult","workerService","rawEdits","getDocumentFormattingEditsUntilResult","provideDocumentFormattingEdits","getOnTypeFormattingEdits","autoFormatTriggerCharacters","provideOnTypeFormattingEdits","resolverService","setFormatterSelector","ComputeOptionsMemory","stableMinimapLayoutInput","stableFitMaxMinimapScale","stableFitRemainingWidth","EditorComments","insertSpace","ignoreEmptyLines","EditorFontWeight","MINIMUM_VALUE","MAXIMUM_VALUE","SUGGESTION_VALUES","alternativeCommandOptions","above","typicalViewportLineCount","extraLinesBeyondLastLine","desiredRatio","couldUseMemory","minimapSize","minimapWidthMultiplier","fitBecomesFill","maxMinimapScale","effectiveMinimapHeight","configuredMinimapScale","minimapMaxWidth","wordWrapOverride2","_computeMinimapLayout","EditorInlayHints","EditorPadding","filterValidationDecorations","renderValidationDecorations","columnSchema","InlineEditorSuggest","BracketPairColorization","GuideOptions","primitiveSet","showStatusBar","previewMode","showInlineDetails","showUsers","showIssues","SmartSelect","selectLeadingAndTrailingWhitespace","bracketPairGuides","codeLensFontFamily","codeLensFontSize","domReadOnly","foldingHighlight","foldingImportsByDefault","unfoldOnClickAfterEndOfLine","linkedEditing","peekWidgetDefaultFocus","definitionLinkOpensInPeek","renameOnType","renderLineHighlightOnlyWhenFocus","inlayHints","smartSelect","inlineSuggest","unusualLineTerminators","NotSupportedError","EVENT_KEY_CODE_MAP","NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE","scanCodeIntToStr","scanCodeStrToInt","scanCodeLowerCaseStrToInt","IMMUTABLE_CODE_TO_KEY_CODE","IMMUTABLE_KEY_CODE_TO_CODE","mappings","seenKeyCode","seenScanCode","_keyCodeOrd","scanCodeStr","keyCodeStr","eventKeyCode","vkey"],"mappings":"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","file":"static/js/chunk-31bae27d.97259003.js","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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from './dom.js';\nimport { IframeUtils } from './iframe.js';\nimport { StandardMouseEvent } from './mouseEvent.js';\nimport { DisposableStore } from '../common/lifecycle.js';\nimport { isIOS } from '../common/platform.js';\nexport function standardMouseMoveMerger(lastEvent, currentEvent) {\n let ev = new StandardMouseEvent(currentEvent);\n ev.preventDefault();\n return {\n leftButton: ev.leftButton,\n buttons: ev.buttons,\n posx: ev.posx,\n posy: ev.posy\n };\n}\nexport class GlobalMouseMoveMonitor {\n constructor() {\n this._hooks = new DisposableStore();\n this._mouseMoveEventMerger = null;\n this._mouseMoveCallback = null;\n this._onStopCallback = null;\n }\n dispose() {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n stopMonitoring(invokeStopCallback, browserEvent) {\n if (!this.isMonitoring()) {\n // Not monitoring\n return;\n }\n // Unhook\n this._hooks.clear();\n this._mouseMoveEventMerger = null;\n this._mouseMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n if (invokeStopCallback && onStopCallback) {\n onStopCallback(browserEvent);\n }\n }\n isMonitoring() {\n return !!this._mouseMoveEventMerger;\n }\n startMonitoring(initialElement, initialButtons, mouseMoveEventMerger, mouseMoveCallback, onStopCallback) {\n if (this.isMonitoring()) {\n // I am already hooked\n return;\n }\n this._mouseMoveEventMerger = mouseMoveEventMerger;\n this._mouseMoveCallback = mouseMoveCallback;\n this._onStopCallback = onStopCallback;\n const windowChain = IframeUtils.getSameOriginWindowChain();\n const mouseMove = isIOS ? 'pointermove' : 'mousemove'; // Safari sends wrong event, workaround for #122653\n const mouseUp = 'mouseup';\n const listenTo = windowChain.map(element => element.window.document);\n const shadowRoot = dom.getShadowRoot(initialElement);\n if (shadowRoot) {\n listenTo.unshift(shadowRoot);\n }\n for (const element of listenTo) {\n this._hooks.add(dom.addDisposableThrottledListener(element, mouseMove, (data) => {\n if (data.buttons !== initialButtons) {\n // Buttons state has changed in the meantime\n this.stopMonitoring(true);\n return;\n }\n this._mouseMoveCallback(data);\n }, (lastEvent, currentEvent) => this._mouseMoveEventMerger(lastEvent, currentEvent)));\n this._hooks.add(dom.addDisposableListener(element, mouseUp, (e) => this.stopMonitoring(true)));\n }\n if (IframeUtils.hasDifferentOriginAncestor()) {\n let lastSameOriginAncestor = windowChain[windowChain.length - 1];\n // We might miss a mouse up if it happens outside the iframe\n // This one is for Chrome\n this._hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseout', (browserEvent) => {\n let e = new StandardMouseEvent(browserEvent);\n if (e.target.tagName.toLowerCase() === 'html') {\n this.stopMonitoring(true);\n }\n }));\n // This one is for FF\n this._hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseover', (browserEvent) => {\n let e = new StandardMouseEvent(browserEvent);\n if (e.target.tagName.toLowerCase() === 'html') {\n this.stopMonitoring(true);\n }\n }));\n // This one is for IE\n this._hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document.body, 'mouseleave', (browserEvent) => {\n this.stopMonitoring(true);\n }));\n }\n }\n}\n","self[\"MonacoEnvironment\"] = (function (paths) {\n function stripTrailingSlash(str) {\n return str.replace(/\\/$/, '');\n }\n return {\n globalAPI: false,\n getWorkerUrl: function (moduleId, label) {\n var pathPrefix = typeof __webpack_public_path__ === 'string' ? __webpack_public_path__ : \"/\";\n var result = (pathPrefix ? stripTrailingSlash(pathPrefix) + '/' : '') + paths[label];\n if (/^((http:)|(https:)|(file:)|(\\/\\/))/.test(result)) {\n var currentUrl = String(window.location);\n var currentOrigin = currentUrl.substr(0, currentUrl.length - window.location.hash.length - window.location.search.length - window.location.pathname.length);\n if (result.substring(0, currentOrigin.length) !== currentOrigin) {\n if(/^(\\/\\/)/.test(result)) {\n result = window.location.protocol + result\n }\n var js = '/*' + label + '*/importScripts(\"' + result + '\");';\n var blob = new Blob([js], { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n }\n }\n return result;\n }\n };\n })({\n \"editorWorkerService\": \"editor.worker.js\",\n \"json\": \"json.worker.js\"\n});\nrequire(\"../../../../../../monaco-editor/esm/vs/editor/contrib/find/findController.js\");\nmodule.exports = require(\"!!./editor.api.js\");\nrequire(\"../../../../../../monaco-editor/esm/vs/language/json/monaco.contribution.js\");","/*---------------------------------------------------------------------------------------------\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\n/**\n * Common operations that work and make sense both on the model and on the view model.\n */\nexport class CursorColumns {\n static visibleColumnFromColumn(lineContent, column, tabSize) {\n const lineContentLength = lineContent.length;\n const endOffset = column - 1 < lineContentLength ? column - 1 : lineContentLength;\n let result = 0;\n let i = 0;\n while (i < endOffset) {\n const codePoint = strings.getNextCodePoint(lineContent, endOffset, i);\n i += (codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n if (codePoint === 9 /* Tab */) {\n result = CursorColumns.nextRenderTabStop(result, tabSize);\n }\n else {\n let graphemeBreakType = strings.getGraphemeBreakType(codePoint);\n while (i < endOffset) {\n const nextCodePoint = strings.getNextCodePoint(lineContent, endOffset, i);\n const nextGraphemeBreakType = strings.getGraphemeBreakType(nextCodePoint);\n if (strings.breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\n break;\n }\n i += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = nextGraphemeBreakType;\n }\n if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {\n result = result + 2;\n }\n else {\n result = result + 1;\n }\n }\n }\n return result;\n }\n /**\n * Returns an array that maps one based columns to one based visible columns. The entry at position 0 is -1.\n */\n static visibleColumnsByColumns(lineContent, tabSize) {\n const endOffset = lineContent.length;\n let result = new Array();\n result.push(-1);\n let pos = 0;\n let i = 0;\n while (i < endOffset) {\n const codePoint = strings.getNextCodePoint(lineContent, endOffset, i);\n i += (codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n result.push(pos);\n if (codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */) {\n result.push(pos);\n }\n if (codePoint === 9 /* Tab */) {\n pos = CursorColumns.nextRenderTabStop(pos, tabSize);\n }\n else {\n let graphemeBreakType = strings.getGraphemeBreakType(codePoint);\n while (i < endOffset) {\n const nextCodePoint = strings.getNextCodePoint(lineContent, endOffset, i);\n const nextGraphemeBreakType = strings.getGraphemeBreakType(nextCodePoint);\n if (strings.breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\n break;\n }\n i += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n result.push(pos);\n if (codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */) {\n result.push(pos);\n }\n graphemeBreakType = nextGraphemeBreakType;\n }\n if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {\n pos = pos + 2;\n }\n else {\n pos = pos + 1;\n }\n }\n }\n result.push(pos);\n return result;\n }\n static visibleColumnFromColumn2(config, model, position) {\n return this.visibleColumnFromColumn(model.getLineContent(position.lineNumber), position.column, config.tabSize);\n }\n static columnFromVisibleColumn(lineContent, visibleColumn, tabSize) {\n if (visibleColumn <= 0) {\n return 1;\n }\n const lineLength = lineContent.length;\n let beforeVisibleColumn = 0;\n let beforeColumn = 1;\n let i = 0;\n while (i < lineLength) {\n const codePoint = strings.getNextCodePoint(lineContent, lineLength, i);\n i += (codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n let afterVisibleColumn;\n if (codePoint === 9 /* Tab */) {\n afterVisibleColumn = CursorColumns.nextRenderTabStop(beforeVisibleColumn, tabSize);\n }\n else {\n let graphemeBreakType = strings.getGraphemeBreakType(codePoint);\n while (i < lineLength) {\n const nextCodePoint = strings.getNextCodePoint(lineContent, lineLength, i);\n const nextGraphemeBreakType = strings.getGraphemeBreakType(nextCodePoint);\n if (strings.breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\n break;\n }\n i += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = nextGraphemeBreakType;\n }\n if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {\n afterVisibleColumn = beforeVisibleColumn + 2;\n }\n else {\n afterVisibleColumn = beforeVisibleColumn + 1;\n }\n }\n const afterColumn = i + 1;\n if (afterVisibleColumn >= visibleColumn) {\n const beforeDelta = visibleColumn - beforeVisibleColumn;\n const afterDelta = afterVisibleColumn - visibleColumn;\n if (afterDelta < beforeDelta) {\n return afterColumn;\n }\n else {\n return beforeColumn;\n }\n }\n beforeVisibleColumn = afterVisibleColumn;\n beforeColumn = afterColumn;\n }\n // walked the entire string\n return lineLength + 1;\n }\n static columnFromVisibleColumn2(config, model, lineNumber, visibleColumn) {\n let result = this.columnFromVisibleColumn(model.getLineContent(lineNumber), visibleColumn, config.tabSize);\n let minColumn = model.getLineMinColumn(lineNumber);\n if (result < minColumn) {\n return minColumn;\n }\n let maxColumn = model.getLineMaxColumn(lineNumber);\n if (result > maxColumn) {\n return maxColumn;\n }\n return result;\n }\n /**\n * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\n */\n static nextRenderTabStop(visibleColumn, tabSize) {\n return visibleColumn + tabSize - visibleColumn % tabSize;\n }\n /**\n * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\n */\n static nextIndentTabStop(visibleColumn, indentSize) {\n return visibleColumn + indentSize - visibleColumn % indentSize;\n }\n /**\n * ATTENTION: This works with 0-based columns (as opposed to the regular 1-based columns)\n */\n static prevRenderTabStop(column, tabSize) {\n return Math.max(0, column - 1 - (column - 1) % tabSize);\n }\n /**\n * ATTENTION: This works with 0-based columns (as opposed to the regular 1-based columns)\n */\n static prevIndentTabStop(column, indentSize) {\n return Math.max(0, column - 1 - (column - 1) % indentSize);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ThrottledDelayer } from '../../../common/async.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { isUndefinedOrNull } from '../../../common/types.js';\nvar StorageState;\n(function (StorageState) {\n StorageState[StorageState[\"None\"] = 0] = \"None\";\n StorageState[StorageState[\"Initialized\"] = 1] = \"Initialized\";\n StorageState[StorageState[\"Closed\"] = 2] = \"Closed\";\n})(StorageState || (StorageState = {}));\nexport class Storage extends Disposable {\n constructor(database, options = Object.create(null)) {\n super();\n this.database = database;\n this.options = options;\n this._onDidChangeStorage = this._register(new Emitter());\n this.onDidChangeStorage = this._onDidChangeStorage.event;\n this.state = StorageState.None;\n this.cache = new Map();\n this.flushDelayer = new ThrottledDelayer(Storage.DEFAULT_FLUSH_DELAY);\n this.pendingDeletes = new Set();\n this.pendingInserts = new Map();\n this.whenFlushedCallbacks = [];\n this.registerListeners();\n }\n registerListeners() {\n this._register(this.database.onDidChangeItemsExternal(e => this.onDidChangeItemsExternal(e)));\n }\n onDidChangeItemsExternal(e) {\n var _a, _b;\n // items that change external require us to update our\n // caches with the values. we just accept the value and\n // emit an event if there is a change.\n (_a = e.changed) === null || _a === void 0 ? void 0 : _a.forEach((value, key) => this.accept(key, value));\n (_b = e.deleted) === null || _b === void 0 ? void 0 : _b.forEach(key => this.accept(key, undefined));\n }\n accept(key, value) {\n if (this.state === StorageState.Closed) {\n return; // Return early if we are already closed\n }\n let changed = false;\n // Item got removed, check for deletion\n if (isUndefinedOrNull(value)) {\n changed = this.cache.delete(key);\n }\n // Item got updated, check for change\n else {\n const currentValue = this.cache.get(key);\n if (currentValue !== value) {\n this.cache.set(key, value);\n changed = true;\n }\n }\n // Signal to outside listeners\n if (changed) {\n this._onDidChangeStorage.fire(key);\n }\n }\n get(key, fallbackValue) {\n const value = this.cache.get(key);\n if (isUndefinedOrNull(value)) {\n return fallbackValue;\n }\n return value;\n }\n getBoolean(key, fallbackValue) {\n const value = this.get(key);\n if (isUndefinedOrNull(value)) {\n return fallbackValue;\n }\n return value === 'true';\n }\n getNumber(key, fallbackValue) {\n const value = this.get(key);\n if (isUndefinedOrNull(value)) {\n return fallbackValue;\n }\n return parseInt(value, 10);\n }\n set(key, value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state === StorageState.Closed) {\n return; // Return early if we are already closed\n }\n // We remove the key for undefined/null values\n if (isUndefinedOrNull(value)) {\n return this.delete(key);\n }\n // Otherwise, convert to String and store\n const valueStr = String(value);\n // Return early if value already set\n const currentValue = this.cache.get(key);\n if (currentValue === valueStr) {\n return;\n }\n // Update in cache and pending\n this.cache.set(key, valueStr);\n this.pendingInserts.set(key, valueStr);\n this.pendingDeletes.delete(key);\n // Event\n this._onDidChangeStorage.fire(key);\n // Accumulate work by scheduling after timeout\n return this.flushDelayer.trigger(() => this.flushPending());\n });\n }\n delete(key) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state === StorageState.Closed) {\n return; // Return early if we are already closed\n }\n // Remove from cache and add to pending\n const wasDeleted = this.cache.delete(key);\n if (!wasDeleted) {\n return; // Return early if value already deleted\n }\n if (!this.pendingDeletes.has(key)) {\n this.pendingDeletes.add(key);\n }\n this.pendingInserts.delete(key);\n // Event\n this._onDidChangeStorage.fire(key);\n // Accumulate work by scheduling after timeout\n return this.flushDelayer.trigger(() => this.flushPending());\n });\n }\n get hasPending() {\n return this.pendingInserts.size > 0 || this.pendingDeletes.size > 0;\n }\n flushPending() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.hasPending) {\n return; // return early if nothing to do\n }\n // Get pending data\n const updateRequest = { insert: this.pendingInserts, delete: this.pendingDeletes };\n // Reset pending data for next run\n this.pendingDeletes = new Set();\n this.pendingInserts = new Map();\n // Update in storage and release any\n // waiters we have once done\n return this.database.updateItems(updateRequest).finally(() => {\n var _a;\n if (!this.hasPending) {\n while (this.whenFlushedCallbacks.length) {\n (_a = this.whenFlushedCallbacks.pop()) === null || _a === void 0 ? void 0 : _a();\n }\n }\n });\n });\n }\n dispose() {\n this.flushDelayer.dispose();\n super.dispose();\n }\n}\nStorage.DEFAULT_FLUSH_DELAY = 100;\nexport class InMemoryStorageDatabase {\n constructor() {\n this.onDidChangeItemsExternal = Event.None;\n this.items = new Map();\n }\n updateItems(request) {\n return __awaiter(this, void 0, void 0, function* () {\n if (request.insert) {\n request.insert.forEach((value, key) => this.items.set(key, value));\n }\n if (request.delete) {\n request.delete.forEach(key => this.items.delete(key));\n }\n });\n }\n}\n","import { Emitter, PauseableEmitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { isUndefinedOrNull } from '../../../base/common/types.js';\nimport { InMemoryStorageDatabase, Storage } from '../../../base/parts/storage/common/storage.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nconst TARGET_KEY = '__$__targetStorageMarker';\nexport const IStorageService = createDecorator('storageService');\nexport var WillSaveStateReason;\n(function (WillSaveStateReason) {\n /**\n * No specific reason to save state.\n */\n WillSaveStateReason[WillSaveStateReason[\"NONE\"] = 0] = \"NONE\";\n /**\n * A hint that the workbench is about to shutdown.\n */\n WillSaveStateReason[WillSaveStateReason[\"SHUTDOWN\"] = 1] = \"SHUTDOWN\";\n})(WillSaveStateReason || (WillSaveStateReason = {}));\nexport class AbstractStorageService extends Disposable {\n constructor(options = { flushInterval: AbstractStorageService.DEFAULT_FLUSH_INTERVAL }) {\n super();\n this.options = options;\n this._onDidChangeValue = this._register(new PauseableEmitter());\n this._onDidChangeTarget = this._register(new PauseableEmitter());\n this._onWillSaveState = this._register(new Emitter());\n this.onWillSaveState = this._onWillSaveState.event;\n this._workspaceKeyTargets = undefined;\n this._globalKeyTargets = undefined;\n }\n emitDidChangeValue(scope, key) {\n // Specially handle `TARGET_KEY`\n if (key === TARGET_KEY) {\n // Clear our cached version which is now out of date\n if (scope === 0 /* GLOBAL */) {\n this._globalKeyTargets = undefined;\n }\n else if (scope === 1 /* WORKSPACE */) {\n this._workspaceKeyTargets = undefined;\n }\n // Emit as `didChangeTarget` event\n this._onDidChangeTarget.fire({ scope });\n }\n // Emit any other key to outside\n else {\n this._onDidChangeValue.fire({ scope, key, target: this.getKeyTargets(scope)[key] });\n }\n }\n get(key, scope, fallbackValue) {\n var _a;\n return (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.get(key, fallbackValue);\n }\n getBoolean(key, scope, fallbackValue) {\n var _a;\n return (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.getBoolean(key, fallbackValue);\n }\n getNumber(key, scope, fallbackValue) {\n var _a;\n return (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.getNumber(key, fallbackValue);\n }\n store(key, value, scope, target) {\n // We remove the key for undefined/null values\n if (isUndefinedOrNull(value)) {\n this.remove(key, scope);\n return;\n }\n // Update our datastructures but send events only after\n this.withPausedEmitters(() => {\n var _a;\n // Update key-target map\n this.updateKeyTarget(key, scope, target);\n // Store actual value\n (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.set(key, value);\n });\n }\n remove(key, scope) {\n // Update our datastructures but send events only after\n this.withPausedEmitters(() => {\n var _a;\n // Update key-target map\n this.updateKeyTarget(key, scope, undefined);\n // Remove actual key\n (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.delete(key);\n });\n }\n withPausedEmitters(fn) {\n // Pause emitters\n this._onDidChangeValue.pause();\n this._onDidChangeTarget.pause();\n try {\n fn();\n }\n finally {\n // Resume emitters\n this._onDidChangeValue.resume();\n this._onDidChangeTarget.resume();\n }\n }\n updateKeyTarget(key, scope, target) {\n var _a, _b;\n // Add\n const keyTargets = this.getKeyTargets(scope);\n if (typeof target === 'number') {\n if (keyTargets[key] !== target) {\n keyTargets[key] = target;\n (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.set(TARGET_KEY, JSON.stringify(keyTargets));\n }\n }\n // Remove\n else {\n if (typeof keyTargets[key] === 'number') {\n delete keyTargets[key];\n (_b = this.getStorage(scope)) === null || _b === void 0 ? void 0 : _b.set(TARGET_KEY, JSON.stringify(keyTargets));\n }\n }\n }\n get workspaceKeyTargets() {\n if (!this._workspaceKeyTargets) {\n this._workspaceKeyTargets = this.loadKeyTargets(1 /* WORKSPACE */);\n }\n return this._workspaceKeyTargets;\n }\n get globalKeyTargets() {\n if (!this._globalKeyTargets) {\n this._globalKeyTargets = this.loadKeyTargets(0 /* GLOBAL */);\n }\n return this._globalKeyTargets;\n }\n getKeyTargets(scope) {\n return scope === 0 /* GLOBAL */ ? this.globalKeyTargets : this.workspaceKeyTargets;\n }\n loadKeyTargets(scope) {\n const keysRaw = this.get(TARGET_KEY, scope);\n if (keysRaw) {\n try {\n return JSON.parse(keysRaw);\n }\n catch (error) {\n // Fail gracefully\n }\n }\n return Object.create(null);\n }\n}\nAbstractStorageService.DEFAULT_FLUSH_INTERVAL = 60 * 1000; // every minute\nexport class InMemoryStorageService extends AbstractStorageService {\n constructor() {\n super();\n this.globalStorage = this._register(new Storage(new InMemoryStorageDatabase()));\n this.workspaceStorage = this._register(new Storage(new InMemoryStorageDatabase()));\n this._register(this.workspaceStorage.onDidChangeStorage(key => this.emitDidChangeValue(1 /* WORKSPACE */, key)));\n this._register(this.globalStorage.onDidChangeStorage(key => this.emitDidChangeValue(0 /* GLOBAL */, key)));\n }\n getStorage(scope) {\n return scope === 0 /* GLOBAL */ ? this.globalStorage : this.workspaceStorage;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function createScopedLineTokens(context, offset) {\n let tokenCount = context.getCount();\n let tokenIndex = context.findTokenIndexAtOffset(offset);\n let desiredLanguageId = context.getLanguageId(tokenIndex);\n let lastTokenIndex = tokenIndex;\n while (lastTokenIndex + 1 < tokenCount && context.getLanguageId(lastTokenIndex + 1) === desiredLanguageId) {\n lastTokenIndex++;\n }\n let firstTokenIndex = tokenIndex;\n while (firstTokenIndex > 0 && context.getLanguageId(firstTokenIndex - 1) === desiredLanguageId) {\n firstTokenIndex--;\n }\n return new ScopedLineTokens(context, desiredLanguageId, firstTokenIndex, lastTokenIndex + 1, context.getStartOffset(firstTokenIndex), context.getEndOffset(lastTokenIndex));\n}\nexport class ScopedLineTokens {\n constructor(actual, languageId, firstTokenIndex, lastTokenIndex, firstCharOffset, lastCharOffset) {\n this._scopedLineTokensBrand = undefined;\n this._actual = actual;\n this.languageId = languageId;\n this._firstTokenIndex = firstTokenIndex;\n this._lastTokenIndex = lastTokenIndex;\n this.firstCharOffset = firstCharOffset;\n this._lastCharOffset = lastCharOffset;\n }\n getLineContent() {\n const actualLineContent = this._actual.getLineContent();\n return actualLineContent.substring(this.firstCharOffset, this._lastCharOffset);\n }\n getActualLineContentBefore(offset) {\n const actualLineContent = this._actual.getLineContent();\n return actualLineContent.substring(0, this.firstCharOffset + offset);\n }\n getTokenCount() {\n return this._lastTokenIndex - this._firstTokenIndex;\n }\n findTokenIndexAtOffset(offset) {\n return this._actual.findTokenIndexAtOffset(offset + this.firstCharOffset) - this._firstTokenIndex;\n }\n getStandardTokenType(tokenIndex) {\n return this._actual.getStandardTokenType(tokenIndex + this._firstTokenIndex);\n }\n}\nexport function ignoreBracketsInToken(standardTokenType) {\n return (standardTokenType & 7 /* value */) !== 0;\n}\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar LANGUAGE_DEFAULT = 'en';\r\nvar _isWindows = false;\r\nvar _isMacintosh = false;\r\nvar _isLinux = false;\r\nvar _isNative = false;\r\nvar _isWeb = false;\r\nvar _isIOS = false;\r\nvar _locale = undefined;\r\nvar _language = LANGUAGE_DEFAULT;\r\nvar _translationsConfigFile = undefined;\r\nvar _userAgent = undefined;\r\nvar isElectronRenderer = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions.electron !== 'undefined' && process.type === 'renderer');\r\n// OS detection\r\nif (typeof navigator === 'object' && !isElectronRenderer) {\r\n _userAgent = navigator.userAgent;\r\n _isWindows = _userAgent.indexOf('Windows') >= 0;\r\n _isMacintosh = _userAgent.indexOf('Macintosh') >= 0;\r\n _isIOS = _userAgent.indexOf('Macintosh') >= 0 && !!navigator.maxTouchPoints && navigator.maxTouchPoints > 0;\r\n _isLinux = _userAgent.indexOf('Linux') >= 0;\r\n _isWeb = true;\r\n _locale = navigator.language;\r\n _language = _locale;\r\n}\r\nelse if (typeof process === 'object') {\r\n _isWindows = (process.platform === 'win32');\r\n _isMacintosh = (process.platform === 'darwin');\r\n _isLinux = (process.platform === 'linux');\r\n _locale = LANGUAGE_DEFAULT;\r\n _language = LANGUAGE_DEFAULT;\r\n var rawNlsConfig = process.env['VSCODE_NLS_CONFIG'];\r\n if (rawNlsConfig) {\r\n try {\r\n var nlsConfig = JSON.parse(rawNlsConfig);\r\n var resolved = nlsConfig.availableLanguages['*'];\r\n _locale = nlsConfig.locale;\r\n // VSCode's default language is 'en'\r\n _language = resolved ? resolved : LANGUAGE_DEFAULT;\r\n _translationsConfigFile = nlsConfig._translationsConfigFile;\r\n }\r\n catch (e) {\r\n }\r\n }\r\n _isNative = true;\r\n}\r\nvar _platform = 0 /* Web */;\r\nif (_isMacintosh) {\r\n _platform = 1 /* Mac */;\r\n}\r\nelse if (_isWindows) {\r\n _platform = 3 /* Windows */;\r\n}\r\nelse if (_isLinux) {\r\n _platform = 2 /* Linux */;\r\n}\r\nexport var isWindows = _isWindows;\r\nexport var isMacintosh = _isMacintosh;\r\nexport var isLinux = _isLinux;\r\nexport var isNative = _isNative;\r\nexport var isWeb = _isWeb;\r\nexport var isIOS = _isIOS;\r\nvar _globals = (typeof self === 'object' ? self : typeof global === 'object' ? global : {});\r\nexport var globals = _globals;\r\nexport var setImmediate = (function defineSetImmediate() {\r\n if (globals.setImmediate) {\r\n return globals.setImmediate.bind(globals);\r\n }\r\n if (typeof globals.postMessage === 'function' && !globals.importScripts) {\r\n var pending_1 = [];\r\n globals.addEventListener('message', function (e) {\r\n if (e.data && e.data.vscodeSetImmediateId) {\r\n for (var i = 0, len = pending_1.length; i < len; i++) {\r\n var candidate = pending_1[i];\r\n if (candidate.id === e.data.vscodeSetImmediateId) {\r\n pending_1.splice(i, 1);\r\n candidate.callback();\r\n return;\r\n }\r\n }\r\n }\r\n });\r\n var lastId_1 = 0;\r\n return function (callback) {\r\n var myId = ++lastId_1;\r\n pending_1.push({\r\n id: myId,\r\n callback: callback\r\n });\r\n globals.postMessage({ vscodeSetImmediateId: myId }, '*');\r\n };\r\n }\r\n if (typeof process !== 'undefined' && typeof process.nextTick === 'function') {\r\n return process.nextTick.bind(process);\r\n }\r\n var _promise = Promise.resolve();\r\n return function (callback) { return _promise.then(callback); };\r\n})();\r\nexport var OS = (_isMacintosh ? 2 /* Macintosh */ : (_isWindows ? 1 /* Windows */ : 3 /* Linux */));\r\n","import { Emitter } from '../../../base/common/event.js';\nimport * as types from '../../../base/common/types.js';\nimport * as nls from '../../../nls.js';\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\nimport { Registry } from '../../registry/common/platform.js';\nexport const Extensions = {\n Configuration: 'base.contributions.configuration'\n};\nexport const allSettings = { properties: {}, patternProperties: {} };\nexport const applicationSettings = { properties: {}, patternProperties: {} };\nexport const machineSettings = { properties: {}, patternProperties: {} };\nexport const machineOverridableSettings = { properties: {}, patternProperties: {} };\nexport const windowSettings = { properties: {}, patternProperties: {} };\nexport const resourceSettings = { properties: {}, patternProperties: {} };\nexport const resourceLanguageSettingsSchemaId = 'vscode://schemas/settings/resourceLanguage';\nconst contributionRegistry = Registry.as(JSONExtensions.JSONContribution);\nclass ConfigurationRegistry {\n constructor() {\n this.overrideIdentifiers = new Set();\n this._onDidSchemaChange = new Emitter();\n this._onDidUpdateConfiguration = new Emitter();\n this.defaultValues = {};\n this.defaultLanguageConfigurationOverridesNode = {\n id: 'defaultOverrides',\n title: nls.localize('defaultLanguageConfigurationOverrides.title', \"Default Language Configuration Overrides\"),\n properties: {}\n };\n this.configurationContributors = [this.defaultLanguageConfigurationOverridesNode];\n this.resourceLanguageSettingsSchema = { properties: {}, patternProperties: {}, additionalProperties: false, errorMessage: 'Unknown editor configuration setting', allowTrailingCommas: true, allowComments: true };\n this.configurationProperties = {};\n this.excludedConfigurationProperties = {};\n contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);\n }\n registerConfiguration(configuration, validate = true) {\n this.registerConfigurations([configuration], validate);\n }\n registerConfigurations(configurations, validate = true) {\n const properties = this.doRegisterConfigurations(configurations, validate);\n contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);\n this._onDidSchemaChange.fire();\n this._onDidUpdateConfiguration.fire(properties);\n }\n registerOverrideIdentifiers(overrideIdentifiers) {\n for (const overrideIdentifier of overrideIdentifiers) {\n this.overrideIdentifiers.add(overrideIdentifier);\n }\n this.updateOverridePropertyPatternKey();\n }\n doRegisterConfigurations(configurations, validate) {\n const properties = [];\n configurations.forEach(configuration => {\n properties.push(...this.validateAndRegisterProperties(configuration, validate, configuration.extensionInfo)); // fills in defaults\n this.configurationContributors.push(configuration);\n this.registerJSONConfiguration(configuration);\n });\n return properties;\n }\n validateAndRegisterProperties(configuration, validate = true, extensionInfo, scope = 3 /* WINDOW */) {\n var _a;\n scope = types.isUndefinedOrNull(configuration.scope) ? scope : configuration.scope;\n let propertyKeys = [];\n let properties = configuration.properties;\n if (properties) {\n for (let key in properties) {\n if (validate && validateProperty(key)) {\n delete properties[key];\n continue;\n }\n const property = properties[key];\n // update default value\n this.updatePropertyDefaultValue(key, property);\n // update scope\n if (OVERRIDE_PROPERTY_PATTERN.test(key)) {\n property.scope = undefined; // No scope for overridable properties `[${identifier}]`\n }\n else {\n property.scope = types.isUndefinedOrNull(property.scope) ? scope : property.scope;\n property.restricted = types.isUndefinedOrNull(property.restricted) ? !!((_a = extensionInfo === null || extensionInfo === void 0 ? void 0 : extensionInfo.restrictedConfigurations) === null || _a === void 0 ? void 0 : _a.includes(key)) : property.restricted;\n }\n // Add to properties maps\n // Property is included by default if 'included' is unspecified\n if (properties[key].hasOwnProperty('included') && !properties[key].included) {\n this.excludedConfigurationProperties[key] = properties[key];\n delete properties[key];\n continue;\n }\n else {\n this.configurationProperties[key] = properties[key];\n }\n if (!properties[key].deprecationMessage && properties[key].markdownDeprecationMessage) {\n // If not set, default deprecationMessage to the markdown source\n properties[key].deprecationMessage = properties[key].markdownDeprecationMessage;\n }\n propertyKeys.push(key);\n }\n }\n let subNodes = configuration.allOf;\n if (subNodes) {\n for (let node of subNodes) {\n propertyKeys.push(...this.validateAndRegisterProperties(node, validate, extensionInfo, scope));\n }\n }\n return propertyKeys;\n }\n getConfigurationProperties() {\n return this.configurationProperties;\n }\n registerJSONConfiguration(configuration) {\n const register = (configuration) => {\n let properties = configuration.properties;\n if (properties) {\n for (const key in properties) {\n this.updateSchema(key, properties[key]);\n }\n }\n let subNodes = configuration.allOf;\n if (subNodes) {\n subNodes.forEach(register);\n }\n };\n register(configuration);\n }\n updateSchema(key, property) {\n allSettings.properties[key] = property;\n switch (property.scope) {\n case 1 /* APPLICATION */:\n applicationSettings.properties[key] = property;\n break;\n case 2 /* MACHINE */:\n machineSettings.properties[key] = property;\n break;\n case 6 /* MACHINE_OVERRIDABLE */:\n machineOverridableSettings.properties[key] = property;\n break;\n case 3 /* WINDOW */:\n windowSettings.properties[key] = property;\n break;\n case 4 /* RESOURCE */:\n resourceSettings.properties[key] = property;\n break;\n case 5 /* LANGUAGE_OVERRIDABLE */:\n resourceSettings.properties[key] = property;\n this.resourceLanguageSettingsSchema.properties[key] = property;\n break;\n }\n }\n updateOverridePropertyPatternKey() {\n for (const overrideIdentifier of this.overrideIdentifiers.values()) {\n const overrideIdentifierProperty = `[${overrideIdentifier}]`;\n const resourceLanguagePropertiesSchema = {\n type: 'object',\n description: nls.localize('overrideSettings.defaultDescription', \"Configure editor settings to be overridden for a language.\"),\n errorMessage: nls.localize('overrideSettings.errorMessage', \"This setting does not support per-language configuration.\"),\n $ref: resourceLanguageSettingsSchemaId,\n };\n this.updatePropertyDefaultValue(overrideIdentifierProperty, resourceLanguagePropertiesSchema);\n allSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n applicationSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n machineSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n machineOverridableSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n windowSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n resourceSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n }\n this._onDidSchemaChange.fire();\n }\n updatePropertyDefaultValue(key, property) {\n let defaultValue = this.defaultValues[key];\n if (types.isUndefined(defaultValue)) {\n defaultValue = property.default;\n }\n if (types.isUndefined(defaultValue)) {\n defaultValue = getDefaultValue(property.type);\n }\n property.default = defaultValue;\n }\n}\nconst OVERRIDE_PROPERTY = '\\\\[.*\\\\]$';\nexport const OVERRIDE_PROPERTY_PATTERN = new RegExp(OVERRIDE_PROPERTY);\nexport function overrideIdentifierFromKey(key) {\n return key.substring(1, key.length - 1);\n}\nexport function getDefaultValue(type) {\n const t = Array.isArray(type) ? type[0] : type;\n switch (t) {\n case 'boolean':\n return false;\n case 'integer':\n case 'number':\n return 0;\n case 'string':\n return '';\n case 'array':\n return [];\n case 'object':\n return {};\n default:\n return null;\n }\n}\nconst configurationRegistry = new ConfigurationRegistry();\nRegistry.add(Extensions.Configuration, configurationRegistry);\nexport function validateProperty(property) {\n if (!property.trim()) {\n return nls.localize('config.property.empty', \"Cannot register an empty property\");\n }\n if (OVERRIDE_PROPERTY_PATTERN.test(property)) {\n return nls.localize('config.property.languageDefault', \"Cannot register '{0}'. This matches property pattern '\\\\\\\\[.*\\\\\\\\]$' for describing language specific editor settings. Use 'configurationDefaults' contribution.\", property);\n }\n if (configurationRegistry.getConfigurationProperties()[property] !== undefined) {\n return nls.localize('config.property.duplicate', \"Cannot register '{0}'. This property is already registered.\", property);\n }\n return null;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function toUint8(v) {\n if (v < 0) {\n return 0;\n }\n if (v > 255 /* MAX_UINT_8 */) {\n return 255 /* MAX_UINT_8 */;\n }\n return v | 0;\n}\nexport function toUint32(v) {\n if (v < 0) {\n return 0;\n }\n if (v > 4294967295 /* MAX_UINT_32 */) {\n return 4294967295 /* MAX_UINT_32 */;\n }\n return v | 0;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// ------ internal util\nexport var _util;\n(function (_util) {\n _util.serviceIds = new Map();\n _util.DI_TARGET = '$di$target';\n _util.DI_DEPENDENCIES = '$di$dependencies';\n function getServiceDependencies(ctor) {\n return ctor[_util.DI_DEPENDENCIES] || [];\n }\n _util.getServiceDependencies = getServiceDependencies;\n})(_util || (_util = {}));\nexport const IInstantiationService = createDecorator('instantiationService');\nfunction storeServiceDependency(id, target, index, optional) {\n if (target[_util.DI_TARGET] === target) {\n target[_util.DI_DEPENDENCIES].push({ id, index, optional });\n }\n else {\n target[_util.DI_DEPENDENCIES] = [{ id, index, optional }];\n target[_util.DI_TARGET] = target;\n }\n}\n/**\n * The *only* valid way to create a {{ServiceIdentifier}}.\n */\nexport function createDecorator(serviceId) {\n if (_util.serviceIds.has(serviceId)) {\n return _util.serviceIds.get(serviceId);\n }\n const id = function (target, key, index) {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n storeServiceDependency(id, target, index, false);\n };\n id.toString = () => serviceId;\n _util.serviceIds.set(serviceId, id);\n return id;\n}\n/**\n * Mark a service dependency as optional.\n * @deprecated Avoid, see https://github.com/microsoft/vscode/issues/119440\n */\nexport function optional(serviceIdentifier) {\n return function (target, key, index) {\n if (arguments.length !== 3) {\n throw new Error('@optional-decorator can only be used to decorate a parameter');\n }\n storeServiceDependency(serviceIdentifier, target, index, true);\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport * as platform from '../common/platform.js';\n/**\n * Browser feature we can support in current platform, browser and environment.\n */\nexport const BrowserFeatures = {\n clipboard: {\n writeText: (platform.isNative\n || (document.queryCommandSupported && document.queryCommandSupported('copy'))\n || !!(navigator && navigator.clipboard && navigator.clipboard.writeText)),\n readText: (platform.isNative\n || !!(navigator && navigator.clipboard && navigator.clipboard.readText))\n },\n keyboard: (() => {\n if (platform.isNative || browser.isStandalone) {\n return 0 /* Always */;\n }\n if (navigator.keyboard || browser.isSafari) {\n return 1 /* FullScreen */;\n }\n return 2 /* None */;\n })(),\n // 'ontouchstart' in window always evaluates to true with typescript's modern typings. This causes `window` to be\n // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast\n touch: 'ontouchstart' in window || navigator.maxTouchPoints > 0,\n pointerEvents: window.PointerEvent && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0 || navigator.maxTouchPoints > 0)\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport * from '../../../editor/editor.api.js';\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function once(fn) {\n const _this = this;\n let didCall = false;\n let result;\n return function () {\n if (didCall) {\n return result;\n }\n didCall = true;\n result = fn.apply(_this, arguments);\n return result;\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../common/event.js';\nclass WindowManager {\n constructor() {\n // --- Zoom Level\n this._zoomLevel = 0;\n this._lastZoomLevelChangeTime = 0;\n this._onDidChangeZoomLevel = new Emitter();\n this.onDidChangeZoomLevel = this._onDidChangeZoomLevel.event;\n // --- Zoom Factor\n this._zoomFactor = 1;\n }\n getZoomLevel() {\n return this._zoomLevel;\n }\n getTimeSinceLastZoomLevelChanged() {\n return Date.now() - this._lastZoomLevelChangeTime;\n }\n getZoomFactor() {\n return this._zoomFactor;\n }\n // --- Pixel Ratio\n getPixelRatio() {\n let ctx = document.createElement('canvas').getContext('2d');\n let dpr = window.devicePixelRatio || 1;\n let bsr = ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio || 1;\n return dpr / bsr;\n }\n}\nWindowManager.INSTANCE = new WindowManager();\nexport function getZoomLevel() {\n return WindowManager.INSTANCE.getZoomLevel();\n}\n/** Returns the time (in ms) since the zoom level was changed */\nexport function getTimeSinceLastZoomLevelChanged() {\n return WindowManager.INSTANCE.getTimeSinceLastZoomLevelChanged();\n}\nexport function onDidChangeZoomLevel(callback) {\n return WindowManager.INSTANCE.onDidChangeZoomLevel(callback);\n}\n/** The zoom scale for an index, e.g. 1, 1.2, 1.4 */\nexport function getZoomFactor() {\n return WindowManager.INSTANCE.getZoomFactor();\n}\nexport function getPixelRatio() {\n return WindowManager.INSTANCE.getPixelRatio();\n}\nconst userAgent = navigator.userAgent;\nexport const isFirefox = (userAgent.indexOf('Firefox') >= 0);\nexport const isWebKit = (userAgent.indexOf('AppleWebKit') >= 0);\nexport const isChrome = (userAgent.indexOf('Chrome') >= 0);\nexport const isSafari = (!isChrome && (userAgent.indexOf('Safari') >= 0));\nexport const isWebkitWebView = (!isChrome && !isSafari && isWebKit);\nexport const isAndroid = (userAgent.indexOf('Android') >= 0);\nexport const isStandalone = (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../../base/common/strings.js';\nimport * as stringBuilder from '../../core/stringBuilder.js';\nimport { Range } from '../../core/range.js';\n/**\n * Represents a grouping of colliding bracket pairs.\n *\n * Most of the times this contains a single bracket pair,\n * but sometimes this contains multiple bracket pairs in cases\n * where the same string appears as a closing bracket for multiple\n * bracket pairs, or the same string appears an opening bracket for\n * multiple bracket pairs.\n *\n * e.g. of a group containing a single pair:\n * open: ['{'], close: ['}']\n *\n * e.g. of a group containing multiple pairs:\n * open: ['if', 'for'], close: ['end', 'end']\n */\nexport class RichEditBracket {\n constructor(languageId, index, open, close, forwardRegex, reversedRegex) {\n this._richEditBracketBrand = undefined;\n this.languageId = languageId;\n this.index = index;\n this.open = open;\n this.close = close;\n this.forwardRegex = forwardRegex;\n this.reversedRegex = reversedRegex;\n this._openSet = RichEditBracket._toSet(this.open);\n this._closeSet = RichEditBracket._toSet(this.close);\n }\n /**\n * Check if the provided `text` is an open bracket in this group.\n */\n isOpen(text) {\n return this._openSet.has(text);\n }\n /**\n * Check if the provided `text` is a close bracket in this group.\n */\n isClose(text) {\n return this._closeSet.has(text);\n }\n static _toSet(arr) {\n const result = new Set();\n for (const element of arr) {\n result.add(element);\n }\n return result;\n }\n}\n/**\n * Groups together brackets that have equal open or close sequences.\n *\n * For example, if the following brackets are defined:\n * ['IF','END']\n * ['for','end']\n * ['{','}']\n *\n * Then the grouped brackets would be:\n * { open: ['if', 'for'], close: ['end', 'end'] }\n * { open: ['{'], close: ['}'] }\n *\n */\nfunction groupFuzzyBrackets(brackets) {\n const N = brackets.length;\n brackets = brackets.map(b => [b[0].toLowerCase(), b[1].toLowerCase()]);\n const group = [];\n for (let i = 0; i < N; i++) {\n group[i] = i;\n }\n const areOverlapping = (a, b) => {\n const [aOpen, aClose] = a;\n const [bOpen, bClose] = b;\n return (aOpen === bOpen || aOpen === bClose || aClose === bOpen || aClose === bClose);\n };\n const mergeGroups = (g1, g2) => {\n const newG = Math.min(g1, g2);\n const oldG = Math.max(g1, g2);\n for (let i = 0; i < N; i++) {\n if (group[i] === oldG) {\n group[i] = newG;\n }\n }\n };\n // group together brackets that have the same open or the same close sequence\n for (let i = 0; i < N; i++) {\n const a = brackets[i];\n for (let j = i + 1; j < N; j++) {\n const b = brackets[j];\n if (areOverlapping(a, b)) {\n mergeGroups(group[i], group[j]);\n }\n }\n }\n const result = [];\n for (let g = 0; g < N; g++) {\n let currentOpen = [];\n let currentClose = [];\n for (let i = 0; i < N; i++) {\n if (group[i] === g) {\n const [open, close] = brackets[i];\n currentOpen.push(open);\n currentClose.push(close);\n }\n }\n if (currentOpen.length > 0) {\n result.push({\n open: currentOpen,\n close: currentClose\n });\n }\n }\n return result;\n}\nexport class RichEditBrackets {\n constructor(languageId, _brackets) {\n this._richEditBracketsBrand = undefined;\n const brackets = groupFuzzyBrackets(_brackets);\n this.brackets = brackets.map((b, index) => {\n return new RichEditBracket(languageId, index, b.open, b.close, getRegexForBracketPair(b.open, b.close, brackets, index), getReversedRegexForBracketPair(b.open, b.close, brackets, index));\n });\n this.forwardRegex = getRegexForBrackets(this.brackets);\n this.reversedRegex = getReversedRegexForBrackets(this.brackets);\n this.textIsBracket = {};\n this.textIsOpenBracket = {};\n this.maxBracketLength = 0;\n for (const bracket of this.brackets) {\n for (const open of bracket.open) {\n this.textIsBracket[open] = bracket;\n this.textIsOpenBracket[open] = true;\n this.maxBracketLength = Math.max(this.maxBracketLength, open.length);\n }\n for (const close of bracket.close) {\n this.textIsBracket[close] = bracket;\n this.textIsOpenBracket[close] = false;\n this.maxBracketLength = Math.max(this.maxBracketLength, close.length);\n }\n }\n }\n}\nfunction collectSuperstrings(str, brackets, currentIndex, dest) {\n for (let i = 0, len = brackets.length; i < len; i++) {\n if (i === currentIndex) {\n continue;\n }\n const bracket = brackets[i];\n for (const open of bracket.open) {\n if (open.indexOf(str) >= 0) {\n dest.push(open);\n }\n }\n for (const close of bracket.close) {\n if (close.indexOf(str) >= 0) {\n dest.push(close);\n }\n }\n }\n}\nfunction lengthcmp(a, b) {\n return a.length - b.length;\n}\nfunction unique(arr) {\n if (arr.length <= 1) {\n return arr;\n }\n const result = [];\n const seen = new Set();\n for (const element of arr) {\n if (seen.has(element)) {\n continue;\n }\n result.push(element);\n seen.add(element);\n }\n return result;\n}\n/**\n * Create a regular expression that can be used to search forward in a piece of text\n * for a group of bracket pairs. But this regex must be built in a way in which\n * it is aware of the other bracket pairs defined for the language.\n *\n * For example, if a language contains the following bracket pairs:\n * ['begin', 'end']\n * ['if', 'end if']\n * The two bracket pairs do not collide because no open or close brackets are equal.\n * So the function getRegexForBracketPair is called twice, once with\n * the ['begin'], ['end'] group consisting of one bracket pair, and once with\n * the ['if'], ['end if'] group consiting of the other bracket pair.\n *\n * But there could be a situation where an occurrence of 'end if' is mistaken\n * for an occurrence of 'end'.\n *\n * Therefore, for the bracket pair ['begin', 'end'], the regex will also\n * target 'end if'. The regex will be something like:\n * /(\\bend if\\b)|(\\bend\\b)|(\\bif\\b)/\n *\n * The regex also searches for \"superstrings\" (other brackets that might be mistaken with the current bracket).\n *\n */\nfunction getRegexForBracketPair(open, close, brackets, currentIndex) {\n // search in all brackets for other brackets that are a superstring of these brackets\n let pieces = [];\n pieces = pieces.concat(open);\n pieces = pieces.concat(close);\n for (let i = 0, len = pieces.length; i < len; i++) {\n collectSuperstrings(pieces[i], brackets, currentIndex, pieces);\n }\n pieces = unique(pieces);\n pieces.sort(lengthcmp);\n pieces.reverse();\n return createBracketOrRegExp(pieces);\n}\n/**\n * Matching a regular expression in JS can only be done \"forwards\". So JS offers natively only\n * methods to find the first match of a regex in a string. But sometimes, it is useful to\n * find the last match of a regex in a string. For such a situation, a nice solution is to\n * simply reverse the string and then search for a reversed regex.\n *\n * This function also has the fine details of `getRegexForBracketPair`. For the same example\n * given above, the regex produced here would look like:\n * /(\\bfi dne\\b)|(\\bdne\\b)|(\\bfi\\b)/\n */\nfunction getReversedRegexForBracketPair(open, close, brackets, currentIndex) {\n // search in all brackets for other brackets that are a superstring of these brackets\n let pieces = [];\n pieces = pieces.concat(open);\n pieces = pieces.concat(close);\n for (let i = 0, len = pieces.length; i < len; i++) {\n collectSuperstrings(pieces[i], brackets, currentIndex, pieces);\n }\n pieces = unique(pieces);\n pieces.sort(lengthcmp);\n pieces.reverse();\n return createBracketOrRegExp(pieces.map(toReversedString));\n}\n/**\n * Creates a regular expression that targets all bracket pairs.\n *\n * e.g. for the bracket pairs:\n * ['{','}']\n * ['begin,'end']\n * ['for','end']\n * the regex would look like:\n * /(\\{)|(\\})|(\\bbegin\\b)|(\\bend\\b)|(\\bfor\\b)/\n */\nfunction getRegexForBrackets(brackets) {\n let pieces = [];\n for (const bracket of brackets) {\n for (const open of bracket.open) {\n pieces.push(open);\n }\n for (const close of bracket.close) {\n pieces.push(close);\n }\n }\n pieces = unique(pieces);\n return createBracketOrRegExp(pieces);\n}\n/**\n * Matching a regular expression in JS can only be done \"forwards\". So JS offers natively only\n * methods to find the first match of a regex in a string. But sometimes, it is useful to\n * find the last match of a regex in a string. For such a situation, a nice solution is to\n * simply reverse the string and then search for a reversed regex.\n *\n * e.g. for the bracket pairs:\n * ['{','}']\n * ['begin,'end']\n * ['for','end']\n * the regex would look like:\n * /(\\{)|(\\})|(\\bnigeb\\b)|(\\bdne\\b)|(\\brof\\b)/\n */\nfunction getReversedRegexForBrackets(brackets) {\n let pieces = [];\n for (const bracket of brackets) {\n for (const open of bracket.open) {\n pieces.push(open);\n }\n for (const close of bracket.close) {\n pieces.push(close);\n }\n }\n pieces = unique(pieces);\n return createBracketOrRegExp(pieces.map(toReversedString));\n}\nfunction prepareBracketForRegExp(str) {\n // This bracket pair uses letters like e.g. \"begin\" - \"end\"\n const insertWordBoundaries = (/^[\\w ]+$/.test(str));\n str = strings.escapeRegExpCharacters(str);\n return (insertWordBoundaries ? `\\\\b${str}\\\\b` : str);\n}\nfunction createBracketOrRegExp(pieces) {\n let regexStr = `(${pieces.map(prepareBracketForRegExp).join(')|(')})`;\n return strings.createRegExp(regexStr, true);\n}\nconst toReversedString = (function () {\n function reverse(str) {\n if (stringBuilder.hasTextDecoder) {\n // create a Uint16Array and then use a TextDecoder to create a string\n const arr = new Uint16Array(str.length);\n let offset = 0;\n for (let i = str.length - 1; i >= 0; i--) {\n arr[offset++] = str.charCodeAt(i);\n }\n return stringBuilder.getPlatformTextDecoder().decode(arr);\n }\n else {\n let result = [], resultLen = 0;\n for (let i = str.length - 1; i >= 0; i--) {\n result[resultLen++] = str.charAt(i);\n }\n return result.join('');\n }\n }\n let lastInput = null;\n let lastOutput = null;\n return function toReversedString(str) {\n if (lastInput !== str) {\n lastInput = str;\n lastOutput = reverse(lastInput);\n }\n return lastOutput;\n };\n})();\nexport class BracketsUtils {\n static _findPrevBracketInText(reversedBracketRegex, lineNumber, reversedText, offset) {\n let m = reversedText.match(reversedBracketRegex);\n if (!m) {\n return null;\n }\n let matchOffset = reversedText.length - (m.index || 0);\n let matchLength = m[0].length;\n let absoluteMatchOffset = offset + matchOffset;\n return new Range(lineNumber, absoluteMatchOffset - matchLength + 1, lineNumber, absoluteMatchOffset + 1);\n }\n static findPrevBracketInRange(reversedBracketRegex, lineNumber, lineText, startOffset, endOffset) {\n // Because JS does not support backwards regex search, we search forwards in a reversed string with a reversed regex ;)\n const reversedLineText = toReversedString(lineText);\n const reversedSubstr = reversedLineText.substring(lineText.length - endOffset, lineText.length - startOffset);\n return this._findPrevBracketInText(reversedBracketRegex, lineNumber, reversedSubstr, startOffset);\n }\n static findNextBracketInText(bracketRegex, lineNumber, text, offset) {\n let m = text.match(bracketRegex);\n if (!m) {\n return null;\n }\n let matchOffset = m.index || 0;\n let matchLength = m[0].length;\n if (matchLength === 0) {\n return null;\n }\n let absoluteMatchOffset = offset + matchOffset;\n return new Range(lineNumber, absoluteMatchOffset + 1, lineNumber, absoluteMatchOffset + 1 + matchLength);\n }\n static findNextBracketInRange(bracketRegex, lineNumber, lineText, startOffset, endOffset) {\n const substr = lineText.substring(startOffset, endOffset);\n return this.findNextBracketInText(bracketRegex, lineNumber, substr, startOffset);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { BrowserFeatures } from './canIUse.js';\nimport { StandardKeyboardEvent } from './keyboardEvent.js';\nimport { StandardMouseEvent } from './mouseEvent.js';\nimport { TimeoutTimer } from '../common/async.js';\nimport { onUnexpectedError } from '../common/errors.js';\nimport { Emitter } from '../common/event.js';\nimport { Disposable, DisposableStore, toDisposable } from '../common/lifecycle.js';\nimport { FileAccess, RemoteAuthorities } from '../common/network.js';\nimport * as platform from '../common/platform.js';\nexport function clearNode(node) {\n while (node.firstChild) {\n node.firstChild.remove();\n }\n}\n/**\n * @deprecated Use node.isConnected directly\n */\nexport function isInDOM(node) {\n var _a;\n return (_a = node === null || node === void 0 ? void 0 : node.isConnected) !== null && _a !== void 0 ? _a : false;\n}\nclass DomListener {\n constructor(node, type, handler, options) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = (options || false);\n this._node.addEventListener(this._type, this._handler, this._options);\n }\n dispose() {\n if (!this._handler) {\n // Already disposed\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n // Prevent leakers from holding on to the dom or handler func\n this._node = null;\n this._handler = null;\n }\n}\nexport function addDisposableListener(node, type, handler, useCaptureOrOptions) {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\nfunction _wrapAsStandardMouseEvent(handler) {\n return function (e) {\n return handler(new StandardMouseEvent(e));\n };\n}\nfunction _wrapAsStandardKeyboardEvent(handler) {\n return function (e) {\n return handler(new StandardKeyboardEvent(e));\n };\n}\nexport let addStandardDisposableListener = function addStandardDisposableListener(node, type, handler, useCapture) {\n let wrapHandler = handler;\n if (type === 'click' || type === 'mousedown') {\n wrapHandler = _wrapAsStandardMouseEvent(handler);\n }\n else if (type === 'keydown' || type === 'keypress' || type === 'keyup') {\n wrapHandler = _wrapAsStandardKeyboardEvent(handler);\n }\n return addDisposableListener(node, type, wrapHandler, useCapture);\n};\nexport let addStandardDisposableGenericMouseDownListner = function addStandardDisposableListener(node, handler, useCapture) {\n let wrapHandler = _wrapAsStandardMouseEvent(handler);\n return addDisposableGenericMouseDownListner(node, wrapHandler, useCapture);\n};\nexport function addDisposableGenericMouseDownListner(node, handler, useCapture) {\n return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_DOWN : EventType.MOUSE_DOWN, handler, useCapture);\n}\nexport function addDisposableGenericMouseUpListner(node, handler, useCapture) {\n return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_UP : EventType.MOUSE_UP, handler, useCapture);\n}\nexport function addDisposableNonBubblingMouseOutListener(node, handler) {\n return addDisposableListener(node, 'mouseout', (e) => {\n // Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements\n let toElement = (e.relatedTarget);\n while (toElement && toElement !== node) {\n toElement = toElement.parentNode;\n }\n if (toElement === node) {\n return;\n }\n handler(e);\n });\n}\nexport function addDisposableNonBubblingPointerOutListener(node, handler) {\n return addDisposableListener(node, 'pointerout', (e) => {\n // Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements\n let toElement = (e.relatedTarget);\n while (toElement && toElement !== node) {\n toElement = toElement.parentNode;\n }\n if (toElement === node) {\n return;\n }\n handler(e);\n });\n}\nlet _animationFrame = null;\nfunction doRequestAnimationFrame(callback) {\n if (!_animationFrame) {\n const emulatedRequestAnimationFrame = (callback) => {\n return setTimeout(() => callback(new Date().getTime()), 0);\n };\n _animationFrame = (self.requestAnimationFrame\n || self.msRequestAnimationFrame\n || self.webkitRequestAnimationFrame\n || self.mozRequestAnimationFrame\n || self.oRequestAnimationFrame\n || emulatedRequestAnimationFrame);\n }\n return _animationFrame.call(self, callback);\n}\n/**\n * Schedule a callback to be run at the next animation frame.\n * This allows multiple parties to register callbacks that should run at the next animation frame.\n * If currently in an animation frame, `runner` will be executed immediately.\n * @return token that can be used to cancel the scheduled runner (only if `runner` was not executed immediately).\n */\nexport let runAtThisOrScheduleAtNextAnimationFrame;\n/**\n * Schedule a callback to be run at the next animation frame.\n * This allows multiple parties to register callbacks that should run at the next animation frame.\n * If currently in an animation frame, `runner` will be executed at the next animation frame.\n * @return token that can be used to cancel the scheduled runner.\n */\nexport let scheduleAtNextAnimationFrame;\nclass AnimationFrameQueueItem {\n constructor(runner, priority = 0) {\n this._runner = runner;\n this.priority = priority;\n this._canceled = false;\n }\n dispose() {\n this._canceled = true;\n }\n execute() {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n // Sort by priority (largest to lowest)\n static sort(a, b) {\n return b.priority - a.priority;\n }\n}\n(function () {\n /**\n * The runners scheduled at the next animation frame\n */\n let NEXT_QUEUE = [];\n /**\n * The runners scheduled at the current animation frame\n */\n let CURRENT_QUEUE = null;\n /**\n * A flag to keep track if the native requestAnimationFrame was already called\n */\n let animFrameRequested = false;\n /**\n * A flag to indicate if currently handling a native requestAnimationFrame callback\n */\n let inAnimationFrameRunner = false;\n let animationFrameRunner = () => {\n animFrameRequested = false;\n CURRENT_QUEUE = NEXT_QUEUE;\n NEXT_QUEUE = [];\n inAnimationFrameRunner = true;\n while (CURRENT_QUEUE.length > 0) {\n CURRENT_QUEUE.sort(AnimationFrameQueueItem.sort);\n let top = CURRENT_QUEUE.shift();\n top.execute();\n }\n inAnimationFrameRunner = false;\n };\n scheduleAtNextAnimationFrame = (runner, priority = 0) => {\n let item = new AnimationFrameQueueItem(runner, priority);\n NEXT_QUEUE.push(item);\n if (!animFrameRequested) {\n animFrameRequested = true;\n doRequestAnimationFrame(animationFrameRunner);\n }\n return item;\n };\n runAtThisOrScheduleAtNextAnimationFrame = (runner, priority) => {\n if (inAnimationFrameRunner) {\n let item = new AnimationFrameQueueItem(runner, priority);\n CURRENT_QUEUE.push(item);\n return item;\n }\n else {\n return scheduleAtNextAnimationFrame(runner, priority);\n }\n };\n})();\nconst MINIMUM_TIME_MS = 8;\nconst DEFAULT_EVENT_MERGER = function (lastEvent, currentEvent) {\n return currentEvent;\n};\nclass TimeoutThrottledDomListener extends Disposable {\n constructor(node, type, handler, eventMerger = DEFAULT_EVENT_MERGER, minimumTimeMs = MINIMUM_TIME_MS) {\n super();\n let lastEvent = null;\n let lastHandlerTime = 0;\n let timeout = this._register(new TimeoutTimer());\n let invokeHandler = () => {\n lastHandlerTime = (new Date()).getTime();\n handler(lastEvent);\n lastEvent = null;\n };\n this._register(addDisposableListener(node, type, (e) => {\n lastEvent = eventMerger(lastEvent, e);\n let elapsedTime = (new Date()).getTime() - lastHandlerTime;\n if (elapsedTime >= minimumTimeMs) {\n timeout.cancel();\n invokeHandler();\n }\n else {\n timeout.setIfNotSet(invokeHandler, minimumTimeMs - elapsedTime);\n }\n }));\n }\n}\nexport function addDisposableThrottledListener(node, type, handler, eventMerger, minimumTimeMs) {\n return new TimeoutThrottledDomListener(node, type, handler, eventMerger, minimumTimeMs);\n}\nexport function getComputedStyle(el) {\n return document.defaultView.getComputedStyle(el, null);\n}\nexport function getClientArea(element) {\n // Try with DOM clientWidth / clientHeight\n if (element !== document.body) {\n return new Dimension(element.clientWidth, element.clientHeight);\n }\n // If visual view port exits and it's on mobile, it should be used instead of window innerWidth / innerHeight, or document.body.clientWidth / document.body.clientHeight\n if (platform.isIOS && window.visualViewport) {\n return new Dimension(window.visualViewport.width, window.visualViewport.height);\n }\n // Try innerWidth / innerHeight\n if (window.innerWidth && window.innerHeight) {\n return new Dimension(window.innerWidth, window.innerHeight);\n }\n // Try with document.body.clientWidth / document.body.clientHeight\n if (document.body && document.body.clientWidth && document.body.clientHeight) {\n return new Dimension(document.body.clientWidth, document.body.clientHeight);\n }\n // Try with document.documentElement.clientWidth / document.documentElement.clientHeight\n if (document.documentElement && document.documentElement.clientWidth && document.documentElement.clientHeight) {\n return new Dimension(document.documentElement.clientWidth, document.documentElement.clientHeight);\n }\n throw new Error('Unable to figure out browser width and height');\n}\nclass SizeUtils {\n // Adapted from WinJS\n // Converts a CSS positioning string for the specified element to pixels.\n static convertToPixels(element, value) {\n return parseFloat(value) || 0;\n }\n static getDimension(element, cssPropertyName, jsPropertyName) {\n let computedStyle = getComputedStyle(element);\n let value = '0';\n if (computedStyle) {\n if (computedStyle.getPropertyValue) {\n value = computedStyle.getPropertyValue(cssPropertyName);\n }\n else {\n // IE8\n value = computedStyle.getAttribute(jsPropertyName);\n }\n }\n return SizeUtils.convertToPixels(element, value);\n }\n static getBorderLeftWidth(element) {\n return SizeUtils.getDimension(element, 'border-left-width', 'borderLeftWidth');\n }\n static getBorderRightWidth(element) {\n return SizeUtils.getDimension(element, 'border-right-width', 'borderRightWidth');\n }\n static getBorderTopWidth(element) {\n return SizeUtils.getDimension(element, 'border-top-width', 'borderTopWidth');\n }\n static getBorderBottomWidth(element) {\n return SizeUtils.getDimension(element, 'border-bottom-width', 'borderBottomWidth');\n }\n static getPaddingLeft(element) {\n return SizeUtils.getDimension(element, 'padding-left', 'paddingLeft');\n }\n static getPaddingRight(element) {\n return SizeUtils.getDimension(element, 'padding-right', 'paddingRight');\n }\n static getPaddingTop(element) {\n return SizeUtils.getDimension(element, 'padding-top', 'paddingTop');\n }\n static getPaddingBottom(element) {\n return SizeUtils.getDimension(element, 'padding-bottom', 'paddingBottom');\n }\n static getMarginLeft(element) {\n return SizeUtils.getDimension(element, 'margin-left', 'marginLeft');\n }\n static getMarginTop(element) {\n return SizeUtils.getDimension(element, 'margin-top', 'marginTop');\n }\n static getMarginRight(element) {\n return SizeUtils.getDimension(element, 'margin-right', 'marginRight');\n }\n static getMarginBottom(element) {\n return SizeUtils.getDimension(element, 'margin-bottom', 'marginBottom');\n }\n}\nexport class Dimension {\n constructor(width, height) {\n this.width = width;\n this.height = height;\n }\n with(width = this.width, height = this.height) {\n if (width !== this.width || height !== this.height) {\n return new Dimension(width, height);\n }\n else {\n return this;\n }\n }\n static is(obj) {\n return typeof obj === 'object' && typeof obj.height === 'number' && typeof obj.width === 'number';\n }\n static lift(obj) {\n if (obj instanceof Dimension) {\n return obj;\n }\n else {\n return new Dimension(obj.width, obj.height);\n }\n }\n static equals(a, b) {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n return a.width === b.width && a.height === b.height;\n }\n}\nexport function getTopLeftOffset(element) {\n // Adapted from WinJS.Utilities.getPosition\n // and added borders to the mix\n let offsetParent = element.offsetParent;\n let top = element.offsetTop;\n let left = element.offsetLeft;\n while ((element = element.parentNode) !== null\n && element !== document.body\n && element !== document.documentElement) {\n top -= element.scrollTop;\n const c = isShadowRoot(element) ? null : getComputedStyle(element);\n if (c) {\n left -= c.direction !== 'rtl' ? element.scrollLeft : -element.scrollLeft;\n }\n if (element === offsetParent) {\n left += SizeUtils.getBorderLeftWidth(element);\n top += SizeUtils.getBorderTopWidth(element);\n top += element.offsetTop;\n left += element.offsetLeft;\n offsetParent = element.offsetParent;\n }\n }\n return {\n left: left,\n top: top\n };\n}\nexport function size(element, width, height) {\n if (typeof width === 'number') {\n element.style.width = `${width}px`;\n }\n if (typeof height === 'number') {\n element.style.height = `${height}px`;\n }\n}\n/**\n * Returns the position of a dom node relative to the entire page.\n */\nexport function getDomNodePagePosition(domNode) {\n let bb = domNode.getBoundingClientRect();\n return {\n left: bb.left + StandardWindow.scrollX,\n top: bb.top + StandardWindow.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\nexport const StandardWindow = new class {\n get scrollX() {\n if (typeof window.scrollX === 'number') {\n // modern browsers\n return window.scrollX;\n }\n else {\n return document.body.scrollLeft + document.documentElement.scrollLeft;\n }\n }\n get scrollY() {\n if (typeof window.scrollY === 'number') {\n // modern browsers\n return window.scrollY;\n }\n else {\n return document.body.scrollTop + document.documentElement.scrollTop;\n }\n }\n};\n// Adapted from WinJS\n// Gets the width of the element, including margins.\nexport function getTotalWidth(element) {\n let margin = SizeUtils.getMarginLeft(element) + SizeUtils.getMarginRight(element);\n return element.offsetWidth + margin;\n}\nexport function getContentWidth(element) {\n let border = SizeUtils.getBorderLeftWidth(element) + SizeUtils.getBorderRightWidth(element);\n let padding = SizeUtils.getPaddingLeft(element) + SizeUtils.getPaddingRight(element);\n return element.offsetWidth - border - padding;\n}\n// Adapted from WinJS\n// Gets the height of the content of the specified element. The content height does not include borders or padding.\nexport function getContentHeight(element) {\n let border = SizeUtils.getBorderTopWidth(element) + SizeUtils.getBorderBottomWidth(element);\n let padding = SizeUtils.getPaddingTop(element) + SizeUtils.getPaddingBottom(element);\n return element.offsetHeight - border - padding;\n}\n// Adapted from WinJS\n// Gets the height of the element, including its margins.\nexport function getTotalHeight(element) {\n let margin = SizeUtils.getMarginTop(element) + SizeUtils.getMarginBottom(element);\n return element.offsetHeight + margin;\n}\n// ----------------------------------------------------------------------------------------\nexport function isAncestor(testChild, testAncestor) {\n while (testChild) {\n if (testChild === testAncestor) {\n return true;\n }\n testChild = testChild.parentNode;\n }\n return false;\n}\nexport function findParentWithClass(node, clazz, stopAtClazzOrNode) {\n while (node && node.nodeType === node.ELEMENT_NODE) {\n if (node.classList.contains(clazz)) {\n return node;\n }\n if (stopAtClazzOrNode) {\n if (typeof stopAtClazzOrNode === 'string') {\n if (node.classList.contains(stopAtClazzOrNode)) {\n return null;\n }\n }\n else {\n if (node === stopAtClazzOrNode) {\n return null;\n }\n }\n }\n node = node.parentNode;\n }\n return null;\n}\nexport function hasParentWithClass(node, clazz, stopAtClazzOrNode) {\n return !!findParentWithClass(node, clazz, stopAtClazzOrNode);\n}\nexport function isShadowRoot(node) {\n return (node && !!node.host && !!node.mode);\n}\nexport function isInShadowDOM(domNode) {\n return !!getShadowRoot(domNode);\n}\nexport function getShadowRoot(domNode) {\n while (domNode.parentNode) {\n if (domNode === document.body) {\n // reached the body\n return null;\n }\n domNode = domNode.parentNode;\n }\n return isShadowRoot(domNode) ? domNode : null;\n}\nexport function getActiveElement() {\n let result = document.activeElement;\n while (result === null || result === void 0 ? void 0 : result.shadowRoot) {\n result = result.shadowRoot.activeElement;\n }\n return result;\n}\nexport function createStyleSheet(container = document.getElementsByTagName('head')[0]) {\n let style = document.createElement('style');\n style.type = 'text/css';\n style.media = 'screen';\n container.appendChild(style);\n return style;\n}\nlet _sharedStyleSheet = null;\nfunction getSharedStyleSheet() {\n if (!_sharedStyleSheet) {\n _sharedStyleSheet = createStyleSheet();\n }\n return _sharedStyleSheet;\n}\nfunction getDynamicStyleSheetRules(style) {\n var _a, _b;\n if ((_a = style === null || style === void 0 ? void 0 : style.sheet) === null || _a === void 0 ? void 0 : _a.rules) {\n // Chrome, IE\n return style.sheet.rules;\n }\n if ((_b = style === null || style === void 0 ? void 0 : style.sheet) === null || _b === void 0 ? void 0 : _b.cssRules) {\n // FF\n return style.sheet.cssRules;\n }\n return [];\n}\nexport function createCSSRule(selector, cssText, style = getSharedStyleSheet()) {\n if (!style || !cssText) {\n return;\n }\n style.sheet.insertRule(selector + '{' + cssText + '}', 0);\n}\nexport function removeCSSRulesContainingSelector(ruleName, style = getSharedStyleSheet()) {\n if (!style) {\n return;\n }\n let rules = getDynamicStyleSheetRules(style);\n let toDelete = [];\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i];\n if (rule.selectorText.indexOf(ruleName) !== -1) {\n toDelete.push(i);\n }\n }\n for (let i = toDelete.length - 1; i >= 0; i--) {\n style.sheet.deleteRule(toDelete[i]);\n }\n}\nexport function isHTMLElement(o) {\n if (typeof HTMLElement === 'object') {\n return o instanceof HTMLElement;\n }\n return o && typeof o === 'object' && o.nodeType === 1 && typeof o.nodeName === 'string';\n}\nexport const EventType = {\n // Mouse\n CLICK: 'click',\n AUXCLICK: 'auxclick',\n DBLCLICK: 'dblclick',\n MOUSE_UP: 'mouseup',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_MOVE: 'mousemove',\n MOUSE_OUT: 'mouseout',\n MOUSE_ENTER: 'mouseenter',\n MOUSE_LEAVE: 'mouseleave',\n MOUSE_WHEEL: 'wheel',\n POINTER_UP: 'pointerup',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n CONTEXT_MENU: 'contextmenu',\n WHEEL: 'wheel',\n // Keyboard\n KEY_DOWN: 'keydown',\n KEY_PRESS: 'keypress',\n KEY_UP: 'keyup',\n // HTML Document\n LOAD: 'load',\n BEFORE_UNLOAD: 'beforeunload',\n UNLOAD: 'unload',\n ABORT: 'abort',\n ERROR: 'error',\n RESIZE: 'resize',\n SCROLL: 'scroll',\n FULLSCREEN_CHANGE: 'fullscreenchange',\n WK_FULLSCREEN_CHANGE: 'webkitfullscreenchange',\n // Form\n SELECT: 'select',\n CHANGE: 'change',\n SUBMIT: 'submit',\n RESET: 'reset',\n FOCUS: 'focus',\n FOCUS_IN: 'focusin',\n FOCUS_OUT: 'focusout',\n BLUR: 'blur',\n INPUT: 'input',\n // Local Storage\n STORAGE: 'storage',\n // Drag\n DRAG_START: 'dragstart',\n DRAG: 'drag',\n DRAG_ENTER: 'dragenter',\n DRAG_LEAVE: 'dragleave',\n DRAG_OVER: 'dragover',\n DROP: 'drop',\n DRAG_END: 'dragend',\n // Animation\n ANIMATION_START: browser.isWebKit ? 'webkitAnimationStart' : 'animationstart',\n ANIMATION_END: browser.isWebKit ? 'webkitAnimationEnd' : 'animationend',\n ANIMATION_ITERATION: browser.isWebKit ? 'webkitAnimationIteration' : 'animationiteration'\n};\nexport const EventHelper = {\n stop: function (e, cancelBubble) {\n if (e.preventDefault) {\n e.preventDefault();\n }\n else {\n // IE8\n e.returnValue = false;\n }\n if (cancelBubble) {\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n else {\n // IE8\n e.cancelBubble = true;\n }\n }\n }\n};\nexport function saveParentsScrollTop(node) {\n let r = [];\n for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n r[i] = node.scrollTop;\n node = node.parentNode;\n }\n return r;\n}\nexport function restoreParentsScrollTop(node, state) {\n for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n if (node.scrollTop !== state[i]) {\n node.scrollTop = state[i];\n }\n node = node.parentNode;\n }\n}\nclass FocusTracker extends Disposable {\n constructor(element) {\n super();\n this._onDidFocus = this._register(new Emitter());\n this.onDidFocus = this._onDidFocus.event;\n this._onDidBlur = this._register(new Emitter());\n this.onDidBlur = this._onDidBlur.event;\n let hasFocus = isAncestor(document.activeElement, element);\n let loosingFocus = false;\n const onFocus = () => {\n loosingFocus = false;\n if (!hasFocus) {\n hasFocus = true;\n this._onDidFocus.fire();\n }\n };\n const onBlur = () => {\n if (hasFocus) {\n loosingFocus = true;\n window.setTimeout(() => {\n if (loosingFocus) {\n loosingFocus = false;\n hasFocus = false;\n this._onDidBlur.fire();\n }\n }, 0);\n }\n };\n this._refreshStateHandler = () => {\n let currentNodeHasFocus = isAncestor(document.activeElement, element);\n if (currentNodeHasFocus !== hasFocus) {\n if (hasFocus) {\n onBlur();\n }\n else {\n onFocus();\n }\n }\n };\n this._register(addDisposableListener(element, EventType.FOCUS, onFocus, true));\n this._register(addDisposableListener(element, EventType.BLUR, onBlur, true));\n }\n}\nexport function trackFocus(element) {\n return new FocusTracker(element);\n}\nexport function append(parent, ...children) {\n parent.append(...children);\n if (children.length === 1 && typeof children[0] !== 'string') {\n return children[0];\n }\n}\nexport function prepend(parent, child) {\n parent.insertBefore(child, parent.firstChild);\n return child;\n}\n/**\n * Removes all children from `parent` and appends `children`\n */\nexport function reset(parent, ...children) {\n parent.innerText = '';\n append(parent, ...children);\n}\nconst SELECTOR_REGEX = /([\\w\\-]+)?(#([\\w\\-]+))?((\\.([\\w\\-]+))*)/;\nexport var Namespace;\n(function (Namespace) {\n Namespace[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n Namespace[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n})(Namespace || (Namespace = {}));\nfunction _$(namespace, description, attrs, ...children) {\n let match = SELECTOR_REGEX.exec(description);\n if (!match) {\n throw new Error('Bad use of emmet');\n }\n attrs = Object.assign({}, (attrs || {}));\n let tagName = match[1] || 'div';\n let result;\n if (namespace !== Namespace.HTML) {\n result = document.createElementNS(namespace, tagName);\n }\n else {\n result = document.createElement(tagName);\n }\n if (match[3]) {\n result.id = match[3];\n }\n if (match[4]) {\n result.className = match[4].replace(/\\./g, ' ').trim();\n }\n Object.keys(attrs).forEach(name => {\n const value = attrs[name];\n if (typeof value === 'undefined') {\n return;\n }\n if (/^on\\w+$/.test(name)) {\n result[name] = value;\n }\n else if (name === 'selected') {\n if (value) {\n result.setAttribute(name, 'true');\n }\n }\n else {\n result.setAttribute(name, value);\n }\n });\n result.append(...children);\n return result;\n}\nexport function $(description, attrs, ...children) {\n return _$(Namespace.HTML, description, attrs, ...children);\n}\n$.SVG = function (description, attrs, ...children) {\n return _$(Namespace.SVG, description, attrs, ...children);\n};\nexport function show(...elements) {\n for (let element of elements) {\n element.style.display = '';\n element.removeAttribute('aria-hidden');\n }\n}\nexport function hide(...elements) {\n for (let element of elements) {\n element.style.display = 'none';\n element.setAttribute('aria-hidden', 'true');\n }\n}\nexport function getElementsByTagName(tag) {\n return Array.prototype.slice.call(document.getElementsByTagName(tag), 0);\n}\n/**\n * Find a value usable for a dom node size such that the likelihood that it would be\n * displayed with constant screen pixels size is as high as possible.\n *\n * e.g. We would desire for the cursors to be 2px (CSS px) wide. Under a devicePixelRatio\n * of 1.25, the cursor will be 2.5 screen pixels wide. Depending on how the dom node aligns/\"snaps\"\n * with the screen pixels, it will sometimes be rendered with 2 screen pixels, and sometimes with 3 screen pixels.\n */\nexport function computeScreenAwareSize(cssPx) {\n const screenPx = window.devicePixelRatio * cssPx;\n return Math.max(1, Math.floor(screenPx)) / window.devicePixelRatio;\n}\n/**\n * Open safely a new window. This is the best way to do so, but you cannot tell\n * if the window was opened or if it was blocked by the browser's popup blocker.\n * If you want to tell if the browser blocked the new window, use `windowOpenNoOpenerWithSuccess`.\n *\n * See https://github.com/microsoft/monaco-editor/issues/601\n * To protect against malicious code in the linked site, particularly phishing attempts,\n * the window.opener should be set to null to prevent the linked site from having access\n * to change the location of the current page.\n * See https://mathiasbynens.github.io/rel-noopener/\n */\nexport function windowOpenNoOpener(url) {\n // By using 'noopener' in the `windowFeatures` argument, the newly created window will\n // not be able to use `window.opener` to reach back to the current page.\n // See https://stackoverflow.com/a/46958731\n // See https://developer.mozilla.org/en-US/docs/Web/API/Window/open#noopener\n // However, this also doesn't allow us to realize if the browser blocked\n // the creation of the window.\n window.open(url, '_blank', 'noopener');\n}\nexport function animate(fn) {\n const step = () => {\n fn();\n stepDisposable = scheduleAtNextAnimationFrame(step);\n };\n let stepDisposable = scheduleAtNextAnimationFrame(step);\n return toDisposable(() => stepDisposable.dispose());\n}\nRemoteAuthorities.setPreferredWebSchema(/^https:/.test(window.location.href) ? 'https' : 'http');\n/**\n * returns url('...')\n */\nexport function asCSSUrl(uri) {\n if (!uri) {\n return `url('')`;\n }\n return `url('${FileAccess.asBrowserUri(uri).toString(true).replace(/'/g, '%27')}')`;\n}\nexport function asCSSPropertyValue(value) {\n return `'${value.replace(/'/g, '%27')}'`;\n}\nexport class ModifierKeyEmitter extends Emitter {\n constructor() {\n super();\n this._subscriptions = new DisposableStore();\n this._keyStatus = {\n altKey: false,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false\n };\n this._subscriptions.add(addDisposableListener(window, 'keydown', e => {\n if (e.defaultPrevented) {\n return;\n }\n const event = new StandardKeyboardEvent(e);\n // If Alt-key keydown event is repeated, ignore it #112347\n // Only known to be necessary for Alt-Key at the moment #115810\n if (event.keyCode === 6 /* Alt */ && e.repeat) {\n return;\n }\n if (e.altKey && !this._keyStatus.altKey) {\n this._keyStatus.lastKeyPressed = 'alt';\n }\n else if (e.ctrlKey && !this._keyStatus.ctrlKey) {\n this._keyStatus.lastKeyPressed = 'ctrl';\n }\n else if (e.metaKey && !this._keyStatus.metaKey) {\n this._keyStatus.lastKeyPressed = 'meta';\n }\n else if (e.shiftKey && !this._keyStatus.shiftKey) {\n this._keyStatus.lastKeyPressed = 'shift';\n }\n else if (event.keyCode !== 6 /* Alt */) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n else {\n return;\n }\n this._keyStatus.altKey = e.altKey;\n this._keyStatus.ctrlKey = e.ctrlKey;\n this._keyStatus.metaKey = e.metaKey;\n this._keyStatus.shiftKey = e.shiftKey;\n if (this._keyStatus.lastKeyPressed) {\n this._keyStatus.event = e;\n this.fire(this._keyStatus);\n }\n }, true));\n this._subscriptions.add(addDisposableListener(window, 'keyup', e => {\n if (e.defaultPrevented) {\n return;\n }\n if (!e.altKey && this._keyStatus.altKey) {\n this._keyStatus.lastKeyReleased = 'alt';\n }\n else if (!e.ctrlKey && this._keyStatus.ctrlKey) {\n this._keyStatus.lastKeyReleased = 'ctrl';\n }\n else if (!e.metaKey && this._keyStatus.metaKey) {\n this._keyStatus.lastKeyReleased = 'meta';\n }\n else if (!e.shiftKey && this._keyStatus.shiftKey) {\n this._keyStatus.lastKeyReleased = 'shift';\n }\n else {\n this._keyStatus.lastKeyReleased = undefined;\n }\n if (this._keyStatus.lastKeyPressed !== this._keyStatus.lastKeyReleased) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n this._keyStatus.altKey = e.altKey;\n this._keyStatus.ctrlKey = e.ctrlKey;\n this._keyStatus.metaKey = e.metaKey;\n this._keyStatus.shiftKey = e.shiftKey;\n if (this._keyStatus.lastKeyReleased) {\n this._keyStatus.event = e;\n this.fire(this._keyStatus);\n }\n }, true));\n this._subscriptions.add(addDisposableListener(document.body, 'mousedown', () => {\n this._keyStatus.lastKeyPressed = undefined;\n }, true));\n this._subscriptions.add(addDisposableListener(document.body, 'mouseup', () => {\n this._keyStatus.lastKeyPressed = undefined;\n }, true));\n this._subscriptions.add(addDisposableListener(document.body, 'mousemove', e => {\n if (e.buttons) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n }, true));\n this._subscriptions.add(addDisposableListener(window, 'blur', () => {\n this.resetKeyStatus();\n }));\n }\n get keyStatus() {\n return this._keyStatus;\n }\n /**\n * Allows to explicitly reset the key status based on more knowledge (#109062)\n */\n resetKeyStatus() {\n this.doResetKeyStatus();\n this.fire(this._keyStatus);\n }\n doResetKeyStatus() {\n this._keyStatus = {\n altKey: false,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false\n };\n }\n static getInstance() {\n if (!ModifierKeyEmitter.instance) {\n ModifierKeyEmitter.instance = new ModifierKeyEmitter();\n }\n return ModifierKeyEmitter.instance;\n }\n dispose() {\n super.dispose();\n this._subscriptions.dispose();\n }\n}\nexport function addMatchMediaChangeListener(query, callback) {\n const mediaQueryList = window.matchMedia(query);\n if (typeof mediaQueryList.addEventListener === 'function') {\n mediaQueryList.addEventListener('change', callback);\n }\n else {\n // Safari 13.x\n mediaQueryList.addListener(callback);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Throws an error with the provided message if the provided value does not evaluate to a true Javascript value.\n */\nexport function ok(value, message) {\n if (!value) {\n throw new Error(message ? `Assertion failed (${message})` : 'Assertion Failed');\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../globalMouseMoveMonitor.js';\nimport { Widget } from '../widget.js';\nimport { IntervalTimer, TimeoutTimer } from '../../../common/async.js';\n/**\n * The arrow image size.\n */\nexport const ARROW_IMG_SIZE = 11;\nexport class ScrollbarArrow extends Widget {\n constructor(opts) {\n super();\n this._onActivate = opts.onActivate;\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n this.domNode.classList.add(...opts.icon.classNamesArray);\n this.domNode.style.position = 'absolute';\n this.domNode.style.width = ARROW_IMG_SIZE + 'px';\n this.domNode.style.height = ARROW_IMG_SIZE + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n this._mouseMoveMonitor = this._register(new GlobalMouseMoveMonitor());\n this.onmousedown(this.bgDomNode, (e) => this._arrowMouseDown(e));\n this.onmousedown(this.domNode, (e) => this._arrowMouseDown(e));\n this._mousedownRepeatTimer = this._register(new IntervalTimer());\n this._mousedownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n _arrowMouseDown(e) {\n const scheduleRepeater = () => {\n this._mousedownRepeatTimer.cancelAndSet(() => this._onActivate(), 1000 / 24);\n };\n this._onActivate();\n this._mousedownRepeatTimer.cancel();\n this._mousedownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n this._mouseMoveMonitor.startMonitoring(e.target, e.buttons, standardMouseMoveMerger, (mouseMoveData) => {\n /* Intentional empty */\n }, () => {\n this._mousedownRepeatTimer.cancel();\n this._mousedownScheduleRepeatTimer.cancel();\n });\n e.preventDefault();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { TimeoutTimer } from '../../../common/async.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nexport class ScrollbarVisibilityController extends Disposable {\n constructor(visibility, visibleClassName, invisibleClassName) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._rawShouldBeVisible = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n setVisibility(visibility) {\n if (this._visibility !== visibility) {\n this._visibility = visibility;\n this._updateShouldBeVisible();\n }\n }\n // ----------------- Hide / Reveal\n setShouldBeVisible(rawShouldBeVisible) {\n this._rawShouldBeVisible = rawShouldBeVisible;\n this._updateShouldBeVisible();\n }\n _applyVisibilitySetting() {\n if (this._visibility === 2 /* Hidden */) {\n return false;\n }\n if (this._visibility === 3 /* Visible */) {\n return true;\n }\n return this._rawShouldBeVisible;\n }\n _updateShouldBeVisible() {\n const shouldBeVisible = this._applyVisibilitySetting();\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n setIsNeeded(isNeeded) {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n setDomNode(domNode) {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n // Now that the flags & the dom node are in a consistent state, ensure the Hidden/Visible configuration\n this.setShouldBeVisible(false);\n }\n ensureVisibility() {\n if (!this._isNeeded) {\n // Nothing to be rendered\n this._hide(false);\n return;\n }\n if (this._shouldBeVisible) {\n this._reveal();\n }\n else {\n this._hide(true);\n }\n }\n _reveal() {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n // The CSS animation doesn't play otherwise\n this._revealTimer.setIfNotSet(() => {\n if (this._domNode) {\n this._domNode.setClassName(this._visibleClassName);\n }\n }, 0);\n }\n _hide(withFadeAway) {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n if (this._domNode) {\n this._domNode.setClassName(this._invisibleClassName + (withFadeAway ? ' fade' : ''));\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../dom.js';\nimport { createFastDomNode } from '../../fastDomNode.js';\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../globalMouseMoveMonitor.js';\nimport { ScrollbarArrow } from './scrollbarArrow.js';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController.js';\nimport { Widget } from '../widget.js';\nimport * as platform from '../../../common/platform.js';\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst MOUSE_DRAG_RESET_DISTANCE = 140;\nexport class AbstractScrollbar extends Widget {\n constructor(opts) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'visible scrollbar ' + opts.extraScrollbarClassName, 'invisible scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._mouseMoveMonitor = this._register(new GlobalMouseMoveMonitor());\n this._shouldRender = true;\n this.domNode = createFastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n this.onmousedown(this.domNode.domNode, (e) => this._domNodeMouseDown(e));\n }\n // ----------------- creation\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n _createArrow(opts) {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n }\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n _createSlider(top, left, width, height) {\n this.slider = createFastDomNode(document.createElement('div'));\n this.slider.setClassName('slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n this.domNode.domNode.appendChild(this.slider.domNode);\n this.onmousedown(this.slider.domNode, (e) => {\n if (e.leftButton) {\n e.preventDefault();\n this._sliderMouseDown(e, () => { });\n }\n });\n this.onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n // ----------------- Update state\n _onElementSize(visibleSize) {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n _onElementScrollSize(elementScrollSize) {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n _onElementScrollPosition(elementScrollPosition) {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n // ----------------- rendering\n beginReveal() {\n this._visibilityController.setShouldBeVisible(true);\n }\n beginHide() {\n this._visibilityController.setShouldBeVisible(false);\n }\n render() {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n _domNodeMouseDown(e) {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._onMouseDown(e);\n }\n delegateMouseDown(e) {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const mousePos = this._sliderMousePosition(e);\n if (sliderStart <= mousePos && mousePos <= sliderStop) {\n // Act as if it was a mouse down on the slider\n if (e.leftButton) {\n e.preventDefault();\n this._sliderMouseDown(e, () => { });\n }\n }\n else {\n // Act as if it was a mouse down on the scrollbar\n this._onMouseDown(e);\n }\n }\n _onMouseDown(e) {\n let offsetX;\n let offsetY;\n if (e.target === this.domNode.domNode && typeof e.browserEvent.offsetX === 'number' && typeof e.browserEvent.offsetY === 'number') {\n offsetX = e.browserEvent.offsetX;\n offsetY = e.browserEvent.offsetY;\n }\n else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.posx - domNodePosition.left;\n offsetY = e.posy - domNodePosition.top;\n }\n const offset = this._mouseDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset));\n if (e.leftButton) {\n e.preventDefault();\n this._sliderMouseDown(e, () => { });\n }\n }\n _sliderMouseDown(e, onDragFinished) {\n const initialMousePosition = this._sliderMousePosition(e);\n const initialMouseOrthogonalPosition = this._sliderOrthogonalMousePosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('active', true);\n this._mouseMoveMonitor.startMonitoring(e.target, e.buttons, standardMouseMoveMerger, (mouseMoveData) => {\n const mouseOrthogonalPosition = this._sliderOrthogonalMousePosition(mouseMoveData);\n const mouseOrthogonalDelta = Math.abs(mouseOrthogonalPosition - initialMouseOrthogonalPosition);\n if (platform.isWindows && mouseOrthogonalDelta > MOUSE_DRAG_RESET_DISTANCE) {\n // The mouse has wondered away from the scrollbar => reset dragging\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n const mousePosition = this._sliderMousePosition(mouseMoveData);\n const mouseDelta = mousePosition - initialMousePosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(mouseDelta));\n }, () => {\n this.slider.toggleClassName('active', false);\n this._host.onDragEnd();\n onDragFinished();\n });\n this._host.onDragStart();\n }\n _setDesiredScrollPositionNow(_desiredScrollPosition) {\n const desiredScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n updateScrollbarSize(scrollbarSize) {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n isNeeded() {\n return this._scrollbarState.isNeeded();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * The minimal size of the slider (such that it can still be clickable) -- it is artificially enlarged.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\nexport class ScrollbarState {\n constructor(arrowSize, scrollbarSize, oppositeScrollbarSize, visibleSize, scrollSize, scrollPosition) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n this._refreshComputedValues();\n }\n clone() {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n setVisibleSize(visibleSize) {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n setScrollSize(scrollSize) {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n setScrollPosition(scrollPosition) {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n setScrollbarSize(scrollbarSize) {\n this._scrollbarSize = Math.round(scrollbarSize);\n }\n setOppositeScrollbarSize(oppositeScrollbarSize) {\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n }\n static _computeValues(oppositeScrollbarSize, arrowSize, visibleSize, scrollSize, scrollPosition) {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n if (!computedIsNeeded) {\n // There is no need for a slider\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n // We must artificially increase the size of the slider if needed, since the slider would be too small to grab with the mouse otherwise\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n // The slider can move from 0 to `computedRepresentableSize` - `computedSliderSize`\n // in the same way `scrollPosition` can move from 0 to `scrollSize` - `visibleSize`.\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n _refreshComputedValues() {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n getArrowSize() {\n return this._arrowSize;\n }\n getScrollPosition() {\n return this._scrollPosition;\n }\n getRectangleLargeSize() {\n return this._computedAvailableSize;\n }\n getRectangleSmallSize() {\n return this._scrollbarSize;\n }\n isNeeded() {\n return this._computedIsNeeded;\n }\n getSliderSize() {\n return this._computedSliderSize;\n }\n getSliderPosition() {\n return this._computedSliderPosition;\n }\n /**\n * Compute a desired `scrollPosition` such that `offset` ends up in the center of the slider.\n * `offset` is based on the same coordinate system as the `sliderPosition`.\n */\n getDesiredScrollPositionFromOffset(offset) {\n if (!this._computedIsNeeded) {\n // no need for a slider\n return 0;\n }\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n /**\n * Compute a desired `scrollPosition` from if offset is before or after the slider position.\n * If offset is before slider, treat as a page up (or left). If after, page down (or right).\n * `offset` and `_computedSliderPosition` are based on the same coordinate system.\n * `_visibleSize` corresponds to a \"page\" of lines in the returned coordinate system.\n */\n getDesiredScrollPositionFromOffsetPaged(offset) {\n if (!this._computedIsNeeded) {\n // no need for a slider\n return 0;\n }\n const correctedOffset = offset - this._arrowSize; // compensate if has arrows\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize; // page up/left\n }\n else {\n desiredScrollPosition += this._visibleSize; // page down/right\n }\n return desiredScrollPosition;\n }\n /**\n * Compute a desired `scrollPosition` such that the slider moves by `delta`.\n */\n getDesiredScrollPositionFromDelta(delta) {\n if (!this._computedIsNeeded) {\n // no need for a slider\n return 0;\n }\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { StandardWheelEvent } from '../../mouseEvent.js';\nimport { AbstractScrollbar } from './abstractScrollbar.js';\nimport { ARROW_IMG_SIZE } from './scrollbarArrow.js';\nimport { ScrollbarState } from './scrollbarState.js';\nimport { Codicon, registerCodicon } from '../../../common/codicons.js';\nconst scrollbarButtonLeftIcon = registerCodicon('scrollbar-button-left', Codicon.triangleLeft);\nconst scrollbarButtonRightIcon = registerCodicon('scrollbar-button-right', Codicon.triangleRight);\nexport class HorizontalScrollbar extends AbstractScrollbar {\n constructor(scrollable, options, host) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState((options.horizontalHasArrows ? options.arrowSize : 0), (options.horizontal === 2 /* Hidden */ ? 0 : options.horizontalScrollbarSize), (options.vertical === 2 /* Hidden */ ? 0 : options.verticalScrollbarSize), scrollDimensions.width, scrollDimensions.scrollWidth, scrollPosition.scrollLeft),\n visibility: options.horizontal,\n extraScrollbarClassName: 'horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n if (options.horizontalHasArrows) {\n const arrowDelta = (options.arrowSize - ARROW_IMG_SIZE) / 2;\n const scrollbarDelta = (options.horizontalScrollbarSize - ARROW_IMG_SIZE) / 2;\n this._createArrow({\n className: 'scra',\n icon: scrollbarButtonLeftIcon,\n top: scrollbarDelta,\n left: arrowDelta,\n bottom: undefined,\n right: undefined,\n bgWidth: options.arrowSize,\n bgHeight: options.horizontalScrollbarSize,\n onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, 1, 0)),\n });\n this._createArrow({\n className: 'scra',\n icon: scrollbarButtonRightIcon,\n top: scrollbarDelta,\n left: undefined,\n bottom: undefined,\n right: arrowDelta,\n bgWidth: options.arrowSize,\n bgHeight: options.horizontalScrollbarSize,\n onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, -1, 0)),\n });\n }\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n _updateSlider(sliderSize, sliderPosition) {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n _renderDomNode(largeSize, smallSize) {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n onDidScroll(e) {\n this._shouldRender = this._onElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._onElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._onElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n _mouseDownRelativePosition(offsetX, offsetY) {\n return offsetX;\n }\n _sliderMousePosition(e) {\n return e.posx;\n }\n _sliderOrthogonalMousePosition(e) {\n return e.posy;\n }\n _updateScrollbarSize(size) {\n this.slider.setHeight(size);\n }\n writeScrollPosition(target, scrollPosition) {\n target.scrollLeft = scrollPosition;\n }\n updateOptions(options) {\n this.updateScrollbarSize(options.horizontal === 2 /* Hidden */ ? 0 : options.horizontalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(options.vertical === 2 /* Hidden */ ? 0 : options.verticalScrollbarSize);\n this._visibilityController.setVisibility(options.horizontal);\n this._scrollByPage = options.scrollByPage;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { StandardWheelEvent } from '../../mouseEvent.js';\nimport { AbstractScrollbar } from './abstractScrollbar.js';\nimport { ARROW_IMG_SIZE } from './scrollbarArrow.js';\nimport { ScrollbarState } from './scrollbarState.js';\nimport { Codicon, registerCodicon } from '../../../common/codicons.js';\nconst scrollbarButtonUpIcon = registerCodicon('scrollbar-button-up', Codicon.triangleUp);\nconst scrollbarButtonDownIcon = registerCodicon('scrollbar-button-down', Codicon.triangleDown);\nexport class VerticalScrollbar extends AbstractScrollbar {\n constructor(scrollable, options, host) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState((options.verticalHasArrows ? options.arrowSize : 0), (options.vertical === 2 /* Hidden */ ? 0 : options.verticalScrollbarSize), \n // give priority to vertical scroll bar over horizontal and let it scroll all the way to the bottom\n 0, scrollDimensions.height, scrollDimensions.scrollHeight, scrollPosition.scrollTop),\n visibility: options.vertical,\n extraScrollbarClassName: 'vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n if (options.verticalHasArrows) {\n const arrowDelta = (options.arrowSize - ARROW_IMG_SIZE) / 2;\n const scrollbarDelta = (options.verticalScrollbarSize - ARROW_IMG_SIZE) / 2;\n this._createArrow({\n className: 'scra',\n icon: scrollbarButtonUpIcon,\n top: arrowDelta,\n left: scrollbarDelta,\n bottom: undefined,\n right: undefined,\n bgWidth: options.verticalScrollbarSize,\n bgHeight: options.arrowSize,\n onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, 0, 1)),\n });\n this._createArrow({\n className: 'scra',\n icon: scrollbarButtonDownIcon,\n top: undefined,\n left: scrollbarDelta,\n bottom: arrowDelta,\n right: undefined,\n bgWidth: options.verticalScrollbarSize,\n bgHeight: options.arrowSize,\n onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, 0, -1)),\n });\n }\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n _updateSlider(sliderSize, sliderPosition) {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n _renderDomNode(largeSize, smallSize) {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n onDidScroll(e) {\n this._shouldRender = this._onElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._onElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._onElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n _mouseDownRelativePosition(offsetX, offsetY) {\n return offsetY;\n }\n _sliderMousePosition(e) {\n return e.posy;\n }\n _sliderOrthogonalMousePosition(e) {\n return e.posx;\n }\n _updateScrollbarSize(size) {\n this.slider.setWidth(size);\n }\n writeScrollPosition(target, scrollPosition) {\n target.scrollTop = scrollPosition;\n }\n updateOptions(options) {\n this.updateScrollbarSize(options.vertical === 2 /* Hidden */ ? 0 : options.verticalScrollbarSize);\n // give priority to vertical scroll bar over horizontal and let it scroll all the way to the bottom\n this._scrollbarState.setOppositeScrollbarSize(0);\n this._visibilityController.setVisibility(options.vertical);\n this._scrollByPage = options.scrollByPage;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getZoomFactor } from '../../browser.js';\nimport * as dom from '../../dom.js';\nimport { createFastDomNode } from '../../fastDomNode.js';\nimport { StandardWheelEvent } from '../../mouseEvent.js';\nimport { HorizontalScrollbar } from './horizontalScrollbar.js';\nimport { VerticalScrollbar } from './verticalScrollbar.js';\nimport { Widget } from '../widget.js';\nimport { TimeoutTimer } from '../../../common/async.js';\nimport { Emitter } from '../../../common/event.js';\nimport { dispose } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport { Scrollable } from '../../../common/scrollable.js';\nimport './media/scrollbars.css';\nconst HIDE_TIMEOUT = 500;\nconst SCROLL_WHEEL_SENSITIVITY = 50;\nconst SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED = true;\nclass MouseWheelClassifierItem {\n constructor(timestamp, deltaX, deltaY) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\nexport class MouseWheelClassifier {\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n isPhysicalMouseWheel() {\n if (this._front === -1 && this._rear === -1) {\n // no elements\n return false;\n }\n // 0.5 * last + 0.25 * 2nd last + 0.125 * 3rd last + ...\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n let index = this._rear;\n do {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n if (index === this._front) {\n break;\n }\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n } while (true);\n return (score <= 0.5);\n }\n accept(timestamp, deltaX, deltaY) {\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n item.score = this._computeScore(item);\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n }\n else {\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n // Drop oldest\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n }\n /**\n * A score between 0 and 1 for `item`.\n * - a score towards 0 indicates that the source appears to be a physical mouse wheel\n * - a score towards 1 indicates that the source appears to be a touchpad or magic mouse, etc.\n */\n _computeScore(item) {\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n // both axes exercised => definitely not a physical mouse wheel\n return 1;\n }\n let score = 0.5;\n const prev = (this._front === -1 && this._rear === -1 ? null : this._memory[this._rear]);\n if (prev) {\n // const deltaT = item.timestamp - prev.timestamp;\n // if (deltaT < 1000 / 30) {\n // \t// sooner than X times per second => indicator that this is not a physical mouse wheel\n // \tscore += 0.25;\n // }\n // if (item.deltaX === prev.deltaX && item.deltaY === prev.deltaY) {\n // \t// equal amplitude => indicator that this is a physical mouse wheel\n // \tscore -= 0.25;\n // }\n }\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n // non-integer deltas => indicator that this is not a physical mouse wheel\n score += 0.25;\n }\n return Math.min(Math.max(score, 0), 1);\n }\n _isAlmostInt(value) {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\nMouseWheelClassifier.INSTANCE = new MouseWheelClassifier();\nexport class AbstractScrollableElement extends Widget {\n constructor(element, options, scrollable) {\n super();\n this._onScroll = this._register(new Emitter());\n this.onScroll = this._onScroll.event;\n this._onWillScroll = this._register(new Emitter());\n element.style.overflow = 'hidden';\n this._options = resolveOptions(options);\n this._scrollable = scrollable;\n this._register(this._scrollable.onScroll((e) => {\n this._onWillScroll.fire(e);\n this._onDidScroll(e);\n this._onScroll.fire(e);\n }));\n const scrollbarHost = {\n onMouseWheel: (mouseWheelEvent) => this._onMouseWheel(mouseWheelEvent),\n onDragStart: () => this._onDragStart(),\n onDragEnd: () => this._onDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._domNode = document.createElement('div');\n this._domNode.className = 'monaco-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.style.overflow = 'hidden';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n if (this._options.useShadows) {\n this._leftShadowDomNode = createFastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n this._topShadowDomNode = createFastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n this._topLeftShadowDomNode = createFastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n }\n else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n this._listenOnDomNode = this._options.listenOnDomNode || this._domNode;\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n this.onmouseover(this._listenOnDomNode, (e) => this._onMouseOver(e));\n this.onnonbubblingmouseout(this._listenOnDomNode, (e) => this._onMouseOut(e));\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n this._shouldRender = true;\n this._revealOnScroll = true;\n }\n dispose() {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n /**\n * Get the generated 'scrollable' dom node\n */\n getDomNode() {\n return this._domNode;\n }\n getOverviewRulerLayoutInfo() {\n return {\n parent: this._domNode,\n insertBefore: this._verticalScrollbar.domNode.domNode,\n };\n }\n /**\n * Delegate a mouse down event to the vertical scrollbar.\n * This is to help with clicking somewhere else and having the scrollbar react.\n */\n delegateVerticalScrollbarMouseDown(browserEvent) {\n this._verticalScrollbar.delegateMouseDown(browserEvent);\n }\n getScrollDimensions() {\n return this._scrollable.getScrollDimensions();\n }\n setScrollDimensions(dimensions) {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n /**\n * Update the class name of the scrollable element.\n */\n updateClassName(newClassName) {\n this._options.className = newClassName;\n // Defaults are different on Macs\n if (platform.isMacintosh) {\n this._options.className += ' mac';\n }\n this._domNode.className = 'monaco-scrollable-element ' + this._options.className;\n }\n /**\n * Update configuration options for the scrollbar.\n */\n updateOptions(newOptions) {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontal !== 'undefined') {\n this._options.horizontal = newOptions.horizontal;\n }\n if (typeof newOptions.vertical !== 'undefined') {\n this._options.vertical = newOptions.vertical;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n }\n if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n }\n if (typeof newOptions.scrollByPage !== 'undefined') {\n this._options.scrollByPage = newOptions.scrollByPage;\n }\n this._horizontalScrollbar.updateOptions(this._options);\n this._verticalScrollbar.updateOptions(this._options);\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n // -------------------- mouse wheel scrolling --------------------\n _setListeningToMouseWheel(shouldListen) {\n const isListening = (this._mouseWheelToDispose.length > 0);\n if (isListening === shouldListen) {\n // No change\n return;\n }\n // Stop listening (if necessary)\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n // Start listening (if necessary)\n if (shouldListen) {\n const onMouseWheel = (browserEvent) => {\n this._onMouseWheel(new StandardWheelEvent(browserEvent));\n };\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.EventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n _onMouseWheel(e) {\n const classifier = MouseWheelClassifier.INSTANCE;\n if (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED) {\n const osZoomFactor = window.devicePixelRatio / getZoomFactor();\n if (platform.isWindows || platform.isLinux) {\n // On Windows and Linux, the incoming delta events are multiplied with the OS zoom factor.\n // The OS zoom factor can be reverse engineered by using the device pixel ratio and the configured zoom factor into account.\n classifier.accept(Date.now(), e.deltaX / osZoomFactor, e.deltaY / osZoomFactor);\n }\n else {\n classifier.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n // console.log(`${Date.now()}, ${e.deltaY}, ${e.deltaX}`);\n let didScroll = false;\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n if (this._options.scrollPredominantAxis) {\n if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n }\n else {\n deltaY = 0;\n }\n }\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n // Convert vertical scrolling to horizontal if shift is held, this\n // is handled at a higher level on Mac\n const shiftConvert = !platform.isMacintosh && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n if (e.browserEvent && e.browserEvent.altKey) {\n // fastScrolling\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n let desiredScrollPosition = {};\n if (deltaY) {\n const deltaScrollTop = SCROLL_WHEEL_SENSITIVITY * deltaY;\n // Here we convert values such as -0.3 to -1 or 0.3 to 1, otherwise low speed scrolling will never scroll\n const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const deltaScrollLeft = SCROLL_WHEEL_SENSITIVITY * deltaX;\n // Here we convert values such as -0.3 to -1 or 0.3 to 1, otherwise low speed scrolling will never scroll\n const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n // Check that we are scrolling towards a location which is valid\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n const canPerformSmoothScroll = (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED\n && this._options.mouseWheelSmoothScroll\n && classifier.isPhysicalMouseWheel());\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n }\n else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n didScroll = true;\n }\n }\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n _onDidScroll(e) {\n this._shouldRender = this._horizontalScrollbar.onDidScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.onDidScroll(e) || this._shouldRender;\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n if (this._revealOnScroll) {\n this._reveal();\n }\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n /**\n * Render / mutate the DOM now.\n * Should be used together with the ctor option `lazyRender`.\n */\n renderNow() {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n this._render();\n }\n _render() {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n const leftClassName = (enableLeft ? ' left' : '');\n const topClassName = (enableTop ? ' top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' top-left-corner' : '');\n this._leftShadowDomNode.setClassName(`shadow${leftClassName}`);\n this._topShadowDomNode.setClassName(`shadow${topClassName}`);\n this._topLeftShadowDomNode.setClassName(`shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n // -------------------- fade in / fade out --------------------\n _onDragStart() {\n this._isDragging = true;\n this._reveal();\n }\n _onDragEnd() {\n this._isDragging = false;\n this._hide();\n }\n _onMouseOut(e) {\n this._mouseIsOver = false;\n this._hide();\n }\n _onMouseOver(e) {\n this._mouseIsOver = true;\n this._reveal();\n }\n _reveal() {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n _hide() {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n _scheduleHide() {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), HIDE_TIMEOUT);\n }\n }\n}\nexport class ScrollableElement extends AbstractScrollableElement {\n constructor(element, options) {\n options = options || {};\n options.mouseWheelSmoothScroll = false;\n const scrollable = new Scrollable(0, (callback) => dom.scheduleAtNextAnimationFrame(callback));\n super(element, options, scrollable);\n this._register(scrollable);\n }\n setScrollPosition(update) {\n this._scrollable.setScrollPositionNow(update);\n }\n getScrollPosition() {\n return this._scrollable.getCurrentScrollPosition();\n }\n}\nexport class SmoothScrollableElement extends AbstractScrollableElement {\n constructor(element, options, scrollable) {\n super(element, options, scrollable);\n }\n setScrollPosition(update) {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n }\n else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n getScrollPosition() {\n return this._scrollable.getCurrentScrollPosition();\n }\n}\nexport class DomScrollableElement extends ScrollableElement {\n constructor(element, options) {\n super(element, options);\n this._element = element;\n this.onScroll((e) => {\n if (e.scrollTopChanged) {\n this._element.scrollTop = e.scrollTop;\n }\n if (e.scrollLeftChanged) {\n this._element.scrollLeft = e.scrollLeft;\n }\n });\n this.scanDomNode();\n }\n scanDomNode() {\n // width, scrollLeft, scrollWidth, height, scrollTop, scrollHeight\n this.setScrollDimensions({\n width: this._element.clientWidth,\n scrollWidth: this._element.scrollWidth,\n height: this._element.clientHeight,\n scrollHeight: this._element.scrollHeight\n });\n this.setScrollPosition({\n scrollLeft: this._element.scrollLeft,\n scrollTop: this._element.scrollTop,\n });\n }\n}\nfunction resolveOptions(opts) {\n const result = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n arrowSize: (typeof opts.arrowSize !== 'undefined' ? opts.arrowSize : 11),\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : 1 /* Auto */),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : 1 /* Auto */),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n // Defaults are different on Macs\n if (platform.isMacintosh) {\n result.className += ' mac';\n }\n return result;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const IModelService = createDecorator('modelService');\nexport function shouldSynchronizeModel(model) {\n return (!model.isTooLargeForSyncing() && !model.isForSimpleWidget);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../dom.js';\nimport { StandardKeyboardEvent } from '../keyboardEvent.js';\nimport { StandardMouseEvent } from '../mouseEvent.js';\nimport { Gesture } from '../touch.js';\nimport { Disposable } from '../../common/lifecycle.js';\nexport class Widget extends Disposable {\n onclick(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.CLICK, (e) => listener(new StandardMouseEvent(e))));\n }\n onmousedown(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_DOWN, (e) => listener(new StandardMouseEvent(e))));\n }\n onmouseover(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_OVER, (e) => listener(new StandardMouseEvent(e))));\n }\n onnonbubblingmouseout(domNode, listener) {\n this._register(dom.addDisposableNonBubblingMouseOutListener(domNode, (e) => listener(new StandardMouseEvent(e))));\n }\n onkeydown(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.KEY_DOWN, (e) => listener(new StandardKeyboardEvent(e))));\n }\n onkeyup(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.KEY_UP, (e) => listener(new StandardKeyboardEvent(e))));\n }\n oninput(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.INPUT, listener));\n }\n onblur(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.BLUR, listener));\n }\n onfocus(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.FOCUS, listener));\n }\n ignoreGesture(domNode) {\n Gesture.ignoreTarget(domNode);\n }\n}\n","const hasBuffer = (typeof Buffer !== 'undefined');\nlet textDecoder;\nexport class VSBuffer {\n constructor(buffer) {\n this.buffer = buffer;\n this.byteLength = this.buffer.byteLength;\n }\n static wrap(actual) {\n if (hasBuffer && !(Buffer.isBuffer(actual))) {\n // https://nodejs.org/dist/latest-v10.x/docs/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length\n // Create a zero-copy Buffer wrapper around the ArrayBuffer pointed to by the Uint8Array\n actual = Buffer.from(actual.buffer, actual.byteOffset, actual.byteLength);\n }\n return new VSBuffer(actual);\n }\n toString() {\n if (hasBuffer) {\n return this.buffer.toString();\n }\n else {\n if (!textDecoder) {\n textDecoder = new TextDecoder();\n }\n return textDecoder.decode(this.buffer);\n }\n }\n}\nexport function readUInt16LE(source, offset) {\n return (((source[offset + 0] << 0) >>> 0) |\n ((source[offset + 1] << 8) >>> 0));\n}\nexport function writeUInt16LE(destination, value, offset) {\n destination[offset + 0] = (value & 0b11111111);\n value = value >>> 8;\n destination[offset + 1] = (value & 0b11111111);\n}\nexport function readUInt32BE(source, offset) {\n return (source[offset] * Math.pow(2, 24)\n + source[offset + 1] * Math.pow(2, 16)\n + source[offset + 2] * Math.pow(2, 8)\n + source[offset + 3]);\n}\nexport function writeUInt32BE(destination, value, offset) {\n destination[offset + 3] = value;\n value = value >>> 8;\n destination[offset + 2] = value;\n value = value >>> 8;\n destination[offset + 1] = value;\n value = value >>> 8;\n destination[offset] = value;\n}\nexport function readUInt8(source, offset) {\n return source[offset];\n}\nexport function writeUInt8(destination, value, offset) {\n destination[offset] = value;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter, Event } from './event.js';\nconst shortcutEvent = Object.freeze(function (callback, context) {\n const handle = setTimeout(callback.bind(context), 0);\n return { dispose() { clearTimeout(handle); } };\n});\nexport var CancellationToken;\n(function (CancellationToken) {\n function isCancellationToken(thing) {\n if (thing === CancellationToken.None || thing === CancellationToken.Cancelled) {\n return true;\n }\n if (thing instanceof MutableToken) {\n return true;\n }\n if (!thing || typeof thing !== 'object') {\n return false;\n }\n return typeof thing.isCancellationRequested === 'boolean'\n && typeof thing.onCancellationRequested === 'function';\n }\n CancellationToken.isCancellationToken = isCancellationToken;\n CancellationToken.None = Object.freeze({\n isCancellationRequested: false,\n onCancellationRequested: Event.None\n });\n CancellationToken.Cancelled = Object.freeze({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent\n });\n})(CancellationToken || (CancellationToken = {}));\nclass MutableToken {\n constructor() {\n this._isCancelled = false;\n this._emitter = null;\n }\n cancel() {\n if (!this._isCancelled) {\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire(undefined);\n this.dispose();\n }\n }\n }\n get isCancellationRequested() {\n return this._isCancelled;\n }\n get onCancellationRequested() {\n if (this._isCancelled) {\n return shortcutEvent;\n }\n if (!this._emitter) {\n this._emitter = new Emitter();\n }\n return this._emitter.event;\n }\n dispose() {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = null;\n }\n }\n}\nexport class CancellationTokenSource {\n constructor(parent) {\n this._token = undefined;\n this._parentListener = undefined;\n this._parentListener = parent && parent.onCancellationRequested(this.cancel, this);\n }\n get token() {\n if (!this._token) {\n // be lazy and create the token only when\n // actually needed\n this._token = new MutableToken();\n }\n return this._token;\n }\n cancel() {\n if (!this._token) {\n // save an object by returning the default\n // cancelled token when cancellation happens\n // before someone asks for the token\n this._token = CancellationToken.Cancelled;\n }\n else if (this._token instanceof MutableToken) {\n // actually cancel\n this._token.cancel();\n }\n }\n dispose(cancel = false) {\n if (cancel) {\n this.cancel();\n }\n if (this._parentListener) {\n this._parentListener.dispose();\n }\n if (!this._token) {\n // ensure to initialize with an empty token if we had none\n this._token = CancellationToken.None;\n }\n else if (this._token instanceof MutableToken) {\n // actually dispose\n this._token.dispose();\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport var Iterable;\n(function (Iterable) {\n function is(thing) {\n return thing && typeof thing === 'object' && typeof thing[Symbol.iterator] === 'function';\n }\n Iterable.is = is;\n const _empty = Object.freeze([]);\n function empty() {\n return _empty;\n }\n Iterable.empty = empty;\n function* single(element) {\n yield element;\n }\n Iterable.single = single;\n function from(iterable) {\n return iterable || _empty;\n }\n Iterable.from = from;\n function isEmpty(iterable) {\n return !iterable || iterable[Symbol.iterator]().next().done === true;\n }\n Iterable.isEmpty = isEmpty;\n function first(iterable) {\n return iterable[Symbol.iterator]().next().value;\n }\n Iterable.first = first;\n function some(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n return true;\n }\n }\n return false;\n }\n Iterable.some = some;\n function find(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n return element;\n }\n }\n return undefined;\n }\n Iterable.find = find;\n function* filter(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n yield element;\n }\n }\n }\n Iterable.filter = filter;\n function* map(iterable, fn) {\n let index = 0;\n for (const element of iterable) {\n yield fn(element, index++);\n }\n }\n Iterable.map = map;\n function* concat(...iterables) {\n for (const iterable of iterables) {\n for (const element of iterable) {\n yield element;\n }\n }\n }\n Iterable.concat = concat;\n function* concatNested(iterables) {\n for (const iterable of iterables) {\n for (const element of iterable) {\n yield element;\n }\n }\n }\n Iterable.concatNested = concatNested;\n function reduce(iterable, reducer, initialValue) {\n let value = initialValue;\n for (const element of iterable) {\n value = reducer(value, element);\n }\n return value;\n }\n Iterable.reduce = reduce;\n /**\n * Returns an iterable slice of the array, with the same semantics as `array.slice()`.\n */\n function* slice(arr, from, to = arr.length) {\n if (from < 0) {\n from += arr.length;\n }\n if (to < 0) {\n to += arr.length;\n }\n else if (to > arr.length) {\n to = arr.length;\n }\n for (; from < to; from++) {\n yield arr[from];\n }\n }\n Iterable.slice = slice;\n /**\n * Consumes `atMost` elements from iterable and returns the consumed elements,\n * and an iterable for the rest of the elements.\n */\n function consume(iterable, atMost = Number.POSITIVE_INFINITY) {\n const consumed = [];\n if (atMost === 0) {\n return [consumed, iterable];\n }\n const iterator = iterable[Symbol.iterator]();\n for (let i = 0; i < atMost; i++) {\n const next = iterator.next();\n if (next.done) {\n return [consumed, Iterable.empty()];\n }\n consumed.push(next.value);\n }\n return [consumed, { [Symbol.iterator]() { return iterator; } }];\n }\n Iterable.consume = consume;\n /**\n * Returns whether the iterables are the same length and all items are\n * equal using the comparator function.\n */\n function equals(a, b, comparator = (at, bt) => at === bt) {\n const ai = a[Symbol.iterator]();\n const bi = b[Symbol.iterator]();\n while (true) {\n const an = ai.next();\n const bn = bi.next();\n if (an.done !== bn.done) {\n return false;\n }\n else if (an.done) {\n return true;\n }\n else if (!comparator(an.value, bn.value)) {\n return false;\n }\n }\n }\n Iterable.equals = equals;\n})(Iterable || (Iterable = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Describes what to do with the indentation when pressing Enter.\n */\nexport var IndentAction;\n(function (IndentAction) {\n /**\n * Insert new line and copy the previous line's indentation.\n */\n IndentAction[IndentAction[\"None\"] = 0] = \"None\";\n /**\n * Insert new line and indent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Indent\"] = 1] = \"Indent\";\n /**\n * Insert two new lines:\n * - the first one indented which will hold the cursor\n * - the second one at the same indentation level\n */\n IndentAction[IndentAction[\"IndentOutdent\"] = 2] = \"IndentOutdent\";\n /**\n * Insert new line and outdent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Outdent\"] = 3] = \"Outdent\";\n})(IndentAction || (IndentAction = {}));\n/**\n * @internal\n */\nexport class StandardAutoClosingPairConditional {\n constructor(source) {\n this._standardAutoClosingPairConditionalBrand = undefined;\n this.open = source.open;\n this.close = source.close;\n // initially allowed in all tokens\n this._standardTokenMask = 0;\n if (Array.isArray(source.notIn)) {\n for (let i = 0, len = source.notIn.length; i < len; i++) {\n const notIn = source.notIn[i];\n switch (notIn) {\n case 'string':\n this._standardTokenMask |= 2 /* String */;\n break;\n case 'comment':\n this._standardTokenMask |= 1 /* Comment */;\n break;\n case 'regex':\n this._standardTokenMask |= 4 /* RegEx */;\n break;\n }\n }\n }\n }\n isOK(standardToken) {\n return (this._standardTokenMask & standardToken) === 0;\n }\n}\n/**\n * @internal\n */\nexport class AutoClosingPairs {\n constructor(autoClosingPairs) {\n this.autoClosingPairsOpenByStart = new Map();\n this.autoClosingPairsOpenByEnd = new Map();\n this.autoClosingPairsCloseByStart = new Map();\n this.autoClosingPairsCloseByEnd = new Map();\n this.autoClosingPairsCloseSingleChar = new Map();\n for (const pair of autoClosingPairs) {\n appendEntry(this.autoClosingPairsOpenByStart, pair.open.charAt(0), pair);\n appendEntry(this.autoClosingPairsOpenByEnd, pair.open.charAt(pair.open.length - 1), pair);\n appendEntry(this.autoClosingPairsCloseByStart, pair.close.charAt(0), pair);\n appendEntry(this.autoClosingPairsCloseByEnd, pair.close.charAt(pair.close.length - 1), pair);\n if (pair.close.length === 1 && pair.open.length === 1) {\n appendEntry(this.autoClosingPairsCloseSingleChar, pair.close, pair);\n }\n }\n }\n}\nfunction appendEntry(target, key, value) {\n if (target.has(key)) {\n target.get(key).push(value);\n }\n else {\n target.set(key, [value]);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Selection } from '../core/selection.js';\nexport class ReplaceCommand {\n constructor(range, text, insertsAutoWhitespace = false) {\n this._range = range;\n this._text = text;\n this.insertsAutoWhitespace = insertsAutoWhitespace;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text);\n }\n computeCursorState(model, helper) {\n let inverseEditOperations = helper.getInverseEditOperations();\n let srcRange = inverseEditOperations[0].range;\n return new Selection(srcRange.endLineNumber, srcRange.endColumn, srcRange.endLineNumber, srcRange.endColumn);\n }\n}\nexport class ReplaceCommandThatSelectsText {\n constructor(range, text) {\n this._range = range;\n this._text = text;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text);\n }\n computeCursorState(model, helper) {\n const inverseEditOperations = helper.getInverseEditOperations();\n const srcRange = inverseEditOperations[0].range;\n return new Selection(srcRange.startLineNumber, srcRange.startColumn, srcRange.endLineNumber, srcRange.endColumn);\n }\n}\nexport class ReplaceCommandWithoutChangingPosition {\n constructor(range, text, insertsAutoWhitespace = false) {\n this._range = range;\n this._text = text;\n this.insertsAutoWhitespace = insertsAutoWhitespace;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text);\n }\n computeCursorState(model, helper) {\n let inverseEditOperations = helper.getInverseEditOperations();\n let srcRange = inverseEditOperations[0].range;\n return new Selection(srcRange.startLineNumber, srcRange.startColumn, srcRange.startLineNumber, srcRange.startColumn);\n }\n}\nexport class ReplaceCommandWithOffsetCursorState {\n constructor(range, text, lineNumberDeltaOffset, columnDeltaOffset, insertsAutoWhitespace = false) {\n this._range = range;\n this._text = text;\n this._columnDeltaOffset = columnDeltaOffset;\n this._lineNumberDeltaOffset = lineNumberDeltaOffset;\n this.insertsAutoWhitespace = insertsAutoWhitespace;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text);\n }\n computeCursorState(model, helper) {\n let inverseEditOperations = helper.getInverseEditOperations();\n let srcRange = inverseEditOperations[0].range;\n return new Selection(srcRange.endLineNumber + this._lineNumberDeltaOffset, srcRange.endColumn + this._columnDeltaOffset, srcRange.endLineNumber + this._lineNumberDeltaOffset, srcRange.endColumn + this._columnDeltaOffset);\n }\n}\nexport class ReplaceCommandThatPreservesSelection {\n constructor(editRange, text, initialSelection, forceMoveMarkers = false) {\n this._range = editRange;\n this._text = text;\n this._initialSelection = initialSelection;\n this._forceMoveMarkers = forceMoveMarkers;\n this._selectionId = null;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text, this._forceMoveMarkers);\n this._selectionId = builder.trackSelection(this._initialSelection);\n }\n computeCursorState(model, helper) {\n return helper.getTrackedSelection(this._selectionId);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Color, RGBA } from '../../../base/common/color.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { assertNever } from '../../../base/common/types.js';\nimport * as nls from '../../../nls.js';\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\nimport * as platform from '../../registry/common/platform.js';\n// color registry\nexport const Extensions = {\n ColorContribution: 'base.contributions.colors'\n};\nclass ColorRegistry {\n constructor() {\n this._onDidChangeSchema = new Emitter();\n this.onDidChangeSchema = this._onDidChangeSchema.event;\n this.colorSchema = { type: 'object', properties: {} };\n this.colorReferenceSchema = { type: 'string', enum: [], enumDescriptions: [] };\n this.colorsById = {};\n }\n registerColor(id, defaults, description, needsTransparency = false, deprecationMessage) {\n let colorContribution = { id, description, defaults, needsTransparency, deprecationMessage };\n this.colorsById[id] = colorContribution;\n let propertySchema = { type: 'string', description, format: 'color-hex', defaultSnippets: [{ body: '${1:#ff0000}' }] };\n if (deprecationMessage) {\n propertySchema.deprecationMessage = deprecationMessage;\n }\n this.colorSchema.properties[id] = propertySchema;\n this.colorReferenceSchema.enum.push(id);\n this.colorReferenceSchema.enumDescriptions.push(description);\n this._onDidChangeSchema.fire();\n return id;\n }\n resolveDefaultColor(id, theme) {\n const colorDesc = this.colorsById[id];\n if (colorDesc && colorDesc.defaults) {\n const colorValue = colorDesc.defaults[theme.type];\n return resolveColorValue(colorValue, theme);\n }\n return undefined;\n }\n getColorSchema() {\n return this.colorSchema;\n }\n toString() {\n let sorter = (a, b) => {\n let cat1 = a.indexOf('.') === -1 ? 0 : 1;\n let cat2 = b.indexOf('.') === -1 ? 0 : 1;\n if (cat1 !== cat2) {\n return cat1 - cat2;\n }\n return a.localeCompare(b);\n };\n return Object.keys(this.colorsById).sort(sorter).map(k => `- \\`${k}\\`: ${this.colorsById[k].description}`).join('\\n');\n }\n}\nconst colorRegistry = new ColorRegistry();\nplatform.Registry.add(Extensions.ColorContribution, colorRegistry);\nexport function registerColor(id, defaults, description, needsTransparency, deprecationMessage) {\n return colorRegistry.registerColor(id, defaults, description, needsTransparency, deprecationMessage);\n}\n// ----- base colors\nexport const foreground = registerColor('foreground', { dark: '#CCCCCC', light: '#616161', hc: '#FFFFFF' }, nls.localize('foreground', \"Overall foreground color. This color is only used if not overridden by a component.\"));\nexport const errorForeground = registerColor('errorForeground', { dark: '#F48771', light: '#A1260D', hc: '#F48771' }, nls.localize('errorForeground', \"Overall foreground color for error messages. This color is only used if not overridden by a component.\"));\nexport const iconForeground = registerColor('icon.foreground', { dark: '#C5C5C5', light: '#424242', hc: '#FFFFFF' }, nls.localize('iconForeground', \"The default color for icons in the workbench.\"));\nexport const focusBorder = registerColor('focusBorder', { dark: '#007FD4', light: '#0090F1', hc: '#F38518' }, nls.localize('focusBorder', \"Overall border color for focused elements. This color is only used if not overridden by a component.\"));\nexport const contrastBorder = registerColor('contrastBorder', { light: null, dark: null, hc: '#6FC3DF' }, nls.localize('contrastBorder', \"An extra border around elements to separate them from others for greater contrast.\"));\nexport const activeContrastBorder = registerColor('contrastActiveBorder', { light: null, dark: null, hc: focusBorder }, nls.localize('activeContrastBorder', \"An extra border around active elements to separate them from others for greater contrast.\"));\nexport const textLinkForeground = registerColor('textLink.foreground', { light: '#006AB1', dark: '#3794FF', hc: '#3794FF' }, nls.localize('textLinkForeground', \"Foreground color for links in text.\"));\nexport const textLinkActiveForeground = registerColor('textLink.activeForeground', { light: '#006AB1', dark: '#3794FF', hc: '#3794FF' }, nls.localize('textLinkActiveForeground', \"Foreground color for links in text when clicked on and on mouse hover.\"));\nexport const textCodeBlockBackground = registerColor('textCodeBlock.background', { light: '#dcdcdc66', dark: '#0a0a0a66', hc: Color.black }, nls.localize('textCodeBlockBackground', \"Background color for code blocks in text.\"));\n// ----- widgets\nexport const widgetShadow = registerColor('widget.shadow', { dark: transparent(Color.black, .36), light: transparent(Color.black, .16), hc: null }, nls.localize('widgetShadow', 'Shadow color of widgets such as find/replace inside the editor.'));\nexport const inputBackground = registerColor('input.background', { dark: '#3C3C3C', light: Color.white, hc: Color.black }, nls.localize('inputBoxBackground', \"Input box background.\"));\nexport const inputForeground = registerColor('input.foreground', { dark: foreground, light: foreground, hc: foreground }, nls.localize('inputBoxForeground', \"Input box foreground.\"));\nexport const inputBorder = registerColor('input.border', { dark: null, light: null, hc: contrastBorder }, nls.localize('inputBoxBorder', \"Input box border.\"));\nexport const inputActiveOptionBorder = registerColor('inputOption.activeBorder', { dark: '#007ACC00', light: '#007ACC00', hc: contrastBorder }, nls.localize('inputBoxActiveOptionBorder', \"Border color of activated options in input fields.\"));\nexport const inputActiveOptionBackground = registerColor('inputOption.activeBackground', { dark: transparent(focusBorder, 0.4), light: transparent(focusBorder, 0.2), hc: Color.transparent }, nls.localize('inputOption.activeBackground', \"Background color of activated options in input fields.\"));\nexport const inputActiveOptionForeground = registerColor('inputOption.activeForeground', { dark: Color.white, light: Color.black, hc: null }, nls.localize('inputOption.activeForeground', \"Foreground color of activated options in input fields.\"));\nexport const inputValidationInfoBackground = registerColor('inputValidation.infoBackground', { dark: '#063B49', light: '#D6ECF2', hc: Color.black }, nls.localize('inputValidationInfoBackground', \"Input validation background color for information severity.\"));\nexport const inputValidationInfoForeground = registerColor('inputValidation.infoForeground', { dark: null, light: null, hc: null }, nls.localize('inputValidationInfoForeground', \"Input validation foreground color for information severity.\"));\nexport const inputValidationInfoBorder = registerColor('inputValidation.infoBorder', { dark: '#007acc', light: '#007acc', hc: contrastBorder }, nls.localize('inputValidationInfoBorder', \"Input validation border color for information severity.\"));\nexport const inputValidationWarningBackground = registerColor('inputValidation.warningBackground', { dark: '#352A05', light: '#F6F5D2', hc: Color.black }, nls.localize('inputValidationWarningBackground', \"Input validation background color for warning severity.\"));\nexport const inputValidationWarningForeground = registerColor('inputValidation.warningForeground', { dark: null, light: null, hc: null }, nls.localize('inputValidationWarningForeground', \"Input validation foreground color for warning severity.\"));\nexport const inputValidationWarningBorder = registerColor('inputValidation.warningBorder', { dark: '#B89500', light: '#B89500', hc: contrastBorder }, nls.localize('inputValidationWarningBorder', \"Input validation border color for warning severity.\"));\nexport const inputValidationErrorBackground = registerColor('inputValidation.errorBackground', { dark: '#5A1D1D', light: '#F2DEDE', hc: Color.black }, nls.localize('inputValidationErrorBackground', \"Input validation background color for error severity.\"));\nexport const inputValidationErrorForeground = registerColor('inputValidation.errorForeground', { dark: null, light: null, hc: null }, nls.localize('inputValidationErrorForeground', \"Input validation foreground color for error severity.\"));\nexport const inputValidationErrorBorder = registerColor('inputValidation.errorBorder', { dark: '#BE1100', light: '#BE1100', hc: contrastBorder }, nls.localize('inputValidationErrorBorder', \"Input validation border color for error severity.\"));\nexport const selectBackground = registerColor('dropdown.background', { dark: '#3C3C3C', light: Color.white, hc: Color.black }, nls.localize('dropdownBackground', \"Dropdown background.\"));\nexport const selectForeground = registerColor('dropdown.foreground', { dark: '#F0F0F0', light: null, hc: Color.white }, nls.localize('dropdownForeground', \"Dropdown foreground.\"));\nexport const buttonForeground = registerColor('button.foreground', { dark: Color.white, light: Color.white, hc: Color.white }, nls.localize('buttonForeground', \"Button foreground color.\"));\nexport const buttonBackground = registerColor('button.background', { dark: '#0E639C', light: '#007ACC', hc: null }, nls.localize('buttonBackground', \"Button background color.\"));\nexport const buttonHoverBackground = registerColor('button.hoverBackground', { dark: lighten(buttonBackground, 0.2), light: darken(buttonBackground, 0.2), hc: null }, nls.localize('buttonHoverBackground', \"Button background color when hovering.\"));\nexport const badgeBackground = registerColor('badge.background', { dark: '#4D4D4D', light: '#C4C4C4', hc: Color.black }, nls.localize('badgeBackground', \"Badge background color. Badges are small information labels, e.g. for search results count.\"));\nexport const badgeForeground = registerColor('badge.foreground', { dark: Color.white, light: '#333', hc: Color.white }, nls.localize('badgeForeground', \"Badge foreground color. Badges are small information labels, e.g. for search results count.\"));\nexport const scrollbarShadow = registerColor('scrollbar.shadow', { dark: '#000000', light: '#DDDDDD', hc: null }, nls.localize('scrollbarShadow', \"Scrollbar shadow to indicate that the view is scrolled.\"));\nexport const scrollbarSliderBackground = registerColor('scrollbarSlider.background', { dark: Color.fromHex('#797979').transparent(0.4), light: Color.fromHex('#646464').transparent(0.4), hc: transparent(contrastBorder, 0.6) }, nls.localize('scrollbarSliderBackground', \"Scrollbar slider background color.\"));\nexport const scrollbarSliderHoverBackground = registerColor('scrollbarSlider.hoverBackground', { dark: Color.fromHex('#646464').transparent(0.7), light: Color.fromHex('#646464').transparent(0.7), hc: transparent(contrastBorder, 0.8) }, nls.localize('scrollbarSliderHoverBackground', \"Scrollbar slider background color when hovering.\"));\nexport const scrollbarSliderActiveBackground = registerColor('scrollbarSlider.activeBackground', { dark: Color.fromHex('#BFBFBF').transparent(0.4), light: Color.fromHex('#000000').transparent(0.6), hc: contrastBorder }, nls.localize('scrollbarSliderActiveBackground', \"Scrollbar slider background color when clicked on.\"));\nexport const progressBarBackground = registerColor('progressBar.background', { dark: Color.fromHex('#0E70C0'), light: Color.fromHex('#0E70C0'), hc: contrastBorder }, nls.localize('progressBarBackground', \"Background color of the progress bar that can show for long running operations.\"));\nexport const editorErrorBackground = registerColor('editorError.background', { dark: null, light: null, hc: null }, nls.localize('editorError.background', 'Background color of error text in the editor. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorErrorForeground = registerColor('editorError.foreground', { dark: '#F14C4C', light: '#E51400', hc: null }, nls.localize('editorError.foreground', 'Foreground color of error squigglies in the editor.'));\nexport const editorErrorBorder = registerColor('editorError.border', { dark: null, light: null, hc: Color.fromHex('#E47777').transparent(0.8) }, nls.localize('errorBorder', 'Border color of error boxes in the editor.'));\nexport const editorWarningBackground = registerColor('editorWarning.background', { dark: null, light: null, hc: null }, nls.localize('editorWarning.background', 'Background color of warning text in the editor. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorWarningForeground = registerColor('editorWarning.foreground', { dark: '#CCA700', light: '#BF8803', hc: null }, nls.localize('editorWarning.foreground', 'Foreground color of warning squigglies in the editor.'));\nexport const editorWarningBorder = registerColor('editorWarning.border', { dark: null, light: null, hc: Color.fromHex('#FFCC00').transparent(0.8) }, nls.localize('warningBorder', 'Border color of warning boxes in the editor.'));\nexport const editorInfoBackground = registerColor('editorInfo.background', { dark: null, light: null, hc: null }, nls.localize('editorInfo.background', 'Background color of info text in the editor. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorInfoForeground = registerColor('editorInfo.foreground', { dark: '#3794FF', light: '#1a85ff', hc: '#3794FF' }, nls.localize('editorInfo.foreground', 'Foreground color of info squigglies in the editor.'));\nexport const editorInfoBorder = registerColor('editorInfo.border', { dark: null, light: null, hc: Color.fromHex('#3794FF').transparent(0.8) }, nls.localize('infoBorder', 'Border color of info boxes in the editor.'));\nexport const editorHintForeground = registerColor('editorHint.foreground', { dark: Color.fromHex('#eeeeee').transparent(0.7), light: '#6c6c6c', hc: null }, nls.localize('editorHint.foreground', 'Foreground color of hint squigglies in the editor.'));\nexport const editorHintBorder = registerColor('editorHint.border', { dark: null, light: null, hc: Color.fromHex('#eeeeee').transparent(0.8) }, nls.localize('hintBorder', 'Border color of hint boxes in the editor.'));\n/**\n * Editor background color.\n * Because of bug https://monacotools.visualstudio.com/DefaultCollection/Monaco/_workitems/edit/13254\n * we are *not* using the color white (or #ffffff, rgba(255,255,255)) but something very close to white.\n */\nexport const editorBackground = registerColor('editor.background', { light: '#fffffe', dark: '#1E1E1E', hc: Color.black }, nls.localize('editorBackground', \"Editor background color.\"));\n/**\n * Editor foreground color.\n */\nexport const editorForeground = registerColor('editor.foreground', { light: '#333333', dark: '#BBBBBB', hc: Color.white }, nls.localize('editorForeground', \"Editor default foreground color.\"));\n/**\n * Editor widgets\n */\nexport const editorWidgetBackground = registerColor('editorWidget.background', { dark: '#252526', light: '#F3F3F3', hc: '#0C141F' }, nls.localize('editorWidgetBackground', 'Background color of editor widgets, such as find/replace.'));\nexport const editorWidgetForeground = registerColor('editorWidget.foreground', { dark: foreground, light: foreground, hc: foreground }, nls.localize('editorWidgetForeground', 'Foreground color of editor widgets, such as find/replace.'));\nexport const editorWidgetBorder = registerColor('editorWidget.border', { dark: '#454545', light: '#C8C8C8', hc: contrastBorder }, nls.localize('editorWidgetBorder', 'Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.'));\nexport const editorWidgetResizeBorder = registerColor('editorWidget.resizeBorder', { light: null, dark: null, hc: null }, nls.localize('editorWidgetResizeBorder', \"Border color of the resize bar of editor widgets. The color is only used if the widget chooses to have a resize border and if the color is not overridden by a widget.\"));\n/**\n * Quick pick widget\n */\nexport const quickInputBackground = registerColor('quickInput.background', { dark: editorWidgetBackground, light: editorWidgetBackground, hc: editorWidgetBackground }, nls.localize('pickerBackground', \"Quick picker background color. The quick picker widget is the container for pickers like the command palette.\"));\nexport const quickInputForeground = registerColor('quickInput.foreground', { dark: editorWidgetForeground, light: editorWidgetForeground, hc: editorWidgetForeground }, nls.localize('pickerForeground', \"Quick picker foreground color. The quick picker widget is the container for pickers like the command palette.\"));\nexport const quickInputTitleBackground = registerColor('quickInputTitle.background', { dark: new Color(new RGBA(255, 255, 255, 0.105)), light: new Color(new RGBA(0, 0, 0, 0.06)), hc: '#000000' }, nls.localize('pickerTitleBackground', \"Quick picker title background color. The quick picker widget is the container for pickers like the command palette.\"));\nexport const pickerGroupForeground = registerColor('pickerGroup.foreground', { dark: '#3794FF', light: '#0066BF', hc: Color.white }, nls.localize('pickerGroupForeground', \"Quick picker color for grouping labels.\"));\nexport const pickerGroupBorder = registerColor('pickerGroup.border', { dark: '#3F3F46', light: '#CCCEDB', hc: Color.white }, nls.localize('pickerGroupBorder', \"Quick picker color for grouping borders.\"));\n/**\n * Keybinding label\n */\nexport const keybindingLabelBackground = registerColor('keybindingLabel.background', { dark: new Color(new RGBA(128, 128, 128, 0.17)), light: new Color(new RGBA(221, 221, 221, 0.4)), hc: Color.transparent }, nls.localize('keybindingLabelBackground', \"Keybinding label background color. The keybinding label is used to represent a keyboard shortcut.\"));\nexport const keybindingLabelForeground = registerColor('keybindingLabel.foreground', { dark: Color.fromHex('#CCCCCC'), light: Color.fromHex('#555555'), hc: Color.white }, nls.localize('keybindingLabelForeground', \"Keybinding label foreground color. The keybinding label is used to represent a keyboard shortcut.\"));\nexport const keybindingLabelBorder = registerColor('keybindingLabel.border', { dark: new Color(new RGBA(51, 51, 51, 0.6)), light: new Color(new RGBA(204, 204, 204, 0.4)), hc: new Color(new RGBA(111, 195, 223)) }, nls.localize('keybindingLabelBorder', \"Keybinding label border color. The keybinding label is used to represent a keyboard shortcut.\"));\nexport const keybindingLabelBottomBorder = registerColor('keybindingLabel.bottomBorder', { dark: new Color(new RGBA(68, 68, 68, 0.6)), light: new Color(new RGBA(187, 187, 187, 0.4)), hc: new Color(new RGBA(111, 195, 223)) }, nls.localize('keybindingLabelBottomBorder', \"Keybinding label border bottom color. The keybinding label is used to represent a keyboard shortcut.\"));\n/**\n * Editor selection colors.\n */\nexport const editorSelectionBackground = registerColor('editor.selectionBackground', { light: '#ADD6FF', dark: '#264F78', hc: '#f3f518' }, nls.localize('editorSelectionBackground', \"Color of the editor selection.\"));\nexport const editorSelectionForeground = registerColor('editor.selectionForeground', { light: null, dark: null, hc: '#000000' }, nls.localize('editorSelectionForeground', \"Color of the selected text for high contrast.\"));\nexport const editorInactiveSelection = registerColor('editor.inactiveSelectionBackground', { light: transparent(editorSelectionBackground, 0.5), dark: transparent(editorSelectionBackground, 0.5), hc: transparent(editorSelectionBackground, 0.5) }, nls.localize('editorInactiveSelection', \"Color of the selection in an inactive editor. The color must not be opaque so as not to hide underlying decorations.\"), true);\nexport const editorSelectionHighlight = registerColor('editor.selectionHighlightBackground', { light: lessProminent(editorSelectionBackground, editorBackground, 0.3, 0.6), dark: lessProminent(editorSelectionBackground, editorBackground, 0.3, 0.6), hc: null }, nls.localize('editorSelectionHighlight', 'Color for regions with the same content as the selection. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorSelectionHighlightBorder = registerColor('editor.selectionHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('editorSelectionHighlightBorder', \"Border color for regions with the same content as the selection.\"));\n/**\n * Editor find match colors.\n */\nexport const editorFindMatch = registerColor('editor.findMatchBackground', { light: '#A8AC94', dark: '#515C6A', hc: null }, nls.localize('editorFindMatch', \"Color of the current search match.\"));\nexport const editorFindMatchHighlight = registerColor('editor.findMatchHighlightBackground', { light: '#EA5C0055', dark: '#EA5C0055', hc: null }, nls.localize('findMatchHighlight', \"Color of the other search matches. The color must not be opaque so as not to hide underlying decorations.\"), true);\nexport const editorFindRangeHighlight = registerColor('editor.findRangeHighlightBackground', { dark: '#3a3d4166', light: '#b4b4b44d', hc: null }, nls.localize('findRangeHighlight', \"Color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.\"), true);\nexport const editorFindMatchBorder = registerColor('editor.findMatchBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('editorFindMatchBorder', \"Border color of the current search match.\"));\nexport const editorFindMatchHighlightBorder = registerColor('editor.findMatchHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('findMatchHighlightBorder', \"Border color of the other search matches.\"));\nexport const editorFindRangeHighlightBorder = registerColor('editor.findRangeHighlightBorder', { dark: null, light: null, hc: transparent(activeContrastBorder, 0.4) }, nls.localize('findRangeHighlightBorder', \"Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.\"), true);\n/**\n * Editor hover\n */\nexport const editorHoverHighlight = registerColor('editor.hoverHighlightBackground', { light: '#ADD6FF26', dark: '#264f7840', hc: '#ADD6FF26' }, nls.localize('hoverHighlight', 'Highlight below the word for which a hover is shown. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorHoverBackground = registerColor('editorHoverWidget.background', { light: editorWidgetBackground, dark: editorWidgetBackground, hc: editorWidgetBackground }, nls.localize('hoverBackground', 'Background color of the editor hover.'));\nexport const editorHoverForeground = registerColor('editorHoverWidget.foreground', { light: editorWidgetForeground, dark: editorWidgetForeground, hc: editorWidgetForeground }, nls.localize('hoverForeground', 'Foreground color of the editor hover.'));\nexport const editorHoverBorder = registerColor('editorHoverWidget.border', { light: editorWidgetBorder, dark: editorWidgetBorder, hc: editorWidgetBorder }, nls.localize('hoverBorder', 'Border color of the editor hover.'));\nexport const editorHoverStatusBarBackground = registerColor('editorHoverWidget.statusBarBackground', { dark: lighten(editorHoverBackground, 0.2), light: darken(editorHoverBackground, 0.05), hc: editorWidgetBackground }, nls.localize('statusBarBackground', \"Background color of the editor hover status bar.\"));\n/**\n * Editor link colors\n */\nexport const editorActiveLinkForeground = registerColor('editorLink.activeForeground', { dark: '#4E94CE', light: Color.blue, hc: Color.cyan }, nls.localize('activeLinkForeground', 'Color of active links.'));\n/**\n * Inline hints\n */\nexport const editorInlayHintForeground = registerColor('editorInlayHint.foreground', { dark: transparent(badgeForeground, .8), light: transparent(badgeForeground, .8), hc: badgeForeground }, nls.localize('editorInlayHintForeground', 'Foreground color of inline hints'));\nexport const editorInlayHintBackground = registerColor('editorInlayHint.background', { dark: transparent(badgeBackground, .6), light: transparent(badgeBackground, .3), hc: badgeBackground }, nls.localize('editorInlayHintBackground', 'Background color of inline hints'));\nexport const editorInlayHintTypeForeground = registerColor('editorInlayHint.typeForeground', { dark: editorInlayHintForeground, light: editorInlayHintForeground, hc: editorInlayHintForeground }, nls.localize('editorInlayHintForegroundTypes', 'Foreground color of inline hints for types'));\nexport const editorInlayHintTypeBackground = registerColor('editorInlayHint.typeBackground', { dark: editorInlayHintBackground, light: editorInlayHintBackground, hc: editorInlayHintBackground }, nls.localize('editorInlayHintBackgroundTypes', 'Background color of inline hints for types'));\nexport const editorInlayHintParameterForeground = registerColor('editorInlayHint.parameterForeground', { dark: editorInlayHintForeground, light: editorInlayHintForeground, hc: editorInlayHintForeground }, nls.localize('editorInlayHintForegroundParameter', 'Foreground color of inline hints for parameters'));\nexport const editorInlayHintParameterBackground = registerColor('editorInlayHint.parameterBackground', { dark: editorInlayHintBackground, light: editorInlayHintBackground, hc: editorInlayHintBackground }, nls.localize('editorInlayHintBackgroundParameter', 'Background color of inline hints for parameters'));\n/**\n * Editor lighbulb icon colors\n */\nexport const editorLightBulbForeground = registerColor('editorLightBulb.foreground', { dark: '#FFCC00', light: '#DDB100', hc: '#FFCC00' }, nls.localize('editorLightBulbForeground', \"The color used for the lightbulb actions icon.\"));\nexport const editorLightBulbAutoFixForeground = registerColor('editorLightBulbAutoFix.foreground', { dark: '#75BEFF', light: '#007ACC', hc: '#75BEFF' }, nls.localize('editorLightBulbAutoFixForeground', \"The color used for the lightbulb auto fix actions icon.\"));\n/**\n * Diff Editor Colors\n */\nexport const defaultInsertColor = new Color(new RGBA(155, 185, 85, 0.2));\nexport const defaultRemoveColor = new Color(new RGBA(255, 0, 0, 0.2));\nexport const diffInserted = registerColor('diffEditor.insertedTextBackground', { dark: defaultInsertColor, light: defaultInsertColor, hc: null }, nls.localize('diffEditorInserted', 'Background color for text that got inserted. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const diffRemoved = registerColor('diffEditor.removedTextBackground', { dark: defaultRemoveColor, light: defaultRemoveColor, hc: null }, nls.localize('diffEditorRemoved', 'Background color for text that got removed. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const diffInsertedOutline = registerColor('diffEditor.insertedTextBorder', { dark: null, light: null, hc: '#33ff2eff' }, nls.localize('diffEditorInsertedOutline', 'Outline color for the text that got inserted.'));\nexport const diffRemovedOutline = registerColor('diffEditor.removedTextBorder', { dark: null, light: null, hc: '#FF008F' }, nls.localize('diffEditorRemovedOutline', 'Outline color for text that got removed.'));\nexport const diffBorder = registerColor('diffEditor.border', { dark: null, light: null, hc: contrastBorder }, nls.localize('diffEditorBorder', 'Border color between the two text editors.'));\nexport const diffDiagonalFill = registerColor('diffEditor.diagonalFill', { dark: '#cccccc33', light: '#22222233', hc: null }, nls.localize('diffDiagonalFill', \"Color of the diff editor's diagonal fill. The diagonal fill is used in side-by-side diff views.\"));\n/**\n * List and tree colors\n */\nexport const listFocusBackground = registerColor('list.focusBackground', { dark: null, light: null, hc: null }, nls.localize('listFocusBackground', \"List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listFocusForeground = registerColor('list.focusForeground', { dark: null, light: null, hc: null }, nls.localize('listFocusForeground', \"List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listFocusOutline = registerColor('list.focusOutline', { dark: focusBorder, light: focusBorder, hc: activeContrastBorder }, nls.localize('listFocusOutline', \"List/Tree outline color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listActiveSelectionBackground = registerColor('list.activeSelectionBackground', { dark: '#094771', light: '#0060C0', hc: null }, nls.localize('listActiveSelectionBackground', \"List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listActiveSelectionForeground = registerColor('list.activeSelectionForeground', { dark: Color.white, light: Color.white, hc: null }, nls.localize('listActiveSelectionForeground', \"List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listActiveSelectionIconForeground = registerColor('list.activeSelectionIconForeground', { dark: null, light: null, hc: null }, nls.localize('listActiveSelectionIconForeground', \"List/Tree icon foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listInactiveSelectionBackground = registerColor('list.inactiveSelectionBackground', { dark: '#37373D', light: '#E4E6F1', hc: null }, nls.localize('listInactiveSelectionBackground', \"List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listInactiveSelectionForeground = registerColor('list.inactiveSelectionForeground', { dark: null, light: null, hc: null }, nls.localize('listInactiveSelectionForeground', \"List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listInactiveSelectionIconForeground = registerColor('list.inactiveSelectionIconForeground', { dark: null, light: null, hc: null }, nls.localize('listInactiveSelectionIconForeground', \"List/Tree icon foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listInactiveFocusBackground = registerColor('list.inactiveFocusBackground', { dark: null, light: null, hc: null }, nls.localize('listInactiveFocusBackground', \"List/Tree background color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listInactiveFocusOutline = registerColor('list.inactiveFocusOutline', { dark: null, light: null, hc: null }, nls.localize('listInactiveFocusOutline', \"List/Tree outline color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listHoverBackground = registerColor('list.hoverBackground', { dark: '#2A2D2E', light: '#F0F0F0', hc: null }, nls.localize('listHoverBackground', \"List/Tree background when hovering over items using the mouse.\"));\nexport const listHoverForeground = registerColor('list.hoverForeground', { dark: null, light: null, hc: null }, nls.localize('listHoverForeground', \"List/Tree foreground when hovering over items using the mouse.\"));\nexport const listDropBackground = registerColor('list.dropBackground', { dark: '#062F4A', light: '#D6EBFF', hc: null }, nls.localize('listDropBackground', \"List/Tree drag and drop background when moving items around using the mouse.\"));\nexport const listHighlightForeground = registerColor('list.highlightForeground', { dark: '#18A3FF', light: '#0066BF', hc: focusBorder }, nls.localize('highlight', 'List/Tree foreground color of the match highlights when searching inside the list/tree.'));\nexport const listFocusHighlightForeground = registerColor('list.focusHighlightForeground', { dark: listHighlightForeground, light: ifDefinedThenElse(listActiveSelectionBackground, listHighlightForeground, '#9DDDFF'), hc: listHighlightForeground }, nls.localize('listFocusHighlightForeground', 'List/Tree foreground color of the match highlights on actively focused items when searching inside the list/tree.'));\nexport const listFilterWidgetBackground = registerColor('listFilterWidget.background', { light: '#efc1ad', dark: '#653723', hc: Color.black }, nls.localize('listFilterWidgetBackground', 'Background color of the type filter widget in lists and trees.'));\nexport const listFilterWidgetOutline = registerColor('listFilterWidget.outline', { dark: Color.transparent, light: Color.transparent, hc: '#f38518' }, nls.localize('listFilterWidgetOutline', 'Outline color of the type filter widget in lists and trees.'));\nexport const listFilterWidgetNoMatchesOutline = registerColor('listFilterWidget.noMatchesOutline', { dark: '#BE1100', light: '#BE1100', hc: contrastBorder }, nls.localize('listFilterWidgetNoMatchesOutline', 'Outline color of the type filter widget in lists and trees, when there are no matches.'));\nexport const treeIndentGuidesStroke = registerColor('tree.indentGuidesStroke', { dark: '#585858', light: '#a9a9a9', hc: '#a9a9a9' }, nls.localize('treeIndentGuidesStroke', \"Tree stroke color for the indentation guides.\"));\nexport const tableColumnsBorder = registerColor('tree.tableColumnsBorder', { dark: '#CCCCCC20', light: '#61616120', hc: null }, nls.localize('treeIndentGuidesStroke', \"Tree stroke color for the indentation guides.\"));\n/**\n * Quick pick widget (dependent on List and tree colors)\n */\nexport const _deprecatedQuickInputListFocusBackground = registerColor('quickInput.list.focusBackground', { dark: null, light: null, hc: null }, '', undefined, nls.localize('quickInput.list.focusBackground deprecation', \"Please use quickInputList.focusBackground instead\"));\nexport const quickInputListFocusForeground = registerColor('quickInputList.focusForeground', { dark: listActiveSelectionForeground, light: listActiveSelectionForeground, hc: listActiveSelectionForeground }, nls.localize('quickInput.listFocusForeground', \"Quick picker foreground color for the focused item.\"));\nexport const quickInputListFocusIconForeground = registerColor('quickInputList.focusIconForeground', { dark: listActiveSelectionIconForeground, light: listActiveSelectionIconForeground, hc: listActiveSelectionIconForeground }, nls.localize('quickInput.listFocusIconForeground', \"Quick picker icon foreground color for the focused item.\"));\nexport const quickInputListFocusBackground = registerColor('quickInputList.focusBackground', { dark: oneOf(_deprecatedQuickInputListFocusBackground, listActiveSelectionBackground), light: oneOf(_deprecatedQuickInputListFocusBackground, listActiveSelectionBackground), hc: null }, nls.localize('quickInput.listFocusBackground', \"Quick picker background color for the focused item.\"));\n/**\n * Menu colors\n */\nexport const menuBorder = registerColor('menu.border', { dark: null, light: null, hc: contrastBorder }, nls.localize('menuBorder', \"Border color of menus.\"));\nexport const menuForeground = registerColor('menu.foreground', { dark: selectForeground, light: foreground, hc: selectForeground }, nls.localize('menuForeground', \"Foreground color of menu items.\"));\nexport const menuBackground = registerColor('menu.background', { dark: selectBackground, light: selectBackground, hc: selectBackground }, nls.localize('menuBackground', \"Background color of menu items.\"));\nexport const menuSelectionForeground = registerColor('menu.selectionForeground', { dark: listActiveSelectionForeground, light: listActiveSelectionForeground, hc: listActiveSelectionForeground }, nls.localize('menuSelectionForeground', \"Foreground color of the selected menu item in menus.\"));\nexport const menuSelectionBackground = registerColor('menu.selectionBackground', { dark: listActiveSelectionBackground, light: listActiveSelectionBackground, hc: listActiveSelectionBackground }, nls.localize('menuSelectionBackground', \"Background color of the selected menu item in menus.\"));\nexport const menuSelectionBorder = registerColor('menu.selectionBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('menuSelectionBorder', \"Border color of the selected menu item in menus.\"));\nexport const menuSeparatorBackground = registerColor('menu.separatorBackground', { dark: '#BBBBBB', light: '#888888', hc: contrastBorder }, nls.localize('menuSeparatorBackground', \"Color of a separator menu item in menus.\"));\n/**\n * Toolbar colors\n */\nexport const toolbarHoverBackground = registerColor('toolbar.hoverBackground', { dark: '#5a5d5e50', light: '#b8b8b850', hc: null }, nls.localize('toolbarHoverBackground', \"Toolbar background when hovering over actions using the mouse\"));\n/**\n * Snippet placeholder colors\n */\nexport const snippetTabstopHighlightBackground = registerColor('editor.snippetTabstopHighlightBackground', { dark: new Color(new RGBA(124, 124, 124, 0.3)), light: new Color(new RGBA(10, 50, 100, 0.2)), hc: new Color(new RGBA(124, 124, 124, 0.3)) }, nls.localize('snippetTabstopHighlightBackground', \"Highlight background color of a snippet tabstop.\"));\nexport const snippetTabstopHighlightBorder = registerColor('editor.snippetTabstopHighlightBorder', { dark: null, light: null, hc: null }, nls.localize('snippetTabstopHighlightBorder', \"Highlight border color of a snippet tabstop.\"));\nexport const snippetFinalTabstopHighlightBackground = registerColor('editor.snippetFinalTabstopHighlightBackground', { dark: null, light: null, hc: null }, nls.localize('snippetFinalTabstopHighlightBackground', \"Highlight background color of the final tabstop of a snippet.\"));\nexport const snippetFinalTabstopHighlightBorder = registerColor('editor.snippetFinalTabstopHighlightBorder', { dark: '#525252', light: new Color(new RGBA(10, 50, 100, 0.5)), hc: '#525252' }, nls.localize('snippetFinalTabstopHighlightBorder', \"Highlight border color of the final tabstop of a snippet.\"));\nexport const overviewRulerFindMatchForeground = registerColor('editorOverviewRuler.findMatchForeground', { dark: '#d186167e', light: '#d186167e', hc: '#AB5A00' }, nls.localize('overviewRulerFindMatchForeground', 'Overview ruler marker color for find matches. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const overviewRulerSelectionHighlightForeground = registerColor('editorOverviewRuler.selectionHighlightForeground', { dark: '#A0A0A0CC', light: '#A0A0A0CC', hc: '#A0A0A0CC' }, nls.localize('overviewRulerSelectionHighlightForeground', 'Overview ruler marker color for selection highlights. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const minimapFindMatch = registerColor('minimap.findMatchHighlight', { light: '#d18616', dark: '#d18616', hc: '#AB5A00' }, nls.localize('minimapFindMatchHighlight', 'Minimap marker color for find matches.'), true);\nexport const minimapSelectionOccurrenceHighlight = registerColor('minimap.selectionOccurrenceHighlight', { light: '#c9c9c9', dark: '#676767', hc: '#ffffff' }, nls.localize('minimapSelectionOccurrenceHighlight', 'Minimap marker color for repeating editor selections.'), true);\nexport const minimapSelection = registerColor('minimap.selectionHighlight', { light: '#ADD6FF', dark: '#264F78', hc: '#ffffff' }, nls.localize('minimapSelectionHighlight', 'Minimap marker color for the editor selection.'), true);\nexport const minimapError = registerColor('minimap.errorHighlight', { dark: new Color(new RGBA(255, 18, 18, 0.7)), light: new Color(new RGBA(255, 18, 18, 0.7)), hc: new Color(new RGBA(255, 50, 50, 1)) }, nls.localize('minimapError', 'Minimap marker color for errors.'));\nexport const minimapWarning = registerColor('minimap.warningHighlight', { dark: editorWarningForeground, light: editorWarningForeground, hc: editorWarningBorder }, nls.localize('overviewRuleWarning', 'Minimap marker color for warnings.'));\nexport const minimapBackground = registerColor('minimap.background', { dark: null, light: null, hc: null }, nls.localize('minimapBackground', \"Minimap background color.\"));\nexport const minimapForegroundOpacity = registerColor('minimap.foregroundOpacity', { dark: Color.fromHex('#000f'), light: Color.fromHex('#000f'), hc: Color.fromHex('#000f') }, nls.localize('minimapForegroundOpacity', 'Opacity of foreground elements rendered in the minimap. For example, \"#000000c0\" will render the elements with 75% opacity.'));\nexport const minimapSliderBackground = registerColor('minimapSlider.background', { light: transparent(scrollbarSliderBackground, 0.5), dark: transparent(scrollbarSliderBackground, 0.5), hc: transparent(scrollbarSliderBackground, 0.5) }, nls.localize('minimapSliderBackground', \"Minimap slider background color.\"));\nexport const minimapSliderHoverBackground = registerColor('minimapSlider.hoverBackground', { light: transparent(scrollbarSliderHoverBackground, 0.5), dark: transparent(scrollbarSliderHoverBackground, 0.5), hc: transparent(scrollbarSliderHoverBackground, 0.5) }, nls.localize('minimapSliderHoverBackground', \"Minimap slider background color when hovering.\"));\nexport const minimapSliderActiveBackground = registerColor('minimapSlider.activeBackground', { light: transparent(scrollbarSliderActiveBackground, 0.5), dark: transparent(scrollbarSliderActiveBackground, 0.5), hc: transparent(scrollbarSliderActiveBackground, 0.5) }, nls.localize('minimapSliderActiveBackground', \"Minimap slider background color when clicked on.\"));\nexport const problemsErrorIconForeground = registerColor('problemsErrorIcon.foreground', { dark: editorErrorForeground, light: editorErrorForeground, hc: editorErrorForeground }, nls.localize('problemsErrorIconForeground', \"The color used for the problems error icon.\"));\nexport const problemsWarningIconForeground = registerColor('problemsWarningIcon.foreground', { dark: editorWarningForeground, light: editorWarningForeground, hc: editorWarningForeground }, nls.localize('problemsWarningIconForeground', \"The color used for the problems warning icon.\"));\nexport const problemsInfoIconForeground = registerColor('problemsInfoIcon.foreground', { dark: editorInfoForeground, light: editorInfoForeground, hc: editorInfoForeground }, nls.localize('problemsInfoIconForeground', \"The color used for the problems info icon.\"));\n// ----- color functions\nexport function executeTransform(transform, theme) {\n var _a, _b, _c;\n switch (transform.op) {\n case 0 /* Darken */:\n return (_a = resolveColorValue(transform.value, theme)) === null || _a === void 0 ? void 0 : _a.darken(transform.factor);\n case 1 /* Lighten */:\n return (_b = resolveColorValue(transform.value, theme)) === null || _b === void 0 ? void 0 : _b.lighten(transform.factor);\n case 2 /* Transparent */:\n return (_c = resolveColorValue(transform.value, theme)) === null || _c === void 0 ? void 0 : _c.transparent(transform.factor);\n case 3 /* OneOf */:\n for (const candidate of transform.values) {\n const color = resolveColorValue(candidate, theme);\n if (color) {\n return color;\n }\n }\n return undefined;\n case 5 /* IfDefinedThenElse */:\n return resolveColorValue(theme.defines(transform.if) ? transform.then : transform.else, theme);\n case 4 /* LessProminent */:\n const from = resolveColorValue(transform.value, theme);\n if (!from) {\n return undefined;\n }\n const backgroundColor = resolveColorValue(transform.background, theme);\n if (!backgroundColor) {\n return from.transparent(transform.factor * transform.transparency);\n }\n return from.isDarkerThan(backgroundColor)\n ? Color.getLighterColor(from, backgroundColor, transform.factor).transparent(transform.transparency)\n : Color.getDarkerColor(from, backgroundColor, transform.factor).transparent(transform.transparency);\n default:\n throw assertNever(transform);\n }\n}\nexport function darken(colorValue, factor) {\n return { op: 0 /* Darken */, value: colorValue, factor };\n}\nexport function lighten(colorValue, factor) {\n return { op: 1 /* Lighten */, value: colorValue, factor };\n}\nexport function transparent(colorValue, factor) {\n return { op: 2 /* Transparent */, value: colorValue, factor };\n}\nexport function oneOf(...colorValues) {\n return { op: 3 /* OneOf */, values: colorValues };\n}\nexport function ifDefinedThenElse(ifArg, thenArg, elseArg) {\n return { op: 5 /* IfDefinedThenElse */, if: ifArg, then: thenArg, else: elseArg };\n}\nfunction lessProminent(colorValue, backgroundColorValue, factor, transparency) {\n return { op: 4 /* LessProminent */, value: colorValue, background: backgroundColorValue, factor, transparency };\n}\n// ----- implementation\n/**\n * @param colorValue Resolve a color value in the context of a theme\n */\nexport function resolveColorValue(colorValue, theme) {\n if (colorValue === null) {\n return undefined;\n }\n else if (typeof colorValue === 'string') {\n if (colorValue[0] === '#') {\n return Color.fromHex(colorValue);\n }\n return theme.getColor(colorValue);\n }\n else if (colorValue instanceof Color) {\n return colorValue;\n }\n else if (typeof colorValue === 'object') {\n return executeTransform(colorValue, theme);\n }\n return undefined;\n}\nexport const workbenchColorsSchemaId = 'vscode://schemas/workbench-colors';\nlet schemaRegistry = platform.Registry.as(JSONExtensions.JSONContribution);\nschemaRegistry.registerSchema(workbenchColorsSchemaId, colorRegistry.getColorSchema());\nconst delayer = new RunOnceScheduler(() => schemaRegistry.notifySchemaChanged(workbenchColorsSchemaId), 200);\ncolorRegistry.onDidChangeSchema(() => {\n if (!delayer.isScheduled()) {\n delayer.schedule();\n }\n});\n// setTimeout(_ => console.log(colorRegistry.toString()), 5000);\n","import { onUnexpectedError } from './errors.js';\nimport { combinedDisposable, Disposable, DisposableStore, toDisposable } from './lifecycle.js';\nimport { LinkedList } from './linkedList.js';\nimport { StopWatch } from './stopwatch.js';\nexport var Event;\n(function (Event) {\n Event.None = () => Disposable.None;\n /**\n * Given an event, returns another event which only fires once.\n */\n function once(event) {\n return (listener, thisArgs = null, disposables) => {\n // we need this, in case the event fires during the listener call\n let didFire = false;\n let result;\n result = event(e => {\n if (didFire) {\n return;\n }\n else if (result) {\n result.dispose();\n }\n else {\n didFire = true;\n }\n return listener.call(thisArgs, e);\n }, null, disposables);\n if (didFire) {\n result.dispose();\n }\n return result;\n };\n }\n Event.once = once;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function map(event, map) {\n return snapshot((listener, thisArgs = null, disposables) => event(i => listener.call(thisArgs, map(i)), null, disposables));\n }\n Event.map = map;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function forEach(event, each) {\n return snapshot((listener, thisArgs = null, disposables) => event(i => { each(i); listener.call(thisArgs, i); }, null, disposables));\n }\n Event.forEach = forEach;\n function filter(event, filter) {\n return snapshot((listener, thisArgs = null, disposables) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables));\n }\n Event.filter = filter;\n /**\n * Given an event, returns the same event but typed as `Event`.\n */\n function signal(event) {\n return event;\n }\n Event.signal = signal;\n function any(...events) {\n return (listener, thisArgs = null, disposables) => combinedDisposable(...events.map(event => event(e => listener.call(thisArgs, e), null, disposables)));\n }\n Event.any = any;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function reduce(event, merge, initial) {\n let output = initial;\n return map(event, e => {\n output = merge(output, e);\n return output;\n });\n }\n Event.reduce = reduce;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function snapshot(event) {\n let listener;\n const emitter = new Emitter({\n onFirstListenerAdd() {\n listener = event(emitter.fire, emitter);\n },\n onLastListenerRemove() {\n listener.dispose();\n }\n });\n return emitter.event;\n }\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function debounce(event, merge, delay = 100, leading = false, leakWarningThreshold) {\n let subscription;\n let output = undefined;\n let handle = undefined;\n let numDebouncedCalls = 0;\n const emitter = new Emitter({\n leakWarningThreshold,\n onFirstListenerAdd() {\n subscription = event(cur => {\n numDebouncedCalls++;\n output = merge(output, cur);\n if (leading && !handle) {\n emitter.fire(output);\n output = undefined;\n }\n clearTimeout(handle);\n handle = setTimeout(() => {\n const _output = output;\n output = undefined;\n handle = undefined;\n if (!leading || numDebouncedCalls > 1) {\n emitter.fire(_output);\n }\n numDebouncedCalls = 0;\n }, delay);\n });\n },\n onLastListenerRemove() {\n subscription.dispose();\n }\n });\n return emitter.event;\n }\n Event.debounce = debounce;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function latch(event, equals = (a, b) => a === b) {\n let firstCall = true;\n let cache;\n return filter(event, value => {\n const shouldEmit = firstCall || !equals(value, cache);\n firstCall = false;\n cache = value;\n return shouldEmit;\n });\n }\n Event.latch = latch;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function split(event, isT) {\n return [\n Event.filter(event, isT),\n Event.filter(event, e => !isT(e)),\n ];\n }\n Event.split = split;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function buffer(event, nextTick = false, _buffer = []) {\n let buffer = _buffer.slice();\n let listener = event(e => {\n if (buffer) {\n buffer.push(e);\n }\n else {\n emitter.fire(e);\n }\n });\n const flush = () => {\n if (buffer) {\n buffer.forEach(e => emitter.fire(e));\n }\n buffer = null;\n };\n const emitter = new Emitter({\n onFirstListenerAdd() {\n if (!listener) {\n listener = event(e => emitter.fire(e));\n }\n },\n onFirstListenerDidAdd() {\n if (buffer) {\n if (nextTick) {\n setTimeout(flush);\n }\n else {\n flush();\n }\n }\n },\n onLastListenerRemove() {\n if (listener) {\n listener.dispose();\n }\n listener = null;\n }\n });\n return emitter.event;\n }\n Event.buffer = buffer;\n class ChainableEvent {\n constructor(event) {\n this.event = event;\n }\n map(fn) {\n return new ChainableEvent(map(this.event, fn));\n }\n forEach(fn) {\n return new ChainableEvent(forEach(this.event, fn));\n }\n filter(fn) {\n return new ChainableEvent(filter(this.event, fn));\n }\n reduce(merge, initial) {\n return new ChainableEvent(reduce(this.event, merge, initial));\n }\n latch() {\n return new ChainableEvent(latch(this.event));\n }\n debounce(merge, delay = 100, leading = false, leakWarningThreshold) {\n return new ChainableEvent(debounce(this.event, merge, delay, leading, leakWarningThreshold));\n }\n on(listener, thisArgs, disposables) {\n return this.event(listener, thisArgs, disposables);\n }\n once(listener, thisArgs, disposables) {\n return once(this.event)(listener, thisArgs, disposables);\n }\n }\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function chain(event) {\n return new ChainableEvent(event);\n }\n Event.chain = chain;\n function fromNodeEventEmitter(emitter, eventName, map = id => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const result = new Emitter({ onFirstListenerAdd, onLastListenerRemove });\n return result.event;\n }\n Event.fromNodeEventEmitter = fromNodeEventEmitter;\n function fromDOMEventEmitter(emitter, eventName, map = id => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const result = new Emitter({ onFirstListenerAdd, onLastListenerRemove });\n return result.event;\n }\n Event.fromDOMEventEmitter = fromDOMEventEmitter;\n function toPromise(event) {\n return new Promise(resolve => once(event)(resolve));\n }\n Event.toPromise = toPromise;\n})(Event || (Event = {}));\nclass EventProfiling {\n constructor(name) {\n this._listenerCount = 0;\n this._invocationCount = 0;\n this._elapsedOverall = 0;\n this._name = `${name}_${EventProfiling._idPool++}`;\n }\n start(listenerCount) {\n this._stopWatch = new StopWatch(true);\n this._listenerCount = listenerCount;\n }\n stop() {\n if (this._stopWatch) {\n const elapsed = this._stopWatch.elapsed();\n this._elapsedOverall += elapsed;\n this._invocationCount += 1;\n console.info(`did FIRE ${this._name}: elapsed_ms: ${elapsed.toFixed(5)}, listener: ${this._listenerCount} (elapsed_overall: ${this._elapsedOverall.toFixed(2)}, invocations: ${this._invocationCount})`);\n this._stopWatch = undefined;\n }\n }\n}\nEventProfiling._idPool = 0;\nlet _globalLeakWarningThreshold = -1;\nclass LeakageMonitor {\n constructor(customThreshold, name = Math.random().toString(18).slice(2, 5)) {\n this.customThreshold = customThreshold;\n this.name = name;\n this._warnCountdown = 0;\n }\n dispose() {\n if (this._stacks) {\n this._stacks.clear();\n }\n }\n check(listenerCount) {\n let threshold = _globalLeakWarningThreshold;\n if (typeof this.customThreshold === 'number') {\n threshold = this.customThreshold;\n }\n if (threshold <= 0 || listenerCount < threshold) {\n return undefined;\n }\n if (!this._stacks) {\n this._stacks = new Map();\n }\n const stack = new Error().stack.split('\\n').slice(3).join('\\n');\n const count = (this._stacks.get(stack) || 0);\n this._stacks.set(stack, count + 1);\n this._warnCountdown -= 1;\n if (this._warnCountdown <= 0) {\n // only warn on first exceed and then every time the limit\n // is exceeded by 50% again\n this._warnCountdown = threshold * 0.5;\n // find most frequent listener and print warning\n let topStack;\n let topCount = 0;\n for (const [stack, count] of this._stacks) {\n if (!topStack || topCount < count) {\n topStack = stack;\n topCount = count;\n }\n }\n console.warn(`[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`);\n console.warn(topStack);\n }\n return () => {\n const count = (this._stacks.get(stack) || 0);\n this._stacks.set(stack, count - 1);\n };\n }\n}\n/**\n * The Emitter can be used to expose an Event to the public\n * to fire it from the insides.\n * Sample:\n class Document {\n\n private readonly _onDidChange = new Emitter<(value:string)=>any>();\n\n public onDidChange = this._onDidChange.event;\n\n // getter-style\n // get onDidChange(): Event<(value:string)=>any> {\n // \treturn this._onDidChange.event;\n // }\n\n private _doIt() {\n //...\n this._onDidChange.fire(value);\n }\n }\n */\nexport class Emitter {\n constructor(options) {\n var _a;\n this._disposed = false;\n this._options = options;\n this._leakageMon = _globalLeakWarningThreshold > 0 ? new LeakageMonitor(this._options && this._options.leakWarningThreshold) : undefined;\n this._perfMon = ((_a = this._options) === null || _a === void 0 ? void 0 : _a._profName) ? new EventProfiling(this._options._profName) : undefined;\n }\n /**\n * For the public to allow to subscribe\n * to events from this Emitter\n */\n get event() {\n if (!this._event) {\n this._event = (listener, thisArgs, disposables) => {\n var _a;\n if (!this._listeners) {\n this._listeners = new LinkedList();\n }\n const firstListener = this._listeners.isEmpty();\n if (firstListener && this._options && this._options.onFirstListenerAdd) {\n this._options.onFirstListenerAdd(this);\n }\n const remove = this._listeners.push(!thisArgs ? listener : [listener, thisArgs]);\n if (firstListener && this._options && this._options.onFirstListenerDidAdd) {\n this._options.onFirstListenerDidAdd(this);\n }\n if (this._options && this._options.onListenerDidAdd) {\n this._options.onListenerDidAdd(this, listener, thisArgs);\n }\n // check and record this emitter for potential leakage\n const removeMonitor = (_a = this._leakageMon) === null || _a === void 0 ? void 0 : _a.check(this._listeners.size);\n const result = toDisposable(() => {\n if (removeMonitor) {\n removeMonitor();\n }\n if (!this._disposed) {\n remove();\n if (this._options && this._options.onLastListenerRemove) {\n const hasListeners = (this._listeners && !this._listeners.isEmpty());\n if (!hasListeners) {\n this._options.onLastListenerRemove(this);\n }\n }\n }\n });\n if (disposables instanceof DisposableStore) {\n disposables.add(result);\n }\n else if (Array.isArray(disposables)) {\n disposables.push(result);\n }\n return result;\n };\n }\n return this._event;\n }\n /**\n * To be kept private to fire an event to\n * subscribers\n */\n fire(event) {\n var _a, _b;\n if (this._listeners) {\n // put all [listener,event]-pairs into delivery queue\n // then emit all event. an inner/nested event might be\n // the driver of this\n if (!this._deliveryQueue) {\n this._deliveryQueue = new LinkedList();\n }\n for (let listener of this._listeners) {\n this._deliveryQueue.push([listener, event]);\n }\n // start/stop performance insight collection\n (_a = this._perfMon) === null || _a === void 0 ? void 0 : _a.start(this._deliveryQueue.size);\n while (this._deliveryQueue.size > 0) {\n const [listener, event] = this._deliveryQueue.shift();\n try {\n if (typeof listener === 'function') {\n listener.call(undefined, event);\n }\n else {\n listener[0].call(listener[1], event);\n }\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n (_b = this._perfMon) === null || _b === void 0 ? void 0 : _b.stop();\n }\n }\n dispose() {\n var _a, _b, _c, _d, _e;\n if (!this._disposed) {\n this._disposed = true;\n (_a = this._listeners) === null || _a === void 0 ? void 0 : _a.clear();\n (_b = this._deliveryQueue) === null || _b === void 0 ? void 0 : _b.clear();\n (_d = (_c = this._options) === null || _c === void 0 ? void 0 : _c.onLastListenerRemove) === null || _d === void 0 ? void 0 : _d.call(_c);\n (_e = this._leakageMon) === null || _e === void 0 ? void 0 : _e.dispose();\n }\n }\n}\nexport class PauseableEmitter extends Emitter {\n constructor(options) {\n super(options);\n this._isPaused = 0;\n this._eventQueue = new LinkedList();\n this._mergeFn = options === null || options === void 0 ? void 0 : options.merge;\n }\n pause() {\n this._isPaused++;\n }\n resume() {\n if (this._isPaused !== 0 && --this._isPaused === 0) {\n if (this._mergeFn) {\n // use the merge function to create a single composite\n // event. make a copy in case firing pauses this emitter\n const events = Array.from(this._eventQueue);\n this._eventQueue.clear();\n super.fire(this._mergeFn(events));\n }\n else {\n // no merging, fire each event individually and test\n // that this emitter isn't paused halfway through\n while (!this._isPaused && this._eventQueue.size !== 0) {\n super.fire(this._eventQueue.shift());\n }\n }\n }\n }\n fire(event) {\n if (this._listeners) {\n if (this._isPaused !== 0) {\n this._eventQueue.push(event);\n }\n else {\n super.fire(event);\n }\n }\n }\n}\nexport class DebounceEmitter extends PauseableEmitter {\n constructor(options) {\n var _a;\n super(options);\n this._delay = (_a = options.delay) !== null && _a !== void 0 ? _a : 100;\n }\n fire(event) {\n if (!this._handle) {\n this.pause();\n this._handle = setTimeout(() => {\n this._handle = undefined;\n this.resume();\n }, this._delay);\n }\n super.fire(event);\n }\n}\n/**\n * The EventBufferer is useful in situations in which you want\n * to delay firing your events during some code.\n * You can wrap that code and be sure that the event will not\n * be fired during that wrap.\n *\n * ```\n * const emitter: Emitter;\n * const delayer = new EventDelayer();\n * const delayedEvent = delayer.wrapEvent(emitter.event);\n *\n * delayedEvent(console.log);\n *\n * delayer.bufferEvents(() => {\n * emitter.fire(); // event will not be fired yet\n * });\n *\n * // event will only be fired at this point\n * ```\n */\nexport class EventBufferer {\n constructor() {\n this.buffers = [];\n }\n wrapEvent(event) {\n return (listener, thisArgs, disposables) => {\n return event(i => {\n const buffer = this.buffers[this.buffers.length - 1];\n if (buffer) {\n buffer.push(() => listener.call(thisArgs, i));\n }\n else {\n listener.call(thisArgs, i);\n }\n }, undefined, disposables);\n };\n }\n bufferEvents(fn) {\n const buffer = [];\n this.buffers.push(buffer);\n const r = fn();\n this.buffers.pop();\n buffer.forEach(flush => flush());\n return r;\n }\n}\n/**\n * A Relay is an event forwarder which functions as a replugabble event pipe.\n * Once created, you can connect an input event to it and it will simply forward\n * events from that input event through its own `event` property. The `input`\n * can be changed at any point in time.\n */\nexport class Relay {\n constructor() {\n this.listening = false;\n this.inputEvent = Event.None;\n this.inputEventListener = Disposable.None;\n this.emitter = new Emitter({\n onFirstListenerDidAdd: () => {\n this.listening = true;\n this.inputEventListener = this.inputEvent(this.emitter.fire, this.emitter);\n },\n onLastListenerRemove: () => {\n this.listening = false;\n this.inputEventListener.dispose();\n }\n });\n this.event = this.emitter.event;\n }\n set input(event) {\n this.inputEvent = event;\n if (this.listening) {\n this.inputEventListener.dispose();\n this.inputEventListener = event(this.emitter.fire, this.emitter);\n }\n }\n dispose() {\n this.inputEventListener.dispose();\n this.emitter.dispose();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar _a;\nconst LANGUAGE_DEFAULT = 'en';\nlet _isWindows = false;\nlet _isMacintosh = false;\nlet _isLinux = false;\nlet _isLinuxSnap = false;\nlet _isNative = false;\nlet _isWeb = false;\nlet _isIOS = false;\nlet _locale = undefined;\nlet _language = LANGUAGE_DEFAULT;\nlet _translationsConfigFile = undefined;\nlet _userAgent = undefined;\nexport const globals = (typeof self === 'object' ? self : typeof global === 'object' ? global : {});\nlet nodeProcess = undefined;\nif (typeof globals.vscode !== 'undefined' && typeof globals.vscode.process !== 'undefined') {\n // Native environment (sandboxed)\n nodeProcess = globals.vscode.process;\n}\nelse if (typeof process !== 'undefined') {\n // Native environment (non-sandboxed)\n nodeProcess = process;\n}\nconst isElectronRenderer = typeof ((_a = nodeProcess === null || nodeProcess === void 0 ? void 0 : nodeProcess.versions) === null || _a === void 0 ? void 0 : _a.electron) === 'string' && nodeProcess.type === 'renderer';\n// Web environment\nif (typeof navigator === 'object' && !isElectronRenderer) {\n _userAgent = navigator.userAgent;\n _isWindows = _userAgent.indexOf('Windows') >= 0;\n _isMacintosh = _userAgent.indexOf('Macintosh') >= 0;\n _isIOS = (_userAgent.indexOf('Macintosh') >= 0 || _userAgent.indexOf('iPad') >= 0 || _userAgent.indexOf('iPhone') >= 0) && !!navigator.maxTouchPoints && navigator.maxTouchPoints > 0;\n _isLinux = _userAgent.indexOf('Linux') >= 0;\n _isWeb = true;\n _locale = navigator.language;\n _language = _locale;\n}\n// Native environment\nelse if (typeof nodeProcess === 'object') {\n _isWindows = (nodeProcess.platform === 'win32');\n _isMacintosh = (nodeProcess.platform === 'darwin');\n _isLinux = (nodeProcess.platform === 'linux');\n _isLinuxSnap = _isLinux && !!nodeProcess.env['SNAP'] && !!nodeProcess.env['SNAP_REVISION'];\n _locale = LANGUAGE_DEFAULT;\n _language = LANGUAGE_DEFAULT;\n const rawNlsConfig = nodeProcess.env['VSCODE_NLS_CONFIG'];\n if (rawNlsConfig) {\n try {\n const nlsConfig = JSON.parse(rawNlsConfig);\n const resolved = nlsConfig.availableLanguages['*'];\n _locale = nlsConfig.locale;\n // VSCode's default language is 'en'\n _language = resolved ? resolved : LANGUAGE_DEFAULT;\n _translationsConfigFile = nlsConfig._translationsConfigFile;\n }\n catch (e) {\n }\n }\n _isNative = true;\n}\n// Unknown environment\nelse {\n console.error('Unable to resolve platform.');\n}\nlet _platform = 0 /* Web */;\nif (_isMacintosh) {\n _platform = 1 /* Mac */;\n}\nelse if (_isWindows) {\n _platform = 3 /* Windows */;\n}\nelse if (_isLinux) {\n _platform = 2 /* Linux */;\n}\nexport const isWindows = _isWindows;\nexport const isMacintosh = _isMacintosh;\nexport const isLinux = _isLinux;\nexport const isNative = _isNative;\nexport const isWeb = _isWeb;\nexport const isIOS = _isIOS;\nexport const userAgent = _userAgent;\nexport const setImmediate = (function defineSetImmediate() {\n if (globals.setImmediate) {\n return globals.setImmediate.bind(globals);\n }\n if (typeof globals.postMessage === 'function' && !globals.importScripts) {\n let pending = [];\n globals.addEventListener('message', (e) => {\n if (e.data && e.data.vscodeSetImmediateId) {\n for (let i = 0, len = pending.length; i < len; i++) {\n const candidate = pending[i];\n if (candidate.id === e.data.vscodeSetImmediateId) {\n pending.splice(i, 1);\n candidate.callback();\n return;\n }\n }\n }\n });\n let lastId = 0;\n return (callback) => {\n const myId = ++lastId;\n pending.push({\n id: myId,\n callback: callback\n });\n globals.postMessage({ vscodeSetImmediateId: myId }, '*');\n };\n }\n if (typeof (nodeProcess === null || nodeProcess === void 0 ? void 0 : nodeProcess.nextTick) === 'function') {\n return nodeProcess.nextTick.bind(nodeProcess);\n }\n const _promise = Promise.resolve();\n return (callback) => _promise.then(callback);\n})();\nexport const OS = (_isMacintosh || _isIOS ? 2 /* Macintosh */ : (_isWindows ? 1 /* Windows */ : 3 /* Linux */));\nlet _isLittleEndian = true;\nlet _isLittleEndianComputed = false;\nexport function isLittleEndian() {\n if (!_isLittleEndianComputed) {\n _isLittleEndianComputed = true;\n const test = new Uint8Array(2);\n test[0] = 1;\n test[1] = 2;\n const view = new Uint16Array(test.buffer);\n _isLittleEndian = (view[0] === (2 << 8) + 1);\n }\n return _isLittleEndian;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { toUint8 } from '../../../base/common/uint.js';\n/**\n * A fast character classifier that uses a compact array for ASCII values.\n */\nexport class CharacterClassifier {\n constructor(_defaultValue) {\n let defaultValue = toUint8(_defaultValue);\n this._defaultValue = defaultValue;\n this._asciiMap = CharacterClassifier._createAsciiMap(defaultValue);\n this._map = new Map();\n }\n static _createAsciiMap(defaultValue) {\n let asciiMap = new Uint8Array(256);\n for (let i = 0; i < 256; i++) {\n asciiMap[i] = defaultValue;\n }\n return asciiMap;\n }\n set(charCode, _value) {\n let value = toUint8(_value);\n if (charCode >= 0 && charCode < 256) {\n this._asciiMap[charCode] = value;\n }\n else {\n this._map.set(charCode, value);\n }\n }\n get(charCode) {\n if (charCode >= 0 && charCode < 256) {\n return this._asciiMap[charCode];\n }\n else {\n return (this._map.get(charCode) || this._defaultValue);\n }\n }\n}\nexport class CharacterSet {\n constructor() {\n this._actual = new CharacterClassifier(0 /* False */);\n }\n add(charCode) {\n this._actual.set(charCode, 1 /* True */);\n }\n has(charCode) {\n return (this._actual.get(charCode) === 1 /* True */);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// NOTE: VSCode's copy of nodejs path library to be usable in common (non-node) namespace\n// Copied from: https://github.com/nodejs/node/blob/v14.16.0/lib/path.js\n/**\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\nimport * as process from './process.js';\nconst CHAR_UPPERCASE_A = 65; /* A */\nconst CHAR_LOWERCASE_A = 97; /* a */\nconst CHAR_UPPERCASE_Z = 90; /* Z */\nconst CHAR_LOWERCASE_Z = 122; /* z */\nconst CHAR_DOT = 46; /* . */\nconst CHAR_FORWARD_SLASH = 47; /* / */\nconst CHAR_BACKWARD_SLASH = 92; /* \\ */\nconst CHAR_COLON = 58; /* : */\nconst CHAR_QUESTION_MARK = 63; /* ? */\nclass ErrorInvalidArgType extends Error {\n constructor(name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n let determiner;\n if (typeof expected === 'string' && expected.indexOf('not ') === 0) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n }\n else {\n determiner = 'must be';\n }\n const type = name.indexOf('.') !== -1 ? 'property' : 'argument';\n let msg = `The \"${name}\" ${type} ${determiner} of type ${expected}`;\n msg += `. Received type ${typeof actual}`;\n super(msg);\n this.code = 'ERR_INVALID_ARG_TYPE';\n }\n}\nfunction validateString(value, name) {\n if (typeof value !== 'string') {\n throw new ErrorInvalidArgType(name, 'string', value);\n }\n}\nfunction isPathSeparator(code) {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n}\nfunction isPosixPathSeparator(code) {\n return code === CHAR_FORWARD_SLASH;\n}\nfunction isWindowsDeviceRoot(code) {\n return (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z) ||\n (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z);\n}\n// Resolves . and .. elements in a path with directory names\nfunction normalizeString(path, allowAboveRoot, separator, isPathSeparator) {\n let res = '';\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let code = 0;\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length) {\n code = path.charCodeAt(i);\n }\n else if (isPathSeparator(code)) {\n break;\n }\n else {\n code = CHAR_FORWARD_SLASH;\n }\n if (isPathSeparator(code)) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n }\n else if (dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 ||\n res.charCodeAt(res.length - 1) !== CHAR_DOT ||\n res.charCodeAt(res.length - 2) !== CHAR_DOT) {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf(separator);\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n }\n else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n else if (res.length !== 0) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n res += res.length > 0 ? `${separator}..` : '..';\n lastSegmentLength = 2;\n }\n }\n else {\n if (res.length > 0) {\n res += `${separator}${path.slice(lastSlash + 1, i)}`;\n }\n else {\n res = path.slice(lastSlash + 1, i);\n }\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n }\n else if (code === CHAR_DOT && dots !== -1) {\n ++dots;\n }\n else {\n dots = -1;\n }\n }\n return res;\n}\nfunction _format(sep, pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new ErrorInvalidArgType('pathObject', 'Object', pathObject);\n }\n const dir = pathObject.dir || pathObject.root;\n const base = pathObject.base ||\n `${pathObject.name || ''}${pathObject.ext || ''}`;\n if (!dir) {\n return base;\n }\n return dir === pathObject.root ? `${dir}${base}` : `${dir}${sep}${base}`;\n}\nexport const win32 = {\n // path.resolve([from ...], to)\n resolve(...pathSegments) {\n let resolvedDevice = '';\n let resolvedTail = '';\n let resolvedAbsolute = false;\n for (let i = pathSegments.length - 1; i >= -1; i--) {\n let path;\n if (i >= 0) {\n path = pathSegments[i];\n validateString(path, 'path');\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n }\n else if (resolvedDevice.length === 0) {\n path = process.cwd();\n }\n else {\n // Windows has the concept of drive-specific current working\n // directories. If we've resolved a drive letter but not yet an\n // absolute path, get cwd for that drive, or the process cwd if\n // the drive cwd is not available. We're sure the device is not\n // a UNC path at this points, because UNC paths are always absolute.\n path = process.env[`=${resolvedDevice}`] || process.cwd();\n // Verify that a cwd was found and that it actually points\n // to our drive. If not, default to the drive's root.\n if (path === undefined ||\n (path.slice(0, 2).toLowerCase() !== resolvedDevice.toLowerCase() &&\n path.charCodeAt(2) === CHAR_BACKWARD_SLASH)) {\n path = `${resolvedDevice}\\\\`;\n }\n }\n const len = path.length;\n let rootEnd = 0;\n let device = '';\n let isAbsolute = false;\n const code = path.charCodeAt(0);\n // Try to match a root\n if (len === 1) {\n if (isPathSeparator(code)) {\n // `path` contains just a path separator\n rootEnd = 1;\n isAbsolute = true;\n }\n }\n else if (isPathSeparator(code)) {\n // Possible UNC root\n // If we started with a separator, we know we at least have an\n // absolute path of some kind (UNC or otherwise)\n isAbsolute = true;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n const firstPart = path.slice(last, j);\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len || j !== last) {\n // We matched a UNC root\n device = `\\\\\\\\${firstPart}\\\\${path.slice(last, j)}`;\n rootEnd = j;\n }\n }\n }\n }\n else {\n rootEnd = 1;\n }\n }\n else if (isWindowsDeviceRoot(code) &&\n path.charCodeAt(1) === CHAR_COLON) {\n // Possible device root\n device = path.slice(0, 2);\n rootEnd = 2;\n if (len > 2 && isPathSeparator(path.charCodeAt(2))) {\n // Treat separator following drive name as an absolute path\n // indicator\n isAbsolute = true;\n rootEnd = 3;\n }\n }\n if (device.length > 0) {\n if (resolvedDevice.length > 0) {\n if (device.toLowerCase() !== resolvedDevice.toLowerCase()) {\n // This path points to another device so it is not applicable\n continue;\n }\n }\n else {\n resolvedDevice = device;\n }\n }\n if (resolvedAbsolute) {\n if (resolvedDevice.length > 0) {\n break;\n }\n }\n else {\n resolvedTail = `${path.slice(rootEnd)}\\\\${resolvedTail}`;\n resolvedAbsolute = isAbsolute;\n if (isAbsolute && resolvedDevice.length > 0) {\n break;\n }\n }\n }\n // At this point the path should be resolved to a full absolute path,\n // but handle relative paths to be safe (might happen when process.cwd()\n // fails)\n // Normalize the tail path\n resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, '\\\\', isPathSeparator);\n return resolvedAbsolute ?\n `${resolvedDevice}\\\\${resolvedTail}` :\n `${resolvedDevice}${resolvedTail}` || '.';\n },\n normalize(path) {\n validateString(path, 'path');\n const len = path.length;\n if (len === 0) {\n return '.';\n }\n let rootEnd = 0;\n let device;\n let isAbsolute = false;\n const code = path.charCodeAt(0);\n // Try to match a root\n if (len === 1) {\n // `path` contains just a single char, exit early to avoid\n // unnecessary work\n return isPosixPathSeparator(code) ? '\\\\' : path;\n }\n if (isPathSeparator(code)) {\n // Possible UNC root\n // If we started with a separator, we know we at least have an absolute\n // path of some kind (UNC or otherwise)\n isAbsolute = true;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n const firstPart = path.slice(last, j);\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len) {\n // We matched a UNC root only\n // Return the normalized version of the UNC root since there\n // is nothing left to process\n return `\\\\\\\\${firstPart}\\\\${path.slice(last)}\\\\`;\n }\n if (j !== last) {\n // We matched a UNC root with leftovers\n device = `\\\\\\\\${firstPart}\\\\${path.slice(last, j)}`;\n rootEnd = j;\n }\n }\n }\n }\n else {\n rootEnd = 1;\n }\n }\n else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n // Possible device root\n device = path.slice(0, 2);\n rootEnd = 2;\n if (len > 2 && isPathSeparator(path.charCodeAt(2))) {\n // Treat separator following drive name as an absolute path\n // indicator\n isAbsolute = true;\n rootEnd = 3;\n }\n }\n let tail = rootEnd < len ?\n normalizeString(path.slice(rootEnd), !isAbsolute, '\\\\', isPathSeparator) :\n '';\n if (tail.length === 0 && !isAbsolute) {\n tail = '.';\n }\n if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {\n tail += '\\\\';\n }\n if (device === undefined) {\n return isAbsolute ? `\\\\${tail}` : tail;\n }\n return isAbsolute ? `${device}\\\\${tail}` : `${device}${tail}`;\n },\n isAbsolute(path) {\n validateString(path, 'path');\n const len = path.length;\n if (len === 0) {\n return false;\n }\n const code = path.charCodeAt(0);\n return isPathSeparator(code) ||\n // Possible device root\n (len > 2 &&\n isWindowsDeviceRoot(code) &&\n path.charCodeAt(1) === CHAR_COLON &&\n isPathSeparator(path.charCodeAt(2)));\n },\n join(...paths) {\n if (paths.length === 0) {\n return '.';\n }\n let joined;\n let firstPart;\n for (let i = 0; i < paths.length; ++i) {\n const arg = paths[i];\n validateString(arg, 'path');\n if (arg.length > 0) {\n if (joined === undefined) {\n joined = firstPart = arg;\n }\n else {\n joined += `\\\\${arg}`;\n }\n }\n }\n if (joined === undefined) {\n return '.';\n }\n // Make sure that the joined path doesn't start with two slashes, because\n // normalize() will mistake it for a UNC path then.\n //\n // This step is skipped when it is very clear that the user actually\n // intended to point at a UNC path. This is assumed when the first\n // non-empty string arguments starts with exactly two slashes followed by\n // at least one more non-slash character.\n //\n // Note that for normalize() to treat a path as a UNC path it needs to\n // have at least 2 components, so we don't filter for that here.\n // This means that the user can use join to construct UNC paths from\n // a server name and a share name; for example:\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\\\')\n let needsReplace = true;\n let slashCount = 0;\n if (typeof firstPart === 'string' && isPathSeparator(firstPart.charCodeAt(0))) {\n ++slashCount;\n const firstLen = firstPart.length;\n if (firstLen > 1 && isPathSeparator(firstPart.charCodeAt(1))) {\n ++slashCount;\n if (firstLen > 2) {\n if (isPathSeparator(firstPart.charCodeAt(2))) {\n ++slashCount;\n }\n else {\n // We matched a UNC path in the first part\n needsReplace = false;\n }\n }\n }\n }\n if (needsReplace) {\n // Find any more consecutive slashes we need to replace\n while (slashCount < joined.length &&\n isPathSeparator(joined.charCodeAt(slashCount))) {\n slashCount++;\n }\n // Replace the slashes if needed\n if (slashCount >= 2) {\n joined = `\\\\${joined.slice(slashCount)}`;\n }\n }\n return win32.normalize(joined);\n },\n // It will solve the relative path from `from` to `to`, for instance:\n // from = 'C:\\\\orandea\\\\test\\\\aaa'\n // to = 'C:\\\\orandea\\\\impl\\\\bbb'\n // The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\n relative(from, to) {\n validateString(from, 'from');\n validateString(to, 'to');\n if (from === to) {\n return '';\n }\n const fromOrig = win32.resolve(from);\n const toOrig = win32.resolve(to);\n if (fromOrig === toOrig) {\n return '';\n }\n from = fromOrig.toLowerCase();\n to = toOrig.toLowerCase();\n if (from === to) {\n return '';\n }\n // Trim any leading backslashes\n let fromStart = 0;\n while (fromStart < from.length &&\n from.charCodeAt(fromStart) === CHAR_BACKWARD_SLASH) {\n fromStart++;\n }\n // Trim trailing backslashes (applicable to UNC paths only)\n let fromEnd = from.length;\n while (fromEnd - 1 > fromStart &&\n from.charCodeAt(fromEnd - 1) === CHAR_BACKWARD_SLASH) {\n fromEnd--;\n }\n const fromLen = fromEnd - fromStart;\n // Trim any leading backslashes\n let toStart = 0;\n while (toStart < to.length &&\n to.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) {\n toStart++;\n }\n // Trim trailing backslashes (applicable to UNC paths only)\n let toEnd = to.length;\n while (toEnd - 1 > toStart &&\n to.charCodeAt(toEnd - 1) === CHAR_BACKWARD_SLASH) {\n toEnd--;\n }\n const toLen = toEnd - toStart;\n // Compare paths to find the longest common path from root\n const length = fromLen < toLen ? fromLen : toLen;\n let lastCommonSep = -1;\n let i = 0;\n for (; i < length; i++) {\n const fromCode = from.charCodeAt(fromStart + i);\n if (fromCode !== to.charCodeAt(toStart + i)) {\n break;\n }\n else if (fromCode === CHAR_BACKWARD_SLASH) {\n lastCommonSep = i;\n }\n }\n // We found a mismatch before the first common path separator was seen, so\n // return the original `to`.\n if (i !== length) {\n if (lastCommonSep === -1) {\n return toOrig;\n }\n }\n else {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\foo\\\\bar\\\\baz'\n return toOrig.slice(toStart + i + 1);\n }\n if (i === 2) {\n // We get here if `from` is the device root.\n // For example: from='C:\\\\'; to='C:\\\\foo'\n return toOrig.slice(toStart + i);\n }\n }\n if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\foo'\n lastCommonSep = i;\n }\n else if (i === 2) {\n // We get here if `to` is the device root.\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\'\n lastCommonSep = 3;\n }\n }\n if (lastCommonSep === -1) {\n lastCommonSep = 0;\n }\n }\n let out = '';\n // Generate the relative path based on the path difference between `to` and\n // `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {\n out += out.length === 0 ? '..' : '\\\\..';\n }\n }\n toStart += lastCommonSep;\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0) {\n return `${out}${toOrig.slice(toStart, toEnd)}`;\n }\n if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) {\n ++toStart;\n }\n return toOrig.slice(toStart, toEnd);\n },\n toNamespacedPath(path) {\n // Note: this will *probably* throw somewhere.\n if (typeof path !== 'string') {\n return path;\n }\n if (path.length === 0) {\n return '';\n }\n const resolvedPath = win32.resolve(path);\n if (resolvedPath.length <= 2) {\n return path;\n }\n if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {\n // Possible UNC root\n if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {\n const code = resolvedPath.charCodeAt(2);\n if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) {\n // Matched non-long UNC root, convert the path to a long UNC path\n return `\\\\\\\\?\\\\UNC\\\\${resolvedPath.slice(2)}`;\n }\n }\n }\n else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0)) &&\n resolvedPath.charCodeAt(1) === CHAR_COLON &&\n resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH) {\n // Matched device root, convert the path to a long UNC path\n return `\\\\\\\\?\\\\${resolvedPath}`;\n }\n return path;\n },\n dirname(path) {\n validateString(path, 'path');\n const len = path.length;\n if (len === 0) {\n return '.';\n }\n let rootEnd = -1;\n let offset = 0;\n const code = path.charCodeAt(0);\n if (len === 1) {\n // `path` contains just a path separator, exit early to avoid\n // unnecessary work or a dot.\n return isPathSeparator(code) ? path : '.';\n }\n // Try to match a root\n if (isPathSeparator(code)) {\n // Possible UNC root\n rootEnd = offset = 1;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len) {\n // We matched a UNC root only\n return path;\n }\n if (j !== last) {\n // We matched a UNC root with leftovers\n // Offset by 1 to include the separator after the UNC root to\n // treat it as a \"normal root\" on top of a (UNC) root\n rootEnd = offset = j + 1;\n }\n }\n }\n }\n // Possible device root\n }\n else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n rootEnd = len > 2 && isPathSeparator(path.charCodeAt(2)) ? 3 : 2;\n offset = rootEnd;\n }\n let end = -1;\n let matchedSlash = true;\n for (let i = len - 1; i >= offset; --i) {\n if (isPathSeparator(path.charCodeAt(i))) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n }\n else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1) {\n if (rootEnd === -1) {\n return '.';\n }\n end = rootEnd;\n }\n return path.slice(0, end);\n },\n basename(path, ext) {\n if (ext !== undefined) {\n validateString(ext, 'ext');\n }\n validateString(path, 'path');\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i;\n // Check for a drive letter prefix so as not to mistake the following\n // path separator as an extra separator at the end of the path that can be\n // disregarded\n if (path.length >= 2 &&\n isWindowsDeviceRoot(path.charCodeAt(0)) &&\n path.charCodeAt(1) === CHAR_COLON) {\n start = 2;\n }\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext === path) {\n return '';\n }\n let extIdx = ext.length - 1;\n let firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n }\n else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n if (start === end) {\n end = firstNonSlashEnd;\n }\n else if (end === -1) {\n end = path.length;\n }\n return path.slice(start, end);\n }\n for (i = path.length - 1; i >= start; --i) {\n if (isPathSeparator(path.charCodeAt(i))) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n if (end === -1) {\n return '';\n }\n return path.slice(start, end);\n },\n extname(path) {\n validateString(path, 'path');\n let start = 0;\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Check for a drive letter prefix so as not to mistake the following\n // path separator as an extra separator at the end of the path that can be\n // disregarded\n if (path.length >= 2 &&\n path.charCodeAt(1) === CHAR_COLON &&\n isWindowsDeviceRoot(path.charCodeAt(0))) {\n start = startPart = 2;\n }\n for (let i = path.length - 1; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (startDot === -1 ||\n end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n return '';\n }\n return path.slice(startDot, end);\n },\n format: _format.bind(null, '\\\\'),\n parse(path) {\n validateString(path, 'path');\n const ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) {\n return ret;\n }\n const len = path.length;\n let rootEnd = 0;\n let code = path.charCodeAt(0);\n if (len === 1) {\n if (isPathSeparator(code)) {\n // `path` contains just a path separator, exit early to avoid\n // unnecessary work\n ret.root = ret.dir = path;\n return ret;\n }\n ret.base = ret.name = path;\n return ret;\n }\n // Try to match a root\n if (isPathSeparator(code)) {\n // Possible UNC root\n rootEnd = 1;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len) {\n // We matched a UNC root only\n rootEnd = j;\n }\n else if (j !== last) {\n // We matched a UNC root with leftovers\n rootEnd = j + 1;\n }\n }\n }\n }\n }\n else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n // Possible device root\n if (len <= 2) {\n // `path` contains just a drive root, exit early to avoid\n // unnecessary work\n ret.root = ret.dir = path;\n return ret;\n }\n rootEnd = 2;\n if (isPathSeparator(path.charCodeAt(2))) {\n if (len === 3) {\n // `path` contains just a drive root, exit early to avoid\n // unnecessary work\n ret.root = ret.dir = path;\n return ret;\n }\n rootEnd = 3;\n }\n }\n if (rootEnd > 0) {\n ret.root = path.slice(0, rootEnd);\n }\n let startDot = -1;\n let startPart = rootEnd;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Get non-dir info\n for (; i >= rootEnd; --i) {\n code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (end !== -1) {\n if (startDot === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n ret.base = ret.name = path.slice(startPart, end);\n }\n else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n ret.ext = path.slice(startDot, end);\n }\n }\n // If the directory is the root, use the entire root as the `dir` including\n // the trailing slash if any (`C:\\abc` -> `C:\\`). Otherwise, strip out the\n // trailing slash (`C:\\abc\\def` -> `C:\\abc`).\n if (startPart > 0 && startPart !== rootEnd) {\n ret.dir = path.slice(0, startPart - 1);\n }\n else {\n ret.dir = ret.root;\n }\n return ret;\n },\n sep: '\\\\',\n delimiter: ';',\n win32: null,\n posix: null\n};\nexport const posix = {\n // path.resolve([from ...], to)\n resolve(...pathSegments) {\n let resolvedPath = '';\n let resolvedAbsolute = false;\n for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n const path = i >= 0 ? pathSegments[i] : process.cwd();\n validateString(path, 'path');\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, '/', isPosixPathSeparator);\n if (resolvedAbsolute) {\n return `/${resolvedPath}`;\n }\n return resolvedPath.length > 0 ? resolvedPath : '.';\n },\n normalize(path) {\n validateString(path, 'path');\n if (path.length === 0) {\n return '.';\n }\n const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n const trailingSeparator = path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH;\n // Normalize the path\n path = normalizeString(path, !isAbsolute, '/', isPosixPathSeparator);\n if (path.length === 0) {\n if (isAbsolute) {\n return '/';\n }\n return trailingSeparator ? './' : '.';\n }\n if (trailingSeparator) {\n path += '/';\n }\n return isAbsolute ? `/${path}` : path;\n },\n isAbsolute(path) {\n validateString(path, 'path');\n return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n },\n join(...paths) {\n if (paths.length === 0) {\n return '.';\n }\n let joined;\n for (let i = 0; i < paths.length; ++i) {\n const arg = paths[i];\n validateString(arg, 'path');\n if (arg.length > 0) {\n if (joined === undefined) {\n joined = arg;\n }\n else {\n joined += `/${arg}`;\n }\n }\n }\n if (joined === undefined) {\n return '.';\n }\n return posix.normalize(joined);\n },\n relative(from, to) {\n validateString(from, 'from');\n validateString(to, 'to');\n if (from === to) {\n return '';\n }\n // Trim leading forward slashes.\n from = posix.resolve(from);\n to = posix.resolve(to);\n if (from === to) {\n return '';\n }\n const fromStart = 1;\n const fromEnd = from.length;\n const fromLen = fromEnd - fromStart;\n const toStart = 1;\n const toLen = to.length - toStart;\n // Compare paths to find the longest common path from root\n const length = (fromLen < toLen ? fromLen : toLen);\n let lastCommonSep = -1;\n let i = 0;\n for (; i < length; i++) {\n const fromCode = from.charCodeAt(fromStart + i);\n if (fromCode !== to.charCodeAt(toStart + i)) {\n break;\n }\n else if (fromCode === CHAR_FORWARD_SLASH) {\n lastCommonSep = i;\n }\n }\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === CHAR_FORWARD_SLASH) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n }\n if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n }\n else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n }\n else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo/bar'; to='/'\n lastCommonSep = 0;\n }\n }\n }\n let out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`.\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n out += out.length === 0 ? '..' : '/..';\n }\n }\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts.\n return `${out}${to.slice(toStart + lastCommonSep)}`;\n },\n toNamespacedPath(path) {\n // Non-op on posix systems\n return path;\n },\n dirname(path) {\n validateString(path, 'path');\n if (path.length === 0) {\n return '.';\n }\n const hasRoot = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n let end = -1;\n let matchedSlash = true;\n for (let i = path.length - 1; i >= 1; --i) {\n if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n }\n else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1) {\n return hasRoot ? '/' : '.';\n }\n if (hasRoot && end === 1) {\n return '//';\n }\n return path.slice(0, end);\n },\n basename(path, ext) {\n if (ext !== undefined) {\n validateString(ext, 'ext');\n }\n validateString(path, 'path');\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i;\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext === path) {\n return '';\n }\n let extIdx = ext.length - 1;\n let firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n }\n else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n if (start === end) {\n end = firstNonSlashEnd;\n }\n else if (end === -1) {\n end = path.length;\n }\n return path.slice(start, end);\n }\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n if (end === -1) {\n return '';\n }\n return path.slice(start, end);\n },\n extname(path) {\n validateString(path, 'path');\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n for (let i = path.length - 1; i >= 0; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (startDot === -1 ||\n end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n return '';\n }\n return path.slice(startDot, end);\n },\n format: _format.bind(null, '/'),\n parse(path) {\n validateString(path, 'path');\n const ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) {\n return ret;\n }\n const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n let start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n }\n else {\n start = 0;\n }\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Get non-dir info\n for (; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (end !== -1) {\n const start = startPart === 0 && isAbsolute ? 1 : startPart;\n if (startDot === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n ret.base = ret.name = path.slice(start, end);\n }\n else {\n ret.name = path.slice(start, startDot);\n ret.base = path.slice(start, end);\n ret.ext = path.slice(startDot, end);\n }\n }\n if (startPart > 0) {\n ret.dir = path.slice(0, startPart - 1);\n }\n else if (isAbsolute) {\n ret.dir = '/';\n }\n return ret;\n },\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\nposix.win32 = win32.win32 = win32;\nposix.posix = win32.posix = posix;\nexport const normalize = (process.platform === 'win32' ? win32.normalize : posix.normalize);\nexport const resolve = (process.platform === 'win32' ? win32.resolve : posix.resolve);\nexport const relative = (process.platform === 'win32' ? win32.relative : posix.relative);\nexport const dirname = (process.platform === 'win32' ? win32.dirname : posix.dirname);\nexport const basename = (process.platform === 'win32' ? win32.basename : posix.basename);\nexport const extname = (process.platform === 'win32' ? win32.extname : posix.extname);\nexport const sep = (process.platform === 'win32' ? win32.sep : posix.sep);\n","import { equals } from '../../base/common/objects.js';\n/**\n * Vertical Lane in the overview ruler of the editor.\n */\nexport var OverviewRulerLane;\n(function (OverviewRulerLane) {\n OverviewRulerLane[OverviewRulerLane[\"Left\"] = 1] = \"Left\";\n OverviewRulerLane[OverviewRulerLane[\"Center\"] = 2] = \"Center\";\n OverviewRulerLane[OverviewRulerLane[\"Right\"] = 4] = \"Right\";\n OverviewRulerLane[OverviewRulerLane[\"Full\"] = 7] = \"Full\";\n})(OverviewRulerLane || (OverviewRulerLane = {}));\n/**\n * Position in the minimap to render the decoration.\n */\nexport var MinimapPosition;\n(function (MinimapPosition) {\n MinimapPosition[MinimapPosition[\"Inline\"] = 1] = \"Inline\";\n MinimapPosition[MinimapPosition[\"Gutter\"] = 2] = \"Gutter\";\n})(MinimapPosition || (MinimapPosition = {}));\nexport class TextModelResolvedOptions {\n /**\n * @internal\n */\n constructor(src) {\n this._textModelResolvedOptionsBrand = undefined;\n this.tabSize = Math.max(1, src.tabSize | 0);\n this.indentSize = src.tabSize | 0;\n this.insertSpaces = Boolean(src.insertSpaces);\n this.defaultEOL = src.defaultEOL | 0;\n this.trimAutoWhitespace = Boolean(src.trimAutoWhitespace);\n this.bracketPairColorizationOptions = src.bracketPairColorizationOptions;\n }\n /**\n * @internal\n */\n equals(other) {\n return (this.tabSize === other.tabSize\n && this.indentSize === other.indentSize\n && this.insertSpaces === other.insertSpaces\n && this.defaultEOL === other.defaultEOL\n && this.trimAutoWhitespace === other.trimAutoWhitespace\n && equals(this.bracketPairColorizationOptions, other.bracketPairColorizationOptions));\n }\n /**\n * @internal\n */\n createChangeEvent(newOpts) {\n return {\n tabSize: this.tabSize !== newOpts.tabSize,\n indentSize: this.indentSize !== newOpts.indentSize,\n insertSpaces: this.insertSpaces !== newOpts.insertSpaces,\n trimAutoWhitespace: this.trimAutoWhitespace !== newOpts.trimAutoWhitespace,\n };\n }\n}\nexport class FindMatch {\n /**\n * @internal\n */\n constructor(range, matches) {\n this._findMatchBrand = undefined;\n this.range = range;\n this.matches = matches;\n }\n}\n/**\n * @internal\n */\nexport var HorizontalGuidesState;\n(function (HorizontalGuidesState) {\n HorizontalGuidesState[HorizontalGuidesState[\"Disabled\"] = 0] = \"Disabled\";\n HorizontalGuidesState[HorizontalGuidesState[\"EnabledForActive\"] = 1] = \"EnabledForActive\";\n HorizontalGuidesState[HorizontalGuidesState[\"Enabled\"] = 2] = \"Enabled\";\n})(HorizontalGuidesState || (HorizontalGuidesState = {}));\n/**\n * @internal\n */\nexport class IndentGuide {\n constructor(visibleColumn, className, \n /**\n * If set, this indent guide is a horizontal guide (no vertical part).\n * It starts at visibleColumn and continues until endColumn.\n */\n horizontalLine) {\n this.visibleColumn = visibleColumn;\n this.className = className;\n this.horizontalLine = horizontalLine;\n }\n}\n/**\n * @internal\n */\nexport class IndentGuideHorizontalLine {\n constructor(top, endColumn) {\n this.top = top;\n this.endColumn = endColumn;\n }\n}\n/**\n * @internal\n */\nexport class ValidAnnotatedEditOperation {\n constructor(identifier, range, text, forceMoveMarkers, isAutoWhitespaceEdit, _isTracked) {\n this.identifier = identifier;\n this.range = range;\n this.text = text;\n this.forceMoveMarkers = forceMoveMarkers;\n this.isAutoWhitespaceEdit = isAutoWhitespaceEdit;\n this._isTracked = _isTracked;\n }\n}\n/**\n * @internal\n */\nexport class ApplyEditsResult {\n constructor(reverseEdits, changes, trimAutoWhitespaceLineNumbers) {\n this.reverseEdits = reverseEdits;\n this.changes = changes;\n this.trimAutoWhitespaceLineNumbers = trimAutoWhitespaceLineNumbers;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * An event describing that a model has been reset to a new value.\n * @internal\n */\nexport class ModelRawFlush {\n constructor() {\n this.changeType = 1 /* Flush */;\n }\n}\n/**\n * Represents text injected on a line\n * @internal\n */\nexport class LineInjectedText {\n constructor(ownerId, lineNumber, column, options, order) {\n this.ownerId = ownerId;\n this.lineNumber = lineNumber;\n this.column = column;\n this.options = options;\n this.order = order;\n }\n static applyInjectedText(lineText, injectedTexts) {\n if (!injectedTexts || injectedTexts.length === 0) {\n return lineText;\n }\n let result = '';\n let lastOriginalOffset = 0;\n for (const injectedText of injectedTexts) {\n result += lineText.substring(lastOriginalOffset, injectedText.column - 1);\n lastOriginalOffset = injectedText.column - 1;\n result += injectedText.options.content;\n }\n result += lineText.substring(lastOriginalOffset);\n return result;\n }\n static fromDecorations(decorations) {\n const result = [];\n for (const decoration of decorations) {\n if (decoration.options.before && decoration.options.before.content.length > 0) {\n result.push(new LineInjectedText(decoration.ownerId, decoration.range.startLineNumber, decoration.range.startColumn, decoration.options.before, 0));\n }\n if (decoration.options.after && decoration.options.after.content.length > 0) {\n result.push(new LineInjectedText(decoration.ownerId, decoration.range.endLineNumber, decoration.range.endColumn, decoration.options.after, 1));\n }\n }\n result.sort((a, b) => {\n if (a.lineNumber === b.lineNumber) {\n if (a.column === b.column) {\n return a.order - b.order;\n }\n return a.column - b.column;\n }\n return a.lineNumber - b.lineNumber;\n });\n return result;\n }\n}\n/**\n * An event describing that a line has changed in a model.\n * @internal\n */\nexport class ModelRawLineChanged {\n constructor(lineNumber, detail, injectedText) {\n this.changeType = 2 /* LineChanged */;\n this.lineNumber = lineNumber;\n this.detail = detail;\n this.injectedText = injectedText;\n }\n}\n/**\n * An event describing that line(s) have been deleted in a model.\n * @internal\n */\nexport class ModelRawLinesDeleted {\n constructor(fromLineNumber, toLineNumber) {\n this.changeType = 3 /* LinesDeleted */;\n this.fromLineNumber = fromLineNumber;\n this.toLineNumber = toLineNumber;\n }\n}\n/**\n * An event describing that line(s) have been inserted in a model.\n * @internal\n */\nexport class ModelRawLinesInserted {\n constructor(fromLineNumber, toLineNumber, detail, injectedTexts) {\n this.changeType = 4 /* LinesInserted */;\n this.injectedTexts = injectedTexts;\n this.fromLineNumber = fromLineNumber;\n this.toLineNumber = toLineNumber;\n this.detail = detail;\n }\n}\n/**\n * An event describing that a model has had its EOL changed.\n * @internal\n */\nexport class ModelRawEOLChanged {\n constructor() {\n this.changeType = 5 /* EOLChanged */;\n }\n}\n/**\n * An event describing a change in the text of a model.\n * @internal\n */\nexport class ModelRawContentChangedEvent {\n constructor(changes, versionId, isUndoing, isRedoing) {\n this.changes = changes;\n this.versionId = versionId;\n this.isUndoing = isUndoing;\n this.isRedoing = isRedoing;\n this.resultingSelection = null;\n }\n containsEvent(type) {\n for (let i = 0, len = this.changes.length; i < len; i++) {\n const change = this.changes[i];\n if (change.changeType === type) {\n return true;\n }\n }\n return false;\n }\n static merge(a, b) {\n const changes = [].concat(a.changes).concat(b.changes);\n const versionId = b.versionId;\n const isUndoing = (a.isUndoing || b.isUndoing);\n const isRedoing = (a.isRedoing || b.isRedoing);\n return new ModelRawContentChangedEvent(changes, versionId, isUndoing, isRedoing);\n }\n}\n/**\n * An event describing a change in injected text.\n * @internal\n */\nexport class ModelInjectedTextChangedEvent {\n constructor(changes) {\n this.changes = changes;\n }\n}\n/**\n * @internal\n */\nexport class InternalModelContentChangeEvent {\n constructor(rawContentChangedEvent, contentChangedEvent) {\n this.rawContentChangedEvent = rawContentChangedEvent;\n this.contentChangedEvent = contentChangedEvent;\n }\n merge(other) {\n const rawContentChangedEvent = ModelRawContentChangedEvent.merge(this.rawContentChangedEvent, other.rawContentChangedEvent);\n const contentChangedEvent = InternalModelContentChangeEvent._mergeChangeEvents(this.contentChangedEvent, other.contentChangedEvent);\n return new InternalModelContentChangeEvent(rawContentChangedEvent, contentChangedEvent);\n }\n static _mergeChangeEvents(a, b) {\n const changes = [].concat(a.changes).concat(b.changes);\n const eol = b.eol;\n const versionId = b.versionId;\n const isUndoing = (a.isUndoing || b.isUndoing);\n const isRedoing = (a.isRedoing || b.isRedoing);\n const isFlush = (a.isFlush || b.isFlush);\n return {\n changes: changes,\n eol: eol,\n versionId: versionId,\n isUndoing: isUndoing,\n isRedoing: isRedoing,\n isFlush: isFlush\n };\n }\n}\n","self[\"MonacoEnvironment\"] = (function (paths) {\n function stripTrailingSlash(str) {\n return str.replace(/\\/$/, '');\n }\n return {\n globalAPI: false,\n getWorkerUrl: function (moduleId, label) {\n var pathPrefix = typeof __webpack_public_path__ === 'string' ? __webpack_public_path__ : \"/\";\n var result = (pathPrefix ? stripTrailingSlash(pathPrefix) + '/' : '') + paths[label];\n if (/^((http:)|(https:)|(file:)|(\\/\\/))/.test(result)) {\n var currentUrl = String(window.location);\n var currentOrigin = currentUrl.substr(0, currentUrl.length - window.location.hash.length - window.location.search.length - window.location.pathname.length);\n if (result.substring(0, currentOrigin.length) !== currentOrigin) {\n if(/^(\\/\\/)/.test(result)) {\n result = window.location.protocol + result\n }\n var js = '/*' + label + '*/importScripts(\"' + result + '\");';\n var blob = new Blob([js], { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n }\n }\n return result;\n }\n };\n })({\n \"editorWorkerService\": \"editor.worker.js\",\n \"json\": \"json.worker.js\"\n});\nrequire(\"./contrib/find/findController.js\");\nmodule.exports = require(\"!!./editor.api.js\");\nrequire(\"../language/json/monaco.contribution.js\");","/*---------------------------------------------------------------------------------------------\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 *--------------------------------------------------------------------------------------------*/\nexport function isFalsyOrWhitespace(str) {\n if (!str || typeof str !== 'string') {\n return true;\n }\n return str.trim().length === 0;\n}\nconst _formatRegexp = /{(\\d+)}/g;\n/**\n * Helper to produce a string with a variable number of arguments. Insert variable segments\n * into the string using the {n} notation where N is the index of the argument following the string.\n * @param value string to which formatting is applied\n * @param args replacements for {n}-entries\n */\nexport function format(value, ...args) {\n if (args.length === 0) {\n return value;\n }\n return value.replace(_formatRegexp, function (match, group) {\n const idx = parseInt(group, 10);\n return isNaN(idx) || idx < 0 || idx >= args.length ?\n match :\n args[idx];\n });\n}\n/**\n * Converts HTML characters inside the string to use entities instead. Makes the string safe from\n * being used e.g. in HTMLElement.innerHTML.\n */\nexport function escape(html) {\n return html.replace(/[<>&]/g, function (match) {\n switch (match) {\n case '<': return '<';\n case '>': return '>';\n case '&': return '&';\n default: return match;\n }\n });\n}\n/**\n * Escapes regular expression characters in a given string\n */\nexport function escapeRegExpCharacters(value) {\n return value.replace(/[\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\[\\]\\(\\)]/g, '\\\\$&');\n}\n/**\n * Removes all occurrences of needle from the beginning and end of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim (default is a blank)\n */\nexport function trim(haystack, needle = ' ') {\n const trimmed = ltrim(haystack, needle);\n return rtrim(trimmed, needle);\n}\n/**\n * Removes all occurrences of needle from the beginning of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim\n */\nexport function ltrim(haystack, needle) {\n if (!haystack || !needle) {\n return haystack;\n }\n const needleLen = needle.length;\n if (needleLen === 0 || haystack.length === 0) {\n return haystack;\n }\n let offset = 0;\n while (haystack.indexOf(needle, offset) === offset) {\n offset = offset + needleLen;\n }\n return haystack.substring(offset);\n}\n/**\n * Removes all occurrences of needle from the end of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim\n */\nexport function rtrim(haystack, needle) {\n if (!haystack || !needle) {\n return haystack;\n }\n const needleLen = needle.length, haystackLen = haystack.length;\n if (needleLen === 0 || haystackLen === 0) {\n return haystack;\n }\n let offset = haystackLen, idx = -1;\n while (true) {\n idx = haystack.lastIndexOf(needle, offset - 1);\n if (idx === -1 || idx + needleLen !== offset) {\n break;\n }\n if (idx === 0) {\n return '';\n }\n offset = idx;\n }\n return haystack.substring(0, offset);\n}\nexport function convertSimple2RegExpPattern(pattern) {\n return pattern.replace(/[\\-\\\\\\{\\}\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, '\\\\$&').replace(/[\\*]/g, '.*');\n}\nexport function stripWildcards(pattern) {\n return pattern.replace(/\\*/g, '');\n}\nexport function createRegExp(searchString, isRegex, options = {}) {\n if (!searchString) {\n throw new Error('Cannot create regex from empty string');\n }\n if (!isRegex) {\n searchString = escapeRegExpCharacters(searchString);\n }\n if (options.wholeWord) {\n if (!/\\B/.test(searchString.charAt(0))) {\n searchString = '\\\\b' + searchString;\n }\n if (!/\\B/.test(searchString.charAt(searchString.length - 1))) {\n searchString = searchString + '\\\\b';\n }\n }\n let modifiers = '';\n if (options.global) {\n modifiers += 'g';\n }\n if (!options.matchCase) {\n modifiers += 'i';\n }\n if (options.multiline) {\n modifiers += 'm';\n }\n if (options.unicode) {\n modifiers += 'u';\n }\n return new RegExp(searchString, modifiers);\n}\nexport function regExpLeadsToEndlessLoop(regexp) {\n // Exit early if it's one of these special cases which are meant to match\n // against an empty string\n if (regexp.source === '^' || regexp.source === '^$' || regexp.source === '$' || regexp.source === '^\\\\s*$') {\n return false;\n }\n // We check against an empty string. If the regular expression doesn't advance\n // (e.g. ends in an endless loop) it will match an empty string.\n const match = regexp.exec('');\n return !!(match && regexp.lastIndex === 0);\n}\nexport function regExpFlags(regexp) {\n return (regexp.global ? 'g' : '')\n + (regexp.ignoreCase ? 'i' : '')\n + (regexp.multiline ? 'm' : '')\n + (regexp /* standalone editor compilation */.unicode ? 'u' : '');\n}\nexport function splitLines(str) {\n return str.split(/\\r\\n|\\r|\\n/);\n}\n/**\n * Returns first index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\nexport function firstNonWhitespaceIndex(str) {\n for (let i = 0, len = str.length; i < len; i++) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Returns the leading whitespace of the string.\n * If the string contains only whitespaces, returns entire string\n */\nexport function getLeadingWhitespace(str, start = 0, end = str.length) {\n for (let i = start; i < end; i++) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\n return str.substring(start, i);\n }\n }\n return str.substring(start, end);\n}\n/**\n * Returns last index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\nexport function lastNonWhitespaceIndex(str, startIndex = str.length - 1) {\n for (let i = startIndex; i >= 0; i--) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\n return i;\n }\n }\n return -1;\n}\nexport function compare(a, b) {\n if (a < b) {\n return -1;\n }\n else if (a > b) {\n return 1;\n }\n else {\n return 0;\n }\n}\nexport function compareSubstring(a, b, aStart = 0, aEnd = a.length, bStart = 0, bEnd = b.length) {\n for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {\n let codeA = a.charCodeAt(aStart);\n let codeB = b.charCodeAt(bStart);\n if (codeA < codeB) {\n return -1;\n }\n else if (codeA > codeB) {\n return 1;\n }\n }\n const aLen = aEnd - aStart;\n const bLen = bEnd - bStart;\n if (aLen < bLen) {\n return -1;\n }\n else if (aLen > bLen) {\n return 1;\n }\n return 0;\n}\nexport function compareIgnoreCase(a, b) {\n return compareSubstringIgnoreCase(a, b, 0, a.length, 0, b.length);\n}\nexport function compareSubstringIgnoreCase(a, b, aStart = 0, aEnd = a.length, bStart = 0, bEnd = b.length) {\n for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {\n let codeA = a.charCodeAt(aStart);\n let codeB = b.charCodeAt(bStart);\n if (codeA === codeB) {\n // equal\n continue;\n }\n if (codeA >= 128 || codeB >= 128) {\n // not ASCII letters -> fallback to lower-casing strings\n return compareSubstring(a.toLowerCase(), b.toLowerCase(), aStart, aEnd, bStart, bEnd);\n }\n // mapper lower-case ascii letter onto upper-case varinats\n // [97-122] (lower ascii) --> [65-90] (upper ascii)\n if (isLowerAsciiLetter(codeA)) {\n codeA -= 32;\n }\n if (isLowerAsciiLetter(codeB)) {\n codeB -= 32;\n }\n // compare both code points\n const diff = codeA - codeB;\n if (diff === 0) {\n continue;\n }\n return diff;\n }\n const aLen = aEnd - aStart;\n const bLen = bEnd - bStart;\n if (aLen < bLen) {\n return -1;\n }\n else if (aLen > bLen) {\n return 1;\n }\n return 0;\n}\nexport function isLowerAsciiLetter(code) {\n return code >= 97 /* a */ && code <= 122 /* z */;\n}\nexport function isUpperAsciiLetter(code) {\n return code >= 65 /* A */ && code <= 90 /* Z */;\n}\nexport function equalsIgnoreCase(a, b) {\n return a.length === b.length && compareSubstringIgnoreCase(a, b) === 0;\n}\nexport function startsWithIgnoreCase(str, candidate) {\n const candidateLength = candidate.length;\n if (candidate.length > str.length) {\n return false;\n }\n return compareSubstringIgnoreCase(str, candidate, 0, candidateLength) === 0;\n}\n/**\n * @returns the length of the common prefix of the two strings.\n */\nexport function commonPrefixLength(a, b) {\n let i, len = Math.min(a.length, b.length);\n for (i = 0; i < len; i++) {\n if (a.charCodeAt(i) !== b.charCodeAt(i)) {\n return i;\n }\n }\n return len;\n}\n/**\n * @returns the length of the common suffix of the two strings.\n */\nexport function commonSuffixLength(a, b) {\n let i, len = Math.min(a.length, b.length);\n const aLastIndex = a.length - 1;\n const bLastIndex = b.length - 1;\n for (i = 0; i < len; i++) {\n if (a.charCodeAt(aLastIndex - i) !== b.charCodeAt(bLastIndex - i)) {\n return i;\n }\n }\n return len;\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nexport function isHighSurrogate(charCode) {\n return (0xD800 <= charCode && charCode <= 0xDBFF);\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nexport function isLowSurrogate(charCode) {\n return (0xDC00 <= charCode && charCode <= 0xDFFF);\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nexport function computeCodePoint(highSurrogate, lowSurrogate) {\n return ((highSurrogate - 0xD800) << 10) + (lowSurrogate - 0xDC00) + 0x10000;\n}\n/**\n * get the code point that begins at offset `offset`\n */\nexport function getNextCodePoint(str, len, offset) {\n const charCode = str.charCodeAt(offset);\n if (isHighSurrogate(charCode) && offset + 1 < len) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (isLowSurrogate(nextCharCode)) {\n return computeCodePoint(charCode, nextCharCode);\n }\n }\n return charCode;\n}\n/**\n * get the code point that ends right before offset `offset`\n */\nfunction getPrevCodePoint(str, offset) {\n const charCode = str.charCodeAt(offset - 1);\n if (isLowSurrogate(charCode) && offset > 1) {\n const prevCharCode = str.charCodeAt(offset - 2);\n if (isHighSurrogate(prevCharCode)) {\n return computeCodePoint(prevCharCode, charCode);\n }\n }\n return charCode;\n}\nexport function nextCharLength(str, offset) {\n const graphemeBreakTree = GraphemeBreakTree.getInstance();\n const initialOffset = offset;\n const len = str.length;\n const initialCodePoint = getNextCodePoint(str, len, offset);\n offset += (initialCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n let graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(initialCodePoint);\n while (offset < len) {\n const nextCodePoint = getNextCodePoint(str, len, offset);\n const nextGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(nextCodePoint);\n if (breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\n break;\n }\n offset += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = nextGraphemeBreakType;\n }\n return (offset - initialOffset);\n}\nexport function prevCharLength(str, offset) {\n const graphemeBreakTree = GraphemeBreakTree.getInstance();\n const initialOffset = offset;\n const initialCodePoint = getPrevCodePoint(str, offset);\n offset -= (initialCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n let graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(initialCodePoint);\n while (offset > 0) {\n const prevCodePoint = getPrevCodePoint(str, offset);\n const prevGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(prevCodePoint);\n if (breakBetweenGraphemeBreakType(prevGraphemeBreakType, graphemeBreakType)) {\n break;\n }\n offset -= (prevCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = prevGraphemeBreakType;\n }\n return (initialOffset - offset);\n}\n/**\n * Generated using https://github.com/alexdima/unicode-utils/blob/master/generate-rtl-test.js\n */\nconst CONTAINS_RTL = /(?:[\\u05BE\\u05C0\\u05C3\\u05C6\\u05D0-\\u05F4\\u0608\\u060B\\u060D\\u061B-\\u064A\\u066D-\\u066F\\u0671-\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1-\\u07EA\\u07F4\\u07F5\\u07FA-\\u0815\\u081A\\u0824\\u0828\\u0830-\\u0858\\u085E-\\u08BD\\u200F\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFD3D\\uFD50-\\uFDFC\\uFE70-\\uFEFC]|\\uD802[\\uDC00-\\uDD1B\\uDD20-\\uDE00\\uDE10-\\uDE33\\uDE40-\\uDEE4\\uDEEB-\\uDF35\\uDF40-\\uDFFF]|\\uD803[\\uDC00-\\uDCFF]|\\uD83A[\\uDC00-\\uDCCF\\uDD00-\\uDD43\\uDD50-\\uDFFF]|\\uD83B[\\uDC00-\\uDEBB])/;\n/**\n * Returns true if `str` contains any Unicode character that is classified as \"R\" or \"AL\".\n */\nexport function containsRTL(str) {\n return CONTAINS_RTL.test(str);\n}\n/**\n * Generated using https://github.com/alexdima/unicode-utils/blob/master/generate-emoji-test.js\n */\nconst CONTAINS_EMOJI = /(?:[\\u231A\\u231B\\u23F0\\u23F3\\u2600-\\u27BF\\u2B50\\u2B55]|\\uD83C[\\uDDE6-\\uDDFF\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDE4F\\uDE80-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD00-\\uDDFF\\uDE70-\\uDED6])/;\nexport function containsEmoji(str) {\n return CONTAINS_EMOJI.test(str);\n}\nconst IS_BASIC_ASCII = /^[\\t\\n\\r\\x20-\\x7E]*$/;\n/**\n * Returns true if `str` contains only basic ASCII characters in the range 32 - 126 (including 32 and 126) or \\n, \\r, \\t\n */\nexport function isBasicASCII(str) {\n return IS_BASIC_ASCII.test(str);\n}\nexport const UNUSUAL_LINE_TERMINATORS = /[\\u2028\\u2029]/; // LINE SEPARATOR (LS) or PARAGRAPH SEPARATOR (PS)\n/**\n * Returns true if `str` contains unusual line terminators, like LS or PS\n */\nexport function containsUnusualLineTerminators(str) {\n return UNUSUAL_LINE_TERMINATORS.test(str);\n}\nexport function containsFullWidthCharacter(str) {\n for (let i = 0, len = str.length; i < len; i++) {\n if (isFullWidthCharacter(str.charCodeAt(i))) {\n return true;\n }\n }\n return false;\n}\nexport function isFullWidthCharacter(charCode) {\n // Do a cheap trick to better support wrapping of wide characters, treat them as 2 columns\n // http://jrgraphix.net/research/unicode_blocks.php\n // 2E80 — 2EFF CJK Radicals Supplement\n // 2F00 — 2FDF Kangxi Radicals\n // 2FF0 — 2FFF Ideographic Description Characters\n // 3000 — 303F CJK Symbols and Punctuation\n // 3040 — 309F Hiragana\n // 30A0 — 30FF Katakana\n // 3100 — 312F Bopomofo\n // 3130 — 318F Hangul Compatibility Jamo\n // 3190 — 319F Kanbun\n // 31A0 — 31BF Bopomofo Extended\n // 31F0 — 31FF Katakana Phonetic Extensions\n // 3200 — 32FF Enclosed CJK Letters and Months\n // 3300 — 33FF CJK Compatibility\n // 3400 — 4DBF CJK Unified Ideographs Extension A\n // 4DC0 — 4DFF Yijing Hexagram Symbols\n // 4E00 — 9FFF CJK Unified Ideographs\n // A000 — A48F Yi Syllables\n // A490 — A4CF Yi Radicals\n // AC00 — D7AF Hangul Syllables\n // [IGNORE] D800 — DB7F High Surrogates\n // [IGNORE] DB80 — DBFF High Private Use Surrogates\n // [IGNORE] DC00 — DFFF Low Surrogates\n // [IGNORE] E000 — F8FF Private Use Area\n // F900 — FAFF CJK Compatibility Ideographs\n // [IGNORE] FB00 — FB4F Alphabetic Presentation Forms\n // [IGNORE] FB50 — FDFF Arabic Presentation Forms-A\n // [IGNORE] FE00 — FE0F Variation Selectors\n // [IGNORE] FE20 — FE2F Combining Half Marks\n // [IGNORE] FE30 — FE4F CJK Compatibility Forms\n // [IGNORE] FE50 — FE6F Small Form Variants\n // [IGNORE] FE70 — FEFF Arabic Presentation Forms-B\n // FF00 — FFEF Halfwidth and Fullwidth Forms\n // [https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms]\n // of which FF01 - FF5E fullwidth ASCII of 21 to 7E\n // [IGNORE] and FF65 - FFDC halfwidth of Katakana and Hangul\n // [IGNORE] FFF0 — FFFF Specials\n charCode = +charCode; // @perf\n return ((charCode >= 0x2E80 && charCode <= 0xD7AF)\n || (charCode >= 0xF900 && charCode <= 0xFAFF)\n || (charCode >= 0xFF01 && charCode <= 0xFF5E));\n}\n/**\n * A fast function (therefore imprecise) to check if code points are emojis.\n * Generated using https://github.com/alexdima/unicode-utils/blob/master/generate-emoji-test.js\n */\nexport function isEmojiImprecise(x) {\n return ((x >= 0x1F1E6 && x <= 0x1F1FF) || (x === 8986) || (x === 8987) || (x === 9200)\n || (x === 9203) || (x >= 9728 && x <= 10175) || (x === 11088) || (x === 11093)\n || (x >= 127744 && x <= 128591) || (x >= 128640 && x <= 128764)\n || (x >= 128992 && x <= 129003) || (x >= 129280 && x <= 129535)\n || (x >= 129648 && x <= 129750));\n}\n// -- UTF-8 BOM\nexport const UTF8_BOM_CHARACTER = String.fromCharCode(65279 /* UTF8_BOM */);\nexport function startsWithUTF8BOM(str) {\n return !!(str && str.length > 0 && str.charCodeAt(0) === 65279 /* UTF8_BOM */);\n}\nexport function containsUppercaseCharacter(target, ignoreEscapedChars = false) {\n if (!target) {\n return false;\n }\n if (ignoreEscapedChars) {\n target = target.replace(/\\\\./g, '');\n }\n return target.toLowerCase() !== target;\n}\n/**\n * Produces 'a'-'z', followed by 'A'-'Z'... followed by 'a'-'z', etc.\n */\nexport function singleLetterHash(n) {\n const LETTERS_CNT = (90 /* Z */ - 65 /* A */ + 1);\n n = n % (2 * LETTERS_CNT);\n if (n < LETTERS_CNT) {\n return String.fromCharCode(97 /* a */ + n);\n }\n return String.fromCharCode(65 /* A */ + n - LETTERS_CNT);\n}\n//#region Unicode Grapheme Break\nexport function getGraphemeBreakType(codePoint) {\n const graphemeBreakTree = GraphemeBreakTree.getInstance();\n return graphemeBreakTree.getGraphemeBreakType(codePoint);\n}\nexport function breakBetweenGraphemeBreakType(breakTypeA, breakTypeB) {\n // http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundary_Rules\n // !!! Let's make the common case a bit faster\n if (breakTypeA === 0 /* Other */) {\n // see https://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakTest-13.0.0d10.html#table\n return (breakTypeB !== 5 /* Extend */ && breakTypeB !== 7 /* SpacingMark */);\n }\n // Do not break between a CR and LF. Otherwise, break before and after controls.\n // GB3 CR × LF\n // GB4 (Control | CR | LF) ÷\n // GB5 ÷ (Control | CR | LF)\n if (breakTypeA === 2 /* CR */) {\n if (breakTypeB === 3 /* LF */) {\n return false; // GB3\n }\n }\n if (breakTypeA === 4 /* Control */ || breakTypeA === 2 /* CR */ || breakTypeA === 3 /* LF */) {\n return true; // GB4\n }\n if (breakTypeB === 4 /* Control */ || breakTypeB === 2 /* CR */ || breakTypeB === 3 /* LF */) {\n return true; // GB5\n }\n // Do not break Hangul syllable sequences.\n // GB6 L × (L | V | LV | LVT)\n // GB7 (LV | V) × (V | T)\n // GB8 (LVT | T) × T\n if (breakTypeA === 8 /* L */) {\n if (breakTypeB === 8 /* L */ || breakTypeB === 9 /* V */ || breakTypeB === 11 /* LV */ || breakTypeB === 12 /* LVT */) {\n return false; // GB6\n }\n }\n if (breakTypeA === 11 /* LV */ || breakTypeA === 9 /* V */) {\n if (breakTypeB === 9 /* V */ || breakTypeB === 10 /* T */) {\n return false; // GB7\n }\n }\n if (breakTypeA === 12 /* LVT */ || breakTypeA === 10 /* T */) {\n if (breakTypeB === 10 /* T */) {\n return false; // GB8\n }\n }\n // Do not break before extending characters or ZWJ.\n // GB9 × (Extend | ZWJ)\n if (breakTypeB === 5 /* Extend */ || breakTypeB === 13 /* ZWJ */) {\n return false; // GB9\n }\n // The GB9a and GB9b rules only apply to extended grapheme clusters:\n // Do not break before SpacingMarks, or after Prepend characters.\n // GB9a × SpacingMark\n // GB9b Prepend ×\n if (breakTypeB === 7 /* SpacingMark */) {\n return false; // GB9a\n }\n if (breakTypeA === 1 /* Prepend */) {\n return false; // GB9b\n }\n // Do not break within emoji modifier sequences or emoji zwj sequences.\n // GB11 \\p{Extended_Pictographic} Extend* ZWJ × \\p{Extended_Pictographic}\n if (breakTypeA === 13 /* ZWJ */ && breakTypeB === 14 /* Extended_Pictographic */) {\n // Note: we are not implementing the rule entirely here to avoid introducing states\n return false; // GB11\n }\n // GB12 sot (RI RI)* RI × RI\n // GB13 [^RI] (RI RI)* RI × RI\n if (breakTypeA === 6 /* Regional_Indicator */ && breakTypeB === 6 /* Regional_Indicator */) {\n // Note: we are not implementing the rule entirely here to avoid introducing states\n return false; // GB12 & GB13\n }\n // GB999 Any ÷ Any\n return true;\n}\nclass GraphemeBreakTree {\n constructor() {\n this._data = getGraphemeBreakRawData();\n }\n static getInstance() {\n if (!GraphemeBreakTree._INSTANCE) {\n GraphemeBreakTree._INSTANCE = new GraphemeBreakTree();\n }\n return GraphemeBreakTree._INSTANCE;\n }\n getGraphemeBreakType(codePoint) {\n // !!! Let's make 7bit ASCII a bit faster: 0..31\n if (codePoint < 32) {\n if (codePoint === 10 /* LineFeed */) {\n return 3 /* LF */;\n }\n if (codePoint === 13 /* CarriageReturn */) {\n return 2 /* CR */;\n }\n return 4 /* Control */;\n }\n // !!! Let's make 7bit ASCII a bit faster: 32..126\n if (codePoint < 127) {\n return 0 /* Other */;\n }\n const data = this._data;\n const nodeCount = data.length / 3;\n let nodeIndex = 1;\n while (nodeIndex <= nodeCount) {\n if (codePoint < data[3 * nodeIndex]) {\n // go left\n nodeIndex = 2 * nodeIndex;\n }\n else if (codePoint > data[3 * nodeIndex + 1]) {\n // go right\n nodeIndex = 2 * nodeIndex + 1;\n }\n else {\n // hit\n return data[3 * nodeIndex + 2];\n }\n }\n return 0 /* Other */;\n }\n}\nGraphemeBreakTree._INSTANCE = null;\nfunction getGraphemeBreakRawData() {\n // generated using https://github.com/alexdima/unicode-utils/blob/master/generate-grapheme-break.js\n return JSON.parse('[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]');\n}\n//#endregion\n/**\n * Computes the offset after performing a left delete on the given string,\n * while considering unicode grapheme/emoji rules.\n*/\nexport function getLeftDeleteOffset(offset, str) {\n if (offset === 0) {\n return 0;\n }\n // Try to delete emoji part.\n const emojiOffset = getOffsetBeforeLastEmojiComponent(offset, str);\n if (emojiOffset !== undefined) {\n return emojiOffset;\n }\n // Otherwise, just skip a single code point.\n const codePoint = getPrevCodePoint(str, offset);\n offset -= getUTF16Length(codePoint);\n return offset;\n}\nfunction getOffsetBeforeLastEmojiComponent(offset, str) {\n // See https://www.unicode.org/reports/tr51/tr51-14.html#EBNF_and_Regex for the\n // structure of emojis.\n let codePoint = getPrevCodePoint(str, offset);\n offset -= getUTF16Length(codePoint);\n // Skip modifiers\n while ((isEmojiModifier(codePoint) || codePoint === 65039 /* emojiVariantSelector */ || codePoint === 8419 /* enclosingKeyCap */)) {\n if (offset === 0) {\n // Cannot skip modifier, no preceding emoji base.\n return undefined;\n }\n codePoint = getPrevCodePoint(str, offset);\n offset -= getUTF16Length(codePoint);\n }\n // Expect base emoji\n if (!isEmojiImprecise(codePoint)) {\n // Unexpected code point, not a valid emoji.\n return undefined;\n }\n if (offset >= 0) {\n // Skip optional ZWJ code points that combine multiple emojis.\n // In theory, we should check if that ZWJ actually combines multiple emojis\n // to prevent deleting ZWJs in situations we didn't account for.\n const optionalZwjCodePoint = getPrevCodePoint(str, offset);\n if (optionalZwjCodePoint === 8205 /* zwj */) {\n offset -= getUTF16Length(optionalZwjCodePoint);\n }\n }\n return offset;\n}\nfunction getUTF16Length(codePoint) {\n return codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1;\n}\nfunction isEmojiModifier(codePoint) {\n return 0x1F3FB <= codePoint && codePoint <= 0x1F3FF;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IUndoRedoService = createDecorator('undoRedoService');\nexport class ResourceEditStackSnapshot {\n constructor(resource, elements) {\n this.resource = resource;\n this.elements = elements;\n }\n}\nexport class UndoRedoGroup {\n constructor() {\n this.id = UndoRedoGroup._ID++;\n this.order = 1;\n }\n nextOrder() {\n if (this.id === 0) {\n return 0;\n }\n return this.order++;\n }\n}\nUndoRedoGroup._ID = 0;\nUndoRedoGroup.None = new UndoRedoGroup();\nexport class UndoRedoSource {\n constructor() {\n this.id = UndoRedoSource._ID++;\n this.order = 1;\n }\n nextOrder() {\n if (this.id === 0) {\n return 0;\n }\n return this.order++;\n }\n}\nUndoRedoSource._ID = 0;\nUndoRedoSource.None = new UndoRedoSource();\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../dom.js';\nimport { isMacintosh } from '../../../common/platform.js';\nimport './aria.css';\n// Use a max length since we are inserting the whole msg in the DOM and that can cause browsers to freeze for long messages #94233\nconst MAX_MESSAGE_LENGTH = 20000;\nlet ariaContainer;\nlet alertContainer;\nlet alertContainer2;\nlet statusContainer;\nlet statusContainer2;\nexport function setARIAContainer(parent) {\n ariaContainer = document.createElement('div');\n ariaContainer.className = 'monaco-aria-container';\n const createAlertContainer = () => {\n const element = document.createElement('div');\n element.className = 'monaco-alert';\n element.setAttribute('role', 'alert');\n element.setAttribute('aria-atomic', 'true');\n ariaContainer.appendChild(element);\n return element;\n };\n alertContainer = createAlertContainer();\n alertContainer2 = createAlertContainer();\n const createStatusContainer = () => {\n const element = document.createElement('div');\n element.className = 'monaco-status';\n element.setAttribute('role', 'complementary');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n ariaContainer.appendChild(element);\n return element;\n };\n statusContainer = createStatusContainer();\n statusContainer2 = createStatusContainer();\n parent.appendChild(ariaContainer);\n}\n/**\n * Given the provided message, will make sure that it is read as alert to screen readers.\n */\nexport function alert(msg) {\n if (!ariaContainer) {\n return;\n }\n // Use alternate containers such that duplicated messages get read out by screen readers #99466\n if (alertContainer.textContent !== msg) {\n dom.clearNode(alertContainer2);\n insertMessage(alertContainer, msg);\n }\n else {\n dom.clearNode(alertContainer);\n insertMessage(alertContainer2, msg);\n }\n}\n/**\n * Given the provided message, will make sure that it is read as status to screen readers.\n */\nexport function status(msg) {\n if (!ariaContainer) {\n return;\n }\n if (isMacintosh) {\n alert(msg); // VoiceOver does not seem to support status role\n }\n else {\n if (statusContainer.textContent !== msg) {\n dom.clearNode(statusContainer2);\n insertMessage(statusContainer, msg);\n }\n else {\n dom.clearNode(statusContainer);\n insertMessage(statusContainer2, msg);\n }\n }\n}\nfunction insertMessage(target, msg) {\n dom.clearNode(target);\n if (msg.length > MAX_MESSAGE_LENGTH) {\n msg = msg.substr(0, MAX_MESSAGE_LENGTH);\n }\n target.textContent = msg;\n // See https://www.paciellogroup.com/blog/2012/06/html5-accessibility-chops-aria-rolealert-browser-support/\n target.style.visibility = 'hidden';\n target.style.visibility = 'visible';\n}\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { normalize, posix, sep } from './path.js';\nimport { isWindows } from './platform.js';\nimport { startsWithIgnoreCase } from './strings.js';\n/**\n * Takes a Windows OS path and changes backward slashes to forward slashes.\n * This should only be done for OS paths from Windows (or user provided paths potentially from Windows).\n * Using it on a Linux or MaxOS path might change it.\n */\nexport function toSlashes(osPath) {\n return osPath.replace(/[\\\\/]/g, posix.sep);\n}\n/**\n * Takes a Windows OS path (using backward or forward slashes) and turns it into a posix path:\n * - turns backward slashes into forward slashes\n * - makes it absolute if it starts with a drive letter\n * This should only be done for OS paths from Windows (or user provided paths potentially from Windows).\n * Using it on a Linux or MaxOS path might change it.\n */\nexport function toPosixPath(osPath) {\n if (osPath.indexOf('/') === -1) {\n osPath = toSlashes(osPath);\n }\n if (/^[a-zA-Z]:(\\/|$)/.test(osPath)) { // starts with a drive letter\n osPath = '/' + osPath;\n }\n return osPath;\n}\nexport function isEqualOrParent(base, parentCandidate, ignoreCase, separator = sep) {\n if (base === parentCandidate) {\n return true;\n }\n if (!base || !parentCandidate) {\n return false;\n }\n if (parentCandidate.length > base.length) {\n return false;\n }\n if (ignoreCase) {\n const beginsWith = startsWithIgnoreCase(base, parentCandidate);\n if (!beginsWith) {\n return false;\n }\n if (parentCandidate.length === base.length) {\n return true; // same path, different casing\n }\n let sepOffset = parentCandidate.length;\n if (parentCandidate.charAt(parentCandidate.length - 1) === separator) {\n sepOffset--; // adjust the expected sep offset in case our candidate already ends in separator character\n }\n return base.charAt(sepOffset) === separator;\n }\n if (parentCandidate.charAt(parentCandidate.length - 1) !== separator) {\n parentCandidate += separator;\n }\n return base.indexOf(parentCandidate) === 0;\n}\nexport function isWindowsDriveLetter(char0) {\n return char0 >= 65 /* A */ && char0 <= 90 /* Z */ || char0 >= 97 /* a */ && char0 <= 122 /* z */;\n}\nexport function isRootOrDriveLetter(path) {\n const pathNormalized = normalize(path);\n if (isWindows) {\n if (path.length > 3) {\n return false;\n }\n return hasDriveLetter(pathNormalized) &&\n (path.length === 2 || pathNormalized.charCodeAt(2) === 92 /* Backslash */);\n }\n return pathNormalized === posix.sep;\n}\nexport function hasDriveLetter(path) {\n if (isWindows) {\n return isWindowsDriveLetter(path.charCodeAt(0)) && path.charCodeAt(1) === 58 /* Colon */;\n }\n return false;\n}\n","var _a, _b;\nimport { compare, compareIgnoreCase, compareSubstring, compareSubstringIgnoreCase } from './strings.js';\nexport class StringIterator {\n constructor() {\n this._value = '';\n this._pos = 0;\n }\n reset(key) {\n this._value = key;\n this._pos = 0;\n return this;\n }\n next() {\n this._pos += 1;\n return this;\n }\n hasNext() {\n return this._pos < this._value.length - 1;\n }\n cmp(a) {\n const aCode = a.charCodeAt(0);\n const thisCode = this._value.charCodeAt(this._pos);\n return aCode - thisCode;\n }\n value() {\n return this._value[this._pos];\n }\n}\nexport class ConfigKeysIterator {\n constructor(_caseSensitive = true) {\n this._caseSensitive = _caseSensitive;\n }\n reset(key) {\n this._value = key;\n this._from = 0;\n this._to = 0;\n return this.next();\n }\n hasNext() {\n return this._to < this._value.length;\n }\n next() {\n // this._data = key.split(/[\\\\/]/).filter(s => !!s);\n this._from = this._to;\n let justSeps = true;\n for (; this._to < this._value.length; this._to++) {\n const ch = this._value.charCodeAt(this._to);\n if (ch === 46 /* Period */) {\n if (justSeps) {\n this._from++;\n }\n else {\n break;\n }\n }\n else {\n justSeps = false;\n }\n }\n return this;\n }\n cmp(a) {\n return this._caseSensitive\n ? compareSubstring(a, this._value, 0, a.length, this._from, this._to)\n : compareSubstringIgnoreCase(a, this._value, 0, a.length, this._from, this._to);\n }\n value() {\n return this._value.substring(this._from, this._to);\n }\n}\nexport class PathIterator {\n constructor(_splitOnBackslash = true, _caseSensitive = true) {\n this._splitOnBackslash = _splitOnBackslash;\n this._caseSensitive = _caseSensitive;\n }\n reset(key) {\n this._value = key.replace(/\\\\$|\\/$/, '');\n this._from = 0;\n this._to = 0;\n return this.next();\n }\n hasNext() {\n return this._to < this._value.length;\n }\n next() {\n // this._data = key.split(/[\\\\/]/).filter(s => !!s);\n this._from = this._to;\n let justSeps = true;\n for (; this._to < this._value.length; this._to++) {\n const ch = this._value.charCodeAt(this._to);\n if (ch === 47 /* Slash */ || this._splitOnBackslash && ch === 92 /* Backslash */) {\n if (justSeps) {\n this._from++;\n }\n else {\n break;\n }\n }\n else {\n justSeps = false;\n }\n }\n return this;\n }\n cmp(a) {\n return this._caseSensitive\n ? compareSubstring(a, this._value, 0, a.length, this._from, this._to)\n : compareSubstringIgnoreCase(a, this._value, 0, a.length, this._from, this._to);\n }\n value() {\n return this._value.substring(this._from, this._to);\n }\n}\nexport class UriIterator {\n constructor(_ignorePathCasing) {\n this._ignorePathCasing = _ignorePathCasing;\n this._states = [];\n this._stateIdx = 0;\n }\n reset(key) {\n this._value = key;\n this._states = [];\n if (this._value.scheme) {\n this._states.push(1 /* Scheme */);\n }\n if (this._value.authority) {\n this._states.push(2 /* Authority */);\n }\n if (this._value.path) {\n this._pathIterator = new PathIterator(false, !this._ignorePathCasing(key));\n this._pathIterator.reset(key.path);\n if (this._pathIterator.value()) {\n this._states.push(3 /* Path */);\n }\n }\n if (this._value.query) {\n this._states.push(4 /* Query */);\n }\n if (this._value.fragment) {\n this._states.push(5 /* Fragment */);\n }\n this._stateIdx = 0;\n return this;\n }\n next() {\n if (this._states[this._stateIdx] === 3 /* Path */ && this._pathIterator.hasNext()) {\n this._pathIterator.next();\n }\n else {\n this._stateIdx += 1;\n }\n return this;\n }\n hasNext() {\n return (this._states[this._stateIdx] === 3 /* Path */ && this._pathIterator.hasNext())\n || this._stateIdx < this._states.length - 1;\n }\n cmp(a) {\n if (this._states[this._stateIdx] === 1 /* Scheme */) {\n return compareIgnoreCase(a, this._value.scheme);\n }\n else if (this._states[this._stateIdx] === 2 /* Authority */) {\n return compareIgnoreCase(a, this._value.authority);\n }\n else if (this._states[this._stateIdx] === 3 /* Path */) {\n return this._pathIterator.cmp(a);\n }\n else if (this._states[this._stateIdx] === 4 /* Query */) {\n return compare(a, this._value.query);\n }\n else if (this._states[this._stateIdx] === 5 /* Fragment */) {\n return compare(a, this._value.fragment);\n }\n throw new Error();\n }\n value() {\n if (this._states[this._stateIdx] === 1 /* Scheme */) {\n return this._value.scheme;\n }\n else if (this._states[this._stateIdx] === 2 /* Authority */) {\n return this._value.authority;\n }\n else if (this._states[this._stateIdx] === 3 /* Path */) {\n return this._pathIterator.value();\n }\n else if (this._states[this._stateIdx] === 4 /* Query */) {\n return this._value.query;\n }\n else if (this._states[this._stateIdx] === 5 /* Fragment */) {\n return this._value.fragment;\n }\n throw new Error();\n }\n}\nclass TernarySearchTreeNode {\n constructor() {\n this.height = 1;\n }\n rotateLeft() {\n const tmp = this.right;\n this.right = tmp.left;\n tmp.left = this;\n this.updateHeight();\n tmp.updateHeight();\n return tmp;\n }\n rotateRight() {\n const tmp = this.left;\n this.left = tmp.right;\n tmp.right = this;\n this.updateHeight();\n tmp.updateHeight();\n return tmp;\n }\n updateHeight() {\n this.height = 1 + Math.max(this.heightLeft, this.heightRight);\n }\n balanceFactor() {\n return this.heightRight - this.heightLeft;\n }\n get heightLeft() {\n var _c, _d;\n return (_d = (_c = this.left) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0;\n }\n get heightRight() {\n var _c, _d;\n return (_d = (_c = this.right) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0;\n }\n}\nexport class TernarySearchTree {\n constructor(segments) {\n this._iter = segments;\n }\n static forUris(ignorePathCasing = () => false) {\n return new TernarySearchTree(new UriIterator(ignorePathCasing));\n }\n static forStrings() {\n return new TernarySearchTree(new StringIterator());\n }\n static forConfigKeys() {\n return new TernarySearchTree(new ConfigKeysIterator());\n }\n clear() {\n this._root = undefined;\n }\n set(key, element) {\n const iter = this._iter.reset(key);\n let node;\n if (!this._root) {\n this._root = new TernarySearchTreeNode();\n this._root.segment = iter.value();\n }\n const stack = [];\n // find insert_node\n node = this._root;\n while (true) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n if (!node.left) {\n node.left = new TernarySearchTreeNode();\n node.left.segment = iter.value();\n }\n stack.push([-1 /* Left */, node]);\n node = node.left;\n }\n else if (val < 0) {\n // right\n if (!node.right) {\n node.right = new TernarySearchTreeNode();\n node.right.segment = iter.value();\n }\n stack.push([1 /* Right */, node]);\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n if (!node.mid) {\n node.mid = new TernarySearchTreeNode();\n node.mid.segment = iter.value();\n }\n stack.push([0 /* Mid */, node]);\n node = node.mid;\n }\n else {\n break;\n }\n }\n // set value\n const oldElement = node.value;\n node.value = element;\n node.key = key;\n // balance\n for (let i = stack.length - 1; i >= 0; i--) {\n const node = stack[i][1];\n node.updateHeight();\n const bf = node.balanceFactor();\n if (bf < -1 || bf > 1) {\n // needs rotate\n const d1 = stack[i][0];\n const d2 = stack[i + 1][0];\n if (d1 === 1 /* Right */ && d2 === 1 /* Right */) {\n //right, right -> rotate left\n stack[i][1] = node.rotateLeft();\n }\n else if (d1 === -1 /* Left */ && d2 === -1 /* Left */) {\n // left, left -> rotate right\n stack[i][1] = node.rotateRight();\n }\n else if (d1 === 1 /* Right */ && d2 === -1 /* Left */) {\n // right, left -> double rotate right, left\n node.right = stack[i + 1][1] = stack[i + 1][1].rotateRight();\n stack[i][1] = node.rotateLeft();\n }\n else if (d1 === -1 /* Left */ && d2 === 1 /* Right */) {\n // left, right -> double rotate left, right\n node.left = stack[i + 1][1] = stack[i + 1][1].rotateLeft();\n stack[i][1] = node.rotateRight();\n }\n else {\n throw new Error();\n }\n // patch path to parent\n if (i > 0) {\n switch (stack[i - 1][0]) {\n case -1 /* Left */:\n stack[i - 1][1].left = stack[i][1];\n break;\n case 1 /* Right */:\n stack[i - 1][1].right = stack[i][1];\n break;\n case 0 /* Mid */:\n stack[i - 1][1].mid = stack[i][1];\n break;\n }\n }\n else {\n this._root = stack[0][1];\n }\n }\n }\n return oldElement;\n }\n get(key) {\n var _c;\n return (_c = this._getNode(key)) === null || _c === void 0 ? void 0 : _c.value;\n }\n _getNode(key) {\n const iter = this._iter.reset(key);\n let node = this._root;\n while (node) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n node = node.left;\n }\n else if (val < 0) {\n // right\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n node = node.mid;\n }\n else {\n break;\n }\n }\n return node;\n }\n has(key) {\n const node = this._getNode(key);\n return !((node === null || node === void 0 ? void 0 : node.value) === undefined && (node === null || node === void 0 ? void 0 : node.mid) === undefined);\n }\n delete(key) {\n return this._delete(key, false);\n }\n deleteSuperstr(key) {\n return this._delete(key, true);\n }\n _delete(key, superStr) {\n var _c;\n const iter = this._iter.reset(key);\n const stack = [];\n let node = this._root;\n // find node\n while (node) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n stack.push([-1 /* Left */, node]);\n node = node.left;\n }\n else if (val < 0) {\n // right\n stack.push([1 /* Right */, node]);\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n stack.push([0 /* Mid */, node]);\n node = node.mid;\n }\n else {\n break;\n }\n }\n if (!node) {\n // node not found\n return;\n }\n if (superStr) {\n // removing children, reset height\n node.left = undefined;\n node.mid = undefined;\n node.right = undefined;\n node.height = 1;\n }\n else {\n // removing element\n node.key = undefined;\n node.value = undefined;\n }\n // BST node removal\n if (!node.mid && !node.value) {\n if (node.left && node.right) {\n // full node\n const min = this._min(node.right);\n const { key, value, segment } = min;\n this._delete(min.key, false);\n node.key = key;\n node.value = value;\n node.segment = segment;\n }\n else {\n // empty or half empty\n const newChild = (_c = node.left) !== null && _c !== void 0 ? _c : node.right;\n if (stack.length > 0) {\n const [dir, parent] = stack[stack.length - 1];\n switch (dir) {\n case -1 /* Left */:\n parent.left = newChild;\n break;\n case 0 /* Mid */:\n parent.mid = newChild;\n break;\n case 1 /* Right */:\n parent.right = newChild;\n break;\n }\n }\n else {\n this._root = newChild;\n }\n }\n }\n // AVL balance\n for (let i = stack.length - 1; i >= 0; i--) {\n const node = stack[i][1];\n node.updateHeight();\n const bf = node.balanceFactor();\n if (bf > 1) {\n // right heavy\n if (node.right.balanceFactor() >= 0) {\n // right, right -> rotate left\n stack[i][1] = node.rotateLeft();\n }\n else {\n // right, left -> double rotate\n node.right = stack[i + 1][1] = stack[i + 1][1].rotateRight();\n stack[i][1] = node.rotateLeft();\n }\n }\n else if (bf < -1) {\n // left heavy\n if (node.left.balanceFactor() <= 0) {\n // left, left -> rotate right\n stack[i][1] = node.rotateRight();\n }\n else {\n // left, right -> double rotate\n node.left = stack[i + 1][1] = stack[i + 1][1].rotateLeft();\n stack[i][1] = node.rotateRight();\n }\n }\n // patch path to parent\n if (i > 0) {\n switch (stack[i - 1][0]) {\n case -1 /* Left */:\n stack[i - 1][1].left = stack[i][1];\n break;\n case 1 /* Right */:\n stack[i - 1][1].right = stack[i][1];\n break;\n case 0 /* Mid */:\n stack[i - 1][1].mid = stack[i][1];\n break;\n }\n }\n else {\n this._root = stack[0][1];\n }\n }\n }\n _min(node) {\n while (node.left) {\n node = node.left;\n }\n return node;\n }\n findSubstr(key) {\n const iter = this._iter.reset(key);\n let node = this._root;\n let candidate = undefined;\n while (node) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n node = node.left;\n }\n else if (val < 0) {\n // right\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n candidate = node.value || candidate;\n node = node.mid;\n }\n else {\n break;\n }\n }\n return node && node.value || candidate;\n }\n findSuperstr(key) {\n const iter = this._iter.reset(key);\n let node = this._root;\n while (node) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n node = node.left;\n }\n else if (val < 0) {\n // right\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n node = node.mid;\n }\n else {\n // collect\n if (!node.mid) {\n return undefined;\n }\n else {\n return this._entries(node.mid);\n }\n }\n }\n return undefined;\n }\n forEach(callback) {\n for (const [key, value] of this) {\n callback(value, key);\n }\n }\n *[Symbol.iterator]() {\n yield* this._entries(this._root);\n }\n *_entries(node) {\n // DFS\n if (!node) {\n return;\n }\n if (node.left) {\n yield* this._entries(node.left);\n }\n if (node.value) {\n yield [node.key, node.value];\n }\n if (node.mid) {\n yield* this._entries(node.mid);\n }\n if (node.right) {\n yield* this._entries(node.right);\n }\n }\n}\nclass ResourceMapEntry {\n constructor(uri, value) {\n this.uri = uri;\n this.value = value;\n }\n}\nexport class ResourceMap {\n constructor(mapOrKeyFn, toKey) {\n this[_a] = 'ResourceMap';\n if (mapOrKeyFn instanceof ResourceMap) {\n this.map = new Map(mapOrKeyFn.map);\n this.toKey = toKey !== null && toKey !== void 0 ? toKey : ResourceMap.defaultToKey;\n }\n else {\n this.map = new Map();\n this.toKey = mapOrKeyFn !== null && mapOrKeyFn !== void 0 ? mapOrKeyFn : ResourceMap.defaultToKey;\n }\n }\n set(resource, value) {\n this.map.set(this.toKey(resource), new ResourceMapEntry(resource, value));\n return this;\n }\n get(resource) {\n var _c;\n return (_c = this.map.get(this.toKey(resource))) === null || _c === void 0 ? void 0 : _c.value;\n }\n has(resource) {\n return this.map.has(this.toKey(resource));\n }\n get size() {\n return this.map.size;\n }\n clear() {\n this.map.clear();\n }\n delete(resource) {\n return this.map.delete(this.toKey(resource));\n }\n forEach(clb, thisArg) {\n if (typeof thisArg !== 'undefined') {\n clb = clb.bind(thisArg);\n }\n for (let [_, entry] of this.map) {\n clb(entry.value, entry.uri, this);\n }\n }\n *values() {\n for (let entry of this.map.values()) {\n yield entry.value;\n }\n }\n *keys() {\n for (let entry of this.map.values()) {\n yield entry.uri;\n }\n }\n *entries() {\n for (let entry of this.map.values()) {\n yield [entry.uri, entry.value];\n }\n }\n *[(_a = Symbol.toStringTag, Symbol.iterator)]() {\n for (let [, entry] of this.map) {\n yield [entry.uri, entry.value];\n }\n }\n}\nResourceMap.defaultToKey = (resource) => resource.toString();\nexport class LinkedMap {\n constructor() {\n this[_b] = 'LinkedMap';\n this._map = new Map();\n this._head = undefined;\n this._tail = undefined;\n this._size = 0;\n this._state = 0;\n }\n clear() {\n this._map.clear();\n this._head = undefined;\n this._tail = undefined;\n this._size = 0;\n this._state++;\n }\n isEmpty() {\n return !this._head && !this._tail;\n }\n get size() {\n return this._size;\n }\n get first() {\n var _c;\n return (_c = this._head) === null || _c === void 0 ? void 0 : _c.value;\n }\n get last() {\n var _c;\n return (_c = this._tail) === null || _c === void 0 ? void 0 : _c.value;\n }\n has(key) {\n return this._map.has(key);\n }\n get(key, touch = 0 /* None */) {\n const item = this._map.get(key);\n if (!item) {\n return undefined;\n }\n if (touch !== 0 /* None */) {\n this.touch(item, touch);\n }\n return item.value;\n }\n set(key, value, touch = 0 /* None */) {\n let item = this._map.get(key);\n if (item) {\n item.value = value;\n if (touch !== 0 /* None */) {\n this.touch(item, touch);\n }\n }\n else {\n item = { key, value, next: undefined, previous: undefined };\n switch (touch) {\n case 0 /* None */:\n this.addItemLast(item);\n break;\n case 1 /* AsOld */:\n this.addItemFirst(item);\n break;\n case 2 /* AsNew */:\n this.addItemLast(item);\n break;\n default:\n this.addItemLast(item);\n break;\n }\n this._map.set(key, item);\n this._size++;\n }\n return this;\n }\n delete(key) {\n return !!this.remove(key);\n }\n remove(key) {\n const item = this._map.get(key);\n if (!item) {\n return undefined;\n }\n this._map.delete(key);\n this.removeItem(item);\n this._size--;\n return item.value;\n }\n shift() {\n if (!this._head && !this._tail) {\n return undefined;\n }\n if (!this._head || !this._tail) {\n throw new Error('Invalid list');\n }\n const item = this._head;\n this._map.delete(item.key);\n this.removeItem(item);\n this._size--;\n return item.value;\n }\n forEach(callbackfn, thisArg) {\n const state = this._state;\n let current = this._head;\n while (current) {\n if (thisArg) {\n callbackfn.bind(thisArg)(current.value, current.key, this);\n }\n else {\n callbackfn(current.value, current.key, this);\n }\n if (this._state !== state) {\n throw new Error(`LinkedMap got modified during iteration.`);\n }\n current = current.next;\n }\n }\n keys() {\n const map = this;\n const state = this._state;\n let current = this._head;\n const iterator = {\n [Symbol.iterator]() {\n return iterator;\n },\n next() {\n if (map._state !== state) {\n throw new Error(`LinkedMap got modified during iteration.`);\n }\n if (current) {\n const result = { value: current.key, done: false };\n current = current.next;\n return result;\n }\n else {\n return { value: undefined, done: true };\n }\n }\n };\n return iterator;\n }\n values() {\n const map = this;\n const state = this._state;\n let current = this._head;\n const iterator = {\n [Symbol.iterator]() {\n return iterator;\n },\n next() {\n if (map._state !== state) {\n throw new Error(`LinkedMap got modified during iteration.`);\n }\n if (current) {\n const result = { value: current.value, done: false };\n current = current.next;\n return result;\n }\n else {\n return { value: undefined, done: true };\n }\n }\n };\n return iterator;\n }\n entries() {\n const map = this;\n const state = this._state;\n let current = this._head;\n const iterator = {\n [Symbol.iterator]() {\n return iterator;\n },\n next() {\n if (map._state !== state) {\n throw new Error(`LinkedMap got modified during iteration.`);\n }\n if (current) {\n const result = { value: [current.key, current.value], done: false };\n current = current.next;\n return result;\n }\n else {\n return { value: undefined, done: true };\n }\n }\n };\n return iterator;\n }\n [(_b = Symbol.toStringTag, Symbol.iterator)]() {\n return this.entries();\n }\n trimOld(newSize) {\n if (newSize >= this.size) {\n return;\n }\n if (newSize === 0) {\n this.clear();\n return;\n }\n let current = this._head;\n let currentSize = this.size;\n while (current && currentSize > newSize) {\n this._map.delete(current.key);\n current = current.next;\n currentSize--;\n }\n this._head = current;\n this._size = currentSize;\n if (current) {\n current.previous = undefined;\n }\n this._state++;\n }\n addItemFirst(item) {\n // First time Insert\n if (!this._head && !this._tail) {\n this._tail = item;\n }\n else if (!this._head) {\n throw new Error('Invalid list');\n }\n else {\n item.next = this._head;\n this._head.previous = item;\n }\n this._head = item;\n this._state++;\n }\n addItemLast(item) {\n // First time Insert\n if (!this._head && !this._tail) {\n this._head = item;\n }\n else if (!this._tail) {\n throw new Error('Invalid list');\n }\n else {\n item.previous = this._tail;\n this._tail.next = item;\n }\n this._tail = item;\n this._state++;\n }\n removeItem(item) {\n if (item === this._head && item === this._tail) {\n this._head = undefined;\n this._tail = undefined;\n }\n else if (item === this._head) {\n // This can only happen if size === 1 which is handled\n // by the case above.\n if (!item.next) {\n throw new Error('Invalid list');\n }\n item.next.previous = undefined;\n this._head = item.next;\n }\n else if (item === this._tail) {\n // This can only happen if size === 1 which is handled\n // by the case above.\n if (!item.previous) {\n throw new Error('Invalid list');\n }\n item.previous.next = undefined;\n this._tail = item.previous;\n }\n else {\n const next = item.next;\n const previous = item.previous;\n if (!next || !previous) {\n throw new Error('Invalid list');\n }\n next.previous = previous;\n previous.next = next;\n }\n item.next = undefined;\n item.previous = undefined;\n this._state++;\n }\n touch(item, touch) {\n if (!this._head || !this._tail) {\n throw new Error('Invalid list');\n }\n if ((touch !== 1 /* AsOld */ && touch !== 2 /* AsNew */)) {\n return;\n }\n if (touch === 1 /* AsOld */) {\n if (item === this._head) {\n return;\n }\n const next = item.next;\n const previous = item.previous;\n // Unlink the item\n if (item === this._tail) {\n // previous must be defined since item was not head but is tail\n // So there are more than on item in the map\n previous.next = undefined;\n this._tail = previous;\n }\n else {\n // Both next and previous are not undefined since item was neither head nor tail.\n next.previous = previous;\n previous.next = next;\n }\n // Insert the node at head\n item.previous = undefined;\n item.next = this._head;\n this._head.previous = item;\n this._head = item;\n this._state++;\n }\n else if (touch === 2 /* AsNew */) {\n if (item === this._tail) {\n return;\n }\n const next = item.next;\n const previous = item.previous;\n // Unlink the item.\n if (item === this._head) {\n // next must be defined since item was not tail but is head\n // So there are more than on item in the map\n next.previous = undefined;\n this._head = next;\n }\n else {\n // Both next and previous are not undefined since item was neither head nor tail.\n next.previous = previous;\n previous.next = next;\n }\n item.next = undefined;\n item.previous = this._tail;\n this._tail.next = item;\n this._tail = item;\n this._state++;\n }\n }\n toJSON() {\n const data = [];\n this.forEach((value, key) => {\n data.push([key, value]);\n });\n return data;\n }\n fromJSON(data) {\n this.clear();\n for (const [key, value] of data) {\n this.set(key, value);\n }\n }\n}\nexport class LRUCache extends LinkedMap {\n constructor(limit, ratio = 1) {\n super();\n this._limit = limit;\n this._ratio = Math.min(Math.max(0, ratio), 1);\n }\n get limit() {\n return this._limit;\n }\n set limit(limit) {\n this._limit = limit;\n this.checkTrim();\n }\n get(key, touch = 2 /* AsNew */) {\n return super.get(key, touch);\n }\n peek(key) {\n return super.get(key, 0 /* None */);\n }\n set(key, value) {\n super.set(key, value, 2 /* AsNew */);\n this.checkTrim();\n return this;\n }\n checkTrim() {\n if (this.size > this._limit) {\n this.trimOld(Math.round(this._limit * this._ratio));\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as arrays from '../../../base/common/arrays.js';\nimport { LineTokens } from '../core/lineTokens.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { TokenMetadata } from '../modes.js';\nexport function countEOL(text) {\n let eolCount = 0;\n let firstLineLength = 0;\n let lastLineStart = 0;\n let eol = 0 /* Unknown */;\n for (let i = 0, len = text.length; i < len; i++) {\n const chr = text.charCodeAt(i);\n if (chr === 13 /* CarriageReturn */) {\n if (eolCount === 0) {\n firstLineLength = i;\n }\n eolCount++;\n if (i + 1 < len && text.charCodeAt(i + 1) === 10 /* LineFeed */) {\n // \\r\\n... case\n eol |= 2 /* CRLF */;\n i++; // skip \\n\n }\n else {\n // \\r... case\n eol |= 3 /* Invalid */;\n }\n lastLineStart = i + 1;\n }\n else if (chr === 10 /* LineFeed */) {\n // \\n... case\n eol |= 1 /* LF */;\n if (eolCount === 0) {\n firstLineLength = i;\n }\n eolCount++;\n lastLineStart = i + 1;\n }\n }\n if (eolCount === 0) {\n firstLineLength = text.length;\n }\n return [eolCount, firstLineLength, text.length - lastLineStart, eol];\n}\nfunction getDefaultMetadata(topLevelLanguageId) {\n return ((topLevelLanguageId << 0 /* LANGUAGEID_OFFSET */)\n | (0 /* Other */ << 8 /* TOKEN_TYPE_OFFSET */)\n | (0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\n}\nconst EMPTY_LINE_TOKENS = (new Uint32Array(0)).buffer;\nexport class MultilineTokensBuilder {\n constructor() {\n this.tokens = [];\n }\n add(lineNumber, lineTokens) {\n if (this.tokens.length > 0) {\n const last = this.tokens[this.tokens.length - 1];\n const lastLineNumber = last.startLineNumber + last.tokens.length - 1;\n if (lastLineNumber + 1 === lineNumber) {\n // append\n last.tokens.push(lineTokens);\n return;\n }\n }\n this.tokens.push(new MultilineTokens(lineNumber, [lineTokens]));\n }\n}\nexport class SparseEncodedTokens {\n constructor(tokens) {\n this._tokens = tokens;\n this._tokenCount = tokens.length / 4;\n }\n toString(startLineNumber) {\n let pieces = [];\n for (let i = 0; i < this._tokenCount; i++) {\n pieces.push(`(${this._getDeltaLine(i) + startLineNumber},${this._getStartCharacter(i)}-${this._getEndCharacter(i)})`);\n }\n return `[${pieces.join(',')}]`;\n }\n getMaxDeltaLine() {\n const tokenCount = this._getTokenCount();\n if (tokenCount === 0) {\n return -1;\n }\n return this._getDeltaLine(tokenCount - 1);\n }\n getRange() {\n const tokenCount = this._getTokenCount();\n if (tokenCount === 0) {\n return null;\n }\n const startChar = this._getStartCharacter(0);\n const maxDeltaLine = this._getDeltaLine(tokenCount - 1);\n const endChar = this._getEndCharacter(tokenCount - 1);\n return new Range(0, startChar + 1, maxDeltaLine, endChar + 1);\n }\n _getTokenCount() {\n return this._tokenCount;\n }\n _getDeltaLine(tokenIndex) {\n return this._tokens[4 * tokenIndex];\n }\n _getStartCharacter(tokenIndex) {\n return this._tokens[4 * tokenIndex + 1];\n }\n _getEndCharacter(tokenIndex) {\n return this._tokens[4 * tokenIndex + 2];\n }\n isEmpty() {\n return (this._getTokenCount() === 0);\n }\n getLineTokens(deltaLine) {\n let low = 0;\n let high = this._getTokenCount() - 1;\n while (low < high) {\n const mid = low + Math.floor((high - low) / 2);\n const midDeltaLine = this._getDeltaLine(mid);\n if (midDeltaLine < deltaLine) {\n low = mid + 1;\n }\n else if (midDeltaLine > deltaLine) {\n high = mid - 1;\n }\n else {\n let min = mid;\n while (min > low && this._getDeltaLine(min - 1) === deltaLine) {\n min--;\n }\n let max = mid;\n while (max < high && this._getDeltaLine(max + 1) === deltaLine) {\n max++;\n }\n return new LineTokens2(this._tokens.subarray(4 * min, 4 * max + 4));\n }\n }\n if (this._getDeltaLine(low) === deltaLine) {\n return new LineTokens2(this._tokens.subarray(4 * low, 4 * low + 4));\n }\n return null;\n }\n clear() {\n this._tokenCount = 0;\n }\n removeTokens(startDeltaLine, startChar, endDeltaLine, endChar) {\n const tokens = this._tokens;\n const tokenCount = this._tokenCount;\n let newTokenCount = 0;\n let hasDeletedTokens = false;\n let firstDeltaLine = 0;\n for (let i = 0; i < tokenCount; i++) {\n const srcOffset = 4 * i;\n const tokenDeltaLine = tokens[srcOffset];\n const tokenStartCharacter = tokens[srcOffset + 1];\n const tokenEndCharacter = tokens[srcOffset + 2];\n const tokenMetadata = tokens[srcOffset + 3];\n if ((tokenDeltaLine > startDeltaLine || (tokenDeltaLine === startDeltaLine && tokenEndCharacter >= startChar))\n && (tokenDeltaLine < endDeltaLine || (tokenDeltaLine === endDeltaLine && tokenStartCharacter <= endChar))) {\n hasDeletedTokens = true;\n }\n else {\n if (newTokenCount === 0) {\n firstDeltaLine = tokenDeltaLine;\n }\n if (hasDeletedTokens) {\n // must move the token to the left\n const destOffset = 4 * newTokenCount;\n tokens[destOffset] = tokenDeltaLine - firstDeltaLine;\n tokens[destOffset + 1] = tokenStartCharacter;\n tokens[destOffset + 2] = tokenEndCharacter;\n tokens[destOffset + 3] = tokenMetadata;\n }\n newTokenCount++;\n }\n }\n this._tokenCount = newTokenCount;\n return firstDeltaLine;\n }\n split(startDeltaLine, startChar, endDeltaLine, endChar) {\n const tokens = this._tokens;\n const tokenCount = this._tokenCount;\n let aTokens = [];\n let bTokens = [];\n let destTokens = aTokens;\n let destOffset = 0;\n let destFirstDeltaLine = 0;\n for (let i = 0; i < tokenCount; i++) {\n const srcOffset = 4 * i;\n const tokenDeltaLine = tokens[srcOffset];\n const tokenStartCharacter = tokens[srcOffset + 1];\n const tokenEndCharacter = tokens[srcOffset + 2];\n const tokenMetadata = tokens[srcOffset + 3];\n if ((tokenDeltaLine > startDeltaLine || (tokenDeltaLine === startDeltaLine && tokenEndCharacter >= startChar))) {\n if ((tokenDeltaLine < endDeltaLine || (tokenDeltaLine === endDeltaLine && tokenStartCharacter <= endChar))) {\n // this token is touching the range\n continue;\n }\n else {\n // this token is after the range\n if (destTokens !== bTokens) {\n // this token is the first token after the range\n destTokens = bTokens;\n destOffset = 0;\n destFirstDeltaLine = tokenDeltaLine;\n }\n }\n }\n destTokens[destOffset++] = tokenDeltaLine - destFirstDeltaLine;\n destTokens[destOffset++] = tokenStartCharacter;\n destTokens[destOffset++] = tokenEndCharacter;\n destTokens[destOffset++] = tokenMetadata;\n }\n return [new SparseEncodedTokens(new Uint32Array(aTokens)), new SparseEncodedTokens(new Uint32Array(bTokens)), destFirstDeltaLine];\n }\n acceptDeleteRange(horizontalShiftForFirstLineTokens, startDeltaLine, startCharacter, endDeltaLine, endCharacter) {\n // This is a bit complex, here are the cases I used to think about this:\n //\n // 1. The token starts before the deletion range\n // 1a. The token is completely before the deletion range\n // -----------\n // xxxxxxxxxxx\n // 1b. The token starts before, the deletion range ends after the token\n // -----------\n // xxxxxxxxxxx\n // 1c. The token starts before, the deletion range ends precisely with the token\n // ---------------\n // xxxxxxxx\n // 1d. The token starts before, the deletion range is inside the token\n // ---------------\n // xxxxx\n //\n // 2. The token starts at the same position with the deletion range\n // 2a. The token starts at the same position, and ends inside the deletion range\n // -------\n // xxxxxxxxxxx\n // 2b. The token starts at the same position, and ends at the same position as the deletion range\n // ----------\n // xxxxxxxxxx\n // 2c. The token starts at the same position, and ends after the deletion range\n // -------------\n // xxxxxxx\n //\n // 3. The token starts inside the deletion range\n // 3a. The token is inside the deletion range\n // -------\n // xxxxxxxxxxxxx\n // 3b. The token starts inside the deletion range, and ends at the same position as the deletion range\n // ----------\n // xxxxxxxxxxxxx\n // 3c. The token starts inside the deletion range, and ends after the deletion range\n // ------------\n // xxxxxxxxxxx\n //\n // 4. The token starts after the deletion range\n // -----------\n // xxxxxxxx\n //\n const tokens = this._tokens;\n const tokenCount = this._tokenCount;\n const deletedLineCount = (endDeltaLine - startDeltaLine);\n let newTokenCount = 0;\n let hasDeletedTokens = false;\n for (let i = 0; i < tokenCount; i++) {\n const srcOffset = 4 * i;\n let tokenDeltaLine = tokens[srcOffset];\n let tokenStartCharacter = tokens[srcOffset + 1];\n let tokenEndCharacter = tokens[srcOffset + 2];\n const tokenMetadata = tokens[srcOffset + 3];\n if (tokenDeltaLine < startDeltaLine || (tokenDeltaLine === startDeltaLine && tokenEndCharacter <= startCharacter)) {\n // 1a. The token is completely before the deletion range\n // => nothing to do\n newTokenCount++;\n continue;\n }\n else if (tokenDeltaLine === startDeltaLine && tokenStartCharacter < startCharacter) {\n // 1b, 1c, 1d\n // => the token survives, but it needs to shrink\n if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) {\n // 1d. The token starts before, the deletion range is inside the token\n // => the token shrinks by the deletion character count\n tokenEndCharacter -= (endCharacter - startCharacter);\n }\n else {\n // 1b. The token starts before, the deletion range ends after the token\n // 1c. The token starts before, the deletion range ends precisely with the token\n // => the token shrinks its ending to the deletion start\n tokenEndCharacter = startCharacter;\n }\n }\n else if (tokenDeltaLine === startDeltaLine && tokenStartCharacter === startCharacter) {\n // 2a, 2b, 2c\n if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) {\n // 2c. The token starts at the same position, and ends after the deletion range\n // => the token shrinks by the deletion character count\n tokenEndCharacter -= (endCharacter - startCharacter);\n }\n else {\n // 2a. The token starts at the same position, and ends inside the deletion range\n // 2b. The token starts at the same position, and ends at the same position as the deletion range\n // => the token is deleted\n hasDeletedTokens = true;\n continue;\n }\n }\n else if (tokenDeltaLine < endDeltaLine || (tokenDeltaLine === endDeltaLine && tokenStartCharacter < endCharacter)) {\n // 3a, 3b, 3c\n if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) {\n // 3c. The token starts inside the deletion range, and ends after the deletion range\n // => the token moves left and shrinks\n if (tokenDeltaLine === startDeltaLine) {\n // the deletion started on the same line as the token\n // => the token moves left and shrinks\n tokenStartCharacter = startCharacter;\n tokenEndCharacter = tokenStartCharacter + (tokenEndCharacter - endCharacter);\n }\n else {\n // the deletion started on a line above the token\n // => the token moves to the beginning of the line\n tokenStartCharacter = 0;\n tokenEndCharacter = tokenStartCharacter + (tokenEndCharacter - endCharacter);\n }\n }\n else {\n // 3a. The token is inside the deletion range\n // 3b. The token starts inside the deletion range, and ends at the same position as the deletion range\n // => the token is deleted\n hasDeletedTokens = true;\n continue;\n }\n }\n else if (tokenDeltaLine > endDeltaLine) {\n // 4. (partial) The token starts after the deletion range, on a line below...\n if (deletedLineCount === 0 && !hasDeletedTokens) {\n // early stop, there is no need to walk all the tokens and do nothing...\n newTokenCount = tokenCount;\n break;\n }\n tokenDeltaLine -= deletedLineCount;\n }\n else if (tokenDeltaLine === endDeltaLine && tokenStartCharacter >= endCharacter) {\n // 4. (continued) The token starts after the deletion range, on the last line where a deletion occurs\n if (horizontalShiftForFirstLineTokens && tokenDeltaLine === 0) {\n tokenStartCharacter += horizontalShiftForFirstLineTokens;\n tokenEndCharacter += horizontalShiftForFirstLineTokens;\n }\n tokenDeltaLine -= deletedLineCount;\n tokenStartCharacter -= (endCharacter - startCharacter);\n tokenEndCharacter -= (endCharacter - startCharacter);\n }\n else {\n throw new Error(`Not possible!`);\n }\n const destOffset = 4 * newTokenCount;\n tokens[destOffset] = tokenDeltaLine;\n tokens[destOffset + 1] = tokenStartCharacter;\n tokens[destOffset + 2] = tokenEndCharacter;\n tokens[destOffset + 3] = tokenMetadata;\n newTokenCount++;\n }\n this._tokenCount = newTokenCount;\n }\n acceptInsertText(deltaLine, character, eolCount, firstLineLength, lastLineLength, firstCharCode) {\n // Here are the cases I used to think about this:\n //\n // 1. The token is completely before the insertion point\n // ----------- |\n // 2. The token ends precisely at the insertion point\n // -----------|\n // 3. The token contains the insertion point\n // -----|------\n // 4. The token starts precisely at the insertion point\n // |-----------\n // 5. The token is completely after the insertion point\n // | -----------\n //\n const isInsertingPreciselyOneWordCharacter = (eolCount === 0\n && firstLineLength === 1\n && ((firstCharCode >= 48 /* Digit0 */ && firstCharCode <= 57 /* Digit9 */)\n || (firstCharCode >= 65 /* A */ && firstCharCode <= 90 /* Z */)\n || (firstCharCode >= 97 /* a */ && firstCharCode <= 122 /* z */)));\n const tokens = this._tokens;\n const tokenCount = this._tokenCount;\n for (let i = 0; i < tokenCount; i++) {\n const offset = 4 * i;\n let tokenDeltaLine = tokens[offset];\n let tokenStartCharacter = tokens[offset + 1];\n let tokenEndCharacter = tokens[offset + 2];\n if (tokenDeltaLine < deltaLine || (tokenDeltaLine === deltaLine && tokenEndCharacter < character)) {\n // 1. The token is completely before the insertion point\n // => nothing to do\n continue;\n }\n else if (tokenDeltaLine === deltaLine && tokenEndCharacter === character) {\n // 2. The token ends precisely at the insertion point\n // => expand the end character only if inserting precisely one character that is a word character\n if (isInsertingPreciselyOneWordCharacter) {\n tokenEndCharacter += 1;\n }\n else {\n continue;\n }\n }\n else if (tokenDeltaLine === deltaLine && tokenStartCharacter < character && character < tokenEndCharacter) {\n // 3. The token contains the insertion point\n if (eolCount === 0) {\n // => just expand the end character\n tokenEndCharacter += firstLineLength;\n }\n else {\n // => cut off the token\n tokenEndCharacter = character;\n }\n }\n else {\n // 4. or 5.\n if (tokenDeltaLine === deltaLine && tokenStartCharacter === character) {\n // 4. The token starts precisely at the insertion point\n // => grow the token (by keeping its start constant) only if inserting precisely one character that is a word character\n // => otherwise behave as in case 5.\n if (isInsertingPreciselyOneWordCharacter) {\n continue;\n }\n }\n // => the token must move and keep its size constant\n if (tokenDeltaLine === deltaLine) {\n tokenDeltaLine += eolCount;\n // this token is on the line where the insertion is taking place\n if (eolCount === 0) {\n tokenStartCharacter += firstLineLength;\n tokenEndCharacter += firstLineLength;\n }\n else {\n const tokenLength = tokenEndCharacter - tokenStartCharacter;\n tokenStartCharacter = lastLineLength + (tokenStartCharacter - character);\n tokenEndCharacter = tokenStartCharacter + tokenLength;\n }\n }\n else {\n tokenDeltaLine += eolCount;\n }\n }\n tokens[offset] = tokenDeltaLine;\n tokens[offset + 1] = tokenStartCharacter;\n tokens[offset + 2] = tokenEndCharacter;\n }\n }\n}\nexport class LineTokens2 {\n constructor(tokens) {\n this._tokens = tokens;\n }\n getCount() {\n return this._tokens.length / 4;\n }\n getStartCharacter(tokenIndex) {\n return this._tokens[4 * tokenIndex + 1];\n }\n getEndCharacter(tokenIndex) {\n return this._tokens[4 * tokenIndex + 2];\n }\n getMetadata(tokenIndex) {\n return this._tokens[4 * tokenIndex + 3];\n }\n}\nexport class MultilineTokens2 {\n constructor(startLineNumber, tokens) {\n this.startLineNumber = startLineNumber;\n this.tokens = tokens;\n this.endLineNumber = this.startLineNumber + this.tokens.getMaxDeltaLine();\n }\n toString() {\n return this.tokens.toString(this.startLineNumber);\n }\n _updateEndLineNumber() {\n this.endLineNumber = this.startLineNumber + this.tokens.getMaxDeltaLine();\n }\n isEmpty() {\n return this.tokens.isEmpty();\n }\n getLineTokens(lineNumber) {\n if (this.startLineNumber <= lineNumber && lineNumber <= this.endLineNumber) {\n return this.tokens.getLineTokens(lineNumber - this.startLineNumber);\n }\n return null;\n }\n getRange() {\n const deltaRange = this.tokens.getRange();\n if (!deltaRange) {\n return deltaRange;\n }\n return new Range(this.startLineNumber + deltaRange.startLineNumber, deltaRange.startColumn, this.startLineNumber + deltaRange.endLineNumber, deltaRange.endColumn);\n }\n removeTokens(range) {\n const startLineIndex = range.startLineNumber - this.startLineNumber;\n const endLineIndex = range.endLineNumber - this.startLineNumber;\n this.startLineNumber += this.tokens.removeTokens(startLineIndex, range.startColumn - 1, endLineIndex, range.endColumn - 1);\n this._updateEndLineNumber();\n }\n split(range) {\n // split tokens to two:\n // a) all the tokens before `range`\n // b) all the tokens after `range`\n const startLineIndex = range.startLineNumber - this.startLineNumber;\n const endLineIndex = range.endLineNumber - this.startLineNumber;\n const [a, b, bDeltaLine] = this.tokens.split(startLineIndex, range.startColumn - 1, endLineIndex, range.endColumn - 1);\n return [new MultilineTokens2(this.startLineNumber, a), new MultilineTokens2(this.startLineNumber + bDeltaLine, b)];\n }\n applyEdit(range, text) {\n const [eolCount, firstLineLength, lastLineLength] = countEOL(text);\n this.acceptEdit(range, eolCount, firstLineLength, lastLineLength, text.length > 0 ? text.charCodeAt(0) : 0 /* Null */);\n }\n acceptEdit(range, eolCount, firstLineLength, lastLineLength, firstCharCode) {\n this._acceptDeleteRange(range);\n this._acceptInsertText(new Position(range.startLineNumber, range.startColumn), eolCount, firstLineLength, lastLineLength, firstCharCode);\n this._updateEndLineNumber();\n }\n _acceptDeleteRange(range) {\n if (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn) {\n // Nothing to delete\n return;\n }\n const firstLineIndex = range.startLineNumber - this.startLineNumber;\n const lastLineIndex = range.endLineNumber - this.startLineNumber;\n if (lastLineIndex < 0) {\n // this deletion occurs entirely before this block, so we only need to adjust line numbers\n const deletedLinesCount = lastLineIndex - firstLineIndex;\n this.startLineNumber -= deletedLinesCount;\n return;\n }\n const tokenMaxDeltaLine = this.tokens.getMaxDeltaLine();\n if (firstLineIndex >= tokenMaxDeltaLine + 1) {\n // this deletion occurs entirely after this block, so there is nothing to do\n return;\n }\n if (firstLineIndex < 0 && lastLineIndex >= tokenMaxDeltaLine + 1) {\n // this deletion completely encompasses this block\n this.startLineNumber = 0;\n this.tokens.clear();\n return;\n }\n if (firstLineIndex < 0) {\n const deletedBefore = -firstLineIndex;\n this.startLineNumber -= deletedBefore;\n this.tokens.acceptDeleteRange(range.startColumn - 1, 0, 0, lastLineIndex, range.endColumn - 1);\n }\n else {\n this.tokens.acceptDeleteRange(0, firstLineIndex, range.startColumn - 1, lastLineIndex, range.endColumn - 1);\n }\n }\n _acceptInsertText(position, eolCount, firstLineLength, lastLineLength, firstCharCode) {\n if (eolCount === 0 && firstLineLength === 0) {\n // Nothing to insert\n return;\n }\n const lineIndex = position.lineNumber - this.startLineNumber;\n if (lineIndex < 0) {\n // this insertion occurs before this block, so we only need to adjust line numbers\n this.startLineNumber += eolCount;\n return;\n }\n const tokenMaxDeltaLine = this.tokens.getMaxDeltaLine();\n if (lineIndex >= tokenMaxDeltaLine + 1) {\n // this insertion occurs after this block, so there is nothing to do\n return;\n }\n this.tokens.acceptInsertText(lineIndex, position.column - 1, eolCount, firstLineLength, lastLineLength, firstCharCode);\n }\n}\nexport class MultilineTokens {\n constructor(startLineNumber, tokens) {\n this.startLineNumber = startLineNumber;\n this.tokens = tokens;\n }\n}\nfunction toUint32Array(arr) {\n if (arr instanceof Uint32Array) {\n return arr;\n }\n else {\n return new Uint32Array(arr);\n }\n}\nexport class TokensStore2 {\n constructor(languageIdCodec) {\n this._pieces = [];\n this._isComplete = false;\n this._languageIdCodec = languageIdCodec;\n }\n flush() {\n this._pieces = [];\n this._isComplete = false;\n }\n isEmpty() {\n return (this._pieces.length === 0);\n }\n set(pieces, isComplete) {\n this._pieces = pieces || [];\n this._isComplete = isComplete;\n }\n setPartial(_range, pieces) {\n // console.log(`setPartial ${_range} ${pieces.map(p => p.toString()).join(', ')}`);\n let range = _range;\n if (pieces.length > 0) {\n const _firstRange = pieces[0].getRange();\n const _lastRange = pieces[pieces.length - 1].getRange();\n if (!_firstRange || !_lastRange) {\n return _range;\n }\n range = _range.plusRange(_firstRange).plusRange(_lastRange);\n }\n let insertPosition = null;\n for (let i = 0, len = this._pieces.length; i < len; i++) {\n const piece = this._pieces[i];\n if (piece.endLineNumber < range.startLineNumber) {\n // this piece is before the range\n continue;\n }\n if (piece.startLineNumber > range.endLineNumber) {\n // this piece is after the range, so mark the spot before this piece\n // as a good insertion position and stop looping\n insertPosition = insertPosition || { index: i };\n break;\n }\n // this piece might intersect with the range\n piece.removeTokens(range);\n if (piece.isEmpty()) {\n // remove the piece if it became empty\n this._pieces.splice(i, 1);\n i--;\n len--;\n continue;\n }\n if (piece.endLineNumber < range.startLineNumber) {\n // after removal, this piece is before the range\n continue;\n }\n if (piece.startLineNumber > range.endLineNumber) {\n // after removal, this piece is after the range\n insertPosition = insertPosition || { index: i };\n continue;\n }\n // after removal, this piece contains the range\n const [a, b] = piece.split(range);\n if (a.isEmpty()) {\n // this piece is actually after the range\n insertPosition = insertPosition || { index: i };\n continue;\n }\n if (b.isEmpty()) {\n // this piece is actually before the range\n continue;\n }\n this._pieces.splice(i, 1, a, b);\n i++;\n len++;\n insertPosition = insertPosition || { index: i };\n }\n insertPosition = insertPosition || { index: this._pieces.length };\n if (pieces.length > 0) {\n this._pieces = arrays.arrayInsert(this._pieces, insertPosition.index, pieces);\n }\n // console.log(`I HAVE ${this._pieces.length} pieces`);\n // console.log(`${this._pieces.map(p => p.toString()).join('\\n')}`);\n return range;\n }\n isComplete() {\n return this._isComplete;\n }\n addSemanticTokens(lineNumber, aTokens) {\n const pieces = this._pieces;\n if (pieces.length === 0) {\n return aTokens;\n }\n const pieceIndex = TokensStore2._findFirstPieceWithLine(pieces, lineNumber);\n const bTokens = pieces[pieceIndex].getLineTokens(lineNumber);\n if (!bTokens) {\n return aTokens;\n }\n const aLen = aTokens.getCount();\n const bLen = bTokens.getCount();\n let aIndex = 0;\n let result = [], resultLen = 0;\n let lastEndOffset = 0;\n const emitToken = (endOffset, metadata) => {\n if (endOffset === lastEndOffset) {\n return;\n }\n lastEndOffset = endOffset;\n result[resultLen++] = endOffset;\n result[resultLen++] = metadata;\n };\n for (let bIndex = 0; bIndex < bLen; bIndex++) {\n const bStartCharacter = bTokens.getStartCharacter(bIndex);\n const bEndCharacter = bTokens.getEndCharacter(bIndex);\n const bMetadata = bTokens.getMetadata(bIndex);\n const bMask = (((bMetadata & 1 /* SEMANTIC_USE_ITALIC */) ? 2048 /* ITALIC_MASK */ : 0)\n | ((bMetadata & 2 /* SEMANTIC_USE_BOLD */) ? 4096 /* BOLD_MASK */ : 0)\n | ((bMetadata & 4 /* SEMANTIC_USE_UNDERLINE */) ? 8192 /* UNDERLINE_MASK */ : 0)\n | ((bMetadata & 8 /* SEMANTIC_USE_FOREGROUND */) ? 8372224 /* FOREGROUND_MASK */ : 0)\n | ((bMetadata & 16 /* SEMANTIC_USE_BACKGROUND */) ? 4286578688 /* BACKGROUND_MASK */ : 0)) >>> 0;\n const aMask = (~bMask) >>> 0;\n // push any token from `a` that is before `b`\n while (aIndex < aLen && aTokens.getEndOffset(aIndex) <= bStartCharacter) {\n emitToken(aTokens.getEndOffset(aIndex), aTokens.getMetadata(aIndex));\n aIndex++;\n }\n // push the token from `a` if it intersects the token from `b`\n if (aIndex < aLen && aTokens.getStartOffset(aIndex) < bStartCharacter) {\n emitToken(bStartCharacter, aTokens.getMetadata(aIndex));\n }\n // skip any tokens from `a` that are contained inside `b`\n while (aIndex < aLen && aTokens.getEndOffset(aIndex) < bEndCharacter) {\n emitToken(aTokens.getEndOffset(aIndex), (aTokens.getMetadata(aIndex) & aMask) | (bMetadata & bMask));\n aIndex++;\n }\n if (aIndex < aLen) {\n emitToken(bEndCharacter, (aTokens.getMetadata(aIndex) & aMask) | (bMetadata & bMask));\n if (aTokens.getEndOffset(aIndex) === bEndCharacter) {\n // `a` ends exactly at the same spot as `b`!\n aIndex++;\n }\n }\n else {\n const aMergeIndex = Math.min(Math.max(0, aIndex - 1), aLen - 1);\n // push the token from `b`\n emitToken(bEndCharacter, (aTokens.getMetadata(aMergeIndex) & aMask) | (bMetadata & bMask));\n }\n }\n // push the remaining tokens from `a`\n while (aIndex < aLen) {\n emitToken(aTokens.getEndOffset(aIndex), aTokens.getMetadata(aIndex));\n aIndex++;\n }\n return new LineTokens(new Uint32Array(result), aTokens.getLineContent(), this._languageIdCodec);\n }\n static _findFirstPieceWithLine(pieces, lineNumber) {\n let low = 0;\n let high = pieces.length - 1;\n while (low < high) {\n let mid = low + Math.floor((high - low) / 2);\n if (pieces[mid].endLineNumber < lineNumber) {\n low = mid + 1;\n }\n else if (pieces[mid].startLineNumber > lineNumber) {\n high = mid - 1;\n }\n else {\n while (mid > low && pieces[mid - 1].startLineNumber <= lineNumber && lineNumber <= pieces[mid - 1].endLineNumber) {\n mid--;\n }\n return mid;\n }\n }\n return low;\n }\n //#region Editing\n acceptEdit(range, eolCount, firstLineLength, lastLineLength, firstCharCode) {\n for (const piece of this._pieces) {\n piece.acceptEdit(range, eolCount, firstLineLength, lastLineLength, firstCharCode);\n }\n }\n}\nexport class TokensStore {\n constructor(languageIdCodec) {\n this._lineTokens = [];\n this._len = 0;\n this._languageIdCodec = languageIdCodec;\n }\n flush() {\n this._lineTokens = [];\n this._len = 0;\n }\n getTokens(topLevelLanguageId, lineIndex, lineText) {\n let rawLineTokens = null;\n if (lineIndex < this._len) {\n rawLineTokens = this._lineTokens[lineIndex];\n }\n if (rawLineTokens !== null && rawLineTokens !== EMPTY_LINE_TOKENS) {\n return new LineTokens(toUint32Array(rawLineTokens), lineText, this._languageIdCodec);\n }\n const lineTokens = new Uint32Array(2);\n lineTokens[0] = lineText.length;\n lineTokens[1] = getDefaultMetadata(this._languageIdCodec.encodeLanguageId(topLevelLanguageId));\n return new LineTokens(lineTokens, lineText, this._languageIdCodec);\n }\n static _massageTokens(topLevelLanguageId, lineTextLength, _tokens) {\n const tokens = _tokens ? toUint32Array(_tokens) : null;\n if (lineTextLength === 0) {\n let hasDifferentLanguageId = false;\n if (tokens && tokens.length > 1) {\n hasDifferentLanguageId = (TokenMetadata.getLanguageId(tokens[1]) !== topLevelLanguageId);\n }\n if (!hasDifferentLanguageId) {\n return EMPTY_LINE_TOKENS;\n }\n }\n if (!tokens || tokens.length === 0) {\n const tokens = new Uint32Array(2);\n tokens[0] = lineTextLength;\n tokens[1] = getDefaultMetadata(topLevelLanguageId);\n return tokens.buffer;\n }\n // Ensure the last token covers the end of the text\n tokens[tokens.length - 2] = lineTextLength;\n if (tokens.byteOffset === 0 && tokens.byteLength === tokens.buffer.byteLength) {\n // Store directly the ArrayBuffer pointer to save an object\n return tokens.buffer;\n }\n return tokens;\n }\n _ensureLine(lineIndex) {\n while (lineIndex >= this._len) {\n this._lineTokens[this._len] = null;\n this._len++;\n }\n }\n _deleteLines(start, deleteCount) {\n if (deleteCount === 0) {\n return;\n }\n if (start + deleteCount > this._len) {\n deleteCount = this._len - start;\n }\n this._lineTokens.splice(start, deleteCount);\n this._len -= deleteCount;\n }\n _insertLines(insertIndex, insertCount) {\n if (insertCount === 0) {\n return;\n }\n let lineTokens = [];\n for (let i = 0; i < insertCount; i++) {\n lineTokens[i] = null;\n }\n this._lineTokens = arrays.arrayInsert(this._lineTokens, insertIndex, lineTokens);\n this._len += insertCount;\n }\n setTokens(topLevelLanguageId, lineIndex, lineTextLength, _tokens, checkEquality) {\n const tokens = TokensStore._massageTokens(this._languageIdCodec.encodeLanguageId(topLevelLanguageId), lineTextLength, _tokens);\n this._ensureLine(lineIndex);\n const oldTokens = this._lineTokens[lineIndex];\n this._lineTokens[lineIndex] = tokens;\n if (checkEquality) {\n return !TokensStore._equals(oldTokens, tokens);\n }\n return false;\n }\n static _equals(_a, _b) {\n if (!_a || !_b) {\n return !_a && !_b;\n }\n const a = toUint32Array(_a);\n const b = toUint32Array(_b);\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0, len = a.length; i < len; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n //#region Editing\n acceptEdit(range, eolCount, firstLineLength) {\n this._acceptDeleteRange(range);\n this._acceptInsertText(new Position(range.startLineNumber, range.startColumn), eolCount, firstLineLength);\n }\n _acceptDeleteRange(range) {\n const firstLineIndex = range.startLineNumber - 1;\n if (firstLineIndex >= this._len) {\n return;\n }\n if (range.startLineNumber === range.endLineNumber) {\n if (range.startColumn === range.endColumn) {\n // Nothing to delete\n return;\n }\n this._lineTokens[firstLineIndex] = TokensStore._delete(this._lineTokens[firstLineIndex], range.startColumn - 1, range.endColumn - 1);\n return;\n }\n this._lineTokens[firstLineIndex] = TokensStore._deleteEnding(this._lineTokens[firstLineIndex], range.startColumn - 1);\n const lastLineIndex = range.endLineNumber - 1;\n let lastLineTokens = null;\n if (lastLineIndex < this._len) {\n lastLineTokens = TokensStore._deleteBeginning(this._lineTokens[lastLineIndex], range.endColumn - 1);\n }\n // Take remaining text on last line and append it to remaining text on first line\n this._lineTokens[firstLineIndex] = TokensStore._append(this._lineTokens[firstLineIndex], lastLineTokens);\n // Delete middle lines\n this._deleteLines(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n }\n _acceptInsertText(position, eolCount, firstLineLength) {\n if (eolCount === 0 && firstLineLength === 0) {\n // Nothing to insert\n return;\n }\n const lineIndex = position.lineNumber - 1;\n if (lineIndex >= this._len) {\n return;\n }\n if (eolCount === 0) {\n // Inserting text on one line\n this._lineTokens[lineIndex] = TokensStore._insert(this._lineTokens[lineIndex], position.column - 1, firstLineLength);\n return;\n }\n this._lineTokens[lineIndex] = TokensStore._deleteEnding(this._lineTokens[lineIndex], position.column - 1);\n this._lineTokens[lineIndex] = TokensStore._insert(this._lineTokens[lineIndex], position.column - 1, firstLineLength);\n this._insertLines(position.lineNumber, eolCount);\n }\n static _deleteBeginning(lineTokens, toChIndex) {\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\n return lineTokens;\n }\n return TokensStore._delete(lineTokens, 0, toChIndex);\n }\n static _deleteEnding(lineTokens, fromChIndex) {\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\n return lineTokens;\n }\n const tokens = toUint32Array(lineTokens);\n const lineTextLength = tokens[tokens.length - 2];\n return TokensStore._delete(lineTokens, fromChIndex, lineTextLength);\n }\n static _delete(lineTokens, fromChIndex, toChIndex) {\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS || fromChIndex === toChIndex) {\n return lineTokens;\n }\n const tokens = toUint32Array(lineTokens);\n const tokensCount = (tokens.length >>> 1);\n // special case: deleting everything\n if (fromChIndex === 0 && tokens[tokens.length - 2] === toChIndex) {\n return EMPTY_LINE_TOKENS;\n }\n const fromTokenIndex = LineTokens.findIndexInTokensArray(tokens, fromChIndex);\n const fromTokenStartOffset = (fromTokenIndex > 0 ? tokens[(fromTokenIndex - 1) << 1] : 0);\n const fromTokenEndOffset = tokens[fromTokenIndex << 1];\n if (toChIndex < fromTokenEndOffset) {\n // the delete range is inside a single token\n const delta = (toChIndex - fromChIndex);\n for (let i = fromTokenIndex; i < tokensCount; i++) {\n tokens[i << 1] -= delta;\n }\n return lineTokens;\n }\n let dest;\n let lastEnd;\n if (fromTokenStartOffset !== fromChIndex) {\n tokens[fromTokenIndex << 1] = fromChIndex;\n dest = ((fromTokenIndex + 1) << 1);\n lastEnd = fromChIndex;\n }\n else {\n dest = (fromTokenIndex << 1);\n lastEnd = fromTokenStartOffset;\n }\n const delta = (toChIndex - fromChIndex);\n for (let tokenIndex = fromTokenIndex + 1; tokenIndex < tokensCount; tokenIndex++) {\n const tokenEndOffset = tokens[tokenIndex << 1] - delta;\n if (tokenEndOffset > lastEnd) {\n tokens[dest++] = tokenEndOffset;\n tokens[dest++] = tokens[(tokenIndex << 1) + 1];\n lastEnd = tokenEndOffset;\n }\n }\n if (dest === tokens.length) {\n // nothing to trim\n return lineTokens;\n }\n let tmp = new Uint32Array(dest);\n tmp.set(tokens.subarray(0, dest), 0);\n return tmp.buffer;\n }\n static _append(lineTokens, _otherTokens) {\n if (_otherTokens === EMPTY_LINE_TOKENS) {\n return lineTokens;\n }\n if (lineTokens === EMPTY_LINE_TOKENS) {\n return _otherTokens;\n }\n if (lineTokens === null) {\n return lineTokens;\n }\n if (_otherTokens === null) {\n // cannot determine combined line length...\n return null;\n }\n const myTokens = toUint32Array(lineTokens);\n const otherTokens = toUint32Array(_otherTokens);\n const otherTokensCount = (otherTokens.length >>> 1);\n let result = new Uint32Array(myTokens.length + otherTokens.length);\n result.set(myTokens, 0);\n let dest = myTokens.length;\n const delta = myTokens[myTokens.length - 2];\n for (let i = 0; i < otherTokensCount; i++) {\n result[dest++] = otherTokens[(i << 1)] + delta;\n result[dest++] = otherTokens[(i << 1) + 1];\n }\n return result.buffer;\n }\n static _insert(lineTokens, chIndex, textLength) {\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\n // nothing to do\n return lineTokens;\n }\n const tokens = toUint32Array(lineTokens);\n const tokensCount = (tokens.length >>> 1);\n let fromTokenIndex = LineTokens.findIndexInTokensArray(tokens, chIndex);\n if (fromTokenIndex > 0) {\n const fromTokenStartOffset = tokens[(fromTokenIndex - 1) << 1];\n if (fromTokenStartOffset === chIndex) {\n fromTokenIndex--;\n }\n }\n for (let tokenIndex = fromTokenIndex; tokenIndex < tokensCount; tokenIndex++) {\n tokens[tokenIndex << 1] += textLength;\n }\n return lineTokens;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from './event.js';\nimport { Disposable } from './lifecycle.js';\nexport class ScrollState {\n constructor(width, scrollWidth, scrollLeft, height, scrollHeight, scrollTop) {\n this._scrollStateBrand = undefined;\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n this.rawScrollLeft = scrollLeft; // before validation\n this.rawScrollTop = scrollTop; // before validation\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n equals(other) {\n return (this.rawScrollLeft === other.rawScrollLeft\n && this.rawScrollTop === other.rawScrollTop\n && this.width === other.width\n && this.scrollWidth === other.scrollWidth\n && this.scrollLeft === other.scrollLeft\n && this.height === other.height\n && this.scrollHeight === other.scrollHeight\n && this.scrollTop === other.scrollTop);\n }\n withScrollDimensions(update, useRawScrollPositions) {\n return new ScrollState((typeof update.width !== 'undefined' ? update.width : this.width), (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth), useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft, (typeof update.height !== 'undefined' ? update.height : this.height), (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight), useRawScrollPositions ? this.rawScrollTop : this.scrollTop);\n }\n withScrollPosition(update) {\n return new ScrollState(this.width, this.scrollWidth, (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft), this.height, this.scrollHeight, (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop));\n }\n createScrollEvent(previous, inSmoothScrolling) {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n}\nexport class Scrollable extends Disposable {\n constructor(smoothScrollDuration, scheduleAtNextAnimationFrame) {\n super();\n this._scrollableBrand = undefined;\n this._onScroll = this._register(new Emitter());\n this.onScroll = this._onScroll.event;\n this._smoothScrollDuration = smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = scheduleAtNextAnimationFrame;\n this._state = new ScrollState(0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n dispose() {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n setSmoothScrollDuration(smoothScrollDuration) {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n validateScrollPosition(scrollPosition) {\n return this._state.withScrollPosition(scrollPosition);\n }\n getScrollDimensions() {\n return this._state;\n }\n setScrollDimensions(dimensions, useRawScrollPositions) {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n // Validate outstanding animated scroll position target\n if (this._smoothScrolling) {\n this._smoothScrolling.acceptScrollDimensions(this._state);\n }\n }\n /**\n * Returns the final scroll position that the instance will have once the smooth scroll animation concludes.\n * If no scroll animation is occurring, it will return the current scroll position instead.\n */\n getFutureScrollPosition() {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n /**\n * Returns the current scroll position.\n * Note: This result might be an intermediate scroll position, as there might be an ongoing smooth scroll animation.\n */\n getCurrentScrollPosition() {\n return this._state;\n }\n setScrollPositionNow(update) {\n // no smooth scrolling requested\n const newState = this._state.withScrollPosition(update);\n // Terminate any outstanding smooth scrolling\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n this._setState(newState, false);\n }\n setScrollPositionSmooth(update, reuseAnimation) {\n if (this._smoothScrollDuration === 0) {\n // Smooth scrolling not supported.\n return this.setScrollPositionNow(update);\n }\n if (this._smoothScrolling) {\n // Combine our pending scrollLeft/scrollTop with incoming scrollLeft/scrollTop\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n // Validate `update`\n const validTarget = this._state.withScrollPosition(update);\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n // No need to interrupt or extend the current animation since we're going to the same place\n return;\n }\n let newSmoothScrolling;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n }\n else {\n newSmoothScrolling = this._smoothScrolling.combine(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n }\n else {\n // Validate `update`\n const validTarget = this._state.withScrollPosition(update);\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n // Begin smooth scrolling animation\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n _performSmoothScrolling() {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n this._setState(newState, true);\n if (!this._smoothScrolling) {\n // Looks like someone canceled the smooth scrolling\n // from the scroll event handler\n return;\n }\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n // Continue smooth scrolling animation\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n _setState(newState, inSmoothScrolling) {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n // no change\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\nexport class SmoothScrollingUpdate {\n constructor(scrollLeft, scrollTop, isDone) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n}\nfunction createEaseOutCubic(from, to) {\n const delta = to - from;\n return function (completion) {\n return from + delta * easeOutCubic(completion);\n };\n}\nfunction createComposed(a, b, cut) {\n return function (completion) {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\nexport class SmoothScrollingOperation {\n constructor(from, to, startTime, duration) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n this.animationFrameDisposable = null;\n this._initAnimations();\n }\n _initAnimations() {\n this.scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this.scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n _initAnimation(from, to, viewportSize) {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1, stop2;\n if (from < to) {\n // scroll to 75% of the viewportSize\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n }\n else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n dispose() {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n acceptScrollDimensions(state) {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n tick() {\n return this._tick(Date.now());\n }\n _tick(now) {\n const completion = (now - this.startTime) / this.duration;\n if (completion < 1) {\n const newScrollLeft = this.scrollLeft(completion);\n const newScrollTop = this.scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n combine(from, to, duration) {\n return SmoothScrollingOperation.start(from, to, duration);\n }\n static start(from, to, duration) {\n // +10 / -10 : pretend the animation already started for a quicker response to a scroll request\n duration = duration + 10;\n const startTime = Date.now() - 10;\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\nfunction easeInCubic(t) {\n return Math.pow(t, 3);\n}\nfunction easeOutCubic(t) {\n return 1 - easeInCubic(1 - t);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nexport class MovingAverage {\n constructor() {\n this._n = 1;\n this._val = 0;\n }\n update(value) {\n this._val = this._val + (value - this._val) / this._n;\n this._n += 1;\n return this;\n }\n get value() {\n return this._val;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { illegalArgument } from './errors.js';\nexport function createKeybinding(keybinding, OS) {\n if (keybinding === 0) {\n return null;\n }\n const firstPart = (keybinding & 0x0000FFFF) >>> 0;\n const chordPart = (keybinding & 0xFFFF0000) >>> 16;\n if (chordPart !== 0) {\n return new ChordKeybinding([\n createSimpleKeybinding(firstPart, OS),\n createSimpleKeybinding(chordPart, OS)\n ]);\n }\n return new ChordKeybinding([createSimpleKeybinding(firstPart, OS)]);\n}\nexport function createSimpleKeybinding(keybinding, OS) {\n const ctrlCmd = (keybinding & 2048 /* CtrlCmd */ ? true : false);\n const winCtrl = (keybinding & 256 /* WinCtrl */ ? true : false);\n const ctrlKey = (OS === 2 /* Macintosh */ ? winCtrl : ctrlCmd);\n const shiftKey = (keybinding & 1024 /* Shift */ ? true : false);\n const altKey = (keybinding & 512 /* Alt */ ? true : false);\n const metaKey = (OS === 2 /* Macintosh */ ? ctrlCmd : winCtrl);\n const keyCode = (keybinding & 255 /* KeyCode */);\n return new SimpleKeybinding(ctrlKey, shiftKey, altKey, metaKey, keyCode);\n}\nexport class SimpleKeybinding {\n constructor(ctrlKey, shiftKey, altKey, metaKey, keyCode) {\n this.ctrlKey = ctrlKey;\n this.shiftKey = shiftKey;\n this.altKey = altKey;\n this.metaKey = metaKey;\n this.keyCode = keyCode;\n }\n equals(other) {\n return (this.ctrlKey === other.ctrlKey\n && this.shiftKey === other.shiftKey\n && this.altKey === other.altKey\n && this.metaKey === other.metaKey\n && this.keyCode === other.keyCode);\n }\n isModifierKey() {\n return (this.keyCode === 0 /* Unknown */\n || this.keyCode === 5 /* Ctrl */\n || this.keyCode === 57 /* Meta */\n || this.keyCode === 6 /* Alt */\n || this.keyCode === 4 /* Shift */);\n }\n toChord() {\n return new ChordKeybinding([this]);\n }\n /**\n * Does this keybinding refer to the key code of a modifier and it also has the modifier flag?\n */\n isDuplicateModifierCase() {\n return ((this.ctrlKey && this.keyCode === 5 /* Ctrl */)\n || (this.shiftKey && this.keyCode === 4 /* Shift */)\n || (this.altKey && this.keyCode === 6 /* Alt */)\n || (this.metaKey && this.keyCode === 57 /* Meta */));\n }\n}\nexport class ChordKeybinding {\n constructor(parts) {\n if (parts.length === 0) {\n throw illegalArgument(`parts`);\n }\n this.parts = parts;\n }\n}\nexport class ScanCodeBinding {\n constructor(ctrlKey, shiftKey, altKey, metaKey, scanCode) {\n this.ctrlKey = ctrlKey;\n this.shiftKey = shiftKey;\n this.altKey = altKey;\n this.metaKey = metaKey;\n this.scanCode = scanCode;\n }\n /**\n * Does this keybinding refer to the key code of a modifier and it also has the modifier flag?\n */\n isDuplicateModifierCase() {\n return ((this.ctrlKey && (this.scanCode === 157 /* ControlLeft */ || this.scanCode === 161 /* ControlRight */))\n || (this.shiftKey && (this.scanCode === 158 /* ShiftLeft */ || this.scanCode === 162 /* ShiftRight */))\n || (this.altKey && (this.scanCode === 159 /* AltLeft */ || this.scanCode === 163 /* AltRight */))\n || (this.metaKey && (this.scanCode === 160 /* MetaLeft */ || this.scanCode === 164 /* MetaRight */)));\n }\n}\nexport class ResolvedKeybindingPart {\n constructor(ctrlKey, shiftKey, altKey, metaKey, kbLabel, kbAriaLabel) {\n this.ctrlKey = ctrlKey;\n this.shiftKey = shiftKey;\n this.altKey = altKey;\n this.metaKey = metaKey;\n this.keyLabel = kbLabel;\n this.keyAriaLabel = kbAriaLabel;\n }\n}\n/**\n * A resolved keybinding. Can be a simple keybinding or a chord keybinding.\n */\nexport class ResolvedKeybinding {\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from './strings.js';\nvar Severity;\n(function (Severity) {\n Severity[Severity[\"Ignore\"] = 0] = \"Ignore\";\n Severity[Severity[\"Info\"] = 1] = \"Info\";\n Severity[Severity[\"Warning\"] = 2] = \"Warning\";\n Severity[Severity[\"Error\"] = 3] = \"Error\";\n})(Severity || (Severity = {}));\n(function (Severity) {\n const _error = 'error';\n const _warning = 'warning';\n const _warn = 'warn';\n const _info = 'info';\n const _ignore = 'ignore';\n /**\n * Parses 'error', 'warning', 'warn', 'info' in call casings\n * and falls back to ignore.\n */\n function fromValue(value) {\n if (!value) {\n return Severity.Ignore;\n }\n if (strings.equalsIgnoreCase(_error, value)) {\n return Severity.Error;\n }\n if (strings.equalsIgnoreCase(_warning, value) || strings.equalsIgnoreCase(_warn, value)) {\n return Severity.Warning;\n }\n if (strings.equalsIgnoreCase(_info, value)) {\n return Severity.Info;\n }\n return Severity.Ignore;\n }\n Severity.fromValue = fromValue;\n function toString(severity) {\n switch (severity) {\n case Severity.Error: return _error;\n case Severity.Warning: return _warning;\n case Severity.Info: return _info;\n default: return _ignore;\n }\n }\n Severity.toString = toString;\n})(Severity || (Severity = {}));\nexport default Severity;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class Token {\n constructor(offset, type, language) {\n this._tokenBrand = undefined;\n this.offset = offset | 0; // @perf\n this.type = type;\n this.language = language;\n }\n toString() {\n return '(' + this.offset + ', ' + this.type + ')';\n }\n}\nexport class TokenizationResult {\n constructor(tokens, endState) {\n this._tokenizationResultBrand = undefined;\n this.tokens = tokens;\n this.endState = endState;\n }\n}\nexport class TokenizationResult2 {\n constructor(tokens, endState) {\n this._tokenizationResult2Brand = undefined;\n this.tokens = tokens;\n this.endState = endState;\n }\n}\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { isWindows, isMacintosh, setImmediate } from './platform.js';\r\nvar safeProcess = (typeof process === 'undefined') ? {\r\n cwd: function () { return '/'; },\r\n env: Object.create(null),\r\n get platform() { return isWindows ? 'win32' : isMacintosh ? 'darwin' : 'linux'; },\r\n nextTick: function (callback) { return setImmediate(callback); }\r\n} : process;\r\nexport var cwd = safeProcess.cwd;\r\nexport var env = safeProcess.env;\r\nexport var platform = safeProcess.platform;\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isLinux, isMacintosh, isWeb, isWindows, userAgent } from '../../../base/common/platform.js';\nimport { isFalsyOrWhitespace } from '../../../base/common/strings.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nlet _userAgent = userAgent || '';\nconst CONSTANT_VALUES = new Map();\nCONSTANT_VALUES.set('false', false);\nCONSTANT_VALUES.set('true', true);\nCONSTANT_VALUES.set('isMac', isMacintosh);\nCONSTANT_VALUES.set('isLinux', isLinux);\nCONSTANT_VALUES.set('isWindows', isWindows);\nCONSTANT_VALUES.set('isWeb', isWeb);\nCONSTANT_VALUES.set('isMacNative', isMacintosh && !isWeb);\nCONSTANT_VALUES.set('isEdge', _userAgent.indexOf('Edg/') >= 0);\nCONSTANT_VALUES.set('isFirefox', _userAgent.indexOf('Firefox') >= 0);\nCONSTANT_VALUES.set('isChrome', _userAgent.indexOf('Chrome') >= 0);\nCONSTANT_VALUES.set('isSafari', _userAgent.indexOf('Safari') >= 0);\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport class ContextKeyExpr {\n static has(key) {\n return ContextKeyDefinedExpr.create(key);\n }\n static equals(key, value) {\n return ContextKeyEqualsExpr.create(key, value);\n }\n static regex(key, value) {\n return ContextKeyRegexExpr.create(key, value);\n }\n static not(key) {\n return ContextKeyNotExpr.create(key);\n }\n static and(...expr) {\n return ContextKeyAndExpr.create(expr, null);\n }\n static or(...expr) {\n return ContextKeyOrExpr.create(expr, null, true);\n }\n static deserialize(serialized, strict = false) {\n if (!serialized) {\n return undefined;\n }\n return this._deserializeOrExpression(serialized, strict);\n }\n static _deserializeOrExpression(serialized, strict) {\n let pieces = serialized.split('||');\n return ContextKeyOrExpr.create(pieces.map(p => this._deserializeAndExpression(p, strict)), null, true);\n }\n static _deserializeAndExpression(serialized, strict) {\n let pieces = serialized.split('&&');\n return ContextKeyAndExpr.create(pieces.map(p => this._deserializeOne(p, strict)), null);\n }\n static _deserializeOne(serializedOne, strict) {\n serializedOne = serializedOne.trim();\n if (serializedOne.indexOf('!=') >= 0) {\n let pieces = serializedOne.split('!=');\n return ContextKeyNotEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1], strict));\n }\n if (serializedOne.indexOf('==') >= 0) {\n let pieces = serializedOne.split('==');\n return ContextKeyEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1], strict));\n }\n if (serializedOne.indexOf('=~') >= 0) {\n let pieces = serializedOne.split('=~');\n return ContextKeyRegexExpr.create(pieces[0].trim(), this._deserializeRegexValue(pieces[1], strict));\n }\n if (serializedOne.indexOf(' in ') >= 0) {\n let pieces = serializedOne.split(' in ');\n return ContextKeyInExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^[^<=>]+>=[^<=>]+$/.test(serializedOne)) {\n const pieces = serializedOne.split('>=');\n return ContextKeyGreaterEqualsExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^[^<=>]+>[^<=>]+$/.test(serializedOne)) {\n const pieces = serializedOne.split('>');\n return ContextKeyGreaterExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^[^<=>]+<=[^<=>]+$/.test(serializedOne)) {\n const pieces = serializedOne.split('<=');\n return ContextKeySmallerEqualsExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^[^<=>]+<[^<=>]+$/.test(serializedOne)) {\n const pieces = serializedOne.split('<');\n return ContextKeySmallerExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^\\!\\s*/.test(serializedOne)) {\n return ContextKeyNotExpr.create(serializedOne.substr(1).trim());\n }\n return ContextKeyDefinedExpr.create(serializedOne);\n }\n static _deserializeValue(serializedValue, strict) {\n serializedValue = serializedValue.trim();\n if (serializedValue === 'true') {\n return true;\n }\n if (serializedValue === 'false') {\n return false;\n }\n let m = /^'([^']*)'$/.exec(serializedValue);\n if (m) {\n return m[1].trim();\n }\n return serializedValue;\n }\n static _deserializeRegexValue(serializedValue, strict) {\n if (isFalsyOrWhitespace(serializedValue)) {\n if (strict) {\n throw new Error('missing regexp-value for =~-expression');\n }\n else {\n console.warn('missing regexp-value for =~-expression');\n }\n return null;\n }\n let start = serializedValue.indexOf('/');\n let end = serializedValue.lastIndexOf('/');\n if (start === end || start < 0 /* || to < 0 */) {\n if (strict) {\n throw new Error(`bad regexp-value '${serializedValue}', missing /-enclosure`);\n }\n else {\n console.warn(`bad regexp-value '${serializedValue}', missing /-enclosure`);\n }\n return null;\n }\n let value = serializedValue.slice(start + 1, end);\n let caseIgnoreFlag = serializedValue[end + 1] === 'i' ? 'i' : '';\n try {\n return new RegExp(value, caseIgnoreFlag);\n }\n catch (e) {\n if (strict) {\n throw new Error(`bad regexp-value '${serializedValue}', parse error: ${e}`);\n }\n else {\n console.warn(`bad regexp-value '${serializedValue}', parse error: ${e}`);\n }\n return null;\n }\n }\n}\nexport function expressionsAreEqualWithConstantSubstitution(a, b) {\n const aExpr = a ? a.substituteConstants() : undefined;\n const bExpr = b ? b.substituteConstants() : undefined;\n if (!aExpr && !bExpr) {\n return true;\n }\n if (!aExpr || !bExpr) {\n return false;\n }\n return aExpr.equals(bExpr);\n}\nfunction cmp(a, b) {\n return a.cmp(b);\n}\nexport class ContextKeyFalseExpr {\n constructor() {\n this.type = 0 /* False */;\n }\n cmp(other) {\n return this.type - other.type;\n }\n equals(other) {\n return (other.type === this.type);\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n return false;\n }\n serialize() {\n return 'false';\n }\n keys() {\n return [];\n }\n negate() {\n return ContextKeyTrueExpr.INSTANCE;\n }\n}\nContextKeyFalseExpr.INSTANCE = new ContextKeyFalseExpr();\nexport class ContextKeyTrueExpr {\n constructor() {\n this.type = 1 /* True */;\n }\n cmp(other) {\n return this.type - other.type;\n }\n equals(other) {\n return (other.type === this.type);\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n return true;\n }\n serialize() {\n return 'true';\n }\n keys() {\n return [];\n }\n negate() {\n return ContextKeyFalseExpr.INSTANCE;\n }\n}\nContextKeyTrueExpr.INSTANCE = new ContextKeyTrueExpr();\nexport class ContextKeyDefinedExpr {\n constructor(key, negated) {\n this.key = key;\n this.negated = negated;\n this.type = 2 /* Defined */;\n }\n static create(key, negated = null) {\n const constantValue = CONSTANT_VALUES.get(key);\n if (typeof constantValue === 'boolean') {\n return constantValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE;\n }\n return new ContextKeyDefinedExpr(key, negated);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp1(this.key, other.key);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key);\n }\n return false;\n }\n substituteConstants() {\n const constantValue = CONSTANT_VALUES.get(this.key);\n if (typeof constantValue === 'boolean') {\n return constantValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE;\n }\n return this;\n }\n evaluate(context) {\n return (!!context.getValue(this.key));\n }\n serialize() {\n return this.key;\n }\n keys() {\n return [this.key];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeyNotExpr.create(this.key, this);\n }\n return this.negated;\n }\n}\nexport class ContextKeyEqualsExpr {\n constructor(key, value, negated) {\n this.key = key;\n this.value = value;\n this.negated = negated;\n this.type = 4 /* Equals */;\n }\n static create(key, value, negated = null) {\n if (typeof value === 'boolean') {\n return (value ? ContextKeyDefinedExpr.create(key, negated) : ContextKeyNotExpr.create(key, negated));\n }\n const constantValue = CONSTANT_VALUES.get(key);\n if (typeof constantValue === 'boolean') {\n const trueValue = constantValue ? 'true' : 'false';\n return (value === trueValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE);\n }\n return new ContextKeyEqualsExpr(key, value, negated);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n substituteConstants() {\n const constantValue = CONSTANT_VALUES.get(this.key);\n if (typeof constantValue === 'boolean') {\n const trueValue = constantValue ? 'true' : 'false';\n return (this.value === trueValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE);\n }\n return this;\n }\n evaluate(context) {\n // Intentional ==\n // eslint-disable-next-line eqeqeq\n return (context.getValue(this.key) == this.value);\n }\n serialize() {\n return `${this.key} == '${this.value}'`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeyNotEqualsExpr.create(this.key, this.value, this);\n }\n return this.negated;\n }\n}\nexport class ContextKeyInExpr {\n constructor(key, valueKey) {\n this.key = key;\n this.valueKey = valueKey;\n this.type = 10 /* In */;\n this.negated = null;\n }\n static create(key, valueKey) {\n return new ContextKeyInExpr(key, valueKey);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.valueKey, other.key, other.valueKey);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.valueKey === other.valueKey);\n }\n return false;\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n const source = context.getValue(this.valueKey);\n const item = context.getValue(this.key);\n if (Array.isArray(source)) {\n return (source.indexOf(item) >= 0);\n }\n if (typeof item === 'string' && typeof source === 'object' && source !== null) {\n return hasOwnProperty.call(source, item);\n }\n return false;\n }\n serialize() {\n return `${this.key} in '${this.valueKey}'`;\n }\n keys() {\n return [this.key, this.valueKey];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeyNotInExpr.create(this);\n }\n return this.negated;\n }\n}\nexport class ContextKeyNotInExpr {\n constructor(_actual) {\n this._actual = _actual;\n this.type = 11 /* NotIn */;\n //\n }\n static create(actual) {\n return new ContextKeyNotInExpr(actual);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return this._actual.cmp(other._actual);\n }\n equals(other) {\n if (other.type === this.type) {\n return this._actual.equals(other._actual);\n }\n return false;\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n return !this._actual.evaluate(context);\n }\n serialize() {\n throw new Error('Method not implemented.');\n }\n keys() {\n return this._actual.keys();\n }\n negate() {\n return this._actual;\n }\n}\nexport class ContextKeyNotEqualsExpr {\n constructor(key, value, negated) {\n this.key = key;\n this.value = value;\n this.negated = negated;\n this.type = 5 /* NotEquals */;\n }\n static create(key, value, negated = null) {\n if (typeof value === 'boolean') {\n if (value) {\n return ContextKeyNotExpr.create(key, negated);\n }\n return ContextKeyDefinedExpr.create(key, negated);\n }\n const constantValue = CONSTANT_VALUES.get(key);\n if (typeof constantValue === 'boolean') {\n const falseValue = constantValue ? 'true' : 'false';\n return (value === falseValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n }\n return new ContextKeyNotEqualsExpr(key, value, negated);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n substituteConstants() {\n const constantValue = CONSTANT_VALUES.get(this.key);\n if (typeof constantValue === 'boolean') {\n const falseValue = constantValue ? 'true' : 'false';\n return (this.value === falseValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n }\n return this;\n }\n evaluate(context) {\n // Intentional !=\n // eslint-disable-next-line eqeqeq\n return (context.getValue(this.key) != this.value);\n }\n serialize() {\n return `${this.key} != '${this.value}'`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeyEqualsExpr.create(this.key, this.value, this);\n }\n return this.negated;\n }\n}\nexport class ContextKeyNotExpr {\n constructor(key, negated) {\n this.key = key;\n this.negated = negated;\n this.type = 3 /* Not */;\n }\n static create(key, negated = null) {\n const constantValue = CONSTANT_VALUES.get(key);\n if (typeof constantValue === 'boolean') {\n return (constantValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n }\n return new ContextKeyNotExpr(key, negated);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp1(this.key, other.key);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key);\n }\n return false;\n }\n substituteConstants() {\n const constantValue = CONSTANT_VALUES.get(this.key);\n if (typeof constantValue === 'boolean') {\n return (constantValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n }\n return this;\n }\n evaluate(context) {\n return (!context.getValue(this.key));\n }\n serialize() {\n return `!${this.key}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeyDefinedExpr.create(this.key, this);\n }\n return this.negated;\n }\n}\nfunction withFloatOrStr(value, callback) {\n if (typeof value === 'string') {\n const n = parseFloat(value);\n if (!isNaN(n)) {\n value = n;\n }\n }\n if (typeof value === 'string' || typeof value === 'number') {\n return callback(value);\n }\n return ContextKeyFalseExpr.INSTANCE;\n}\nexport class ContextKeyGreaterExpr {\n constructor(key, value, negated) {\n this.key = key;\n this.value = value;\n this.negated = negated;\n this.type = 12 /* Greater */;\n }\n static create(key, _value, negated = null) {\n return withFloatOrStr(_value, (value) => new ContextKeyGreaterExpr(key, value, negated));\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n if (typeof this.value === 'string') {\n return false;\n }\n return (parseFloat(context.getValue(this.key)) > this.value);\n }\n serialize() {\n return `${this.key} > ${this.value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeySmallerEqualsExpr.create(this.key, this.value, this);\n }\n return this.negated;\n }\n}\nexport class ContextKeyGreaterEqualsExpr {\n constructor(key, value, negated) {\n this.key = key;\n this.value = value;\n this.negated = negated;\n this.type = 13 /* GreaterEquals */;\n }\n static create(key, _value, negated = null) {\n return withFloatOrStr(_value, (value) => new ContextKeyGreaterEqualsExpr(key, value, negated));\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n if (typeof this.value === 'string') {\n return false;\n }\n return (parseFloat(context.getValue(this.key)) >= this.value);\n }\n serialize() {\n return `${this.key} >= ${this.value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeySmallerExpr.create(this.key, this.value, this);\n }\n return this.negated;\n }\n}\nexport class ContextKeySmallerExpr {\n constructor(key, value, negated) {\n this.key = key;\n this.value = value;\n this.negated = negated;\n this.type = 14 /* Smaller */;\n }\n static create(key, _value, negated = null) {\n return withFloatOrStr(_value, (value) => new ContextKeySmallerExpr(key, value, negated));\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n if (typeof this.value === 'string') {\n return false;\n }\n return (parseFloat(context.getValue(this.key)) < this.value);\n }\n serialize() {\n return `${this.key} < ${this.value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeyGreaterEqualsExpr.create(this.key, this.value, this);\n }\n return this.negated;\n }\n}\nexport class ContextKeySmallerEqualsExpr {\n constructor(key, value, negated) {\n this.key = key;\n this.value = value;\n this.negated = negated;\n this.type = 15 /* SmallerEquals */;\n }\n static create(key, _value, negated = null) {\n return withFloatOrStr(_value, (value) => new ContextKeySmallerEqualsExpr(key, value, negated));\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n if (typeof this.value === 'string') {\n return false;\n }\n return (parseFloat(context.getValue(this.key)) <= this.value);\n }\n serialize() {\n return `${this.key} <= ${this.value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeyGreaterExpr.create(this.key, this.value, this);\n }\n return this.negated;\n }\n}\nexport class ContextKeyRegexExpr {\n constructor(key, regexp) {\n this.key = key;\n this.regexp = regexp;\n this.type = 7 /* Regex */;\n this.negated = null;\n //\n }\n static create(key, regexp) {\n return new ContextKeyRegexExpr(key, regexp);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n if (this.key < other.key) {\n return -1;\n }\n if (this.key > other.key) {\n return 1;\n }\n const thisSource = this.regexp ? this.regexp.source : '';\n const otherSource = other.regexp ? other.regexp.source : '';\n if (thisSource < otherSource) {\n return -1;\n }\n if (thisSource > otherSource) {\n return 1;\n }\n return 0;\n }\n equals(other) {\n if (other.type === this.type) {\n const thisSource = this.regexp ? this.regexp.source : '';\n const otherSource = other.regexp ? other.regexp.source : '';\n return (this.key === other.key && thisSource === otherSource);\n }\n return false;\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n let value = context.getValue(this.key);\n return this.regexp ? this.regexp.test(value) : false;\n }\n serialize() {\n const value = this.regexp\n ? `/${this.regexp.source}/${this.regexp.ignoreCase ? 'i' : ''}`\n : '/invalid/';\n return `${this.key} =~ ${value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n if (!this.negated) {\n this.negated = ContextKeyNotRegexExpr.create(this);\n }\n return this.negated;\n }\n}\nexport class ContextKeyNotRegexExpr {\n constructor(_actual) {\n this._actual = _actual;\n this.type = 8 /* NotRegex */;\n //\n }\n static create(actual) {\n return new ContextKeyNotRegexExpr(actual);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return this._actual.cmp(other._actual);\n }\n equals(other) {\n if (other.type === this.type) {\n return this._actual.equals(other._actual);\n }\n return false;\n }\n substituteConstants() {\n return this;\n }\n evaluate(context) {\n return !this._actual.evaluate(context);\n }\n serialize() {\n throw new Error('Method not implemented.');\n }\n keys() {\n return this._actual.keys();\n }\n negate() {\n return this._actual;\n }\n}\n/**\n * @returns the same instance if nothing changed.\n */\nfunction eliminateConstantsInArray(arr) {\n // Allocate array only if there is a difference\n let newArr = null;\n for (let i = 0, len = arr.length; i < len; i++) {\n const newExpr = arr[i].substituteConstants();\n if (arr[i] !== newExpr) {\n // something has changed!\n // allocate array on first difference\n if (newArr === null) {\n newArr = [];\n for (let j = 0; j < i; j++) {\n newArr[j] = arr[j];\n }\n }\n }\n if (newArr !== null) {\n newArr[i] = newExpr;\n }\n }\n if (newArr === null) {\n return arr;\n }\n return newArr;\n}\nclass ContextKeyAndExpr {\n constructor(expr, negated) {\n this.expr = expr;\n this.negated = negated;\n this.type = 6 /* And */;\n }\n static create(_expr, negated) {\n return ContextKeyAndExpr._normalizeArr(_expr, negated);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n if (this.expr.length < other.expr.length) {\n return -1;\n }\n if (this.expr.length > other.expr.length) {\n return 1;\n }\n for (let i = 0, len = this.expr.length; i < len; i++) {\n const r = cmp(this.expr[i], other.expr[i]);\n if (r !== 0) {\n return r;\n }\n }\n return 0;\n }\n equals(other) {\n if (other.type === this.type) {\n if (this.expr.length !== other.expr.length) {\n return false;\n }\n for (let i = 0, len = this.expr.length; i < len; i++) {\n if (!this.expr[i].equals(other.expr[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n substituteConstants() {\n const exprArr = eliminateConstantsInArray(this.expr);\n if (exprArr === this.expr) {\n // no change\n return this;\n }\n return ContextKeyAndExpr.create(exprArr, this.negated);\n }\n evaluate(context) {\n for (let i = 0, len = this.expr.length; i < len; i++) {\n if (!this.expr[i].evaluate(context)) {\n return false;\n }\n }\n return true;\n }\n static _normalizeArr(arr, negated) {\n const expr = [];\n let hasTrue = false;\n for (const e of arr) {\n if (!e) {\n continue;\n }\n if (e.type === 1 /* True */) {\n // anything && true ==> anything\n hasTrue = true;\n continue;\n }\n if (e.type === 0 /* False */) {\n // anything && false ==> false\n return ContextKeyFalseExpr.INSTANCE;\n }\n if (e.type === 6 /* And */) {\n expr.push(...e.expr);\n continue;\n }\n expr.push(e);\n }\n if (expr.length === 0 && hasTrue) {\n return ContextKeyTrueExpr.INSTANCE;\n }\n if (expr.length === 0) {\n return undefined;\n }\n if (expr.length === 1) {\n return expr[0];\n }\n expr.sort(cmp);\n // eliminate duplicate terms\n for (let i = 1; i < expr.length; i++) {\n if (expr[i - 1].equals(expr[i])) {\n expr.splice(i, 1);\n i--;\n }\n }\n if (expr.length === 1) {\n return expr[0];\n }\n // We must distribute any OR expression because we don't support parens\n // OR extensions will be at the end (due to sorting rules)\n while (expr.length > 1) {\n const lastElement = expr[expr.length - 1];\n if (lastElement.type !== 9 /* Or */) {\n break;\n }\n // pop the last element\n expr.pop();\n // pop the second to last element\n const secondToLastElement = expr.pop();\n const isFinished = (expr.length === 0);\n // distribute `lastElement` over `secondToLastElement`\n const resultElement = ContextKeyOrExpr.create(lastElement.expr.map(el => ContextKeyAndExpr.create([el, secondToLastElement], null)), null, isFinished);\n if (resultElement) {\n expr.push(resultElement);\n expr.sort(cmp);\n }\n }\n if (expr.length === 1) {\n return expr[0];\n }\n return new ContextKeyAndExpr(expr, negated);\n }\n serialize() {\n return this.expr.map(e => e.serialize()).join(' && ');\n }\n keys() {\n const result = [];\n for (let expr of this.expr) {\n result.push(...expr.keys());\n }\n return result;\n }\n negate() {\n if (!this.negated) {\n const result = [];\n for (let expr of this.expr) {\n result.push(expr.negate());\n }\n this.negated = ContextKeyOrExpr.create(result, this, true);\n }\n return this.negated;\n }\n}\nclass ContextKeyOrExpr {\n constructor(expr, negated) {\n this.expr = expr;\n this.negated = negated;\n this.type = 9 /* Or */;\n }\n static create(_expr, negated, extraRedundantCheck) {\n return ContextKeyOrExpr._normalizeArr(_expr, negated, extraRedundantCheck);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n if (this.expr.length < other.expr.length) {\n return -1;\n }\n if (this.expr.length > other.expr.length) {\n return 1;\n }\n for (let i = 0, len = this.expr.length; i < len; i++) {\n const r = cmp(this.expr[i], other.expr[i]);\n if (r !== 0) {\n return r;\n }\n }\n return 0;\n }\n equals(other) {\n if (other.type === this.type) {\n if (this.expr.length !== other.expr.length) {\n return false;\n }\n for (let i = 0, len = this.expr.length; i < len; i++) {\n if (!this.expr[i].equals(other.expr[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n substituteConstants() {\n const exprArr = eliminateConstantsInArray(this.expr);\n if (exprArr === this.expr) {\n // no change\n return this;\n }\n return ContextKeyOrExpr.create(exprArr, this.negated, false);\n }\n evaluate(context) {\n for (let i = 0, len = this.expr.length; i < len; i++) {\n if (this.expr[i].evaluate(context)) {\n return true;\n }\n }\n return false;\n }\n static _normalizeArr(arr, negated, extraRedundantCheck) {\n let expr = [];\n let hasFalse = false;\n if (arr) {\n for (let i = 0, len = arr.length; i < len; i++) {\n const e = arr[i];\n if (!e) {\n continue;\n }\n if (e.type === 0 /* False */) {\n // anything || false ==> anything\n hasFalse = true;\n continue;\n }\n if (e.type === 1 /* True */) {\n // anything || true ==> true\n return ContextKeyTrueExpr.INSTANCE;\n }\n if (e.type === 9 /* Or */) {\n expr = expr.concat(e.expr);\n continue;\n }\n expr.push(e);\n }\n if (expr.length === 0 && hasFalse) {\n return ContextKeyFalseExpr.INSTANCE;\n }\n expr.sort(cmp);\n }\n if (expr.length === 0) {\n return undefined;\n }\n if (expr.length === 1) {\n return expr[0];\n }\n // eliminate duplicate terms\n for (let i = 1; i < expr.length; i++) {\n if (expr[i - 1].equals(expr[i])) {\n expr.splice(i, 1);\n i--;\n }\n }\n if (expr.length === 1) {\n return expr[0];\n }\n // eliminate redundant terms\n if (extraRedundantCheck) {\n for (let i = 0; i < expr.length; i++) {\n for (let j = i + 1; j < expr.length; j++) {\n if (implies(expr[i], expr[j])) {\n expr.splice(j, 1);\n j--;\n }\n }\n }\n if (expr.length === 1) {\n return expr[0];\n }\n }\n return new ContextKeyOrExpr(expr, negated);\n }\n serialize() {\n return this.expr.map(e => e.serialize()).join(' || ');\n }\n keys() {\n const result = [];\n for (let expr of this.expr) {\n result.push(...expr.keys());\n }\n return result;\n }\n negate() {\n if (!this.negated) {\n let result = [];\n for (let expr of this.expr) {\n result.push(expr.negate());\n }\n // We don't support parens, so here we distribute the AND over the OR terminals\n // We always take the first 2 AND pairs and distribute them\n while (result.length > 1) {\n const LEFT = result.shift();\n const RIGHT = result.shift();\n const all = [];\n for (const left of getTerminals(LEFT)) {\n for (const right of getTerminals(RIGHT)) {\n all.push(ContextKeyAndExpr.create([left, right], null));\n }\n }\n const isFinished = (result.length === 0);\n result.unshift(ContextKeyOrExpr.create(all, null, isFinished));\n }\n this.negated = result[0];\n }\n return this.negated;\n }\n}\nexport class RawContextKey extends ContextKeyDefinedExpr {\n constructor(key, defaultValue, metaOrHide) {\n super(key, null);\n this._defaultValue = defaultValue;\n // collect all context keys into a central place\n if (typeof metaOrHide === 'object') {\n RawContextKey._info.push(Object.assign(Object.assign({}, metaOrHide), { key }));\n }\n else if (metaOrHide !== true) {\n RawContextKey._info.push({ key, description: metaOrHide, type: defaultValue !== null && defaultValue !== undefined ? typeof defaultValue : undefined });\n }\n }\n static all() {\n return RawContextKey._info.values();\n }\n bindTo(target) {\n return target.createKey(this.key, this._defaultValue);\n }\n getValue(target) {\n return target.getContextKeyValue(this.key);\n }\n toNegated() {\n return this.negate();\n }\n isEqualTo(value) {\n return ContextKeyEqualsExpr.create(this.key, value);\n }\n}\nRawContextKey._info = [];\nexport const IContextKeyService = createDecorator('contextKeyService');\nexport const SET_CONTEXT_COMMAND_ID = 'setContext';\nfunction cmp1(key1, key2) {\n if (key1 < key2) {\n return -1;\n }\n if (key1 > key2) {\n return 1;\n }\n return 0;\n}\nfunction cmp2(key1, value1, key2, value2) {\n if (key1 < key2) {\n return -1;\n }\n if (key1 > key2) {\n return 1;\n }\n if (value1 < value2) {\n return -1;\n }\n if (value1 > value2) {\n return 1;\n }\n return 0;\n}\n/**\n * Returns true if it is provable `p` implies `q`.\n */\nexport function implies(p, q) {\n if (q.type === 6 /* And */ && (p.type !== 9 /* Or */ && p.type !== 6 /* And */)) {\n // covers the case: A implies A && B\n for (const qTerm of q.expr) {\n if (p.equals(qTerm)) {\n return true;\n }\n }\n }\n const notP = p.negate();\n const expr = getTerminals(notP).concat(getTerminals(q));\n expr.sort(cmp);\n for (let i = 0; i < expr.length; i++) {\n const a = expr[i];\n const notA = a.negate();\n for (let j = i + 1; j < expr.length; j++) {\n const b = expr[j];\n if (notA.equals(b)) {\n return true;\n }\n }\n }\n return false;\n}\nfunction getTerminals(node) {\n if (node.type === 9 /* Or */) {\n return node.expr;\n }\n return [node];\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IContextViewService = createDecorator('contextViewService');\nexport const IContextMenuService = createDecorator('contextMenuService');\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from './event.js';\nclass Registry {\n constructor() {\n this._icons = new Map();\n this._onDidRegister = new Emitter();\n }\n add(icon) {\n const existing = this._icons.get(icon.id);\n if (!existing) {\n this._icons.set(icon.id, icon);\n this._onDidRegister.fire(icon);\n }\n else if (icon.description) {\n existing.description = icon.description;\n }\n else {\n console.error(`Duplicate registration of codicon ${icon.id}`);\n }\n }\n get(id) {\n return this._icons.get(id);\n }\n get all() {\n return this._icons.values();\n }\n get onDidRegister() {\n return this._onDidRegister.event;\n }\n}\nconst _registry = new Registry();\nexport const iconRegistry = _registry;\nexport function registerCodicon(id, def) {\n return new Codicon(id, def);\n}\n// Selects all codicon names encapsulated in the `$()` syntax and wraps the\n// results with spaces so that screen readers can read the text better.\nexport function getCodiconAriaLabel(text) {\n if (!text) {\n return '';\n }\n return text.replace(/\\$\\((.*?)\\)/g, (_match, codiconName) => ` ${codiconName} `).trim();\n}\nexport class Codicon {\n constructor(id, definition, description) {\n this.id = id;\n this.definition = definition;\n this.description = description;\n _registry.add(this);\n }\n get classNames() { return 'codicon codicon-' + this.id; }\n // classNamesArray is useful for migrating to ES6 classlist\n get classNamesArray() { return ['codicon', 'codicon-' + this.id]; }\n get cssSelector() { return '.codicon.codicon-' + this.id; }\n}\nexport var CSSIcon;\n(function (CSSIcon) {\n CSSIcon.iconNameSegment = '[A-Za-z0-9]+';\n CSSIcon.iconNameExpression = '[A-Za-z0-9\\\\-]+';\n CSSIcon.iconModifierExpression = '~[A-Za-z]+';\n const cssIconIdRegex = new RegExp(`^(${CSSIcon.iconNameExpression})(${CSSIcon.iconModifierExpression})?$`);\n function asClassNameArray(icon) {\n if (icon instanceof Codicon) {\n return ['codicon', 'codicon-' + icon.id];\n }\n const match = cssIconIdRegex.exec(icon.id);\n if (!match) {\n return asClassNameArray(Codicon.error);\n }\n let [, id, modifier] = match;\n const classNames = ['codicon', 'codicon-' + id];\n if (modifier) {\n classNames.push('codicon-modifier-' + modifier.substr(1));\n }\n return classNames;\n }\n CSSIcon.asClassNameArray = asClassNameArray;\n function asClassName(icon) {\n return asClassNameArray(icon).join(' ');\n }\n CSSIcon.asClassName = asClassName;\n function asCSSSelector(icon) {\n return '.' + asClassNameArray(icon).join('.');\n }\n CSSIcon.asCSSSelector = asCSSSelector;\n})(CSSIcon || (CSSIcon = {}));\n(function (Codicon) {\n // built-in icons, with image name\n Codicon.add = new Codicon('add', { fontCharacter: '\\\\ea60' });\n Codicon.plus = new Codicon('plus', Codicon.add.definition);\n Codicon.gistNew = new Codicon('gist-new', Codicon.add.definition);\n Codicon.repoCreate = new Codicon('repo-create', Codicon.add.definition);\n Codicon.lightbulb = new Codicon('lightbulb', { fontCharacter: '\\\\ea61' });\n Codicon.lightBulb = new Codicon('light-bulb', { fontCharacter: '\\\\ea61' });\n Codicon.repo = new Codicon('repo', { fontCharacter: '\\\\ea62' });\n Codicon.repoDelete = new Codicon('repo-delete', { fontCharacter: '\\\\ea62' });\n Codicon.gistFork = new Codicon('gist-fork', { fontCharacter: '\\\\ea63' });\n Codicon.repoForked = new Codicon('repo-forked', { fontCharacter: '\\\\ea63' });\n Codicon.gitPullRequest = new Codicon('git-pull-request', { fontCharacter: '\\\\ea64' });\n Codicon.gitPullRequestAbandoned = new Codicon('git-pull-request-abandoned', { fontCharacter: '\\\\ea64' });\n Codicon.recordKeys = new Codicon('record-keys', { fontCharacter: '\\\\ea65' });\n Codicon.keyboard = new Codicon('keyboard', { fontCharacter: '\\\\ea65' });\n Codicon.tag = new Codicon('tag', { fontCharacter: '\\\\ea66' });\n Codicon.tagAdd = new Codicon('tag-add', { fontCharacter: '\\\\ea66' });\n Codicon.tagRemove = new Codicon('tag-remove', { fontCharacter: '\\\\ea66' });\n Codicon.person = new Codicon('person', { fontCharacter: '\\\\ea67' });\n Codicon.personFollow = new Codicon('person-follow', { fontCharacter: '\\\\ea67' });\n Codicon.personOutline = new Codicon('person-outline', { fontCharacter: '\\\\ea67' });\n Codicon.personFilled = new Codicon('person-filled', { fontCharacter: '\\\\ea67' });\n Codicon.gitBranch = new Codicon('git-branch', { fontCharacter: '\\\\ea68' });\n Codicon.gitBranchCreate = new Codicon('git-branch-create', { fontCharacter: '\\\\ea68' });\n Codicon.gitBranchDelete = new Codicon('git-branch-delete', { fontCharacter: '\\\\ea68' });\n Codicon.sourceControl = new Codicon('source-control', { fontCharacter: '\\\\ea68' });\n Codicon.mirror = new Codicon('mirror', { fontCharacter: '\\\\ea69' });\n Codicon.mirrorPublic = new Codicon('mirror-public', { fontCharacter: '\\\\ea69' });\n Codicon.star = new Codicon('star', { fontCharacter: '\\\\ea6a' });\n Codicon.starAdd = new Codicon('star-add', { fontCharacter: '\\\\ea6a' });\n Codicon.starDelete = new Codicon('star-delete', { fontCharacter: '\\\\ea6a' });\n Codicon.starEmpty = new Codicon('star-empty', { fontCharacter: '\\\\ea6a' });\n Codicon.comment = new Codicon('comment', { fontCharacter: '\\\\ea6b' });\n Codicon.commentAdd = new Codicon('comment-add', { fontCharacter: '\\\\ea6b' });\n Codicon.alert = new Codicon('alert', { fontCharacter: '\\\\ea6c' });\n Codicon.warning = new Codicon('warning', { fontCharacter: '\\\\ea6c' });\n Codicon.search = new Codicon('search', { fontCharacter: '\\\\ea6d' });\n Codicon.searchSave = new Codicon('search-save', { fontCharacter: '\\\\ea6d' });\n Codicon.logOut = new Codicon('log-out', { fontCharacter: '\\\\ea6e' });\n Codicon.signOut = new Codicon('sign-out', { fontCharacter: '\\\\ea6e' });\n Codicon.logIn = new Codicon('log-in', { fontCharacter: '\\\\ea6f' });\n Codicon.signIn = new Codicon('sign-in', { fontCharacter: '\\\\ea6f' });\n Codicon.eye = new Codicon('eye', { fontCharacter: '\\\\ea70' });\n Codicon.eyeUnwatch = new Codicon('eye-unwatch', { fontCharacter: '\\\\ea70' });\n Codicon.eyeWatch = new Codicon('eye-watch', { fontCharacter: '\\\\ea70' });\n Codicon.circleFilled = new Codicon('circle-filled', { fontCharacter: '\\\\ea71' });\n Codicon.primitiveDot = new Codicon('primitive-dot', { fontCharacter: '\\\\ea71' });\n Codicon.closeDirty = new Codicon('close-dirty', { fontCharacter: '\\\\ea71' });\n Codicon.debugBreakpoint = new Codicon('debug-breakpoint', { fontCharacter: '\\\\ea71' });\n Codicon.debugBreakpointDisabled = new Codicon('debug-breakpoint-disabled', { fontCharacter: '\\\\ea71' });\n Codicon.debugHint = new Codicon('debug-hint', { fontCharacter: '\\\\ea71' });\n Codicon.primitiveSquare = new Codicon('primitive-square', { fontCharacter: '\\\\ea72' });\n Codicon.edit = new Codicon('edit', { fontCharacter: '\\\\ea73' });\n Codicon.pencil = new Codicon('pencil', { fontCharacter: '\\\\ea73' });\n Codicon.info = new Codicon('info', { fontCharacter: '\\\\ea74' });\n Codicon.issueOpened = new Codicon('issue-opened', { fontCharacter: '\\\\ea74' });\n Codicon.gistPrivate = new Codicon('gist-private', { fontCharacter: '\\\\ea75' });\n Codicon.gitForkPrivate = new Codicon('git-fork-private', { fontCharacter: '\\\\ea75' });\n Codicon.lock = new Codicon('lock', { fontCharacter: '\\\\ea75' });\n Codicon.mirrorPrivate = new Codicon('mirror-private', { fontCharacter: '\\\\ea75' });\n Codicon.close = new Codicon('close', { fontCharacter: '\\\\ea76' });\n Codicon.removeClose = new Codicon('remove-close', { fontCharacter: '\\\\ea76' });\n Codicon.x = new Codicon('x', { fontCharacter: '\\\\ea76' });\n Codicon.repoSync = new Codicon('repo-sync', { fontCharacter: '\\\\ea77' });\n Codicon.sync = new Codicon('sync', { fontCharacter: '\\\\ea77' });\n Codicon.clone = new Codicon('clone', { fontCharacter: '\\\\ea78' });\n Codicon.desktopDownload = new Codicon('desktop-download', { fontCharacter: '\\\\ea78' });\n Codicon.beaker = new Codicon('beaker', { fontCharacter: '\\\\ea79' });\n Codicon.microscope = new Codicon('microscope', { fontCharacter: '\\\\ea79' });\n Codicon.vm = new Codicon('vm', { fontCharacter: '\\\\ea7a' });\n Codicon.deviceDesktop = new Codicon('device-desktop', { fontCharacter: '\\\\ea7a' });\n Codicon.file = new Codicon('file', { fontCharacter: '\\\\ea7b' });\n Codicon.fileText = new Codicon('file-text', { fontCharacter: '\\\\ea7b' });\n Codicon.more = new Codicon('more', { fontCharacter: '\\\\ea7c' });\n Codicon.ellipsis = new Codicon('ellipsis', { fontCharacter: '\\\\ea7c' });\n Codicon.kebabHorizontal = new Codicon('kebab-horizontal', { fontCharacter: '\\\\ea7c' });\n Codicon.mailReply = new Codicon('mail-reply', { fontCharacter: '\\\\ea7d' });\n Codicon.reply = new Codicon('reply', { fontCharacter: '\\\\ea7d' });\n Codicon.organization = new Codicon('organization', { fontCharacter: '\\\\ea7e' });\n Codicon.organizationFilled = new Codicon('organization-filled', { fontCharacter: '\\\\ea7e' });\n Codicon.organizationOutline = new Codicon('organization-outline', { fontCharacter: '\\\\ea7e' });\n Codicon.newFile = new Codicon('new-file', { fontCharacter: '\\\\ea7f' });\n Codicon.fileAdd = new Codicon('file-add', { fontCharacter: '\\\\ea7f' });\n Codicon.newFolder = new Codicon('new-folder', { fontCharacter: '\\\\ea80' });\n Codicon.fileDirectoryCreate = new Codicon('file-directory-create', { fontCharacter: '\\\\ea80' });\n Codicon.trash = new Codicon('trash', { fontCharacter: '\\\\ea81' });\n Codicon.trashcan = new Codicon('trashcan', { fontCharacter: '\\\\ea81' });\n Codicon.history = new Codicon('history', { fontCharacter: '\\\\ea82' });\n Codicon.clock = new Codicon('clock', { fontCharacter: '\\\\ea82' });\n Codicon.folder = new Codicon('folder', { fontCharacter: '\\\\ea83' });\n Codicon.fileDirectory = new Codicon('file-directory', { fontCharacter: '\\\\ea83' });\n Codicon.symbolFolder = new Codicon('symbol-folder', { fontCharacter: '\\\\ea83' });\n Codicon.logoGithub = new Codicon('logo-github', { fontCharacter: '\\\\ea84' });\n Codicon.markGithub = new Codicon('mark-github', { fontCharacter: '\\\\ea84' });\n Codicon.github = new Codicon('github', { fontCharacter: '\\\\ea84' });\n Codicon.terminal = new Codicon('terminal', { fontCharacter: '\\\\ea85' });\n Codicon.console = new Codicon('console', { fontCharacter: '\\\\ea85' });\n Codicon.repl = new Codicon('repl', { fontCharacter: '\\\\ea85' });\n Codicon.zap = new Codicon('zap', { fontCharacter: '\\\\ea86' });\n Codicon.symbolEvent = new Codicon('symbol-event', { fontCharacter: '\\\\ea86' });\n Codicon.error = new Codicon('error', { fontCharacter: '\\\\ea87' });\n Codicon.stop = new Codicon('stop', { fontCharacter: '\\\\ea87' });\n Codicon.variable = new Codicon('variable', { fontCharacter: '\\\\ea88' });\n Codicon.symbolVariable = new Codicon('symbol-variable', { fontCharacter: '\\\\ea88' });\n Codicon.array = new Codicon('array', { fontCharacter: '\\\\ea8a' });\n Codicon.symbolArray = new Codicon('symbol-array', { fontCharacter: '\\\\ea8a' });\n Codicon.symbolModule = new Codicon('symbol-module', { fontCharacter: '\\\\ea8b' });\n Codicon.symbolPackage = new Codicon('symbol-package', { fontCharacter: '\\\\ea8b' });\n Codicon.symbolNamespace = new Codicon('symbol-namespace', { fontCharacter: '\\\\ea8b' });\n Codicon.symbolObject = new Codicon('symbol-object', { fontCharacter: '\\\\ea8b' });\n Codicon.symbolMethod = new Codicon('symbol-method', { fontCharacter: '\\\\ea8c' });\n Codicon.symbolFunction = new Codicon('symbol-function', { fontCharacter: '\\\\ea8c' });\n Codicon.symbolConstructor = new Codicon('symbol-constructor', { fontCharacter: '\\\\ea8c' });\n Codicon.symbolBoolean = new Codicon('symbol-boolean', { fontCharacter: '\\\\ea8f' });\n Codicon.symbolNull = new Codicon('symbol-null', { fontCharacter: '\\\\ea8f' });\n Codicon.symbolNumeric = new Codicon('symbol-numeric', { fontCharacter: '\\\\ea90' });\n Codicon.symbolNumber = new Codicon('symbol-number', { fontCharacter: '\\\\ea90' });\n Codicon.symbolStructure = new Codicon('symbol-structure', { fontCharacter: '\\\\ea91' });\n Codicon.symbolStruct = new Codicon('symbol-struct', { fontCharacter: '\\\\ea91' });\n Codicon.symbolParameter = new Codicon('symbol-parameter', { fontCharacter: '\\\\ea92' });\n Codicon.symbolTypeParameter = new Codicon('symbol-type-parameter', { fontCharacter: '\\\\ea92' });\n Codicon.symbolKey = new Codicon('symbol-key', { fontCharacter: '\\\\ea93' });\n Codicon.symbolText = new Codicon('symbol-text', { fontCharacter: '\\\\ea93' });\n Codicon.symbolReference = new Codicon('symbol-reference', { fontCharacter: '\\\\ea94' });\n Codicon.goToFile = new Codicon('go-to-file', { fontCharacter: '\\\\ea94' });\n Codicon.symbolEnum = new Codicon('symbol-enum', { fontCharacter: '\\\\ea95' });\n Codicon.symbolValue = new Codicon('symbol-value', { fontCharacter: '\\\\ea95' });\n Codicon.symbolRuler = new Codicon('symbol-ruler', { fontCharacter: '\\\\ea96' });\n Codicon.symbolUnit = new Codicon('symbol-unit', { fontCharacter: '\\\\ea96' });\n Codicon.activateBreakpoints = new Codicon('activate-breakpoints', { fontCharacter: '\\\\ea97' });\n Codicon.archive = new Codicon('archive', { fontCharacter: '\\\\ea98' });\n Codicon.arrowBoth = new Codicon('arrow-both', { fontCharacter: '\\\\ea99' });\n Codicon.arrowDown = new Codicon('arrow-down', { fontCharacter: '\\\\ea9a' });\n Codicon.arrowLeft = new Codicon('arrow-left', { fontCharacter: '\\\\ea9b' });\n Codicon.arrowRight = new Codicon('arrow-right', { fontCharacter: '\\\\ea9c' });\n Codicon.arrowSmallDown = new Codicon('arrow-small-down', { fontCharacter: '\\\\ea9d' });\n Codicon.arrowSmallLeft = new Codicon('arrow-small-left', { fontCharacter: '\\\\ea9e' });\n Codicon.arrowSmallRight = new Codicon('arrow-small-right', { fontCharacter: '\\\\ea9f' });\n Codicon.arrowSmallUp = new Codicon('arrow-small-up', { fontCharacter: '\\\\eaa0' });\n Codicon.arrowUp = new Codicon('arrow-up', { fontCharacter: '\\\\eaa1' });\n Codicon.bell = new Codicon('bell', { fontCharacter: '\\\\eaa2' });\n Codicon.bold = new Codicon('bold', { fontCharacter: '\\\\eaa3' });\n Codicon.book = new Codicon('book', { fontCharacter: '\\\\eaa4' });\n Codicon.bookmark = new Codicon('bookmark', { fontCharacter: '\\\\eaa5' });\n Codicon.debugBreakpointConditionalUnverified = new Codicon('debug-breakpoint-conditional-unverified', { fontCharacter: '\\\\eaa6' });\n Codicon.debugBreakpointConditional = new Codicon('debug-breakpoint-conditional', { fontCharacter: '\\\\eaa7' });\n Codicon.debugBreakpointConditionalDisabled = new Codicon('debug-breakpoint-conditional-disabled', { fontCharacter: '\\\\eaa7' });\n Codicon.debugBreakpointDataUnverified = new Codicon('debug-breakpoint-data-unverified', { fontCharacter: '\\\\eaa8' });\n Codicon.debugBreakpointData = new Codicon('debug-breakpoint-data', { fontCharacter: '\\\\eaa9' });\n Codicon.debugBreakpointDataDisabled = new Codicon('debug-breakpoint-data-disabled', { fontCharacter: '\\\\eaa9' });\n Codicon.debugBreakpointLogUnverified = new Codicon('debug-breakpoint-log-unverified', { fontCharacter: '\\\\eaaa' });\n Codicon.debugBreakpointLog = new Codicon('debug-breakpoint-log', { fontCharacter: '\\\\eaab' });\n Codicon.debugBreakpointLogDisabled = new Codicon('debug-breakpoint-log-disabled', { fontCharacter: '\\\\eaab' });\n Codicon.briefcase = new Codicon('briefcase', { fontCharacter: '\\\\eaac' });\n Codicon.broadcast = new Codicon('broadcast', { fontCharacter: '\\\\eaad' });\n Codicon.browser = new Codicon('browser', { fontCharacter: '\\\\eaae' });\n Codicon.bug = new Codicon('bug', { fontCharacter: '\\\\eaaf' });\n Codicon.calendar = new Codicon('calendar', { fontCharacter: '\\\\eab0' });\n Codicon.caseSensitive = new Codicon('case-sensitive', { fontCharacter: '\\\\eab1' });\n Codicon.check = new Codicon('check', { fontCharacter: '\\\\eab2' });\n Codicon.checklist = new Codicon('checklist', { fontCharacter: '\\\\eab3' });\n Codicon.chevronDown = new Codicon('chevron-down', { fontCharacter: '\\\\eab4' });\n Codicon.dropDownButton = new Codicon('drop-down-button', Codicon.chevronDown.definition);\n Codicon.chevronLeft = new Codicon('chevron-left', { fontCharacter: '\\\\eab5' });\n Codicon.chevronRight = new Codicon('chevron-right', { fontCharacter: '\\\\eab6' });\n Codicon.chevronUp = new Codicon('chevron-up', { fontCharacter: '\\\\eab7' });\n Codicon.chromeClose = new Codicon('chrome-close', { fontCharacter: '\\\\eab8' });\n Codicon.chromeMaximize = new Codicon('chrome-maximize', { fontCharacter: '\\\\eab9' });\n Codicon.chromeMinimize = new Codicon('chrome-minimize', { fontCharacter: '\\\\eaba' });\n Codicon.chromeRestore = new Codicon('chrome-restore', { fontCharacter: '\\\\eabb' });\n Codicon.circleOutline = new Codicon('circle-outline', { fontCharacter: '\\\\eabc' });\n Codicon.debugBreakpointUnverified = new Codicon('debug-breakpoint-unverified', { fontCharacter: '\\\\eabc' });\n Codicon.circleSlash = new Codicon('circle-slash', { fontCharacter: '\\\\eabd' });\n Codicon.circuitBoard = new Codicon('circuit-board', { fontCharacter: '\\\\eabe' });\n Codicon.clearAll = new Codicon('clear-all', { fontCharacter: '\\\\eabf' });\n Codicon.clippy = new Codicon('clippy', { fontCharacter: '\\\\eac0' });\n Codicon.closeAll = new Codicon('close-all', { fontCharacter: '\\\\eac1' });\n Codicon.cloudDownload = new Codicon('cloud-download', { fontCharacter: '\\\\eac2' });\n Codicon.cloudUpload = new Codicon('cloud-upload', { fontCharacter: '\\\\eac3' });\n Codicon.code = new Codicon('code', { fontCharacter: '\\\\eac4' });\n Codicon.collapseAll = new Codicon('collapse-all', { fontCharacter: '\\\\eac5' });\n Codicon.colorMode = new Codicon('color-mode', { fontCharacter: '\\\\eac6' });\n Codicon.commentDiscussion = new Codicon('comment-discussion', { fontCharacter: '\\\\eac7' });\n Codicon.compareChanges = new Codicon('compare-changes', { fontCharacter: '\\\\eafd' });\n Codicon.creditCard = new Codicon('credit-card', { fontCharacter: '\\\\eac9' });\n Codicon.dash = new Codicon('dash', { fontCharacter: '\\\\eacc' });\n Codicon.dashboard = new Codicon('dashboard', { fontCharacter: '\\\\eacd' });\n Codicon.database = new Codicon('database', { fontCharacter: '\\\\eace' });\n Codicon.debugContinue = new Codicon('debug-continue', { fontCharacter: '\\\\eacf' });\n Codicon.debugDisconnect = new Codicon('debug-disconnect', { fontCharacter: '\\\\ead0' });\n Codicon.debugPause = new Codicon('debug-pause', { fontCharacter: '\\\\ead1' });\n Codicon.debugRestart = new Codicon('debug-restart', { fontCharacter: '\\\\ead2' });\n Codicon.debugStart = new Codicon('debug-start', { fontCharacter: '\\\\ead3' });\n Codicon.debugStepInto = new Codicon('debug-step-into', { fontCharacter: '\\\\ead4' });\n Codicon.debugStepOut = new Codicon('debug-step-out', { fontCharacter: '\\\\ead5' });\n Codicon.debugStepOver = new Codicon('debug-step-over', { fontCharacter: '\\\\ead6' });\n Codicon.debugStop = new Codicon('debug-stop', { fontCharacter: '\\\\ead7' });\n Codicon.debug = new Codicon('debug', { fontCharacter: '\\\\ead8' });\n Codicon.deviceCameraVideo = new Codicon('device-camera-video', { fontCharacter: '\\\\ead9' });\n Codicon.deviceCamera = new Codicon('device-camera', { fontCharacter: '\\\\eada' });\n Codicon.deviceMobile = new Codicon('device-mobile', { fontCharacter: '\\\\eadb' });\n Codicon.diffAdded = new Codicon('diff-added', { fontCharacter: '\\\\eadc' });\n Codicon.diffIgnored = new Codicon('diff-ignored', { fontCharacter: '\\\\eadd' });\n Codicon.diffModified = new Codicon('diff-modified', { fontCharacter: '\\\\eade' });\n Codicon.diffRemoved = new Codicon('diff-removed', { fontCharacter: '\\\\eadf' });\n Codicon.diffRenamed = new Codicon('diff-renamed', { fontCharacter: '\\\\eae0' });\n Codicon.diff = new Codicon('diff', { fontCharacter: '\\\\eae1' });\n Codicon.discard = new Codicon('discard', { fontCharacter: '\\\\eae2' });\n Codicon.editorLayout = new Codicon('editor-layout', { fontCharacter: '\\\\eae3' });\n Codicon.emptyWindow = new Codicon('empty-window', { fontCharacter: '\\\\eae4' });\n Codicon.exclude = new Codicon('exclude', { fontCharacter: '\\\\eae5' });\n Codicon.extensions = new Codicon('extensions', { fontCharacter: '\\\\eae6' });\n Codicon.eyeClosed = new Codicon('eye-closed', { fontCharacter: '\\\\eae7' });\n Codicon.fileBinary = new Codicon('file-binary', { fontCharacter: '\\\\eae8' });\n Codicon.fileCode = new Codicon('file-code', { fontCharacter: '\\\\eae9' });\n Codicon.fileMedia = new Codicon('file-media', { fontCharacter: '\\\\eaea' });\n Codicon.filePdf = new Codicon('file-pdf', { fontCharacter: '\\\\eaeb' });\n Codicon.fileSubmodule = new Codicon('file-submodule', { fontCharacter: '\\\\eaec' });\n Codicon.fileSymlinkDirectory = new Codicon('file-symlink-directory', { fontCharacter: '\\\\eaed' });\n Codicon.fileSymlinkFile = new Codicon('file-symlink-file', { fontCharacter: '\\\\eaee' });\n Codicon.fileZip = new Codicon('file-zip', { fontCharacter: '\\\\eaef' });\n Codicon.files = new Codicon('files', { fontCharacter: '\\\\eaf0' });\n Codicon.filter = new Codicon('filter', { fontCharacter: '\\\\eaf1' });\n Codicon.flame = new Codicon('flame', { fontCharacter: '\\\\eaf2' });\n Codicon.foldDown = new Codicon('fold-down', { fontCharacter: '\\\\eaf3' });\n Codicon.foldUp = new Codicon('fold-up', { fontCharacter: '\\\\eaf4' });\n Codicon.fold = new Codicon('fold', { fontCharacter: '\\\\eaf5' });\n Codicon.folderActive = new Codicon('folder-active', { fontCharacter: '\\\\eaf6' });\n Codicon.folderOpened = new Codicon('folder-opened', { fontCharacter: '\\\\eaf7' });\n Codicon.gear = new Codicon('gear', { fontCharacter: '\\\\eaf8' });\n Codicon.gift = new Codicon('gift', { fontCharacter: '\\\\eaf9' });\n Codicon.gistSecret = new Codicon('gist-secret', { fontCharacter: '\\\\eafa' });\n Codicon.gist = new Codicon('gist', { fontCharacter: '\\\\eafb' });\n Codicon.gitCommit = new Codicon('git-commit', { fontCharacter: '\\\\eafc' });\n Codicon.gitCompare = new Codicon('git-compare', { fontCharacter: '\\\\eafd' });\n Codicon.gitMerge = new Codicon('git-merge', { fontCharacter: '\\\\eafe' });\n Codicon.githubAction = new Codicon('github-action', { fontCharacter: '\\\\eaff' });\n Codicon.githubAlt = new Codicon('github-alt', { fontCharacter: '\\\\eb00' });\n Codicon.globe = new Codicon('globe', { fontCharacter: '\\\\eb01' });\n Codicon.grabber = new Codicon('grabber', { fontCharacter: '\\\\eb02' });\n Codicon.graph = new Codicon('graph', { fontCharacter: '\\\\eb03' });\n Codicon.gripper = new Codicon('gripper', { fontCharacter: '\\\\eb04' });\n Codicon.heart = new Codicon('heart', { fontCharacter: '\\\\eb05' });\n Codicon.home = new Codicon('home', { fontCharacter: '\\\\eb06' });\n Codicon.horizontalRule = new Codicon('horizontal-rule', { fontCharacter: '\\\\eb07' });\n Codicon.hubot = new Codicon('hubot', { fontCharacter: '\\\\eb08' });\n Codicon.inbox = new Codicon('inbox', { fontCharacter: '\\\\eb09' });\n Codicon.issueClosed = new Codicon('issue-closed', { fontCharacter: '\\\\eba4' });\n Codicon.issueReopened = new Codicon('issue-reopened', { fontCharacter: '\\\\eb0b' });\n Codicon.issues = new Codicon('issues', { fontCharacter: '\\\\eb0c' });\n Codicon.italic = new Codicon('italic', { fontCharacter: '\\\\eb0d' });\n Codicon.jersey = new Codicon('jersey', { fontCharacter: '\\\\eb0e' });\n Codicon.json = new Codicon('json', { fontCharacter: '\\\\eb0f' });\n Codicon.kebabVertical = new Codicon('kebab-vertical', { fontCharacter: '\\\\eb10' });\n Codicon.key = new Codicon('key', { fontCharacter: '\\\\eb11' });\n Codicon.law = new Codicon('law', { fontCharacter: '\\\\eb12' });\n Codicon.lightbulbAutofix = new Codicon('lightbulb-autofix', { fontCharacter: '\\\\eb13' });\n Codicon.linkExternal = new Codicon('link-external', { fontCharacter: '\\\\eb14' });\n Codicon.link = new Codicon('link', { fontCharacter: '\\\\eb15' });\n Codicon.listOrdered = new Codicon('list-ordered', { fontCharacter: '\\\\eb16' });\n Codicon.listUnordered = new Codicon('list-unordered', { fontCharacter: '\\\\eb17' });\n Codicon.liveShare = new Codicon('live-share', { fontCharacter: '\\\\eb18' });\n Codicon.loading = new Codicon('loading', { fontCharacter: '\\\\eb19' });\n Codicon.location = new Codicon('location', { fontCharacter: '\\\\eb1a' });\n Codicon.mailRead = new Codicon('mail-read', { fontCharacter: '\\\\eb1b' });\n Codicon.mail = new Codicon('mail', { fontCharacter: '\\\\eb1c' });\n Codicon.markdown = new Codicon('markdown', { fontCharacter: '\\\\eb1d' });\n Codicon.megaphone = new Codicon('megaphone', { fontCharacter: '\\\\eb1e' });\n Codicon.mention = new Codicon('mention', { fontCharacter: '\\\\eb1f' });\n Codicon.milestone = new Codicon('milestone', { fontCharacter: '\\\\eb20' });\n Codicon.mortarBoard = new Codicon('mortar-board', { fontCharacter: '\\\\eb21' });\n Codicon.move = new Codicon('move', { fontCharacter: '\\\\eb22' });\n Codicon.multipleWindows = new Codicon('multiple-windows', { fontCharacter: '\\\\eb23' });\n Codicon.mute = new Codicon('mute', { fontCharacter: '\\\\eb24' });\n Codicon.noNewline = new Codicon('no-newline', { fontCharacter: '\\\\eb25' });\n Codicon.note = new Codicon('note', { fontCharacter: '\\\\eb26' });\n Codicon.octoface = new Codicon('octoface', { fontCharacter: '\\\\eb27' });\n Codicon.openPreview = new Codicon('open-preview', { fontCharacter: '\\\\eb28' });\n Codicon.package_ = new Codicon('package', { fontCharacter: '\\\\eb29' });\n Codicon.paintcan = new Codicon('paintcan', { fontCharacter: '\\\\eb2a' });\n Codicon.pin = new Codicon('pin', { fontCharacter: '\\\\eb2b' });\n Codicon.play = new Codicon('play', { fontCharacter: '\\\\eb2c' });\n Codicon.run = new Codicon('run', { fontCharacter: '\\\\eb2c' });\n Codicon.plug = new Codicon('plug', { fontCharacter: '\\\\eb2d' });\n Codicon.preserveCase = new Codicon('preserve-case', { fontCharacter: '\\\\eb2e' });\n Codicon.preview = new Codicon('preview', { fontCharacter: '\\\\eb2f' });\n Codicon.project = new Codicon('project', { fontCharacter: '\\\\eb30' });\n Codicon.pulse = new Codicon('pulse', { fontCharacter: '\\\\eb31' });\n Codicon.question = new Codicon('question', { fontCharacter: '\\\\eb32' });\n Codicon.quote = new Codicon('quote', { fontCharacter: '\\\\eb33' });\n Codicon.radioTower = new Codicon('radio-tower', { fontCharacter: '\\\\eb34' });\n Codicon.reactions = new Codicon('reactions', { fontCharacter: '\\\\eb35' });\n Codicon.references = new Codicon('references', { fontCharacter: '\\\\eb36' });\n Codicon.refresh = new Codicon('refresh', { fontCharacter: '\\\\eb37' });\n Codicon.regex = new Codicon('regex', { fontCharacter: '\\\\eb38' });\n Codicon.remoteExplorer = new Codicon('remote-explorer', { fontCharacter: '\\\\eb39' });\n Codicon.remote = new Codicon('remote', { fontCharacter: '\\\\eb3a' });\n Codicon.remove = new Codicon('remove', { fontCharacter: '\\\\eb3b' });\n Codicon.replaceAll = new Codicon('replace-all', { fontCharacter: '\\\\eb3c' });\n Codicon.replace = new Codicon('replace', { fontCharacter: '\\\\eb3d' });\n Codicon.repoClone = new Codicon('repo-clone', { fontCharacter: '\\\\eb3e' });\n Codicon.repoForcePush = new Codicon('repo-force-push', { fontCharacter: '\\\\eb3f' });\n Codicon.repoPull = new Codicon('repo-pull', { fontCharacter: '\\\\eb40' });\n Codicon.repoPush = new Codicon('repo-push', { fontCharacter: '\\\\eb41' });\n Codicon.report = new Codicon('report', { fontCharacter: '\\\\eb42' });\n Codicon.requestChanges = new Codicon('request-changes', { fontCharacter: '\\\\eb43' });\n Codicon.rocket = new Codicon('rocket', { fontCharacter: '\\\\eb44' });\n Codicon.rootFolderOpened = new Codicon('root-folder-opened', { fontCharacter: '\\\\eb45' });\n Codicon.rootFolder = new Codicon('root-folder', { fontCharacter: '\\\\eb46' });\n Codicon.rss = new Codicon('rss', { fontCharacter: '\\\\eb47' });\n Codicon.ruby = new Codicon('ruby', { fontCharacter: '\\\\eb48' });\n Codicon.saveAll = new Codicon('save-all', { fontCharacter: '\\\\eb49' });\n Codicon.saveAs = new Codicon('save-as', { fontCharacter: '\\\\eb4a' });\n Codicon.save = new Codicon('save', { fontCharacter: '\\\\eb4b' });\n Codicon.screenFull = new Codicon('screen-full', { fontCharacter: '\\\\eb4c' });\n Codicon.screenNormal = new Codicon('screen-normal', { fontCharacter: '\\\\eb4d' });\n Codicon.searchStop = new Codicon('search-stop', { fontCharacter: '\\\\eb4e' });\n Codicon.server = new Codicon('server', { fontCharacter: '\\\\eb50' });\n Codicon.settingsGear = new Codicon('settings-gear', { fontCharacter: '\\\\eb51' });\n Codicon.settings = new Codicon('settings', { fontCharacter: '\\\\eb52' });\n Codicon.shield = new Codicon('shield', { fontCharacter: '\\\\eb53' });\n Codicon.smiley = new Codicon('smiley', { fontCharacter: '\\\\eb54' });\n Codicon.sortPrecedence = new Codicon('sort-precedence', { fontCharacter: '\\\\eb55' });\n Codicon.splitHorizontal = new Codicon('split-horizontal', { fontCharacter: '\\\\eb56' });\n Codicon.splitVertical = new Codicon('split-vertical', { fontCharacter: '\\\\eb57' });\n Codicon.squirrel = new Codicon('squirrel', { fontCharacter: '\\\\eb58' });\n Codicon.starFull = new Codicon('star-full', { fontCharacter: '\\\\eb59' });\n Codicon.starHalf = new Codicon('star-half', { fontCharacter: '\\\\eb5a' });\n Codicon.symbolClass = new Codicon('symbol-class', { fontCharacter: '\\\\eb5b' });\n Codicon.symbolColor = new Codicon('symbol-color', { fontCharacter: '\\\\eb5c' });\n Codicon.symbolConstant = new Codicon('symbol-constant', { fontCharacter: '\\\\eb5d' });\n Codicon.symbolEnumMember = new Codicon('symbol-enum-member', { fontCharacter: '\\\\eb5e' });\n Codicon.symbolField = new Codicon('symbol-field', { fontCharacter: '\\\\eb5f' });\n Codicon.symbolFile = new Codicon('symbol-file', { fontCharacter: '\\\\eb60' });\n Codicon.symbolInterface = new Codicon('symbol-interface', { fontCharacter: '\\\\eb61' });\n Codicon.symbolKeyword = new Codicon('symbol-keyword', { fontCharacter: '\\\\eb62' });\n Codicon.symbolMisc = new Codicon('symbol-misc', { fontCharacter: '\\\\eb63' });\n Codicon.symbolOperator = new Codicon('symbol-operator', { fontCharacter: '\\\\eb64' });\n Codicon.symbolProperty = new Codicon('symbol-property', { fontCharacter: '\\\\eb65' });\n Codicon.wrench = new Codicon('wrench', { fontCharacter: '\\\\eb65' });\n Codicon.wrenchSubaction = new Codicon('wrench-subaction', { fontCharacter: '\\\\eb65' });\n Codicon.symbolSnippet = new Codicon('symbol-snippet', { fontCharacter: '\\\\eb66' });\n Codicon.tasklist = new Codicon('tasklist', { fontCharacter: '\\\\eb67' });\n Codicon.telescope = new Codicon('telescope', { fontCharacter: '\\\\eb68' });\n Codicon.textSize = new Codicon('text-size', { fontCharacter: '\\\\eb69' });\n Codicon.threeBars = new Codicon('three-bars', { fontCharacter: '\\\\eb6a' });\n Codicon.thumbsdown = new Codicon('thumbsdown', { fontCharacter: '\\\\eb6b' });\n Codicon.thumbsup = new Codicon('thumbsup', { fontCharacter: '\\\\eb6c' });\n Codicon.tools = new Codicon('tools', { fontCharacter: '\\\\eb6d' });\n Codicon.triangleDown = new Codicon('triangle-down', { fontCharacter: '\\\\eb6e' });\n Codicon.triangleLeft = new Codicon('triangle-left', { fontCharacter: '\\\\eb6f' });\n Codicon.triangleRight = new Codicon('triangle-right', { fontCharacter: '\\\\eb70' });\n Codicon.triangleUp = new Codicon('triangle-up', { fontCharacter: '\\\\eb71' });\n Codicon.twitter = new Codicon('twitter', { fontCharacter: '\\\\eb72' });\n Codicon.unfold = new Codicon('unfold', { fontCharacter: '\\\\eb73' });\n Codicon.unlock = new Codicon('unlock', { fontCharacter: '\\\\eb74' });\n Codicon.unmute = new Codicon('unmute', { fontCharacter: '\\\\eb75' });\n Codicon.unverified = new Codicon('unverified', { fontCharacter: '\\\\eb76' });\n Codicon.verified = new Codicon('verified', { fontCharacter: '\\\\eb77' });\n Codicon.versions = new Codicon('versions', { fontCharacter: '\\\\eb78' });\n Codicon.vmActive = new Codicon('vm-active', { fontCharacter: '\\\\eb79' });\n Codicon.vmOutline = new Codicon('vm-outline', { fontCharacter: '\\\\eb7a' });\n Codicon.vmRunning = new Codicon('vm-running', { fontCharacter: '\\\\eb7b' });\n Codicon.watch = new Codicon('watch', { fontCharacter: '\\\\eb7c' });\n Codicon.whitespace = new Codicon('whitespace', { fontCharacter: '\\\\eb7d' });\n Codicon.wholeWord = new Codicon('whole-word', { fontCharacter: '\\\\eb7e' });\n Codicon.window = new Codicon('window', { fontCharacter: '\\\\eb7f' });\n Codicon.wordWrap = new Codicon('word-wrap', { fontCharacter: '\\\\eb80' });\n Codicon.zoomIn = new Codicon('zoom-in', { fontCharacter: '\\\\eb81' });\n Codicon.zoomOut = new Codicon('zoom-out', { fontCharacter: '\\\\eb82' });\n Codicon.listFilter = new Codicon('list-filter', { fontCharacter: '\\\\eb83' });\n Codicon.listFlat = new Codicon('list-flat', { fontCharacter: '\\\\eb84' });\n Codicon.listSelection = new Codicon('list-selection', { fontCharacter: '\\\\eb85' });\n Codicon.selection = new Codicon('selection', { fontCharacter: '\\\\eb85' });\n Codicon.listTree = new Codicon('list-tree', { fontCharacter: '\\\\eb86' });\n Codicon.debugBreakpointFunctionUnverified = new Codicon('debug-breakpoint-function-unverified', { fontCharacter: '\\\\eb87' });\n Codicon.debugBreakpointFunction = new Codicon('debug-breakpoint-function', { fontCharacter: '\\\\eb88' });\n Codicon.debugBreakpointFunctionDisabled = new Codicon('debug-breakpoint-function-disabled', { fontCharacter: '\\\\eb88' });\n Codicon.debugStackframeActive = new Codicon('debug-stackframe-active', { fontCharacter: '\\\\eb89' });\n Codicon.debugStackframeDot = new Codicon('debug-stackframe-dot', { fontCharacter: '\\\\eb8a' });\n Codicon.debugStackframe = new Codicon('debug-stackframe', { fontCharacter: '\\\\eb8b' });\n Codicon.debugStackframeFocused = new Codicon('debug-stackframe-focused', { fontCharacter: '\\\\eb8b' });\n Codicon.debugBreakpointUnsupported = new Codicon('debug-breakpoint-unsupported', { fontCharacter: '\\\\eb8c' });\n Codicon.symbolString = new Codicon('symbol-string', { fontCharacter: '\\\\eb8d' });\n Codicon.debugReverseContinue = new Codicon('debug-reverse-continue', { fontCharacter: '\\\\eb8e' });\n Codicon.debugStepBack = new Codicon('debug-step-back', { fontCharacter: '\\\\eb8f' });\n Codicon.debugRestartFrame = new Codicon('debug-restart-frame', { fontCharacter: '\\\\eb90' });\n Codicon.callIncoming = new Codicon('call-incoming', { fontCharacter: '\\\\eb92' });\n Codicon.callOutgoing = new Codicon('call-outgoing', { fontCharacter: '\\\\eb93' });\n Codicon.menu = new Codicon('menu', { fontCharacter: '\\\\eb94' });\n Codicon.expandAll = new Codicon('expand-all', { fontCharacter: '\\\\eb95' });\n Codicon.feedback = new Codicon('feedback', { fontCharacter: '\\\\eb96' });\n Codicon.groupByRefType = new Codicon('group-by-ref-type', { fontCharacter: '\\\\eb97' });\n Codicon.ungroupByRefType = new Codicon('ungroup-by-ref-type', { fontCharacter: '\\\\eb98' });\n Codicon.account = new Codicon('account', { fontCharacter: '\\\\eb99' });\n Codicon.bellDot = new Codicon('bell-dot', { fontCharacter: '\\\\eb9a' });\n Codicon.debugConsole = new Codicon('debug-console', { fontCharacter: '\\\\eb9b' });\n Codicon.library = new Codicon('library', { fontCharacter: '\\\\eb9c' });\n Codicon.output = new Codicon('output', { fontCharacter: '\\\\eb9d' });\n Codicon.runAll = new Codicon('run-all', { fontCharacter: '\\\\eb9e' });\n Codicon.syncIgnored = new Codicon('sync-ignored', { fontCharacter: '\\\\eb9f' });\n Codicon.pinned = new Codicon('pinned', { fontCharacter: '\\\\eba0' });\n Codicon.githubInverted = new Codicon('github-inverted', { fontCharacter: '\\\\eba1' });\n Codicon.debugAlt = new Codicon('debug-alt', { fontCharacter: '\\\\eb91' });\n Codicon.serverProcess = new Codicon('server-process', { fontCharacter: '\\\\eba2' });\n Codicon.serverEnvironment = new Codicon('server-environment', { fontCharacter: '\\\\eba3' });\n Codicon.pass = new Codicon('pass', { fontCharacter: '\\\\eba4' });\n Codicon.stopCircle = new Codicon('stop-circle', { fontCharacter: '\\\\eba5' });\n Codicon.playCircle = new Codicon('play-circle', { fontCharacter: '\\\\eba6' });\n Codicon.record = new Codicon('record', { fontCharacter: '\\\\eba7' });\n Codicon.debugAltSmall = new Codicon('debug-alt-small', { fontCharacter: '\\\\eba8' });\n Codicon.vmConnect = new Codicon('vm-connect', { fontCharacter: '\\\\eba9' });\n Codicon.cloud = new Codicon('cloud', { fontCharacter: '\\\\ebaa' });\n Codicon.merge = new Codicon('merge', { fontCharacter: '\\\\ebab' });\n Codicon.exportIcon = new Codicon('export', { fontCharacter: '\\\\ebac' });\n Codicon.graphLeft = new Codicon('graph-left', { fontCharacter: '\\\\ebad' });\n Codicon.magnet = new Codicon('magnet', { fontCharacter: '\\\\ebae' });\n Codicon.notebook = new Codicon('notebook', { fontCharacter: '\\\\ebaf' });\n Codicon.redo = new Codicon('redo', { fontCharacter: '\\\\ebb0' });\n Codicon.checkAll = new Codicon('check-all', { fontCharacter: '\\\\ebb1' });\n Codicon.pinnedDirty = new Codicon('pinned-dirty', { fontCharacter: '\\\\ebb2' });\n Codicon.passFilled = new Codicon('pass-filled', { fontCharacter: '\\\\ebb3' });\n Codicon.circleLargeFilled = new Codicon('circle-large-filled', { fontCharacter: '\\\\ebb4' });\n Codicon.circleLargeOutline = new Codicon('circle-large-outline', { fontCharacter: '\\\\ebb5' });\n Codicon.combine = new Codicon('combine', { fontCharacter: '\\\\ebb6' });\n Codicon.gather = new Codicon('gather', { fontCharacter: '\\\\ebb6' });\n Codicon.table = new Codicon('table', { fontCharacter: '\\\\ebb7' });\n Codicon.variableGroup = new Codicon('variable-group', { fontCharacter: '\\\\ebb8' });\n Codicon.typeHierarchy = new Codicon('type-hierarchy', { fontCharacter: '\\\\ebb9' });\n Codicon.typeHierarchySub = new Codicon('type-hierarchy-sub', { fontCharacter: '\\\\ebba' });\n Codicon.typeHierarchySuper = new Codicon('type-hierarchy-super', { fontCharacter: '\\\\ebbb' });\n Codicon.gitPullRequestCreate = new Codicon('git-pull-request-create', { fontCharacter: '\\\\ebbc' });\n Codicon.runAbove = new Codicon('run-above', { fontCharacter: '\\\\ebbd' });\n Codicon.runBelow = new Codicon('run-below', { fontCharacter: '\\\\ebbe' });\n Codicon.notebookTemplate = new Codicon('notebook-template', { fontCharacter: '\\\\ebbf' });\n Codicon.debugRerun = new Codicon('debug-rerun', { fontCharacter: '\\\\ebc0' });\n Codicon.workspaceTrusted = new Codicon('workspace-trusted', { fontCharacter: '\\\\ebc1' });\n Codicon.workspaceUntrusted = new Codicon('workspace-untrusted', { fontCharacter: '\\\\ebc2' });\n Codicon.workspaceUnspecified = new Codicon('workspace-unspecified', { fontCharacter: '\\\\ebc3' });\n Codicon.terminalCmd = new Codicon('terminal-cmd', { fontCharacter: '\\\\ebc4' });\n Codicon.terminalDebian = new Codicon('terminal-debian', { fontCharacter: '\\\\ebc5' });\n Codicon.terminalLinux = new Codicon('terminal-linux', { fontCharacter: '\\\\ebc6' });\n Codicon.terminalPowershell = new Codicon('terminal-powershell', { fontCharacter: '\\\\ebc7' });\n Codicon.terminalTmux = new Codicon('terminal-tmux', { fontCharacter: '\\\\ebc8' });\n Codicon.terminalUbuntu = new Codicon('terminal-ubuntu', { fontCharacter: '\\\\ebc9' });\n Codicon.terminalBash = new Codicon('terminal-bash', { fontCharacter: '\\\\ebca' });\n Codicon.arrowSwap = new Codicon('arrow-swap', { fontCharacter: '\\\\ebcb' });\n Codicon.copy = new Codicon('copy', { fontCharacter: '\\\\ebcc' });\n Codicon.personAdd = new Codicon('person-add', { fontCharacter: '\\\\ebcd' });\n Codicon.filterFilled = new Codicon('filter-filled', { fontCharacter: '\\\\ebce' });\n Codicon.wand = new Codicon('wand', { fontCharacter: '\\\\ebcf' });\n Codicon.debugLineByLine = new Codicon('debug-line-by-line', { fontCharacter: '\\\\ebd0' });\n Codicon.inspect = new Codicon('inspect', { fontCharacter: '\\\\ebd1' });\n Codicon.layers = new Codicon('layers', { fontCharacter: '\\\\ebd2' });\n Codicon.layersDot = new Codicon('layers-dot', { fontCharacter: '\\\\ebd3' });\n Codicon.layersActive = new Codicon('layers-active', { fontCharacter: '\\\\ebd4' });\n Codicon.compass = new Codicon('compass', { fontCharacter: '\\\\ebd5' });\n Codicon.compassDot = new Codicon('compass-dot', { fontCharacter: '\\\\ebd6' });\n Codicon.compassActive = new Codicon('compass-active', { fontCharacter: '\\\\ebd7' });\n Codicon.azure = new Codicon('azure', { fontCharacter: '\\\\ebd8' });\n Codicon.issueDraft = new Codicon('issue-draft', { fontCharacter: '\\\\ebd9' });\n Codicon.gitPullRequestClosed = new Codicon('git-pull-request-closed', { fontCharacter: '\\\\ebda' });\n Codicon.gitPullRequestDraft = new Codicon('git-pull-request-draft', { fontCharacter: '\\\\ebdb' });\n Codicon.debugAll = new Codicon('debug-all', { fontCharacter: '\\\\ebdc' });\n Codicon.debugCoverage = new Codicon('debug-coverage', { fontCharacter: '\\\\ebdd' });\n Codicon.runErrors = new Codicon('run-errors', { fontCharacter: '\\\\ebde' });\n Codicon.folderLibrary = new Codicon('folder-library', { fontCharacter: '\\\\ebdf' });\n Codicon.debugContinueSmall = new Codicon('debug-continue-small', { fontCharacter: '\\\\ebe0' });\n Codicon.beakerStop = new Codicon('beaker-stop', { fontCharacter: '\\\\ebe1' });\n Codicon.graphLine = new Codicon('graph-line', { fontCharacter: '\\\\ebe2' });\n Codicon.graphScatter = new Codicon('graph-scatter', { fontCharacter: '\\\\ebe3' });\n Codicon.pieChart = new Codicon('pie-chart', { fontCharacter: '\\\\ebe4' });\n Codicon.bracket = new Codicon('bracket', Codicon.json.definition);\n Codicon.bracketDot = new Codicon('bracket-dot', { fontCharacter: '\\\\ebe5' });\n Codicon.bracketError = new Codicon('bracket-error', { fontCharacter: '\\\\ebe6' });\n Codicon.lockSmall = new Codicon('lock-small', { fontCharacter: '\\\\ebe7' });\n Codicon.azureDevops = new Codicon('azure-devops', { fontCharacter: '\\\\ebe8' });\n Codicon.verifiedFilled = new Codicon('verified-filled', { fontCharacter: '\\\\ebe9' });\n})(Codicon || (Codicon = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ICodeEditorService = createDecorator('codeEditorService');\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const IModeService = createDecorator('modeService');\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as DOM from '../../dom.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { ActionViewItem, BaseActionViewItem } from './actionViewItems.js';\nimport { ActionRunner } from '../../../common/actions.js';\nimport { Emitter } from '../../../common/event.js';\nimport { Disposable, dispose } from '../../../common/lifecycle.js';\nimport * as types from '../../../common/types.js';\nimport './actionbar.css';\nexport class ActionBar extends Disposable {\n constructor(container, options = {}) {\n var _a, _b, _c, _d, _e, _f;\n super();\n // Trigger Key Tracking\n this.triggerKeyDown = false;\n this.focusable = true;\n this._onDidBlur = this._register(new Emitter());\n this.onDidBlur = this._onDidBlur.event;\n this._onDidCancel = this._register(new Emitter({ onFirstListenerAdd: () => this.cancelHasListener = true }));\n this.onDidCancel = this._onDidCancel.event;\n this.cancelHasListener = false;\n this._onDidRun = this._register(new Emitter());\n this.onDidRun = this._onDidRun.event;\n this._onBeforeRun = this._register(new Emitter());\n this.onBeforeRun = this._onBeforeRun.event;\n this.options = options;\n this._context = (_a = options.context) !== null && _a !== void 0 ? _a : null;\n this._orientation = (_b = this.options.orientation) !== null && _b !== void 0 ? _b : 0 /* HORIZONTAL */;\n this._triggerKeys = {\n keyDown: (_d = (_c = this.options.triggerKeys) === null || _c === void 0 ? void 0 : _c.keyDown) !== null && _d !== void 0 ? _d : false,\n keys: (_f = (_e = this.options.triggerKeys) === null || _e === void 0 ? void 0 : _e.keys) !== null && _f !== void 0 ? _f : [3 /* Enter */, 10 /* Space */]\n };\n if (this.options.actionRunner) {\n this._actionRunner = this.options.actionRunner;\n }\n else {\n this._actionRunner = new ActionRunner();\n this._register(this._actionRunner);\n }\n this._register(this._actionRunner.onDidRun(e => this._onDidRun.fire(e)));\n this._register(this._actionRunner.onBeforeRun(e => this._onBeforeRun.fire(e)));\n this._actionIds = [];\n this.viewItems = [];\n this.focusedItem = undefined;\n this.domNode = document.createElement('div');\n this.domNode.className = 'monaco-action-bar';\n if (options.animated !== false) {\n this.domNode.classList.add('animated');\n }\n let previousKeys;\n let nextKeys;\n switch (this._orientation) {\n case 0 /* HORIZONTAL */:\n previousKeys = [15 /* LeftArrow */];\n nextKeys = [17 /* RightArrow */];\n break;\n case 1 /* VERTICAL */:\n previousKeys = [16 /* UpArrow */];\n nextKeys = [18 /* DownArrow */];\n this.domNode.className += ' vertical';\n break;\n }\n this._register(DOM.addDisposableListener(this.domNode, DOM.EventType.KEY_DOWN, e => {\n const event = new StandardKeyboardEvent(e);\n let eventHandled = true;\n const focusedItem = typeof this.focusedItem === 'number' ? this.viewItems[this.focusedItem] : undefined;\n if (previousKeys && (event.equals(previousKeys[0]) || event.equals(previousKeys[1]))) {\n eventHandled = this.focusPrevious();\n }\n else if (nextKeys && (event.equals(nextKeys[0]) || event.equals(nextKeys[1]))) {\n eventHandled = this.focusNext();\n }\n else if (event.equals(9 /* Escape */) && this.cancelHasListener) {\n this._onDidCancel.fire();\n }\n else if (event.equals(14 /* Home */)) {\n eventHandled = this.focusFirst();\n }\n else if (event.equals(13 /* End */)) {\n eventHandled = this.focusLast();\n }\n else if (event.equals(2 /* Tab */) && focusedItem instanceof BaseActionViewItem && focusedItem.trapsArrowNavigation) {\n eventHandled = this.focusNext();\n }\n else if (this.isTriggerKeyEvent(event)) {\n // Staying out of the else branch even if not triggered\n if (this._triggerKeys.keyDown) {\n this.doTrigger(event);\n }\n else {\n this.triggerKeyDown = true;\n }\n }\n else {\n eventHandled = false;\n }\n if (eventHandled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }));\n this._register(DOM.addDisposableListener(this.domNode, DOM.EventType.KEY_UP, e => {\n const event = new StandardKeyboardEvent(e);\n // Run action on Enter/Space\n if (this.isTriggerKeyEvent(event)) {\n if (!this._triggerKeys.keyDown && this.triggerKeyDown) {\n this.triggerKeyDown = false;\n this.doTrigger(event);\n }\n event.preventDefault();\n event.stopPropagation();\n }\n // Recompute focused item\n else if (event.equals(2 /* Tab */) || event.equals(1024 /* Shift */ | 2 /* Tab */)) {\n this.updateFocusedItem();\n }\n }));\n this.focusTracker = this._register(DOM.trackFocus(this.domNode));\n this._register(this.focusTracker.onDidBlur(() => {\n if (DOM.getActiveElement() === this.domNode || !DOM.isAncestor(DOM.getActiveElement(), this.domNode)) {\n this._onDidBlur.fire();\n this.focusedItem = undefined;\n this.triggerKeyDown = false;\n }\n }));\n this._register(this.focusTracker.onDidFocus(() => this.updateFocusedItem()));\n this.actionsList = document.createElement('ul');\n this.actionsList.className = 'actions-container';\n this.actionsList.setAttribute('role', 'toolbar');\n if (this.options.ariaLabel) {\n this.actionsList.setAttribute('aria-label', this.options.ariaLabel);\n }\n this.domNode.appendChild(this.actionsList);\n container.appendChild(this.domNode);\n }\n isTriggerKeyEvent(event) {\n let ret = false;\n this._triggerKeys.keys.forEach(keyCode => {\n ret = ret || event.equals(keyCode);\n });\n return ret;\n }\n updateFocusedItem() {\n for (let i = 0; i < this.actionsList.children.length; i++) {\n const elem = this.actionsList.children[i];\n if (DOM.isAncestor(DOM.getActiveElement(), elem)) {\n this.focusedItem = i;\n break;\n }\n }\n }\n get context() {\n return this._context;\n }\n set context(context) {\n this._context = context;\n this.viewItems.forEach(i => i.setActionContext(context));\n }\n get actionRunner() {\n return this._actionRunner;\n }\n set actionRunner(actionRunner) {\n if (actionRunner) {\n this._actionRunner = actionRunner;\n this.viewItems.forEach(item => item.actionRunner = actionRunner);\n }\n }\n getContainer() {\n return this.domNode;\n }\n push(arg, options = {}) {\n const actions = Array.isArray(arg) ? arg : [arg];\n let index = types.isNumber(options.index) ? options.index : null;\n actions.forEach((action) => {\n const actionViewItemElement = document.createElement('li');\n actionViewItemElement.className = 'action-item';\n actionViewItemElement.setAttribute('role', 'presentation');\n // Prevent native context menu on actions\n if (!this.options.allowContextMenu) {\n this._register(DOM.addDisposableListener(actionViewItemElement, DOM.EventType.CONTEXT_MENU, (e) => {\n DOM.EventHelper.stop(e, true);\n }));\n }\n let item;\n if (this.options.actionViewItemProvider) {\n item = this.options.actionViewItemProvider(action);\n }\n if (!item) {\n item = new ActionViewItem(this.context, action, options);\n }\n item.actionRunner = this._actionRunner;\n item.setActionContext(this.context);\n item.render(actionViewItemElement);\n if (this.focusable && item instanceof BaseActionViewItem && this.viewItems.length === 0) {\n // We need to allow for the first enabled item to be focused on using tab navigation #106441\n item.setFocusable(true);\n }\n if (index === null || index < 0 || index >= this.actionsList.children.length) {\n this.actionsList.appendChild(actionViewItemElement);\n this.viewItems.push(item);\n this._actionIds.push(action.id);\n }\n else {\n this.actionsList.insertBefore(actionViewItemElement, this.actionsList.children[index]);\n this.viewItems.splice(index, 0, item);\n this._actionIds.splice(index, 0, action.id);\n index++;\n }\n });\n if (typeof this.focusedItem === 'number') {\n // After a clear actions might be re-added to simply toggle some actions. We should preserve focus #97128\n this.focus(this.focusedItem);\n }\n }\n clear() {\n dispose(this.viewItems);\n this.viewItems = [];\n this._actionIds = [];\n DOM.clearNode(this.actionsList);\n }\n length() {\n return this.viewItems.length;\n }\n focus(arg) {\n let selectFirst = false;\n let index = undefined;\n if (arg === undefined) {\n selectFirst = true;\n }\n else if (typeof arg === 'number') {\n index = arg;\n }\n else if (typeof arg === 'boolean') {\n selectFirst = arg;\n }\n if (selectFirst && typeof this.focusedItem === 'undefined') {\n const firstEnabled = this.viewItems.findIndex(item => item.isEnabled());\n // Focus the first enabled item\n this.focusedItem = firstEnabled === -1 ? undefined : firstEnabled;\n this.updateFocus();\n }\n else {\n if (index !== undefined) {\n this.focusedItem = index;\n }\n this.updateFocus();\n }\n }\n focusFirst() {\n this.focusedItem = this.length() > 1 ? 1 : 0;\n return this.focusPrevious();\n }\n focusLast() {\n this.focusedItem = this.length() < 2 ? 0 : this.length() - 2;\n return this.focusNext();\n }\n focusNext() {\n if (typeof this.focusedItem === 'undefined') {\n this.focusedItem = this.viewItems.length - 1;\n }\n else if (this.viewItems.length <= 1) {\n return false;\n }\n const startIndex = this.focusedItem;\n let item;\n do {\n if (this.options.preventLoopNavigation && this.focusedItem + 1 >= this.viewItems.length) {\n this.focusedItem = startIndex;\n return false;\n }\n this.focusedItem = (this.focusedItem + 1) % this.viewItems.length;\n item = this.viewItems[this.focusedItem];\n } while (this.focusedItem !== startIndex && this.options.focusOnlyEnabledItems && !item.isEnabled());\n this.updateFocus();\n return true;\n }\n focusPrevious() {\n if (typeof this.focusedItem === 'undefined') {\n this.focusedItem = 0;\n }\n else if (this.viewItems.length <= 1) {\n return false;\n }\n const startIndex = this.focusedItem;\n let item;\n do {\n this.focusedItem = this.focusedItem - 1;\n if (this.focusedItem < 0) {\n if (this.options.preventLoopNavigation) {\n this.focusedItem = startIndex;\n return false;\n }\n this.focusedItem = this.viewItems.length - 1;\n }\n item = this.viewItems[this.focusedItem];\n } while (this.focusedItem !== startIndex && this.options.focusOnlyEnabledItems && !item.isEnabled());\n this.updateFocus(true);\n return true;\n }\n updateFocus(fromRight, preventScroll) {\n if (typeof this.focusedItem === 'undefined') {\n this.actionsList.focus({ preventScroll });\n }\n for (let i = 0; i < this.viewItems.length; i++) {\n const item = this.viewItems[i];\n const actionViewItem = item;\n if (i === this.focusedItem) {\n let focusItem = true;\n if (!types.isFunction(actionViewItem.focus)) {\n focusItem = false;\n }\n if (this.options.focusOnlyEnabledItems && types.isFunction(item.isEnabled) && !item.isEnabled()) {\n focusItem = false;\n }\n if (focusItem) {\n actionViewItem.focus(fromRight);\n }\n else {\n this.actionsList.focus({ preventScroll });\n }\n }\n else {\n if (types.isFunction(actionViewItem.blur)) {\n actionViewItem.blur();\n }\n }\n }\n }\n doTrigger(event) {\n if (typeof this.focusedItem === 'undefined') {\n return; //nothing to focus\n }\n // trigger action\n const actionViewItem = this.viewItems[this.focusedItem];\n if (actionViewItem instanceof BaseActionViewItem) {\n const context = (actionViewItem._context === null || actionViewItem._context === undefined) ? event : actionViewItem._context;\n this.run(actionViewItem._action, context);\n }\n }\n run(action, context) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._actionRunner.run(action, context);\n });\n }\n dispose() {\n dispose(this.viewItems);\n this.viewItems = [];\n this._actionIds = [];\n this.getContainer().remove();\n super.dispose();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { IframeUtils } from './iframe.js';\nimport * as platform from '../common/platform.js';\nexport class StandardMouseEvent {\n constructor(e) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n this.target = e.target;\n this.detail = e.detail || 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n }\n else {\n // Probably hit by MSGestureEvent\n this.posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n this.posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n }\n // Find the position of the iframe this code is executing in relative to the iframe where the event was captured.\n let iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(self, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n preventDefault() {\n this.browserEvent.preventDefault();\n }\n stopPropagation() {\n this.browserEvent.stopPropagation();\n }\n}\nexport class StandardWheelEvent {\n constructor(e, deltaX = 0, deltaY = 0) {\n this.browserEvent = e || null;\n this.target = e ? (e.target || e.targetNode || e.srcElement) : null;\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n if (e) {\n // Old (deprecated) wheel events\n let e1 = e;\n let e2 = e;\n // vertical delta scroll\n if (typeof e1.wheelDeltaY !== 'undefined') {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n }\n else if (e.type === 'wheel') {\n // Modern wheel event\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\n const ev = e;\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n // the deltas are expressed in lines\n if (browser.isFirefox && !platform.isMacintosh) {\n this.deltaY = -e.deltaY / 3;\n }\n else {\n this.deltaY = -e.deltaY;\n }\n }\n else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n // horizontal delta scroll\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (browser.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n }\n else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n }\n else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n }\n else if (e.type === 'wheel') {\n // Modern wheel event\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\n const ev = e;\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n // the deltas are expressed in lines\n if (browser.isFirefox && !platform.isMacintosh) {\n this.deltaX = -e.deltaX / 3;\n }\n else {\n this.deltaX = -e.deltaX;\n }\n }\n else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n // Assume a vertical scroll if nothing else worked\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n preventDefault() {\n if (this.browserEvent) {\n this.browserEvent.preventDefault();\n }\n }\n stopPropagation() {\n if (this.browserEvent) {\n this.browserEvent.stopPropagation();\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const ITelemetryService = createDecorator('telemetryService');\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CancellationTokenSource } from './cancellation.js';\nimport { canceled } from './errors.js';\nimport { toDisposable } from './lifecycle.js';\nexport function isThenable(obj) {\n return !!obj && typeof obj.then === 'function';\n}\nexport function createCancelablePromise(callback) {\n const source = new CancellationTokenSource();\n const thenable = callback(source.token);\n const promise = new Promise((resolve, reject) => {\n const subscription = source.token.onCancellationRequested(() => {\n subscription.dispose();\n source.dispose();\n reject(canceled());\n });\n Promise.resolve(thenable).then(value => {\n subscription.dispose();\n source.dispose();\n resolve(value);\n }, err => {\n subscription.dispose();\n source.dispose();\n reject(err);\n });\n });\n return new class {\n cancel() {\n source.cancel();\n }\n then(resolve, reject) {\n return promise.then(resolve, reject);\n }\n catch(reject) {\n return this.then(undefined, reject);\n }\n finally(onfinally) {\n return promise.finally(onfinally);\n }\n };\n}\nexport function raceCancellation(promise, token, defaultValue) {\n return Promise.race([promise, new Promise(resolve => token.onCancellationRequested(() => resolve(defaultValue)))]);\n}\n/**\n * A helper to prevent accumulation of sequential async tasks.\n *\n * Imagine a mail man with the sole task of delivering letters. As soon as\n * a letter submitted for delivery, he drives to the destination, delivers it\n * and returns to his base. Imagine that during the trip, N more letters were submitted.\n * When the mail man returns, he picks those N letters and delivers them all in a\n * single trip. Even though N+1 submissions occurred, only 2 deliveries were made.\n *\n * The throttler implements this via the queue() method, by providing it a task\n * factory. Following the example:\n *\n * \t\tconst throttler = new Throttler();\n * \t\tconst letters = [];\n *\n * \t\tfunction deliver() {\n * \t\t\tconst lettersToDeliver = letters;\n * \t\t\tletters = [];\n * \t\t\treturn makeTheTrip(lettersToDeliver);\n * \t\t}\n *\n * \t\tfunction onLetterReceived(l) {\n * \t\t\tletters.push(l);\n * \t\t\tthrottler.queue(deliver);\n * \t\t}\n */\nexport class Throttler {\n constructor() {\n this.activePromise = null;\n this.queuedPromise = null;\n this.queuedPromiseFactory = null;\n }\n queue(promiseFactory) {\n if (this.activePromise) {\n this.queuedPromiseFactory = promiseFactory;\n if (!this.queuedPromise) {\n const onComplete = () => {\n this.queuedPromise = null;\n const result = this.queue(this.queuedPromiseFactory);\n this.queuedPromiseFactory = null;\n return result;\n };\n this.queuedPromise = new Promise(resolve => {\n this.activePromise.then(onComplete, onComplete).then(resolve);\n });\n }\n return new Promise((resolve, reject) => {\n this.queuedPromise.then(resolve, reject);\n });\n }\n this.activePromise = promiseFactory();\n return new Promise((resolve, reject) => {\n this.activePromise.then((result) => {\n this.activePromise = null;\n resolve(result);\n }, (err) => {\n this.activePromise = null;\n reject(err);\n });\n });\n }\n}\n/**\n * A helper to delay (debounce) execution of a task that is being requested often.\n *\n * Following the throttler, now imagine the mail man wants to optimize the number of\n * trips proactively. The trip itself can be long, so he decides not to make the trip\n * as soon as a letter is submitted. Instead he waits a while, in case more\n * letters are submitted. After said waiting period, if no letters were submitted, he\n * decides to make the trip. Imagine that N more letters were submitted after the first\n * one, all within a short period of time between each other. Even though N+1\n * submissions occurred, only 1 delivery was made.\n *\n * The delayer offers this behavior via the trigger() method, into which both the task\n * to be executed and the waiting period (delay) must be passed in as arguments. Following\n * the example:\n *\n * \t\tconst delayer = new Delayer(WAITING_PERIOD);\n * \t\tconst letters = [];\n *\n * \t\tfunction letterReceived(l) {\n * \t\t\tletters.push(l);\n * \t\t\tdelayer.trigger(() => { return makeTheTrip(); });\n * \t\t}\n */\nexport class Delayer {\n constructor(defaultDelay) {\n this.defaultDelay = defaultDelay;\n this.timeout = null;\n this.completionPromise = null;\n this.doResolve = null;\n this.doReject = null;\n this.task = null;\n }\n trigger(task, delay = this.defaultDelay) {\n this.task = task;\n this.cancelTimeout();\n if (!this.completionPromise) {\n this.completionPromise = new Promise((resolve, reject) => {\n this.doResolve = resolve;\n this.doReject = reject;\n }).then(() => {\n this.completionPromise = null;\n this.doResolve = null;\n if (this.task) {\n const task = this.task;\n this.task = null;\n return task();\n }\n return undefined;\n });\n }\n this.timeout = setTimeout(() => {\n this.timeout = null;\n if (this.doResolve) {\n this.doResolve(null);\n }\n }, delay);\n return this.completionPromise;\n }\n isTriggered() {\n return this.timeout !== null;\n }\n cancel() {\n this.cancelTimeout();\n if (this.completionPromise) {\n if (this.doReject) {\n this.doReject(canceled());\n }\n this.completionPromise = null;\n }\n }\n cancelTimeout() {\n if (this.timeout !== null) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n }\n dispose() {\n this.cancel();\n }\n}\n/**\n * A helper to delay execution of a task that is being requested often, while\n * preventing accumulation of consecutive executions, while the task runs.\n *\n * The mail man is clever and waits for a certain amount of time, before going\n * out to deliver letters. While the mail man is going out, more letters arrive\n * and can only be delivered once he is back. Once he is back the mail man will\n * do one more trip to deliver the letters that have accumulated while he was out.\n */\nexport class ThrottledDelayer {\n constructor(defaultDelay) {\n this.delayer = new Delayer(defaultDelay);\n this.throttler = new Throttler();\n }\n trigger(promiseFactory, delay) {\n return this.delayer.trigger(() => this.throttler.queue(promiseFactory), delay);\n }\n dispose() {\n this.delayer.dispose();\n }\n}\nexport function timeout(millis, token) {\n if (!token) {\n return createCancelablePromise(token => timeout(millis, token));\n }\n return new Promise((resolve, reject) => {\n const handle = setTimeout(() => {\n disposable.dispose();\n resolve();\n }, millis);\n const disposable = token.onCancellationRequested(() => {\n clearTimeout(handle);\n disposable.dispose();\n reject(canceled());\n });\n });\n}\nexport function disposableTimeout(handler, timeout = 0) {\n const timer = setTimeout(handler, timeout);\n return toDisposable(() => clearTimeout(timer));\n}\nexport function first(promiseFactories, shouldStop = t => !!t, defaultValue = null) {\n let index = 0;\n const len = promiseFactories.length;\n const loop = () => {\n if (index >= len) {\n return Promise.resolve(defaultValue);\n }\n const factory = promiseFactories[index++];\n const promise = Promise.resolve(factory());\n return promise.then(result => {\n if (shouldStop(result)) {\n return Promise.resolve(result);\n }\n return loop();\n });\n };\n return loop();\n}\nexport class TimeoutTimer {\n constructor(runner, timeout) {\n this._token = -1;\n if (typeof runner === 'function' && typeof timeout === 'number') {\n this.setIfNotSet(runner, timeout);\n }\n }\n dispose() {\n this.cancel();\n }\n cancel() {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n cancelAndSet(runner, timeout) {\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n setIfNotSet(runner, timeout) {\n if (this._token !== -1) {\n // timer is already set\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\nexport class IntervalTimer {\n constructor() {\n this._token = -1;\n }\n dispose() {\n this.cancel();\n }\n cancel() {\n if (this._token !== -1) {\n clearInterval(this._token);\n this._token = -1;\n }\n }\n cancelAndSet(runner, interval) {\n this.cancel();\n this._token = setInterval(() => {\n runner();\n }, interval);\n }\n}\nexport class RunOnceScheduler {\n constructor(runner, delay) {\n this.timeoutToken = -1;\n this.runner = runner;\n this.timeout = delay;\n this.timeoutHandler = this.onTimeout.bind(this);\n }\n /**\n * Dispose RunOnceScheduler\n */\n dispose() {\n this.cancel();\n this.runner = null;\n }\n /**\n * Cancel current scheduled runner (if any).\n */\n cancel() {\n if (this.isScheduled()) {\n clearTimeout(this.timeoutToken);\n this.timeoutToken = -1;\n }\n }\n /**\n * Cancel previous runner (if any) & schedule a new runner.\n */\n schedule(delay = this.timeout) {\n this.cancel();\n this.timeoutToken = setTimeout(this.timeoutHandler, delay);\n }\n get delay() {\n return this.timeout;\n }\n set delay(value) {\n this.timeout = value;\n }\n /**\n * Returns true if scheduled.\n */\n isScheduled() {\n return this.timeoutToken !== -1;\n }\n onTimeout() {\n this.timeoutToken = -1;\n if (this.runner) {\n this.doRun();\n }\n }\n doRun() {\n if (this.runner) {\n this.runner();\n }\n }\n}\n/**\n * Execute the callback the next time the browser is idle\n */\nexport let runWhenIdle;\n(function () {\n if (typeof requestIdleCallback !== 'function' || typeof cancelIdleCallback !== 'function') {\n runWhenIdle = (runner) => {\n const handle = setTimeout(() => {\n const end = Date.now() + 15; // one frame at 64fps\n runner(Object.freeze({\n didTimeout: true,\n timeRemaining() {\n return Math.max(0, end - Date.now());\n }\n }));\n });\n let disposed = false;\n return {\n dispose() {\n if (disposed) {\n return;\n }\n disposed = true;\n clearTimeout(handle);\n }\n };\n };\n }\n else {\n runWhenIdle = (runner, timeout) => {\n const handle = requestIdleCallback(runner, typeof timeout === 'number' ? { timeout } : undefined);\n let disposed = false;\n return {\n dispose() {\n if (disposed) {\n return;\n }\n disposed = true;\n cancelIdleCallback(handle);\n }\n };\n };\n }\n})();\n/**\n * An implementation of the \"idle-until-urgent\"-strategy as introduced\n * here: https://philipwalton.com/articles/idle-until-urgent/\n */\nexport class IdleValue {\n constructor(executor) {\n this._didRun = false;\n this._executor = () => {\n try {\n this._value = executor();\n }\n catch (err) {\n this._error = err;\n }\n finally {\n this._didRun = true;\n }\n };\n this._handle = runWhenIdle(() => this._executor());\n }\n dispose() {\n this._handle.dispose();\n }\n get value() {\n if (!this._didRun) {\n this._handle.dispose();\n this._executor();\n }\n if (this._error) {\n throw this._error;\n }\n return this._value;\n }\n get isInitialized() {\n return this._didRun;\n }\n}\n//#endregion\n//#region Promises\nexport var Promises;\n(function (Promises) {\n /**\n * A drop-in replacement for `Promise.all` with the only difference\n * that the method awaits every promise to either fulfill or reject.\n *\n * Similar to `Promise.all`, only the first error will be returned\n * if any.\n */\n function settled(promises) {\n return __awaiter(this, void 0, void 0, function* () {\n let firstError = undefined;\n const result = yield Promise.all(promises.map(promise => promise.then(value => value, error => {\n if (!firstError) {\n firstError = error;\n }\n return undefined; // do not rethrow so that other promises can settle\n })));\n if (typeof firstError !== 'undefined') {\n throw firstError;\n }\n return result; // cast is needed and protected by the `throw` above\n });\n }\n Promises.settled = settled;\n /**\n * A helper to create a new `Promise` with a body that is a promise\n * itself. By default, an error that raises from the async body will\n * end up as a unhandled rejection, so this utility properly awaits the\n * body and rejects the promise as a normal promise does without async\n * body.\n *\n * This method should only be used in rare cases where otherwise `async`\n * cannot be used (e.g. when callbacks are involved that require this).\n */\n function withAsyncBody(bodyFn) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n try {\n yield bodyFn(resolve, reject);\n }\n catch (error) {\n reject(error);\n }\n }));\n }\n Promises.withAsyncBody = withAsyncBody;\n})(Promises || (Promises = {}));\n//#endregion\n","export function memoize(_target, key, descriptor) {\n let fnKey = null;\n let fn = null;\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n if (fn.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n }\n else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n if (!fn) {\n throw new Error('not supported');\n }\n const memoizeKey = `$memoize$${key}`;\n descriptor[fnKey] = function (...args) {\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: fn.apply(this, args)\n });\n }\n return this[memoizeKey];\n };\n}\n","import { Mimes } from '../common/mime.js';\n// Common data transfers\nexport const DataTransfers = {\n /**\n * Application specific resource transfer type\n */\n RESOURCES: 'ResourceURLs',\n /**\n * Browser specific transfer type to download\n */\n DOWNLOAD_URL: 'DownloadURL',\n /**\n * Browser specific transfer type for files\n */\n FILES: 'Files',\n /**\n * Typically transfer type for copy/paste transfers.\n */\n TEXT: Mimes.text,\n /**\n * Application specific terminal transfer type.\n */\n TERMINALS: 'Terminals'\n};\nexport class DragAndDropData {\n constructor(data) {\n this.data = data;\n }\n update() {\n // noop\n }\n getData() {\n return this.data;\n }\n}\nexport const StaticDND = {\n CurrentDragAndDropData: undefined\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class FastDomNode {\n constructor(domNode) {\n this.domNode = domNode;\n this._maxWidth = -1;\n this._width = -1;\n this._height = -1;\n this._top = -1;\n this._left = -1;\n this._bottom = -1;\n this._right = -1;\n this._fontFamily = '';\n this._fontWeight = '';\n this._fontSize = -1;\n this._fontFeatureSettings = '';\n this._lineHeight = -1;\n this._letterSpacing = -100;\n this._className = '';\n this._display = '';\n this._position = '';\n this._visibility = '';\n this._backgroundColor = '';\n this._layerHint = false;\n this._contain = 'none';\n this._boxShadow = '';\n }\n setMaxWidth(maxWidth) {\n if (this._maxWidth === maxWidth) {\n return;\n }\n this._maxWidth = maxWidth;\n this.domNode.style.maxWidth = this._maxWidth + 'px';\n }\n setWidth(width) {\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width + 'px';\n }\n setHeight(height) {\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height + 'px';\n }\n setTop(top) {\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top + 'px';\n }\n unsetTop() {\n if (this._top === -1) {\n return;\n }\n this._top = -1;\n this.domNode.style.top = '';\n }\n setLeft(left) {\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left + 'px';\n }\n setBottom(bottom) {\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom + 'px';\n }\n setRight(right) {\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right + 'px';\n }\n setFontFamily(fontFamily) {\n if (this._fontFamily === fontFamily) {\n return;\n }\n this._fontFamily = fontFamily;\n this.domNode.style.fontFamily = this._fontFamily;\n }\n setFontWeight(fontWeight) {\n if (this._fontWeight === fontWeight) {\n return;\n }\n this._fontWeight = fontWeight;\n this.domNode.style.fontWeight = this._fontWeight;\n }\n setFontSize(fontSize) {\n if (this._fontSize === fontSize) {\n return;\n }\n this._fontSize = fontSize;\n this.domNode.style.fontSize = this._fontSize + 'px';\n }\n setFontFeatureSettings(fontFeatureSettings) {\n if (this._fontFeatureSettings === fontFeatureSettings) {\n return;\n }\n this._fontFeatureSettings = fontFeatureSettings;\n this.domNode.style.fontFeatureSettings = this._fontFeatureSettings;\n }\n setLineHeight(lineHeight) {\n if (this._lineHeight === lineHeight) {\n return;\n }\n this._lineHeight = lineHeight;\n this.domNode.style.lineHeight = this._lineHeight + 'px';\n }\n setLetterSpacing(letterSpacing) {\n if (this._letterSpacing === letterSpacing) {\n return;\n }\n this._letterSpacing = letterSpacing;\n this.domNode.style.letterSpacing = this._letterSpacing + 'px';\n }\n setClassName(className) {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n toggleClassName(className, shouldHaveIt) {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n setDisplay(display) {\n if (this._display === display) {\n return;\n }\n this._display = display;\n this.domNode.style.display = this._display;\n }\n setPosition(position) {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n setVisibility(visibility) {\n if (this._visibility === visibility) {\n return;\n }\n this._visibility = visibility;\n this.domNode.style.visibility = this._visibility;\n }\n setBackgroundColor(backgroundColor) {\n if (this._backgroundColor === backgroundColor) {\n return;\n }\n this._backgroundColor = backgroundColor;\n this.domNode.style.backgroundColor = this._backgroundColor;\n }\n setLayerHinting(layerHint) {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n this.domNode.style.transform = this._layerHint ? 'translate3d(0px, 0px, 0px)' : '';\n }\n setBoxShadow(boxShadow) {\n if (this._boxShadow === boxShadow) {\n return;\n }\n this._boxShadow = boxShadow;\n this.domNode.style.boxShadow = boxShadow;\n }\n setContain(contain) {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n setAttribute(name, value) {\n this.domNode.setAttribute(name, value);\n }\n removeAttribute(name) {\n this.domNode.removeAttribute(name);\n }\n appendChild(child) {\n this.domNode.appendChild(child.domNode);\n }\n removeChild(child) {\n this.domNode.removeChild(child.domNode);\n }\n}\nexport function createFastDomNode(domNode) {\n return new FastDomNode(domNode);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Position } from './position.js';\n/**\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\n */\nexport class Range {\n constructor(startLineNumber, startColumn, endLineNumber, endColumn) {\n if ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {\n this.startLineNumber = endLineNumber;\n this.startColumn = endColumn;\n this.endLineNumber = startLineNumber;\n this.endColumn = startColumn;\n }\n else {\n this.startLineNumber = startLineNumber;\n this.startColumn = startColumn;\n this.endLineNumber = endLineNumber;\n this.endColumn = endColumn;\n }\n }\n /**\n * Test if this range is empty.\n */\n isEmpty() {\n return Range.isEmpty(this);\n }\n /**\n * Test if `range` is empty.\n */\n static isEmpty(range) {\n return (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);\n }\n /**\n * Test if position is in this range. If the position is at the edges, will return true.\n */\n containsPosition(position) {\n return Range.containsPosition(this, position);\n }\n /**\n * Test if `position` is in `range`. If the position is at the edges, will return true.\n */\n static containsPosition(range, position) {\n if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n return false;\n }\n if (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {\n return false;\n }\n if (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {\n return false;\n }\n return true;\n }\n /**\n * Test if range is in this range. If the range is equal to this range, will return true.\n */\n containsRange(range) {\n return Range.containsRange(this, range);\n }\n /**\n * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n */\n static containsRange(range, otherRange) {\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {\n return false;\n }\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {\n return false;\n }\n return true;\n }\n /**\n * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\n */\n strictContainsRange(range) {\n return Range.strictContainsRange(this, range);\n }\n /**\n * Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false.\n */\n static strictContainsRange(range, otherRange) {\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {\n return false;\n }\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {\n return false;\n }\n return true;\n }\n /**\n * A reunion of the two ranges.\n * The smallest position will be used as the start point, and the largest one as the end point.\n */\n plusRange(range) {\n return Range.plusRange(this, range);\n }\n /**\n * A reunion of the two ranges.\n * The smallest position will be used as the start point, and the largest one as the end point.\n */\n static plusRange(a, b) {\n let startLineNumber;\n let startColumn;\n let endLineNumber;\n let endColumn;\n if (b.startLineNumber < a.startLineNumber) {\n startLineNumber = b.startLineNumber;\n startColumn = b.startColumn;\n }\n else if (b.startLineNumber === a.startLineNumber) {\n startLineNumber = b.startLineNumber;\n startColumn = Math.min(b.startColumn, a.startColumn);\n }\n else {\n startLineNumber = a.startLineNumber;\n startColumn = a.startColumn;\n }\n if (b.endLineNumber > a.endLineNumber) {\n endLineNumber = b.endLineNumber;\n endColumn = b.endColumn;\n }\n else if (b.endLineNumber === a.endLineNumber) {\n endLineNumber = b.endLineNumber;\n endColumn = Math.max(b.endColumn, a.endColumn);\n }\n else {\n endLineNumber = a.endLineNumber;\n endColumn = a.endColumn;\n }\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n /**\n * A intersection of the two ranges.\n */\n intersectRanges(range) {\n return Range.intersectRanges(this, range);\n }\n /**\n * A intersection of the two ranges.\n */\n static intersectRanges(a, b) {\n let resultStartLineNumber = a.startLineNumber;\n let resultStartColumn = a.startColumn;\n let resultEndLineNumber = a.endLineNumber;\n let resultEndColumn = a.endColumn;\n let otherStartLineNumber = b.startLineNumber;\n let otherStartColumn = b.startColumn;\n let otherEndLineNumber = b.endLineNumber;\n let otherEndColumn = b.endColumn;\n if (resultStartLineNumber < otherStartLineNumber) {\n resultStartLineNumber = otherStartLineNumber;\n resultStartColumn = otherStartColumn;\n }\n else if (resultStartLineNumber === otherStartLineNumber) {\n resultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n }\n if (resultEndLineNumber > otherEndLineNumber) {\n resultEndLineNumber = otherEndLineNumber;\n resultEndColumn = otherEndColumn;\n }\n else if (resultEndLineNumber === otherEndLineNumber) {\n resultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n }\n // Check if selection is now empty\n if (resultStartLineNumber > resultEndLineNumber) {\n return null;\n }\n if (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {\n return null;\n }\n return new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\n }\n /**\n * Test if this range equals other.\n */\n equalsRange(other) {\n return Range.equalsRange(this, other);\n }\n /**\n * Test if range `a` equals `b`.\n */\n static equalsRange(a, b) {\n return (!!a &&\n !!b &&\n a.startLineNumber === b.startLineNumber &&\n a.startColumn === b.startColumn &&\n a.endLineNumber === b.endLineNumber &&\n a.endColumn === b.endColumn);\n }\n /**\n * Return the end position (which will be after or equal to the start position)\n */\n getEndPosition() {\n return Range.getEndPosition(this);\n }\n /**\n * Return the end position (which will be after or equal to the start position)\n */\n static getEndPosition(range) {\n return new Position(range.endLineNumber, range.endColumn);\n }\n /**\n * Return the start position (which will be before or equal to the end position)\n */\n getStartPosition() {\n return Range.getStartPosition(this);\n }\n /**\n * Return the start position (which will be before or equal to the end position)\n */\n static getStartPosition(range) {\n return new Position(range.startLineNumber, range.startColumn);\n }\n /**\n * Transform to a user presentable string representation.\n */\n toString() {\n return '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';\n }\n /**\n * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n */\n setEndPosition(endLineNumber, endColumn) {\n return new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n }\n /**\n * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n */\n setStartPosition(startLineNumber, startColumn) {\n return new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n }\n /**\n * Create a new empty range using this range's start position.\n */\n collapseToStart() {\n return Range.collapseToStart(this);\n }\n /**\n * Create a new empty range using this range's start position.\n */\n static collapseToStart(range) {\n return new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n }\n // ---\n static fromPositions(start, end = start) {\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n static lift(range) {\n if (!range) {\n return null;\n }\n return new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n }\n /**\n * Test if `obj` is an `IRange`.\n */\n static isIRange(obj) {\n return (obj\n && (typeof obj.startLineNumber === 'number')\n && (typeof obj.startColumn === 'number')\n && (typeof obj.endLineNumber === 'number')\n && (typeof obj.endColumn === 'number'));\n }\n /**\n * Test if the two ranges are touching in any way.\n */\n static areIntersectingOrTouching(a, b) {\n // Check if `a` is before `b`\n if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {\n return false;\n }\n // Check if `b` is before `a`\n if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {\n return false;\n }\n // These ranges must intersect\n return true;\n }\n /**\n * Test if the two ranges are intersecting. If the ranges are touching it returns true.\n */\n static areIntersecting(a, b) {\n // Check if `a` is before `b`\n if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)) {\n return false;\n }\n // Check if `b` is before `a`\n if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)) {\n return false;\n }\n // These ranges must intersect\n return true;\n }\n /**\n * A function that compares ranges, useful for sorting ranges\n * It will first compare ranges on the startPosition and then on the endPosition\n */\n static compareRangesUsingStarts(a, b) {\n if (a && b) {\n const aStartLineNumber = a.startLineNumber | 0;\n const bStartLineNumber = b.startLineNumber | 0;\n if (aStartLineNumber === bStartLineNumber) {\n const aStartColumn = a.startColumn | 0;\n const bStartColumn = b.startColumn | 0;\n if (aStartColumn === bStartColumn) {\n const aEndLineNumber = a.endLineNumber | 0;\n const bEndLineNumber = b.endLineNumber | 0;\n if (aEndLineNumber === bEndLineNumber) {\n const aEndColumn = a.endColumn | 0;\n const bEndColumn = b.endColumn | 0;\n return aEndColumn - bEndColumn;\n }\n return aEndLineNumber - bEndLineNumber;\n }\n return aStartColumn - bStartColumn;\n }\n return aStartLineNumber - bStartLineNumber;\n }\n const aExists = (a ? 1 : 0);\n const bExists = (b ? 1 : 0);\n return aExists - bExists;\n }\n /**\n * A function that compares ranges, useful for sorting ranges\n * It will first compare ranges on the endPosition and then on the startPosition\n */\n static compareRangesUsingEnds(a, b) {\n if (a.endLineNumber === b.endLineNumber) {\n if (a.endColumn === b.endColumn) {\n if (a.startLineNumber === b.startLineNumber) {\n return a.startColumn - b.startColumn;\n }\n return a.startLineNumber - b.startLineNumber;\n }\n return a.endColumn - b.endColumn;\n }\n return a.endLineNumber - b.endLineNumber;\n }\n /**\n * Test if the range spans multiple lines.\n */\n static spansMultipleLines(range) {\n return range.endLineNumber > range.startLineNumber;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as paths from './path.js';\nimport { isWindows } from './platform.js';\nconst _schemePattern = /^\\w[\\w\\d+.-]*$/;\nconst _singleSlashStart = /^\\//;\nconst _doubleSlashStart = /^\\/\\//;\nfunction _validateUri(ret, _strict) {\n // scheme, must be set\n if (!ret.scheme && _strict) {\n throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${ret.authority}\", path: \"${ret.path}\", query: \"${ret.query}\", fragment: \"${ret.fragment}\"}`);\n }\n // scheme, https://tools.ietf.org/html/rfc3986#section-3.1\n // ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n if (ret.scheme && !_schemePattern.test(ret.scheme)) {\n throw new Error('[UriError]: Scheme contains illegal characters.');\n }\n // path, http://tools.ietf.org/html/rfc3986#section-3.3\n // If a URI contains an authority component, then the path component\n // must either be empty or begin with a slash (\"/\") character. If a URI\n // does not contain an authority component, then the path cannot begin\n // with two slash characters (\"//\").\n if (ret.path) {\n if (ret.authority) {\n if (!_singleSlashStart.test(ret.path)) {\n throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character');\n }\n }\n else {\n if (_doubleSlashStart.test(ret.path)) {\n throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\n }\n }\n }\n}\n// for a while we allowed uris *without* schemes and this is the migration\n// for them, e.g. an uri without scheme and without strict-mode warns and falls\n// back to the file-scheme. that should cause the least carnage and still be a\n// clear warning\nfunction _schemeFix(scheme, _strict) {\n if (!scheme && !_strict) {\n return 'file';\n }\n return scheme;\n}\n// implements a bit of https://tools.ietf.org/html/rfc3986#section-5\nfunction _referenceResolution(scheme, path) {\n // the slash-character is our 'default base' as we don't\n // support constructing URIs relative to other URIs. This\n // also means that we alter and potentially break paths.\n // see https://tools.ietf.org/html/rfc3986#section-5.1.4\n switch (scheme) {\n case 'https':\n case 'http':\n case 'file':\n if (!path) {\n path = _slash;\n }\n else if (path[0] !== _slash) {\n path = _slash + path;\n }\n break;\n }\n return path;\n}\nconst _empty = '';\nconst _slash = '/';\nconst _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n/**\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\n * This class is a simple parser which creates the basic component parts\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\n * and encoding.\n *\n * ```txt\n * foo://example.com:8042/over/there?name=ferret#nose\n * \\_/ \\______________/\\_________/ \\_________/ \\__/\n * | | | | |\n * scheme authority path query fragment\n * | _____________________|__\n * / \\ / \\\n * urn:example:animal:ferret:nose\n * ```\n */\nexport class URI {\n /**\n * @internal\n */\n constructor(schemeOrData, authority, path, query, fragment, _strict = false) {\n if (typeof schemeOrData === 'object') {\n this.scheme = schemeOrData.scheme || _empty;\n this.authority = schemeOrData.authority || _empty;\n this.path = schemeOrData.path || _empty;\n this.query = schemeOrData.query || _empty;\n this.fragment = schemeOrData.fragment || _empty;\n // no validation because it's this URI\n // that creates uri components.\n // _validateUri(this);\n }\n else {\n this.scheme = _schemeFix(schemeOrData, _strict);\n this.authority = authority || _empty;\n this.path = _referenceResolution(this.scheme, path || _empty);\n this.query = query || _empty;\n this.fragment = fragment || _empty;\n _validateUri(this, _strict);\n }\n }\n static isUri(thing) {\n if (thing instanceof URI) {\n return true;\n }\n if (!thing) {\n return false;\n }\n return typeof thing.authority === 'string'\n && typeof thing.fragment === 'string'\n && typeof thing.path === 'string'\n && typeof thing.query === 'string'\n && typeof thing.scheme === 'string'\n && typeof thing.fsPath === 'string'\n && typeof thing.with === 'function'\n && typeof thing.toString === 'function';\n }\n // ---- filesystem path -----------------------\n /**\n * Returns a string representing the corresponding file system path of this URI.\n * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the\n * platform specific path separator.\n *\n * * Will *not* validate the path for invalid characters and semantics.\n * * Will *not* look at the scheme of this URI.\n * * The result shall *not* be used for display purposes but for accessing a file on disk.\n *\n *\n * The *difference* to `URI#path` is the use of the platform specific separator and the handling\n * of UNC paths. See the below sample of a file-uri with an authority (UNC path).\n *\n * ```ts\n const u = URI.parse('file://server/c$/folder/file.txt')\n u.authority === 'server'\n u.path === '/shares/c$/file.txt'\n u.fsPath === '\\\\server\\c$\\folder\\file.txt'\n ```\n *\n * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,\n * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working\n * with URIs that represent files on disk (`file` scheme).\n */\n get fsPath() {\n // if (this.scheme !== 'file') {\n // \tconsole.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);\n // }\n return uriToFsPath(this, false);\n }\n // ---- modify to new -------------------------\n with(change) {\n if (!change) {\n return this;\n }\n let { scheme, authority, path, query, fragment } = change;\n if (scheme === undefined) {\n scheme = this.scheme;\n }\n else if (scheme === null) {\n scheme = _empty;\n }\n if (authority === undefined) {\n authority = this.authority;\n }\n else if (authority === null) {\n authority = _empty;\n }\n if (path === undefined) {\n path = this.path;\n }\n else if (path === null) {\n path = _empty;\n }\n if (query === undefined) {\n query = this.query;\n }\n else if (query === null) {\n query = _empty;\n }\n if (fragment === undefined) {\n fragment = this.fragment;\n }\n else if (fragment === null) {\n fragment = _empty;\n }\n if (scheme === this.scheme\n && authority === this.authority\n && path === this.path\n && query === this.query\n && fragment === this.fragment) {\n return this;\n }\n return new Uri(scheme, authority, path, query, fragment);\n }\n // ---- parse & validate ------------------------\n /**\n * Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,\n * `file:///usr/home`, or `scheme:with/path`.\n *\n * @param value A string which represents an URI (see `URI#toString`).\n */\n static parse(value, _strict = false) {\n const match = _regexp.exec(value);\n if (!match) {\n return new Uri(_empty, _empty, _empty, _empty, _empty);\n }\n return new Uri(match[2] || _empty, percentDecode(match[4] || _empty), percentDecode(match[5] || _empty), percentDecode(match[7] || _empty), percentDecode(match[9] || _empty), _strict);\n }\n /**\n * Creates a new URI from a file system path, e.g. `c:\\my\\files`,\n * `/usr/home`, or `\\\\server\\share\\some\\path`.\n *\n * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument\n * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**\n * `URI.parse('file://' + path)` because the path might contain characters that are\n * interpreted (# and ?). See the following sample:\n * ```ts\n const good = URI.file('/coding/c#/project1');\n good.scheme === 'file';\n good.path === '/coding/c#/project1';\n good.fragment === '';\n const bad = URI.parse('file://' + '/coding/c#/project1');\n bad.scheme === 'file';\n bad.path === '/coding/c'; // path is now broken\n bad.fragment === '/project1';\n ```\n *\n * @param path A file system path (see `URI#fsPath`)\n */\n static file(path) {\n let authority = _empty;\n // normalize to fwd-slashes on windows,\n // on other systems bwd-slashes are valid\n // filename character, eg /f\\oo/ba\\r.txt\n if (isWindows) {\n path = path.replace(/\\\\/g, _slash);\n }\n // check for authority as used in UNC shares\n // or use the path as given\n if (path[0] === _slash && path[1] === _slash) {\n const idx = path.indexOf(_slash, 2);\n if (idx === -1) {\n authority = path.substring(2);\n path = _slash;\n }\n else {\n authority = path.substring(2, idx);\n path = path.substring(idx) || _slash;\n }\n }\n return new Uri('file', authority, path, _empty, _empty);\n }\n static from(components) {\n const result = new Uri(components.scheme, components.authority, components.path, components.query, components.fragment);\n _validateUri(result, true);\n return result;\n }\n /**\n * Join a URI path with path fragments and normalizes the resulting path.\n *\n * @param uri The input URI.\n * @param pathFragment The path fragment to add to the URI path.\n * @returns The resulting URI.\n */\n static joinPath(uri, ...pathFragment) {\n if (!uri.path) {\n throw new Error(`[UriError]: cannot call joinPath on URI without path`);\n }\n let newPath;\n if (isWindows && uri.scheme === 'file') {\n newPath = URI.file(paths.win32.join(uriToFsPath(uri, true), ...pathFragment)).path;\n }\n else {\n newPath = paths.posix.join(uri.path, ...pathFragment);\n }\n return uri.with({ path: newPath });\n }\n // ---- printing/externalize ---------------------------\n /**\n * Creates a string representation for this URI. It's guaranteed that calling\n * `URI.parse` with the result of this function creates an URI which is equal\n * to this URI.\n *\n * * The result shall *not* be used for display purposes but for externalization or transport.\n * * The result will be encoded using the percentage encoding and encoding happens mostly\n * ignore the scheme-specific encoding rules.\n *\n * @param skipEncoding Do not encode the result, default is `false`\n */\n toString(skipEncoding = false) {\n return _asFormatted(this, skipEncoding);\n }\n toJSON() {\n return this;\n }\n static revive(data) {\n if (!data) {\n return data;\n }\n else if (data instanceof URI) {\n return data;\n }\n else {\n const result = new Uri(data);\n result._formatted = data.external;\n result._fsPath = data._sep === _pathSepMarker ? data.fsPath : null;\n return result;\n }\n }\n}\nconst _pathSepMarker = isWindows ? 1 : undefined;\n// This class exists so that URI is compatible with vscode.Uri (API).\nclass Uri extends URI {\n constructor() {\n super(...arguments);\n this._formatted = null;\n this._fsPath = null;\n }\n get fsPath() {\n if (!this._fsPath) {\n this._fsPath = uriToFsPath(this, false);\n }\n return this._fsPath;\n }\n toString(skipEncoding = false) {\n if (!skipEncoding) {\n if (!this._formatted) {\n this._formatted = _asFormatted(this, false);\n }\n return this._formatted;\n }\n else {\n // we don't cache that\n return _asFormatted(this, true);\n }\n }\n toJSON() {\n const res = {\n $mid: 1 /* Uri */\n };\n // cached state\n if (this._fsPath) {\n res.fsPath = this._fsPath;\n res._sep = _pathSepMarker;\n }\n if (this._formatted) {\n res.external = this._formatted;\n }\n // uri components\n if (this.path) {\n res.path = this.path;\n }\n if (this.scheme) {\n res.scheme = this.scheme;\n }\n if (this.authority) {\n res.authority = this.authority;\n }\n if (this.query) {\n res.query = this.query;\n }\n if (this.fragment) {\n res.fragment = this.fragment;\n }\n return res;\n }\n}\n// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2\nconst encodeTable = {\n [58 /* Colon */]: '%3A',\n [47 /* Slash */]: '%2F',\n [63 /* QuestionMark */]: '%3F',\n [35 /* Hash */]: '%23',\n [91 /* OpenSquareBracket */]: '%5B',\n [93 /* CloseSquareBracket */]: '%5D',\n [64 /* AtSign */]: '%40',\n [33 /* ExclamationMark */]: '%21',\n [36 /* DollarSign */]: '%24',\n [38 /* Ampersand */]: '%26',\n [39 /* SingleQuote */]: '%27',\n [40 /* OpenParen */]: '%28',\n [41 /* CloseParen */]: '%29',\n [42 /* Asterisk */]: '%2A',\n [43 /* Plus */]: '%2B',\n [44 /* Comma */]: '%2C',\n [59 /* Semicolon */]: '%3B',\n [61 /* Equals */]: '%3D',\n [32 /* Space */]: '%20',\n};\nfunction encodeURIComponentFast(uriComponent, allowSlash) {\n let res = undefined;\n let nativeEncodePos = -1;\n for (let pos = 0; pos < uriComponent.length; pos++) {\n const code = uriComponent.charCodeAt(pos);\n // unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3\n if ((code >= 97 /* a */ && code <= 122 /* z */)\n || (code >= 65 /* A */ && code <= 90 /* Z */)\n || (code >= 48 /* Digit0 */ && code <= 57 /* Digit9 */)\n || code === 45 /* Dash */\n || code === 46 /* Period */\n || code === 95 /* Underline */\n || code === 126 /* Tilde */\n || (allowSlash && code === 47 /* Slash */)) {\n // check if we are delaying native encode\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n nativeEncodePos = -1;\n }\n // check if we write into a new string (by default we try to return the param)\n if (res !== undefined) {\n res += uriComponent.charAt(pos);\n }\n }\n else {\n // encoding needed, we need to allocate a new string\n if (res === undefined) {\n res = uriComponent.substr(0, pos);\n }\n // check with default table first\n const escaped = encodeTable[code];\n if (escaped !== undefined) {\n // check if we are delaying native encode\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n nativeEncodePos = -1;\n }\n // append escaped variant to result\n res += escaped;\n }\n else if (nativeEncodePos === -1) {\n // use native encode only when needed\n nativeEncodePos = pos;\n }\n }\n }\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos));\n }\n return res !== undefined ? res : uriComponent;\n}\nfunction encodeURIComponentMinimal(path) {\n let res = undefined;\n for (let pos = 0; pos < path.length; pos++) {\n const code = path.charCodeAt(pos);\n if (code === 35 /* Hash */ || code === 63 /* QuestionMark */) {\n if (res === undefined) {\n res = path.substr(0, pos);\n }\n res += encodeTable[code];\n }\n else {\n if (res !== undefined) {\n res += path[pos];\n }\n }\n }\n return res !== undefined ? res : path;\n}\n/**\n * Compute `fsPath` for the given uri\n */\nexport function uriToFsPath(uri, keepDriveLetterCasing) {\n let value;\n if (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {\n // unc path: file://shares/c$/far/boo\n value = `//${uri.authority}${uri.path}`;\n }\n else if (uri.path.charCodeAt(0) === 47 /* Slash */\n && (uri.path.charCodeAt(1) >= 65 /* A */ && uri.path.charCodeAt(1) <= 90 /* Z */ || uri.path.charCodeAt(1) >= 97 /* a */ && uri.path.charCodeAt(1) <= 122 /* z */)\n && uri.path.charCodeAt(2) === 58 /* Colon */) {\n if (!keepDriveLetterCasing) {\n // windows drive letter: file:///c:/far/boo\n value = uri.path[1].toLowerCase() + uri.path.substr(2);\n }\n else {\n value = uri.path.substr(1);\n }\n }\n else {\n // other path\n value = uri.path;\n }\n if (isWindows) {\n value = value.replace(/\\//g, '\\\\');\n }\n return value;\n}\n/**\n * Create the external version of a uri\n */\nfunction _asFormatted(uri, skipEncoding) {\n const encoder = !skipEncoding\n ? encodeURIComponentFast\n : encodeURIComponentMinimal;\n let res = '';\n let { scheme, authority, path, query, fragment } = uri;\n if (scheme) {\n res += scheme;\n res += ':';\n }\n if (authority || scheme === 'file') {\n res += _slash;\n res += _slash;\n }\n if (authority) {\n let idx = authority.indexOf('@');\n if (idx !== -1) {\n // @\n const userinfo = authority.substr(0, idx);\n authority = authority.substr(idx + 1);\n idx = userinfo.indexOf(':');\n if (idx === -1) {\n res += encoder(userinfo, false);\n }\n else {\n // :@\n res += encoder(userinfo.substr(0, idx), false);\n res += ':';\n res += encoder(userinfo.substr(idx + 1), false);\n }\n res += '@';\n }\n authority = authority.toLowerCase();\n idx = authority.indexOf(':');\n if (idx === -1) {\n res += encoder(authority, false);\n }\n else {\n // :\n res += encoder(authority.substr(0, idx), false);\n res += authority.substr(idx);\n }\n }\n if (path) {\n // lower-case windows drive letters in /C:/fff or C:/fff\n if (path.length >= 3 && path.charCodeAt(0) === 47 /* Slash */ && path.charCodeAt(2) === 58 /* Colon */) {\n const code = path.charCodeAt(1);\n if (code >= 65 /* A */ && code <= 90 /* Z */) {\n path = `/${String.fromCharCode(code + 32)}:${path.substr(3)}`; // \"/c:\".length === 3\n }\n }\n else if (path.length >= 2 && path.charCodeAt(1) === 58 /* Colon */) {\n const code = path.charCodeAt(0);\n if (code >= 65 /* A */ && code <= 90 /* Z */) {\n path = `${String.fromCharCode(code + 32)}:${path.substr(2)}`; // \"/c:\".length === 3\n }\n }\n // encode the rest of the path\n res += encoder(path, true);\n }\n if (query) {\n res += '?';\n res += encoder(query, false);\n }\n if (fragment) {\n res += '#';\n res += !skipEncoding ? encodeURIComponentFast(fragment, false) : fragment;\n }\n return res;\n}\n// --- decode\nfunction decodeURIComponentGraceful(str) {\n try {\n return decodeURIComponent(str);\n }\n catch (_a) {\n if (str.length > 3) {\n return str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));\n }\n else {\n return str;\n }\n }\n}\nconst _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\nfunction percentDecode(str) {\n if (!str.match(_rEncodedAsHex)) {\n return str;\n }\n return str.replace(_rEncodedAsHex, (match) => decodeURIComponentGraceful(match));\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IKeybindingService = createDecorator('keybindingService');\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * A position in the editor.\n */\nexport class Position {\n constructor(lineNumber, column) {\n this.lineNumber = lineNumber;\n this.column = column;\n }\n /**\n * Create a new position from this position.\n *\n * @param newLineNumber new line number\n * @param newColumn new column\n */\n with(newLineNumber = this.lineNumber, newColumn = this.column) {\n if (newLineNumber === this.lineNumber && newColumn === this.column) {\n return this;\n }\n else {\n return new Position(newLineNumber, newColumn);\n }\n }\n /**\n * Derive a new position from this position.\n *\n * @param deltaLineNumber line number delta\n * @param deltaColumn column delta\n */\n delta(deltaLineNumber = 0, deltaColumn = 0) {\n return this.with(this.lineNumber + deltaLineNumber, this.column + deltaColumn);\n }\n /**\n * Test if this position equals other position\n */\n equals(other) {\n return Position.equals(this, other);\n }\n /**\n * Test if position `a` equals position `b`\n */\n static equals(a, b) {\n if (!a && !b) {\n return true;\n }\n return (!!a &&\n !!b &&\n a.lineNumber === b.lineNumber &&\n a.column === b.column);\n }\n /**\n * Test if this position is before other position.\n * If the two positions are equal, the result will be false.\n */\n isBefore(other) {\n return Position.isBefore(this, other);\n }\n /**\n * Test if position `a` is before position `b`.\n * If the two positions are equal, the result will be false.\n */\n static isBefore(a, b) {\n if (a.lineNumber < b.lineNumber) {\n return true;\n }\n if (b.lineNumber < a.lineNumber) {\n return false;\n }\n return a.column < b.column;\n }\n /**\n * Test if this position is before other position.\n * If the two positions are equal, the result will be true.\n */\n isBeforeOrEqual(other) {\n return Position.isBeforeOrEqual(this, other);\n }\n /**\n * Test if position `a` is before position `b`.\n * If the two positions are equal, the result will be true.\n */\n static isBeforeOrEqual(a, b) {\n if (a.lineNumber < b.lineNumber) {\n return true;\n }\n if (b.lineNumber < a.lineNumber) {\n return false;\n }\n return a.column <= b.column;\n }\n /**\n * A function that compares positions, useful for sorting\n */\n static compare(a, b) {\n let aLineNumber = a.lineNumber | 0;\n let bLineNumber = b.lineNumber | 0;\n if (aLineNumber === bLineNumber) {\n let aColumn = a.column | 0;\n let bColumn = b.column | 0;\n return aColumn - bColumn;\n }\n return aLineNumber - bLineNumber;\n }\n /**\n * Clone this position.\n */\n clone() {\n return new Position(this.lineNumber, this.column);\n }\n /**\n * Convert to a human-readable representation.\n */\n toString() {\n return '(' + this.lineNumber + ',' + this.column + ')';\n }\n // ---\n /**\n * Create a `Position` from an `IPosition`.\n */\n static lift(pos) {\n return new Position(pos.lineNumber, pos.column);\n }\n /**\n * Test if `obj` is an `IPosition`.\n */\n static isIPosition(obj) {\n return (obj\n && (typeof obj.lineNumber === 'number')\n && (typeof obj.column === 'number'));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { $, append, createStyleSheet, EventHelper, getElementsByTagName } from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { EventType, Gesture } from '../../touch.js';\nimport { Delayer } from '../../../common/async.js';\nimport { memoize } from '../../../common/decorators.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../common/lifecycle.js';\nimport { isMacintosh } from '../../../common/platform.js';\nimport './sash.css';\nlet DEBUG = false;\nexport var OrthogonalEdge;\n(function (OrthogonalEdge) {\n OrthogonalEdge[\"North\"] = \"north\";\n OrthogonalEdge[\"South\"] = \"south\";\n OrthogonalEdge[\"East\"] = \"east\";\n OrthogonalEdge[\"West\"] = \"west\";\n})(OrthogonalEdge || (OrthogonalEdge = {}));\nlet globalSize = 4;\nconst onDidChangeGlobalSize = new Emitter();\nlet globalHoverDelay = 300;\nconst onDidChangeHoverDelay = new Emitter();\nclass MouseEventFactory {\n constructor() {\n this.disposables = new DisposableStore();\n }\n get onPointerMove() {\n return this.disposables.add(new DomEmitter(window, 'mousemove')).event;\n }\n get onPointerUp() {\n return this.disposables.add(new DomEmitter(window, 'mouseup')).event;\n }\n dispose() {\n this.disposables.dispose();\n }\n}\n__decorate([\n memoize\n], MouseEventFactory.prototype, \"onPointerMove\", null);\n__decorate([\n memoize\n], MouseEventFactory.prototype, \"onPointerUp\", null);\nclass GestureEventFactory {\n constructor(el) {\n this.el = el;\n this.disposables = new DisposableStore();\n }\n get onPointerMove() {\n return this.disposables.add(new DomEmitter(this.el, EventType.Change)).event;\n }\n get onPointerUp() {\n return this.disposables.add(new DomEmitter(this.el, EventType.End)).event;\n }\n dispose() {\n this.disposables.dispose();\n }\n}\n__decorate([\n memoize\n], GestureEventFactory.prototype, \"onPointerMove\", null);\n__decorate([\n memoize\n], GestureEventFactory.prototype, \"onPointerUp\", null);\nclass OrthogonalPointerEventFactory {\n constructor(factory) {\n this.factory = factory;\n }\n get onPointerMove() {\n return this.factory.onPointerMove;\n }\n get onPointerUp() {\n return this.factory.onPointerUp;\n }\n dispose() {\n // noop\n }\n}\n__decorate([\n memoize\n], OrthogonalPointerEventFactory.prototype, \"onPointerMove\", null);\n__decorate([\n memoize\n], OrthogonalPointerEventFactory.prototype, \"onPointerUp\", null);\nexport class Sash extends Disposable {\n constructor(container, layoutProvider, options) {\n super();\n this.hoverDelay = globalHoverDelay;\n this.hoverDelayer = this._register(new Delayer(this.hoverDelay));\n this._state = 3 /* Enabled */;\n this._onDidEnablementChange = this._register(new Emitter());\n this.onDidEnablementChange = this._onDidEnablementChange.event;\n this._onDidStart = this._register(new Emitter());\n this.onDidStart = this._onDidStart.event;\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._onDidReset = this._register(new Emitter());\n this.onDidReset = this._onDidReset.event;\n this._onDidEnd = this._register(new Emitter());\n this.onDidEnd = this._onDidEnd.event;\n this.linkedSash = undefined;\n this.orthogonalStartSashDisposables = this._register(new DisposableStore());\n this.orthogonalStartDragHandleDisposables = this._register(new DisposableStore());\n this.orthogonalEndSashDisposables = this._register(new DisposableStore());\n this.orthogonalEndDragHandleDisposables = this._register(new DisposableStore());\n this.el = append(container, $('.monaco-sash'));\n if (options.orthogonalEdge) {\n this.el.classList.add(`orthogonal-edge-${options.orthogonalEdge}`);\n }\n if (isMacintosh) {\n this.el.classList.add('mac');\n }\n const onMouseDown = this._register(new DomEmitter(this.el, 'mousedown')).event;\n this._register(onMouseDown(e => this.onPointerStart(e, new MouseEventFactory()), this));\n const onMouseDoubleClick = this._register(new DomEmitter(this.el, 'dblclick')).event;\n this._register(onMouseDoubleClick(this.onPointerDoublePress, this));\n const onMouseEnter = this._register(new DomEmitter(this.el, 'mouseenter')).event;\n this._register(onMouseEnter(() => Sash.onMouseEnter(this)));\n const onMouseLeave = this._register(new DomEmitter(this.el, 'mouseleave')).event;\n this._register(onMouseLeave(() => Sash.onMouseLeave(this)));\n this._register(Gesture.addTarget(this.el));\n const onTouchStart = Event.map(this._register(new DomEmitter(this.el, EventType.Start)).event, e => { var _a; return (Object.assign(Object.assign({}, e), { target: (_a = e.initialTarget) !== null && _a !== void 0 ? _a : null })); });\n this._register(onTouchStart(e => this.onPointerStart(e, new GestureEventFactory(this.el)), this));\n const onTap = this._register(new DomEmitter(this.el, EventType.Tap)).event;\n const onDoubleTap = Event.map(Event.filter(Event.debounce(onTap, (res, event) => { var _a; return ({ event, count: ((_a = res === null || res === void 0 ? void 0 : res.count) !== null && _a !== void 0 ? _a : 0) + 1 }); }, 250), ({ count }) => count === 2), ({ event }) => { var _a; return (Object.assign(Object.assign({}, event), { target: (_a = event.initialTarget) !== null && _a !== void 0 ? _a : null })); });\n this._register(onDoubleTap(this.onPointerDoublePress, this));\n if (typeof options.size === 'number') {\n this.size = options.size;\n if (options.orientation === 0 /* VERTICAL */) {\n this.el.style.width = `${this.size}px`;\n }\n else {\n this.el.style.height = `${this.size}px`;\n }\n }\n else {\n this.size = globalSize;\n this._register(onDidChangeGlobalSize.event(size => {\n this.size = size;\n this.layout();\n }));\n }\n this._register(onDidChangeHoverDelay.event(delay => this.hoverDelay = delay));\n this.hidden = false;\n this.layoutProvider = layoutProvider;\n this.orthogonalStartSash = options.orthogonalStartSash;\n this.orthogonalEndSash = options.orthogonalEndSash;\n this.orientation = options.orientation || 0 /* VERTICAL */;\n if (this.orientation === 1 /* HORIZONTAL */) {\n this.el.classList.add('horizontal');\n this.el.classList.remove('vertical');\n }\n else {\n this.el.classList.remove('horizontal');\n this.el.classList.add('vertical');\n }\n this.el.classList.toggle('debug', DEBUG);\n this.layout();\n }\n get state() { return this._state; }\n set state(state) {\n if (this._state === state) {\n return;\n }\n this.el.classList.toggle('disabled', state === 0 /* Disabled */);\n this.el.classList.toggle('minimum', state === 1 /* Minimum */);\n this.el.classList.toggle('maximum', state === 2 /* Maximum */);\n this._state = state;\n this._onDidEnablementChange.fire(state);\n }\n get orthogonalStartSash() { return this._orthogonalStartSash; }\n set orthogonalStartSash(sash) {\n this.orthogonalStartDragHandleDisposables.clear();\n this.orthogonalStartSashDisposables.clear();\n if (sash) {\n const onChange = (state) => {\n this.orthogonalStartDragHandleDisposables.clear();\n if (state !== 0 /* Disabled */) {\n this._orthogonalStartDragHandle = append(this.el, $('.orthogonal-drag-handle.start'));\n this.orthogonalStartDragHandleDisposables.add(toDisposable(() => this._orthogonalStartDragHandle.remove()));\n this.orthogonalStartDragHandleDisposables.add(new DomEmitter(this._orthogonalStartDragHandle, 'mouseenter')).event(() => Sash.onMouseEnter(sash), undefined, this.orthogonalStartDragHandleDisposables);\n this.orthogonalStartDragHandleDisposables.add(new DomEmitter(this._orthogonalStartDragHandle, 'mouseleave')).event(() => Sash.onMouseLeave(sash), undefined, this.orthogonalStartDragHandleDisposables);\n }\n };\n this.orthogonalStartSashDisposables.add(sash.onDidEnablementChange(onChange, this));\n onChange(sash.state);\n }\n this._orthogonalStartSash = sash;\n }\n get orthogonalEndSash() { return this._orthogonalEndSash; }\n set orthogonalEndSash(sash) {\n this.orthogonalEndDragHandleDisposables.clear();\n this.orthogonalEndSashDisposables.clear();\n if (sash) {\n const onChange = (state) => {\n this.orthogonalEndDragHandleDisposables.clear();\n if (state !== 0 /* Disabled */) {\n this._orthogonalEndDragHandle = append(this.el, $('.orthogonal-drag-handle.end'));\n this.orthogonalEndDragHandleDisposables.add(toDisposable(() => this._orthogonalEndDragHandle.remove()));\n this.orthogonalEndDragHandleDisposables.add(new DomEmitter(this._orthogonalEndDragHandle, 'mouseenter')).event(() => Sash.onMouseEnter(sash), undefined, this.orthogonalEndDragHandleDisposables);\n this.orthogonalEndDragHandleDisposables.add(new DomEmitter(this._orthogonalEndDragHandle, 'mouseleave')).event(() => Sash.onMouseLeave(sash), undefined, this.orthogonalEndDragHandleDisposables);\n }\n };\n this.orthogonalEndSashDisposables.add(sash.onDidEnablementChange(onChange, this));\n onChange(sash.state);\n }\n this._orthogonalEndSash = sash;\n }\n onPointerStart(event, pointerEventFactory) {\n EventHelper.stop(event);\n let isMultisashResize = false;\n if (!event.__orthogonalSashEvent) {\n const orthogonalSash = this.getOrthogonalSash(event);\n if (orthogonalSash) {\n isMultisashResize = true;\n event.__orthogonalSashEvent = true;\n orthogonalSash.onPointerStart(event, new OrthogonalPointerEventFactory(pointerEventFactory));\n }\n }\n if (this.linkedSash && !event.__linkedSashEvent) {\n event.__linkedSashEvent = true;\n this.linkedSash.onPointerStart(event, new OrthogonalPointerEventFactory(pointerEventFactory));\n }\n if (!this.state) {\n return;\n }\n const iframes = getElementsByTagName('iframe');\n for (const iframe of iframes) {\n iframe.style.pointerEvents = 'none'; // disable mouse events on iframes as long as we drag the sash\n }\n const startX = event.pageX;\n const startY = event.pageY;\n const altKey = event.altKey;\n const startEvent = { startX, currentX: startX, startY, currentY: startY, altKey };\n this.el.classList.add('active');\n this._onDidStart.fire(startEvent);\n // fix https://github.com/microsoft/vscode/issues/21675\n const style = createStyleSheet(this.el);\n const updateStyle = () => {\n let cursor = '';\n if (isMultisashResize) {\n cursor = 'all-scroll';\n }\n else if (this.orientation === 1 /* HORIZONTAL */) {\n if (this.state === 1 /* Minimum */) {\n cursor = 's-resize';\n }\n else if (this.state === 2 /* Maximum */) {\n cursor = 'n-resize';\n }\n else {\n cursor = isMacintosh ? 'row-resize' : 'ns-resize';\n }\n }\n else {\n if (this.state === 1 /* Minimum */) {\n cursor = 'e-resize';\n }\n else if (this.state === 2 /* Maximum */) {\n cursor = 'w-resize';\n }\n else {\n cursor = isMacintosh ? 'col-resize' : 'ew-resize';\n }\n }\n style.textContent = `* { cursor: ${cursor} !important; }`;\n };\n const disposables = new DisposableStore();\n updateStyle();\n if (!isMultisashResize) {\n this.onDidEnablementChange(updateStyle, null, disposables);\n }\n const onPointerMove = (e) => {\n EventHelper.stop(e, false);\n const event = { startX, currentX: e.pageX, startY, currentY: e.pageY, altKey };\n this._onDidChange.fire(event);\n };\n const onPointerUp = (e) => {\n EventHelper.stop(e, false);\n this.el.removeChild(style);\n this.el.classList.remove('active');\n this._onDidEnd.fire();\n disposables.dispose();\n for (const iframe of iframes) {\n iframe.style.pointerEvents = 'auto';\n }\n };\n pointerEventFactory.onPointerMove(onPointerMove, null, disposables);\n pointerEventFactory.onPointerUp(onPointerUp, null, disposables);\n disposables.add(pointerEventFactory);\n }\n onPointerDoublePress(e) {\n const orthogonalSash = this.getOrthogonalSash(e);\n if (orthogonalSash) {\n orthogonalSash._onDidReset.fire();\n }\n if (this.linkedSash) {\n this.linkedSash._onDidReset.fire();\n }\n this._onDidReset.fire();\n }\n static onMouseEnter(sash, fromLinkedSash = false) {\n if (sash.el.classList.contains('active')) {\n sash.hoverDelayer.cancel();\n sash.el.classList.add('hover');\n }\n else {\n sash.hoverDelayer.trigger(() => sash.el.classList.add('hover'), sash.hoverDelay).then(undefined, () => { });\n }\n if (!fromLinkedSash && sash.linkedSash) {\n Sash.onMouseEnter(sash.linkedSash, true);\n }\n }\n static onMouseLeave(sash, fromLinkedSash = false) {\n sash.hoverDelayer.cancel();\n sash.el.classList.remove('hover');\n if (!fromLinkedSash && sash.linkedSash) {\n Sash.onMouseLeave(sash.linkedSash, true);\n }\n }\n clearSashHoverState() {\n Sash.onMouseLeave(this);\n }\n layout() {\n if (this.orientation === 0 /* VERTICAL */) {\n const verticalProvider = this.layoutProvider;\n this.el.style.left = verticalProvider.getVerticalSashLeft(this) - (this.size / 2) + 'px';\n if (verticalProvider.getVerticalSashTop) {\n this.el.style.top = verticalProvider.getVerticalSashTop(this) + 'px';\n }\n if (verticalProvider.getVerticalSashHeight) {\n this.el.style.height = verticalProvider.getVerticalSashHeight(this) + 'px';\n }\n }\n else {\n const horizontalProvider = this.layoutProvider;\n this.el.style.top = horizontalProvider.getHorizontalSashTop(this) - (this.size / 2) + 'px';\n if (horizontalProvider.getHorizontalSashLeft) {\n this.el.style.left = horizontalProvider.getHorizontalSashLeft(this) + 'px';\n }\n if (horizontalProvider.getHorizontalSashWidth) {\n this.el.style.width = horizontalProvider.getHorizontalSashWidth(this) + 'px';\n }\n }\n }\n hide() {\n this.hidden = true;\n this.el.style.display = 'none';\n this.el.setAttribute('aria-hidden', 'true');\n }\n getOrthogonalSash(e) {\n if (!e.target || !(e.target instanceof HTMLElement)) {\n return undefined;\n }\n if (e.target.classList.contains('orthogonal-drag-handle')) {\n return e.target.classList.contains('start') ? this.orthogonalStartSash : this.orthogonalEndSash;\n }\n return undefined;\n }\n dispose() {\n super.dispose();\n this.el.remove();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { StandardAutoClosingPairConditional } from '../languageConfiguration.js';\nexport class CharacterPairSupport {\n constructor(config) {\n if (config.autoClosingPairs) {\n this._autoClosingPairs = config.autoClosingPairs.map(el => new StandardAutoClosingPairConditional(el));\n }\n else if (config.brackets) {\n this._autoClosingPairs = config.brackets.map(b => new StandardAutoClosingPairConditional({ open: b[0], close: b[1] }));\n }\n else {\n this._autoClosingPairs = [];\n }\n if (config.colorizedBracketPairs) {\n this._colorizedBracketPairs = filterValidBrackets(config.colorizedBracketPairs.map(b => [b[0], b[1]]));\n }\n else if (config.brackets) {\n this._colorizedBracketPairs = filterValidBrackets(config.brackets\n .map((b) => [b[0], b[1]])\n // Many languages set < ... > as bracket pair, even though they also use it as comparison operator.\n // This leads to problems when colorizing this bracket, so we exclude it by default.\n // Languages can still override this by configuring `colorizedBracketPairs`\n // https://github.com/microsoft/vscode/issues/132476\n .filter((p) => !(p[0] === '<' && p[1] === '>')));\n }\n else {\n this._colorizedBracketPairs = [];\n }\n if (config.__electricCharacterSupport && config.__electricCharacterSupport.docComment) {\n const docComment = config.__electricCharacterSupport.docComment;\n // IDocComment is legacy, only partially supported\n this._autoClosingPairs.push(new StandardAutoClosingPairConditional({ open: docComment.open, close: docComment.close || '' }));\n }\n this._autoCloseBefore = typeof config.autoCloseBefore === 'string' ? config.autoCloseBefore : CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED;\n this._surroundingPairs = config.surroundingPairs || this._autoClosingPairs;\n }\n getAutoClosingPairs() {\n return this._autoClosingPairs;\n }\n getAutoCloseBeforeSet() {\n return this._autoCloseBefore;\n }\n static shouldAutoClosePair(autoClosingPair, context, column) {\n // Always complete on empty line\n if (context.getTokenCount() === 0) {\n return true;\n }\n const tokenIndex = context.findTokenIndexAtOffset(column - 2);\n const standardTokenType = context.getStandardTokenType(tokenIndex);\n return autoClosingPair.isOK(standardTokenType);\n }\n getSurroundingPairs() {\n return this._surroundingPairs;\n }\n getColorizedBrackets() {\n return this._colorizedBracketPairs;\n }\n}\nCharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED = ';:.,=}])> \\n\\t';\nfunction filterValidBrackets(bracketPairs) {\n return bracketPairs.filter(([open, close]) => open !== '' && close !== '');\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ignoreBracketsInToken } from '../supports.js';\nimport { BracketsUtils } from './richEditBrackets.js';\nexport class BracketElectricCharacterSupport {\n constructor(richEditBrackets) {\n this._richEditBrackets = richEditBrackets;\n }\n getElectricCharacters() {\n let result = [];\n if (this._richEditBrackets) {\n for (const bracket of this._richEditBrackets.brackets) {\n for (const close of bracket.close) {\n const lastChar = close.charAt(close.length - 1);\n result.push(lastChar);\n }\n }\n }\n // Filter duplicate entries\n result = result.filter((item, pos, array) => {\n return array.indexOf(item) === pos;\n });\n return result;\n }\n onElectricCharacter(character, context, column) {\n if (!this._richEditBrackets || this._richEditBrackets.brackets.length === 0) {\n return null;\n }\n const tokenIndex = context.findTokenIndexAtOffset(column - 1);\n if (ignoreBracketsInToken(context.getStandardTokenType(tokenIndex))) {\n return null;\n }\n const reversedBracketRegex = this._richEditBrackets.reversedRegex;\n const text = context.getLineContent().substring(0, column - 1) + character;\n const r = BracketsUtils.findPrevBracketInRange(reversedBracketRegex, 1, text, 0, text.length);\n if (!r) {\n return null;\n }\n const bracketText = text.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\n const isOpen = this._richEditBrackets.textIsOpenBracket[bracketText];\n if (isOpen) {\n return null;\n }\n const textBeforeBracket = context.getActualLineContentBefore(r.startColumn - 1);\n if (!/^\\s*$/.test(textBeforeBracket)) {\n // There is other text on the line before the bracket\n return null;\n }\n return {\n matchOpenBracket: bracketText\n };\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction resetGlobalRegex(reg) {\n if (reg.global) {\n reg.lastIndex = 0;\n }\n return true;\n}\nexport class IndentRulesSupport {\n constructor(indentationRules) {\n this._indentationRules = indentationRules;\n }\n shouldIncrease(text) {\n if (this._indentationRules) {\n if (this._indentationRules.increaseIndentPattern && resetGlobalRegex(this._indentationRules.increaseIndentPattern) && this._indentationRules.increaseIndentPattern.test(text)) {\n return true;\n }\n // if (this._indentationRules.indentNextLinePattern && this._indentationRules.indentNextLinePattern.test(text)) {\n // \treturn true;\n // }\n }\n return false;\n }\n shouldDecrease(text) {\n if (this._indentationRules && this._indentationRules.decreaseIndentPattern && resetGlobalRegex(this._indentationRules.decreaseIndentPattern) && this._indentationRules.decreaseIndentPattern.test(text)) {\n return true;\n }\n return false;\n }\n shouldIndentNextLine(text) {\n if (this._indentationRules && this._indentationRules.indentNextLinePattern && resetGlobalRegex(this._indentationRules.indentNextLinePattern) && this._indentationRules.indentNextLinePattern.test(text)) {\n return true;\n }\n return false;\n }\n shouldIgnore(text) {\n // the text matches `unIndentedLinePattern`\n if (this._indentationRules && this._indentationRules.unIndentedLinePattern && resetGlobalRegex(this._indentationRules.unIndentedLinePattern) && this._indentationRules.unIndentedLinePattern.test(text)) {\n return true;\n }\n return false;\n }\n getIndentMetadata(text) {\n let ret = 0;\n if (this.shouldIncrease(text)) {\n ret += 1 /* INCREASE_MASK */;\n }\n if (this.shouldDecrease(text)) {\n ret += 2 /* DECREASE_MASK */;\n }\n if (this.shouldIndentNextLine(text)) {\n ret += 4 /* INDENT_NEXTLINE_MASK */;\n }\n if (this.shouldIgnore(text)) {\n ret += 8 /* UNINDENT_MASK */;\n }\n return ret;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { IndentAction } from '../languageConfiguration.js';\nexport class OnEnterSupport {\n constructor(opts) {\n opts = opts || {};\n opts.brackets = opts.brackets || [\n ['(', ')'],\n ['{', '}'],\n ['[', ']']\n ];\n this._brackets = [];\n opts.brackets.forEach((bracket) => {\n const openRegExp = OnEnterSupport._createOpenBracketRegExp(bracket[0]);\n const closeRegExp = OnEnterSupport._createCloseBracketRegExp(bracket[1]);\n if (openRegExp && closeRegExp) {\n this._brackets.push({\n open: bracket[0],\n openRegExp: openRegExp,\n close: bracket[1],\n closeRegExp: closeRegExp,\n });\n }\n });\n this._regExpRules = opts.onEnterRules || [];\n }\n onEnter(autoIndent, previousLineText, beforeEnterText, afterEnterText) {\n // (1): `regExpRules`\n if (autoIndent >= 3 /* Advanced */) {\n for (let i = 0, len = this._regExpRules.length; i < len; i++) {\n let rule = this._regExpRules[i];\n const regResult = [{\n reg: rule.beforeText,\n text: beforeEnterText\n }, {\n reg: rule.afterText,\n text: afterEnterText\n }, {\n reg: rule.previousLineText,\n text: previousLineText\n }].every((obj) => {\n if (!obj.reg) {\n return true;\n }\n obj.reg.lastIndex = 0; // To disable the effect of the \"g\" flag.\n return obj.reg.test(obj.text);\n });\n if (regResult) {\n return rule.action;\n }\n }\n }\n // (2): Special indent-outdent\n if (autoIndent >= 2 /* Brackets */) {\n if (beforeEnterText.length > 0 && afterEnterText.length > 0) {\n for (let i = 0, len = this._brackets.length; i < len; i++) {\n let bracket = this._brackets[i];\n if (bracket.openRegExp.test(beforeEnterText) && bracket.closeRegExp.test(afterEnterText)) {\n return { indentAction: IndentAction.IndentOutdent };\n }\n }\n }\n }\n // (4): Open bracket based logic\n if (autoIndent >= 2 /* Brackets */) {\n if (beforeEnterText.length > 0) {\n for (let i = 0, len = this._brackets.length; i < len; i++) {\n let bracket = this._brackets[i];\n if (bracket.openRegExp.test(beforeEnterText)) {\n return { indentAction: IndentAction.Indent };\n }\n }\n }\n }\n return null;\n }\n static _createOpenBracketRegExp(bracket) {\n let str = strings.escapeRegExpCharacters(bracket);\n if (!/\\B/.test(str.charAt(0))) {\n str = '\\\\b' + str;\n }\n str += '\\\\s*$';\n return OnEnterSupport._safeRegExp(str);\n }\n static _createCloseBracketRegExp(bracket) {\n let str = strings.escapeRegExpCharacters(bracket);\n if (!/\\B/.test(str.charAt(str.length - 1))) {\n str = str + '\\\\b';\n }\n str = '^\\\\s*' + str;\n return OnEnterSupport._safeRegExp(str);\n }\n static _safeRegExp(def) {\n try {\n return new RegExp(def);\n }\n catch (err) {\n onUnexpectedError(err);\n return null;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { DEFAULT_WORD_REGEXP, ensureValidWordDefinition } from '../model/wordHelper.js';\nimport { IndentAction, AutoClosingPairs } from './languageConfiguration.js';\nimport { createScopedLineTokens } from './supports.js';\nimport { CharacterPairSupport } from './supports/characterPair.js';\nimport { BracketElectricCharacterSupport } from './supports/electricCharacter.js';\nimport { IndentRulesSupport } from './supports/indentRules.js';\nimport { OnEnterSupport } from './supports/onEnter.js';\nimport { RichEditBrackets } from './supports/richEditBrackets.js';\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { IModeService } from '../services/modeService.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nexport class LanguageConfigurationServiceChangeEvent {\n constructor(languageId) {\n this.languageId = languageId;\n }\n affects(languageId) {\n return !this.languageId ? true : this.languageId === languageId;\n }\n}\nexport const ILanguageConfigurationService = createDecorator('languageConfigurationService');\nlet LanguageConfigurationService = class LanguageConfigurationService extends Disposable {\n constructor(configurationService, modeService) {\n super();\n this.configurationService = configurationService;\n this.modeService = modeService;\n this.onDidChangeEmitter = this._register(new Emitter());\n this.onDidChange = this.onDidChangeEmitter.event;\n this.configurations = new Map();\n const languageConfigKeys = new Set(Object.values(customizedLanguageConfigKeys));\n this._register(this.configurationService.onDidChangeConfiguration((e) => {\n const globalConfigChanged = e.change.keys.some((k) => languageConfigKeys.has(k));\n const localConfigChanged = e.change.overrides\n .filter(([overrideLangName, keys]) => keys.some((k) => languageConfigKeys.has(k)))\n .map(([overrideLangName]) => this.modeService.validateLanguageId(overrideLangName));\n if (globalConfigChanged) {\n this.configurations.clear();\n this.onDidChangeEmitter.fire(new LanguageConfigurationServiceChangeEvent(undefined));\n }\n else {\n for (const languageId of localConfigChanged) {\n if (languageId) {\n this.configurations.delete(languageId);\n this.onDidChangeEmitter.fire(new LanguageConfigurationServiceChangeEvent(languageId));\n }\n }\n }\n }));\n this._register(LanguageConfigurationRegistry.onDidChange((e) => {\n this.configurations.delete(e.languageId);\n this.onDidChangeEmitter.fire(new LanguageConfigurationServiceChangeEvent(e.languageId));\n }));\n }\n getLanguageConfiguration(languageId) {\n let result = this.configurations.get(languageId);\n if (!result) {\n result = computeConfig(languageId, this.configurationService, this.modeService);\n this.configurations.set(languageId, result);\n }\n return result;\n }\n};\nLanguageConfigurationService = __decorate([\n __param(0, IConfigurationService),\n __param(1, IModeService)\n], LanguageConfigurationService);\nexport { LanguageConfigurationService };\nfunction computeConfig(languageId, configurationService, modeService) {\n let languageConfig = LanguageConfigurationRegistry.getLanguageConfiguration(languageId);\n if (!languageConfig) {\n const validLanguageId = modeService.validateLanguageId(languageId);\n if (!validLanguageId) {\n throw new Error('Unexpected languageId');\n }\n languageConfig = new ResolvedLanguageConfiguration(validLanguageId, {});\n }\n const customizedConfig = getCustomizedLanguageConfig(languageConfig.languageId, configurationService);\n const data = combineLanguageConfigurations([languageConfig.underlyingConfig, customizedConfig]);\n const config = new ResolvedLanguageConfiguration(languageConfig.languageId, data);\n return config;\n}\nconst customizedLanguageConfigKeys = {\n brackets: 'editor.language.brackets',\n colorizedBracketPairs: 'editor.language.colorizedBracketPairs'\n};\nfunction getCustomizedLanguageConfig(languageId, configurationService) {\n const brackets = configurationService.getValue(customizedLanguageConfigKeys.brackets, {\n overrideIdentifier: languageId,\n });\n const colorizedBracketPairs = configurationService.getValue(customizedLanguageConfigKeys.colorizedBracketPairs, {\n overrideIdentifier: languageId,\n });\n return {\n brackets: validateBracketPairs(brackets),\n colorizedBracketPairs: validateBracketPairs(colorizedBracketPairs),\n };\n}\nfunction validateBracketPairs(data) {\n if (!Array.isArray(data)) {\n return undefined;\n }\n return data.map(pair => {\n if (!Array.isArray(pair) || pair.length !== 2) {\n return undefined;\n }\n return [pair[0], pair[1]];\n }).filter((p) => !!p);\n}\nexport class LanguageConfigurationChangeEvent {\n constructor(languageId) {\n this.languageId = languageId;\n }\n}\nexport class LanguageConfigurationRegistryImpl {\n constructor() {\n this._entries = new Map();\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n }\n /**\n * @param priority Use a higher number for higher priority\n */\n register(languageId, configuration, priority = 0) {\n let entries = this._entries.get(languageId);\n if (!entries) {\n entries = new ComposedLanguageConfiguration(languageId);\n this._entries.set(languageId, entries);\n }\n const disposable = entries.register(configuration, priority);\n this._onDidChange.fire(new LanguageConfigurationChangeEvent(languageId));\n return toDisposable(() => {\n disposable.dispose();\n this._onDidChange.fire(new LanguageConfigurationChangeEvent(languageId));\n });\n }\n getLanguageConfiguration(languageId) {\n let entries = this._entries.get(languageId);\n return (entries === null || entries === void 0 ? void 0 : entries.getResolvedConfiguration()) || null;\n }\n getIndentationRules(languageId) {\n const value = this.getLanguageConfiguration(languageId);\n return value ? value.indentationRules || null : null;\n }\n // begin electricCharacter\n _getElectricCharacterSupport(languageId) {\n let value = this.getLanguageConfiguration(languageId);\n if (!value) {\n return null;\n }\n return value.electricCharacter || null;\n }\n getElectricCharacters(languageId) {\n let electricCharacterSupport = this._getElectricCharacterSupport(languageId);\n if (!electricCharacterSupport) {\n return [];\n }\n return electricCharacterSupport.getElectricCharacters();\n }\n /**\n * Should return opening bracket type to match indentation with\n */\n onElectricCharacter(character, context, column) {\n let scopedLineTokens = createScopedLineTokens(context, column - 1);\n let electricCharacterSupport = this._getElectricCharacterSupport(scopedLineTokens.languageId);\n if (!electricCharacterSupport) {\n return null;\n }\n return electricCharacterSupport.onElectricCharacter(character, scopedLineTokens, column - scopedLineTokens.firstCharOffset);\n }\n // end electricCharacter\n getComments(languageId) {\n let value = this.getLanguageConfiguration(languageId);\n if (!value) {\n return null;\n }\n return value.comments || null;\n }\n // begin characterPair\n _getCharacterPairSupport(languageId) {\n let value = this.getLanguageConfiguration(languageId);\n if (!value) {\n return null;\n }\n return value.characterPair || null;\n }\n getAutoClosingPairs(languageId) {\n const characterPairSupport = this._getCharacterPairSupport(languageId);\n return new AutoClosingPairs(characterPairSupport ? characterPairSupport.getAutoClosingPairs() : []);\n }\n getAutoCloseBeforeSet(languageId) {\n let characterPairSupport = this._getCharacterPairSupport(languageId);\n if (!characterPairSupport) {\n return CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED;\n }\n return characterPairSupport.getAutoCloseBeforeSet();\n }\n getSurroundingPairs(languageId) {\n let characterPairSupport = this._getCharacterPairSupport(languageId);\n if (!characterPairSupport) {\n return [];\n }\n return characterPairSupport.getSurroundingPairs();\n }\n shouldAutoClosePair(autoClosingPair, context, column) {\n const scopedLineTokens = createScopedLineTokens(context, column - 1);\n return CharacterPairSupport.shouldAutoClosePair(autoClosingPair, scopedLineTokens, column - scopedLineTokens.firstCharOffset);\n }\n // end characterPair\n getWordDefinition(languageId) {\n let value = this.getLanguageConfiguration(languageId);\n if (!value) {\n return ensureValidWordDefinition(null);\n }\n return ensureValidWordDefinition(value.wordDefinition || null);\n }\n getFoldingRules(languageId) {\n let value = this.getLanguageConfiguration(languageId);\n if (!value) {\n return {};\n }\n return value.foldingRules;\n }\n // begin Indent Rules\n getIndentRulesSupport(languageId) {\n let value = this.getLanguageConfiguration(languageId);\n if (!value) {\n return null;\n }\n return value.indentRulesSupport || null;\n }\n /**\n * Get nearest preceding line which doesn't match unIndentPattern or contains all whitespace.\n * Result:\n * -1: run into the boundary of embedded languages\n * 0: every line above are invalid\n * else: nearest preceding line of the same language\n */\n getPrecedingValidLine(model, lineNumber, indentRulesSupport) {\n let languageID = model.getLanguageIdAtPosition(lineNumber, 0);\n if (lineNumber > 1) {\n let lastLineNumber;\n let resultLineNumber = -1;\n for (lastLineNumber = lineNumber - 1; lastLineNumber >= 1; lastLineNumber--) {\n if (model.getLanguageIdAtPosition(lastLineNumber, 0) !== languageID) {\n return resultLineNumber;\n }\n let text = model.getLineContent(lastLineNumber);\n if (indentRulesSupport.shouldIgnore(text) || /^\\s+$/.test(text) || text === '') {\n resultLineNumber = lastLineNumber;\n continue;\n }\n return lastLineNumber;\n }\n }\n return -1;\n }\n /**\n * Get inherited indentation from above lines.\n * 1. Find the nearest preceding line which doesn't match unIndentedLinePattern.\n * 2. If this line matches indentNextLinePattern or increaseIndentPattern, it means that the indent level of `lineNumber` should be 1 greater than this line.\n * 3. If this line doesn't match any indent rules\n * a. check whether the line above it matches indentNextLinePattern\n * b. If not, the indent level of this line is the result\n * c. If so, it means the indent of this line is *temporary*, go upward utill we find a line whose indent is not temporary (the same workflow a -> b -> c).\n * 4. Otherwise, we fail to get an inherited indent from aboves. Return null and we should not touch the indent of `lineNumber`\n *\n * This function only return the inherited indent based on above lines, it doesn't check whether current line should decrease or not.\n */\n getInheritIndentForLine(autoIndent, model, lineNumber, honorIntentialIndent = true) {\n if (autoIndent < 4 /* Full */) {\n return null;\n }\n const indentRulesSupport = this.getIndentRulesSupport(model.getLanguageId());\n if (!indentRulesSupport) {\n return null;\n }\n if (lineNumber <= 1) {\n return {\n indentation: '',\n action: null\n };\n }\n const precedingUnIgnoredLine = this.getPrecedingValidLine(model, lineNumber, indentRulesSupport);\n if (precedingUnIgnoredLine < 0) {\n return null;\n }\n else if (precedingUnIgnoredLine < 1) {\n return {\n indentation: '',\n action: null\n };\n }\n const precedingUnIgnoredLineContent = model.getLineContent(precedingUnIgnoredLine);\n if (indentRulesSupport.shouldIncrease(precedingUnIgnoredLineContent) || indentRulesSupport.shouldIndentNextLine(precedingUnIgnoredLineContent)) {\n return {\n indentation: strings.getLeadingWhitespace(precedingUnIgnoredLineContent),\n action: IndentAction.Indent,\n line: precedingUnIgnoredLine\n };\n }\n else if (indentRulesSupport.shouldDecrease(precedingUnIgnoredLineContent)) {\n return {\n indentation: strings.getLeadingWhitespace(precedingUnIgnoredLineContent),\n action: null,\n line: precedingUnIgnoredLine\n };\n }\n else {\n // precedingUnIgnoredLine can not be ignored.\n // it doesn't increase indent of following lines\n // it doesn't increase just next line\n // so current line is not affect by precedingUnIgnoredLine\n // and then we should get a correct inheritted indentation from above lines\n if (precedingUnIgnoredLine === 1) {\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(precedingUnIgnoredLine)),\n action: null,\n line: precedingUnIgnoredLine\n };\n }\n const previousLine = precedingUnIgnoredLine - 1;\n const previousLineIndentMetadata = indentRulesSupport.getIndentMetadata(model.getLineContent(previousLine));\n if (!(previousLineIndentMetadata & (1 /* INCREASE_MASK */ | 2 /* DECREASE_MASK */)) &&\n (previousLineIndentMetadata & 4 /* INDENT_NEXTLINE_MASK */)) {\n let stopLine = 0;\n for (let i = previousLine - 1; i > 0; i--) {\n if (indentRulesSupport.shouldIndentNextLine(model.getLineContent(i))) {\n continue;\n }\n stopLine = i;\n break;\n }\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(stopLine + 1)),\n action: null,\n line: stopLine + 1\n };\n }\n if (honorIntentialIndent) {\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(precedingUnIgnoredLine)),\n action: null,\n line: precedingUnIgnoredLine\n };\n }\n else {\n // search from precedingUnIgnoredLine until we find one whose indent is not temporary\n for (let i = precedingUnIgnoredLine; i > 0; i--) {\n const lineContent = model.getLineContent(i);\n if (indentRulesSupport.shouldIncrease(lineContent)) {\n return {\n indentation: strings.getLeadingWhitespace(lineContent),\n action: IndentAction.Indent,\n line: i\n };\n }\n else if (indentRulesSupport.shouldIndentNextLine(lineContent)) {\n let stopLine = 0;\n for (let j = i - 1; j > 0; j--) {\n if (indentRulesSupport.shouldIndentNextLine(model.getLineContent(i))) {\n continue;\n }\n stopLine = j;\n break;\n }\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(stopLine + 1)),\n action: null,\n line: stopLine + 1\n };\n }\n else if (indentRulesSupport.shouldDecrease(lineContent)) {\n return {\n indentation: strings.getLeadingWhitespace(lineContent),\n action: null,\n line: i\n };\n }\n }\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(1)),\n action: null,\n line: 1\n };\n }\n }\n }\n getGoodIndentForLine(autoIndent, virtualModel, languageId, lineNumber, indentConverter) {\n if (autoIndent < 4 /* Full */) {\n return null;\n }\n const richEditSupport = this.getLanguageConfiguration(languageId);\n if (!richEditSupport) {\n return null;\n }\n const indentRulesSupport = this.getIndentRulesSupport(languageId);\n if (!indentRulesSupport) {\n return null;\n }\n const indent = this.getInheritIndentForLine(autoIndent, virtualModel, lineNumber);\n const lineContent = virtualModel.getLineContent(lineNumber);\n if (indent) {\n const inheritLine = indent.line;\n if (inheritLine !== undefined) {\n const enterResult = richEditSupport.onEnter(autoIndent, '', virtualModel.getLineContent(inheritLine), '');\n if (enterResult) {\n let indentation = strings.getLeadingWhitespace(virtualModel.getLineContent(inheritLine));\n if (enterResult.removeText) {\n indentation = indentation.substring(0, indentation.length - enterResult.removeText);\n }\n if ((enterResult.indentAction === IndentAction.Indent) ||\n (enterResult.indentAction === IndentAction.IndentOutdent)) {\n indentation = indentConverter.shiftIndent(indentation);\n }\n else if (enterResult.indentAction === IndentAction.Outdent) {\n indentation = indentConverter.unshiftIndent(indentation);\n }\n if (indentRulesSupport.shouldDecrease(lineContent)) {\n indentation = indentConverter.unshiftIndent(indentation);\n }\n if (enterResult.appendText) {\n indentation += enterResult.appendText;\n }\n return strings.getLeadingWhitespace(indentation);\n }\n }\n if (indentRulesSupport.shouldDecrease(lineContent)) {\n if (indent.action === IndentAction.Indent) {\n return indent.indentation;\n }\n else {\n return indentConverter.unshiftIndent(indent.indentation);\n }\n }\n else {\n if (indent.action === IndentAction.Indent) {\n return indentConverter.shiftIndent(indent.indentation);\n }\n else {\n return indent.indentation;\n }\n }\n }\n return null;\n }\n getIndentForEnter(autoIndent, model, range, indentConverter) {\n if (autoIndent < 4 /* Full */) {\n return null;\n }\n model.forceTokenization(range.startLineNumber);\n const lineTokens = model.getLineTokens(range.startLineNumber);\n const scopedLineTokens = createScopedLineTokens(lineTokens, range.startColumn - 1);\n const scopedLineText = scopedLineTokens.getLineContent();\n let embeddedLanguage = false;\n let beforeEnterText;\n if (scopedLineTokens.firstCharOffset > 0 && lineTokens.getLanguageId(0) !== scopedLineTokens.languageId) {\n // we are in the embeded language content\n embeddedLanguage = true; // if embeddedLanguage is true, then we don't touch the indentation of current line\n beforeEnterText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n else {\n beforeEnterText = lineTokens.getLineContent().substring(0, range.startColumn - 1);\n }\n let afterEnterText;\n if (range.isEmpty()) {\n afterEnterText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n else {\n const endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\n afterEnterText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n const indentRulesSupport = this.getIndentRulesSupport(scopedLineTokens.languageId);\n if (!indentRulesSupport) {\n return null;\n }\n const beforeEnterResult = beforeEnterText;\n const beforeEnterIndent = strings.getLeadingWhitespace(beforeEnterText);\n const virtualModel = {\n getLineTokens: (lineNumber) => {\n return model.getLineTokens(lineNumber);\n },\n getLanguageId: () => {\n return model.getLanguageId();\n },\n getLanguageIdAtPosition: (lineNumber, column) => {\n return model.getLanguageIdAtPosition(lineNumber, column);\n },\n getLineContent: (lineNumber) => {\n if (lineNumber === range.startLineNumber) {\n return beforeEnterResult;\n }\n else {\n return model.getLineContent(lineNumber);\n }\n }\n };\n const currentLineIndent = strings.getLeadingWhitespace(lineTokens.getLineContent());\n const afterEnterAction = this.getInheritIndentForLine(autoIndent, virtualModel, range.startLineNumber + 1);\n if (!afterEnterAction) {\n const beforeEnter = embeddedLanguage ? currentLineIndent : beforeEnterIndent;\n return {\n beforeEnter: beforeEnter,\n afterEnter: beforeEnter\n };\n }\n let afterEnterIndent = embeddedLanguage ? currentLineIndent : afterEnterAction.indentation;\n if (afterEnterAction.action === IndentAction.Indent) {\n afterEnterIndent = indentConverter.shiftIndent(afterEnterIndent);\n }\n if (indentRulesSupport.shouldDecrease(afterEnterText)) {\n afterEnterIndent = indentConverter.unshiftIndent(afterEnterIndent);\n }\n return {\n beforeEnter: embeddedLanguage ? currentLineIndent : beforeEnterIndent,\n afterEnter: afterEnterIndent\n };\n }\n /**\n * We should always allow intentional indentation. It means, if users change the indentation of `lineNumber` and the content of\n * this line doesn't match decreaseIndentPattern, we should not adjust the indentation.\n */\n getIndentActionForType(autoIndent, model, range, ch, indentConverter) {\n if (autoIndent < 4 /* Full */) {\n return null;\n }\n const scopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber, range.startColumn);\n if (scopedLineTokens.firstCharOffset) {\n // this line has mixed languages and indentation rules will not work\n return null;\n }\n const indentRulesSupport = this.getIndentRulesSupport(scopedLineTokens.languageId);\n if (!indentRulesSupport) {\n return null;\n }\n const scopedLineText = scopedLineTokens.getLineContent();\n const beforeTypeText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n // selection support\n let afterTypeText;\n if (range.isEmpty()) {\n afterTypeText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n else {\n const endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\n afterTypeText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n // If previous content already matches decreaseIndentPattern, it means indentation of this line should already be adjusted\n // Users might change the indentation by purpose and we should honor that instead of readjusting.\n if (!indentRulesSupport.shouldDecrease(beforeTypeText + afterTypeText) && indentRulesSupport.shouldDecrease(beforeTypeText + ch + afterTypeText)) {\n // after typing `ch`, the content matches decreaseIndentPattern, we should adjust the indent to a good manner.\n // 1. Get inherited indent action\n const r = this.getInheritIndentForLine(autoIndent, model, range.startLineNumber, false);\n if (!r) {\n return null;\n }\n let indentation = r.indentation;\n if (r.action !== IndentAction.Indent) {\n indentation = indentConverter.unshiftIndent(indentation);\n }\n return indentation;\n }\n return null;\n }\n getIndentMetadata(model, lineNumber) {\n const indentRulesSupport = this.getIndentRulesSupport(model.getLanguageId());\n if (!indentRulesSupport) {\n return null;\n }\n if (lineNumber < 1 || lineNumber > model.getLineCount()) {\n return null;\n }\n return indentRulesSupport.getIndentMetadata(model.getLineContent(lineNumber));\n }\n // end Indent Rules\n // begin onEnter\n getEnterAction(autoIndent, model, range) {\n const scopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber, range.startColumn);\n const richEditSupport = this.getLanguageConfiguration(scopedLineTokens.languageId);\n if (!richEditSupport) {\n return null;\n }\n const scopedLineText = scopedLineTokens.getLineContent();\n const beforeEnterText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n // selection support\n let afterEnterText;\n if (range.isEmpty()) {\n afterEnterText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n else {\n const endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\n afterEnterText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n let previousLineText = '';\n if (range.startLineNumber > 1 && scopedLineTokens.firstCharOffset === 0) {\n // This is not the first line and the entire line belongs to this mode\n const oneLineAboveScopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber - 1);\n if (oneLineAboveScopedLineTokens.languageId === scopedLineTokens.languageId) {\n // The line above ends with text belonging to the same mode\n previousLineText = oneLineAboveScopedLineTokens.getLineContent();\n }\n }\n const enterResult = richEditSupport.onEnter(autoIndent, previousLineText, beforeEnterText, afterEnterText);\n if (!enterResult) {\n return null;\n }\n const indentAction = enterResult.indentAction;\n let appendText = enterResult.appendText;\n const removeText = enterResult.removeText || 0;\n // Here we add `\\t` to appendText first because enterAction is leveraging appendText and removeText to change indentation.\n if (!appendText) {\n if ((indentAction === IndentAction.Indent) ||\n (indentAction === IndentAction.IndentOutdent)) {\n appendText = '\\t';\n }\n else {\n appendText = '';\n }\n }\n else if (indentAction === IndentAction.Indent) {\n appendText = '\\t' + appendText;\n }\n let indentation = this.getIndentationAtPosition(model, range.startLineNumber, range.startColumn);\n if (removeText) {\n indentation = indentation.substring(0, indentation.length - removeText);\n }\n return {\n indentAction: indentAction,\n appendText: appendText,\n removeText: removeText,\n indentation: indentation\n };\n }\n getIndentationAtPosition(model, lineNumber, column) {\n const lineText = model.getLineContent(lineNumber);\n let indentation = strings.getLeadingWhitespace(lineText);\n if (indentation.length > column - 1) {\n indentation = indentation.substring(0, column - 1);\n }\n return indentation;\n }\n getScopedLineTokens(model, lineNumber, columnNumber) {\n model.forceTokenization(lineNumber);\n const lineTokens = model.getLineTokens(lineNumber);\n const column = (typeof columnNumber === 'undefined' ? model.getLineMaxColumn(lineNumber) - 1 : columnNumber - 1);\n return createScopedLineTokens(lineTokens, column);\n }\n}\nexport const LanguageConfigurationRegistry = new LanguageConfigurationRegistryImpl();\nclass ComposedLanguageConfiguration {\n constructor(languageId) {\n this.languageId = languageId;\n this._resolved = null;\n this._entries = [];\n this._order = 0;\n this._resolved = null;\n }\n register(configuration, priority) {\n const entry = new LanguageConfigurationContribution(configuration, priority, ++this._order);\n this._entries.push(entry);\n this._resolved = null;\n return toDisposable(() => {\n for (let i = 0; i < this._entries.length; i++) {\n if (this._entries[i] === entry) {\n this._entries.splice(i, 1);\n this._resolved = null;\n break;\n }\n }\n });\n }\n getResolvedConfiguration() {\n if (!this._resolved) {\n const config = this._resolve();\n if (config) {\n this._resolved = new ResolvedLanguageConfiguration(this.languageId, config);\n }\n }\n return this._resolved;\n }\n _resolve() {\n if (this._entries.length === 0) {\n return null;\n }\n this._entries.sort(LanguageConfigurationContribution.cmp);\n return combineLanguageConfigurations(this._entries.map(e => e.configuration));\n }\n}\nfunction combineLanguageConfigurations(configs) {\n let result = {\n comments: undefined,\n brackets: undefined,\n wordPattern: undefined,\n indentationRules: undefined,\n onEnterRules: undefined,\n autoClosingPairs: undefined,\n surroundingPairs: undefined,\n autoCloseBefore: undefined,\n folding: undefined,\n colorizedBracketPairs: undefined,\n __electricCharacterSupport: undefined,\n };\n for (const entry of configs) {\n result = {\n comments: entry.comments || result.comments,\n brackets: entry.brackets || result.brackets,\n wordPattern: entry.wordPattern || result.wordPattern,\n indentationRules: entry.indentationRules || result.indentationRules,\n onEnterRules: entry.onEnterRules || result.onEnterRules,\n autoClosingPairs: entry.autoClosingPairs || result.autoClosingPairs,\n surroundingPairs: entry.surroundingPairs || result.surroundingPairs,\n autoCloseBefore: entry.autoCloseBefore || result.autoCloseBefore,\n folding: entry.folding || result.folding,\n colorizedBracketPairs: entry.colorizedBracketPairs || result.colorizedBracketPairs,\n __electricCharacterSupport: entry.__electricCharacterSupport || result.__electricCharacterSupport,\n };\n }\n return result;\n}\nclass LanguageConfigurationContribution {\n constructor(configuration, priority, order) {\n this.configuration = configuration;\n this.priority = priority;\n this.order = order;\n }\n static cmp(a, b) {\n if (a.priority === b.priority) {\n // higher order last\n return a.order - b.order;\n }\n // higher priority last\n return a.priority - b.priority;\n }\n}\n/**\n * Immutable.\n*/\nexport class ResolvedLanguageConfiguration {\n constructor(languageId, underlyingConfig) {\n this.languageId = languageId;\n this.underlyingConfig = underlyingConfig;\n this._brackets = null;\n this._electricCharacter = null;\n this._onEnterSupport =\n this.underlyingConfig.brackets ||\n this.underlyingConfig.indentationRules ||\n this.underlyingConfig.onEnterRules\n ? new OnEnterSupport(this.underlyingConfig)\n : null;\n this.comments = ResolvedLanguageConfiguration._handleComments(this.underlyingConfig);\n this.characterPair = new CharacterPairSupport(this.underlyingConfig);\n this.wordDefinition = this.underlyingConfig.wordPattern || DEFAULT_WORD_REGEXP;\n this.indentationRules = this.underlyingConfig.indentationRules;\n if (this.underlyingConfig.indentationRules) {\n this.indentRulesSupport = new IndentRulesSupport(this.underlyingConfig.indentationRules);\n }\n else {\n this.indentRulesSupport = null;\n }\n this.foldingRules = this.underlyingConfig.folding || {};\n }\n getWordDefinition() {\n return ensureValidWordDefinition(this.wordDefinition);\n }\n get brackets() {\n if (!this._brackets && this.underlyingConfig.brackets) {\n this._brackets = new RichEditBrackets(this.languageId, this.underlyingConfig.brackets);\n }\n return this._brackets;\n }\n get electricCharacter() {\n if (!this._electricCharacter) {\n this._electricCharacter = new BracketElectricCharacterSupport(this.brackets);\n }\n return this._electricCharacter;\n }\n onEnter(autoIndent, previousLineText, beforeEnterText, afterEnterText) {\n if (!this._onEnterSupport) {\n return null;\n }\n return this._onEnterSupport.onEnter(autoIndent, previousLineText, beforeEnterText, afterEnterText);\n }\n static _handleComments(conf) {\n let commentRule = conf.comments;\n if (!commentRule) {\n return null;\n }\n // comment configuration\n let comments = {};\n if (commentRule.lineComment) {\n comments.lineCommentToken = commentRule.lineComment;\n }\n if (commentRule.blockComment) {\n let [blockStart, blockEnd] = commentRule.blockComment;\n comments.blockCommentStartToken = blockStart;\n comments.blockCommentEndToken = blockEnd;\n }\n return comments;\n }\n}\nregisterSingleton(ILanguageConfigurationService, LanguageConfigurationService);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport * as platform from '../../../base/common/platform.js';\nimport * as buffer from '../../../base/common/buffer.js';\nlet _utf16LE_TextDecoder;\nfunction getUTF16LE_TextDecoder() {\n if (!_utf16LE_TextDecoder) {\n _utf16LE_TextDecoder = new TextDecoder('UTF-16LE');\n }\n return _utf16LE_TextDecoder;\n}\nlet _utf16BE_TextDecoder;\nfunction getUTF16BE_TextDecoder() {\n if (!_utf16BE_TextDecoder) {\n _utf16BE_TextDecoder = new TextDecoder('UTF-16BE');\n }\n return _utf16BE_TextDecoder;\n}\nlet _platformTextDecoder;\nexport function getPlatformTextDecoder() {\n if (!_platformTextDecoder) {\n _platformTextDecoder = platform.isLittleEndian() ? getUTF16LE_TextDecoder() : getUTF16BE_TextDecoder();\n }\n return _platformTextDecoder;\n}\nexport const hasTextDecoder = (typeof TextDecoder !== 'undefined');\nexport let createStringBuilder;\nexport let decodeUTF16LE;\nif (hasTextDecoder) {\n createStringBuilder = (capacity) => new StringBuilder(capacity);\n decodeUTF16LE = standardDecodeUTF16LE;\n}\nelse {\n createStringBuilder = (capacity) => new CompatStringBuilder();\n decodeUTF16LE = compatDecodeUTF16LE;\n}\nfunction standardDecodeUTF16LE(source, offset, len) {\n const view = new Uint16Array(source.buffer, offset, len);\n if (len > 0 && (view[0] === 0xFEFF || view[0] === 0xFFFE)) {\n // UTF16 sometimes starts with a BOM https://de.wikipedia.org/wiki/Byte_Order_Mark\n // It looks like TextDecoder.decode will eat up a leading BOM (0xFEFF or 0xFFFE)\n // We don't want that behavior because we know the string is UTF16LE and the BOM should be maintained\n // So we use the manual decoder\n return compatDecodeUTF16LE(source, offset, len);\n }\n return getUTF16LE_TextDecoder().decode(view);\n}\nfunction compatDecodeUTF16LE(source, offset, len) {\n let result = [];\n let resultLen = 0;\n for (let i = 0; i < len; i++) {\n const charCode = buffer.readUInt16LE(source, offset);\n offset += 2;\n result[resultLen++] = String.fromCharCode(charCode);\n }\n return result.join('');\n}\nclass StringBuilder {\n constructor(capacity) {\n this._capacity = capacity | 0;\n this._buffer = new Uint16Array(this._capacity);\n this._completedStrings = null;\n this._bufferLength = 0;\n }\n reset() {\n this._completedStrings = null;\n this._bufferLength = 0;\n }\n build() {\n if (this._completedStrings !== null) {\n this._flushBuffer();\n return this._completedStrings.join('');\n }\n return this._buildBuffer();\n }\n _buildBuffer() {\n if (this._bufferLength === 0) {\n return '';\n }\n const view = new Uint16Array(this._buffer.buffer, 0, this._bufferLength);\n return getPlatformTextDecoder().decode(view);\n }\n _flushBuffer() {\n const bufferString = this._buildBuffer();\n this._bufferLength = 0;\n if (this._completedStrings === null) {\n this._completedStrings = [bufferString];\n }\n else {\n this._completedStrings[this._completedStrings.length] = bufferString;\n }\n }\n write1(charCode) {\n const remainingSpace = this._capacity - this._bufferLength;\n if (remainingSpace <= 1) {\n if (remainingSpace === 0 || strings.isHighSurrogate(charCode)) {\n this._flushBuffer();\n }\n }\n this._buffer[this._bufferLength++] = charCode;\n }\n appendASCII(charCode) {\n if (this._bufferLength === this._capacity) {\n // buffer is full\n this._flushBuffer();\n }\n this._buffer[this._bufferLength++] = charCode;\n }\n appendASCIIString(str) {\n const strLen = str.length;\n if (this._bufferLength + strLen >= this._capacity) {\n // This string does not fit in the remaining buffer space\n this._flushBuffer();\n this._completedStrings[this._completedStrings.length] = str;\n return;\n }\n for (let i = 0; i < strLen; i++) {\n this._buffer[this._bufferLength++] = str.charCodeAt(i);\n }\n }\n}\nclass CompatStringBuilder {\n constructor() {\n this._pieces = [];\n this._piecesLen = 0;\n }\n reset() {\n this._pieces = [];\n this._piecesLen = 0;\n }\n build() {\n return this._pieces.join('');\n }\n write1(charCode) {\n this._pieces[this._piecesLen++] = String.fromCharCode(charCode);\n }\n appendASCII(charCode) {\n this._pieces[this._piecesLen++] = String.fromCharCode(charCode);\n }\n appendASCIIString(str) {\n this._pieces[this._piecesLen++] = str;\n }\n}\n","/*!\nCopyright (c) 2014 Taylor Hakes\nCopyright (c) 2014 Forbes Lindesay\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n\t\ttypeof define === 'function' && define.amd ? define(factory) :\n\t\t\t(factory());\n}(this, (function () {\n\t'use strict';\n\n\t/**\n\t * @this {Promise}\n\t */\n\tfunction finallyConstructor(callback) {\n\t\tvar constructor = this.constructor;\n\t\treturn this.then(\n\t\t\tfunction (value) {\n\t\t\t\treturn constructor.resolve(callback()).then(function () {\n\t\t\t\t\treturn value;\n\t\t\t\t});\n\t\t\t},\n\t\t\tfunction (reason) {\n\t\t\t\treturn constructor.resolve(callback()).then(function () {\n\t\t\t\t\treturn constructor.reject(reason);\n\t\t\t\t});\n\t\t\t}\n\t\t);\n\t}\n\n\t// Store setTimeout reference so promise-polyfill will be unaffected by\n\t// other code modifying setTimeout (like sinon.useFakeTimers())\n\tvar setTimeoutFunc = setTimeout;\n\n\tfunction noop() { }\n\n\t// Polyfill for Function.prototype.bind\n\tfunction bind(fn, thisArg) {\n\t\treturn function () {\n\t\t\tfn.apply(thisArg, arguments);\n\t\t};\n\t}\n\n\t/**\n\t * @constructor\n\t * @param {Function} fn\n\t */\n\tfunction Promise(fn) {\n\t\tif (!(this instanceof Promise))\n\t\t\tthrow new TypeError('Promises must be constructed via new');\n\t\tif (typeof fn !== 'function') throw new TypeError('not a function');\n\t\t/** @type {!number} */\n\t\tthis._state = 0;\n\t\t/** @type {!boolean} */\n\t\tthis._handled = false;\n\t\t/** @type {Promise|undefined} */\n\t\tthis._value = undefined;\n\t\t/** @type {!Array} */\n\t\tthis._deferreds = [];\n\n\t\tdoResolve(fn, this);\n\t}\n\n\tfunction handle(self, deferred) {\n\t\twhile (self._state === 3) {\n\t\t\tself = self._value;\n\t\t}\n\t\tif (self._state === 0) {\n\t\t\tself._deferreds.push(deferred);\n\t\t\treturn;\n\t\t}\n\t\tself._handled = true;\n\t\tPromise._immediateFn(function () {\n\t\t\tvar cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n\t\t\tif (cb === null) {\n\t\t\t\t(self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar ret;\n\t\t\ttry {\n\t\t\t\tret = cb(self._value);\n\t\t\t} catch (e) {\n\t\t\t\treject(deferred.promise, e);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(deferred.promise, ret);\n\t\t});\n\t}\n\n\tfunction resolve(self, newValue) {\n\t\ttry {\n\t\t\t// Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n\t\t\tif (newValue === self)\n\t\t\t\tthrow new TypeError('A promise cannot be resolved with itself.');\n\t\t\tif (\n\t\t\t\tnewValue &&\n\t\t\t\t(typeof newValue === 'object' || typeof newValue === 'function')\n\t\t\t) {\n\t\t\t\tvar then = newValue.then;\n\t\t\t\tif (newValue instanceof Promise) {\n\t\t\t\t\tself._state = 3;\n\t\t\t\t\tself._value = newValue;\n\t\t\t\t\tfinale(self);\n\t\t\t\t\treturn;\n\t\t\t\t} else if (typeof then === 'function') {\n\t\t\t\t\tdoResolve(bind(then, newValue), self);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself._state = 1;\n\t\t\tself._value = newValue;\n\t\t\tfinale(self);\n\t\t} catch (e) {\n\t\t\treject(self, e);\n\t\t}\n\t}\n\n\tfunction reject(self, newValue) {\n\t\tself._state = 2;\n\t\tself._value = newValue;\n\t\tfinale(self);\n\t}\n\n\tfunction finale(self) {\n\t\tif (self._state === 2 && self._deferreds.length === 0) {\n\t\t\tPromise._immediateFn(function () {\n\t\t\t\tif (!self._handled) {\n\t\t\t\t\tPromise._unhandledRejectionFn(self._value);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfor (var i = 0, len = self._deferreds.length; i < len; i++) {\n\t\t\thandle(self, self._deferreds[i]);\n\t\t}\n\t\tself._deferreds = null;\n\t}\n\n\t/**\n\t * @constructor\n\t */\n\tfunction Handler(onFulfilled, onRejected, promise) {\n\t\tthis.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n\t\tthis.onRejected = typeof onRejected === 'function' ? onRejected : null;\n\t\tthis.promise = promise;\n\t}\n\n\t/**\n\t * Take a potentially misbehaving resolver function and make sure\n\t * onFulfilled and onRejected are only called once.\n\t *\n\t * Makes no guarantees about asynchrony.\n\t */\n\tfunction doResolve(fn, self) {\n\t\tvar done = false;\n\t\ttry {\n\t\t\tfn(\n\t\t\t\tfunction (value) {\n\t\t\t\t\tif (done) return;\n\t\t\t\t\tdone = true;\n\t\t\t\t\tresolve(self, value);\n\t\t\t\t},\n\t\t\t\tfunction (reason) {\n\t\t\t\t\tif (done) return;\n\t\t\t\t\tdone = true;\n\t\t\t\t\treject(self, reason);\n\t\t\t\t}\n\t\t\t);\n\t\t} catch (ex) {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\treject(self, ex);\n\t\t}\n\t}\n\n\tPromise.prototype['catch'] = function (onRejected) {\n\t\treturn this.then(null, onRejected);\n\t};\n\n\tPromise.prototype.then = function (onFulfilled, onRejected) {\n\t\t// @ts-ignore\n\t\tvar prom = new this.constructor(noop);\n\n\t\thandle(this, new Handler(onFulfilled, onRejected, prom));\n\t\treturn prom;\n\t};\n\n\tPromise.prototype['finally'] = finallyConstructor;\n\n\tPromise.all = function (arr) {\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (!arr || typeof arr.length === 'undefined')\n\t\t\t\tthrow new TypeError('Promise.all accepts an array');\n\t\t\tvar args = Array.prototype.slice.call(arr);\n\t\t\tif (args.length === 0) return resolve([]);\n\t\t\tvar remaining = args.length;\n\n\t\t\tfunction res(i, val) {\n\t\t\t\ttry {\n\t\t\t\t\tif (val && (typeof val === 'object' || typeof val === 'function')) {\n\t\t\t\t\t\tvar then = val.then;\n\t\t\t\t\t\tif (typeof then === 'function') {\n\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\tval,\n\t\t\t\t\t\t\t\tfunction (val) {\n\t\t\t\t\t\t\t\t\tres(i, val);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\treject\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\targs[i] = val;\n\t\t\t\t\tif (--remaining === 0) {\n\t\t\t\t\t\tresolve(args);\n\t\t\t\t\t}\n\t\t\t\t} catch (ex) {\n\t\t\t\t\treject(ex);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < args.length; i++) {\n\t\t\t\tres(i, args[i]);\n\t\t\t}\n\t\t});\n\t};\n\n\tPromise.resolve = function (value) {\n\t\tif (value && typeof value === 'object' && value.constructor === Promise) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn new Promise(function (resolve) {\n\t\t\tresolve(value);\n\t\t});\n\t};\n\n\tPromise.reject = function (value) {\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\treject(value);\n\t\t});\n\t};\n\n\tPromise.race = function (values) {\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tfor (var i = 0, len = values.length; i < len; i++) {\n\t\t\t\tvalues[i].then(resolve, reject);\n\t\t\t}\n\t\t});\n\t};\n\n\t// Use polyfill for setImmediate for performance gains\n\tPromise._immediateFn =\n\t\t(typeof setImmediate === 'function' &&\n\t\t\tfunction (fn) {\n\t\t\t\tsetImmediate(fn);\n\t\t\t}) ||\n\t\tfunction (fn) {\n\t\t\tsetTimeoutFunc(fn, 0);\n\t\t};\n\n\tPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n\t\tif (typeof console !== 'undefined' && console) {\n\t\t\tconsole.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n\t\t}\n\t};\n\n\t/** @suppress {undefinedVars} */\n\tvar globalNS = (function () {\n\t\t// the only reliable means to get the global object is\n\t\t// `Function('return this')()`\n\t\t// However, this causes CSP violations in Chrome apps.\n\t\tif (typeof self !== 'undefined') {\n\t\t\treturn self;\n\t\t}\n\t\tif (typeof window !== 'undefined') {\n\t\t\treturn window;\n\t\t}\n\t\tif (typeof global !== 'undefined') {\n\t\t\treturn global;\n\t\t}\n\t\tthrow new Error('unable to locate global object');\n\t})();\n\n\tif (!('Promise' in globalNS)) {\n\t\tglobalNS['Promise'] = Promise;\n\t} else if (!globalNS.Promise.prototype['finally']) {\n\t\tglobalNS.Promise.prototype['finally'] = finallyConstructor;\n\t}\n\n})));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { Separator, SubmenuAction } from '../../../base/common/actions.js';\nimport { CSSIcon } from '../../../base/common/codicons.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { ICommandService } from '../../commands/common/commands.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { ThemeIcon } from '../../theme/common/themeService.js';\nexport function isIMenuItem(item) {\n return item.command !== undefined;\n}\nexport class MenuId {\n constructor(debugName) {\n this.id = MenuId._idPool++;\n this._debugName = debugName;\n }\n}\nMenuId._idPool = 0;\nMenuId.CommandPalette = new MenuId('CommandPalette');\nMenuId.EditorContext = new MenuId('EditorContext');\nMenuId.SimpleEditorContext = new MenuId('SimpleEditorContext');\nMenuId.EditorContextCopy = new MenuId('EditorContextCopy');\nMenuId.EditorContextPeek = new MenuId('EditorContextPeek');\nMenuId.MenubarEditMenu = new MenuId('MenubarEditMenu');\nMenuId.MenubarCopy = new MenuId('MenubarCopy');\nMenuId.MenubarGoMenu = new MenuId('MenubarGoMenu');\nMenuId.MenubarSelectionMenu = new MenuId('MenubarSelectionMenu');\nMenuId.InlineCompletionsActions = new MenuId('InlineCompletionsActions');\nexport const IMenuService = createDecorator('menuService');\nexport const MenuRegistry = new class {\n constructor() {\n this._commands = new Map();\n this._menuItems = new Map();\n this._onDidChangeMenu = new Emitter();\n this.onDidChangeMenu = this._onDidChangeMenu.event;\n this._commandPaletteChangeEvent = {\n has: id => id === MenuId.CommandPalette\n };\n }\n addCommand(command) {\n return this.addCommands(Iterable.single(command));\n }\n addCommands(commands) {\n for (const command of commands) {\n this._commands.set(command.id, command);\n }\n this._onDidChangeMenu.fire(this._commandPaletteChangeEvent);\n return toDisposable(() => {\n let didChange = false;\n for (const command of commands) {\n didChange = this._commands.delete(command.id) || didChange;\n }\n if (didChange) {\n this._onDidChangeMenu.fire(this._commandPaletteChangeEvent);\n }\n });\n }\n getCommand(id) {\n return this._commands.get(id);\n }\n getCommands() {\n const map = new Map();\n this._commands.forEach((value, key) => map.set(key, value));\n return map;\n }\n appendMenuItem(id, item) {\n return this.appendMenuItems(Iterable.single({ id, item }));\n }\n appendMenuItems(items) {\n const changedIds = new Set();\n const toRemove = new LinkedList();\n for (const { id, item } of items) {\n let list = this._menuItems.get(id);\n if (!list) {\n list = new LinkedList();\n this._menuItems.set(id, list);\n }\n toRemove.push(list.push(item));\n changedIds.add(id);\n }\n this._onDidChangeMenu.fire(changedIds);\n return toDisposable(() => {\n if (toRemove.size > 0) {\n for (let fn of toRemove) {\n fn();\n }\n this._onDidChangeMenu.fire(changedIds);\n toRemove.clear();\n }\n });\n }\n getMenuItems(id) {\n let result;\n if (this._menuItems.has(id)) {\n result = [...this._menuItems.get(id)];\n }\n else {\n result = [];\n }\n if (id === MenuId.CommandPalette) {\n // CommandPalette is special because it shows\n // all commands by default\n this._appendImplicitItems(result);\n }\n return result;\n }\n _appendImplicitItems(result) {\n const set = new Set();\n for (const item of result) {\n if (isIMenuItem(item)) {\n set.add(item.command.id);\n if (item.alt) {\n set.add(item.alt.id);\n }\n }\n }\n this._commands.forEach((command, id) => {\n if (!set.has(id)) {\n result.push({ command });\n }\n });\n }\n};\nexport class SubmenuItemAction extends SubmenuAction {\n constructor(item, _menuService, _contextKeyService, _options) {\n super(`submenuitem.${item.submenu.id}`, typeof item.title === 'string' ? item.title : item.title.value, [], 'submenu');\n this.item = item;\n this._menuService = _menuService;\n this._contextKeyService = _contextKeyService;\n this._options = _options;\n }\n get actions() {\n const result = [];\n const menu = this._menuService.createMenu(this.item.submenu, this._contextKeyService);\n const groups = menu.getActions(this._options);\n menu.dispose();\n for (const [, actions] of groups) {\n if (actions.length > 0) {\n result.push(...actions);\n result.push(new Separator());\n }\n }\n if (result.length) {\n result.pop(); // remove last separator\n }\n return result;\n }\n}\n// implements IAction, does NOT extend Action, so that no one\n// subscribes to events of Action or modified properties\nlet MenuItemAction = class MenuItemAction {\n constructor(item, alt, options, contextKeyService, _commandService) {\n var _a, _b;\n this._commandService = _commandService;\n this.id = item.id;\n this.label = (options === null || options === void 0 ? void 0 : options.renderShortTitle) && item.shortTitle\n ? (typeof item.shortTitle === 'string' ? item.shortTitle : item.shortTitle.value)\n : (typeof item.title === 'string' ? item.title : item.title.value);\n this.tooltip = (_b = (typeof item.tooltip === 'string' ? item.tooltip : (_a = item.tooltip) === null || _a === void 0 ? void 0 : _a.value)) !== null && _b !== void 0 ? _b : '';\n this.enabled = !item.precondition || contextKeyService.contextMatchesRules(item.precondition);\n this.checked = undefined;\n if (item.toggled) {\n const toggled = (item.toggled.condition ? item.toggled : { condition: item.toggled });\n this.checked = contextKeyService.contextMatchesRules(toggled.condition);\n if (this.checked && toggled.tooltip) {\n this.tooltip = typeof toggled.tooltip === 'string' ? toggled.tooltip : toggled.tooltip.value;\n }\n if (toggled.title) {\n this.label = typeof toggled.title === 'string' ? toggled.title : toggled.title.value;\n }\n }\n this.item = item;\n this.alt = alt ? new MenuItemAction(alt, undefined, options, contextKeyService, _commandService) : undefined;\n this._options = options;\n if (ThemeIcon.isThemeIcon(item.icon)) {\n this.class = CSSIcon.asClassName(item.icon);\n }\n }\n dispose() {\n // there is NOTHING to dispose and the MenuItemAction should\n // never have anything to dispose as it is a convenience type\n // to bridge into the rendering world.\n }\n run(...args) {\n var _a, _b;\n let runArgs = [];\n if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.arg) {\n runArgs = [...runArgs, this._options.arg];\n }\n if ((_b = this._options) === null || _b === void 0 ? void 0 : _b.shouldForwardArgs) {\n runArgs = [...runArgs, ...args];\n }\n return this._commandService.executeCommand(this.id, ...runArgs);\n }\n};\nMenuItemAction = __decorate([\n __param(3, IContextKeyService),\n __param(4, ICommandService)\n], MenuItemAction);\nexport { MenuItemAction };\n//#endregion\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { LRUCache } from './map.js';\nimport * as strings from './strings.js';\n// Combined filters\n/**\n * @returns A filter which combines the provided set\n * of filters with an or. The *first* filters that\n * matches defined the return value of the returned\n * filter.\n */\nexport function or(...filter) {\n return function (word, wordToMatchAgainst) {\n for (let i = 0, len = filter.length; i < len; i++) {\n const match = filter[i](word, wordToMatchAgainst);\n if (match) {\n return match;\n }\n }\n return null;\n };\n}\nexport const matchesPrefix = _matchesPrefix.bind(undefined, true);\nfunction _matchesPrefix(ignoreCase, word, wordToMatchAgainst) {\n if (!wordToMatchAgainst || wordToMatchAgainst.length < word.length) {\n return null;\n }\n let matches;\n if (ignoreCase) {\n matches = strings.startsWithIgnoreCase(wordToMatchAgainst, word);\n }\n else {\n matches = wordToMatchAgainst.indexOf(word) === 0;\n }\n if (!matches) {\n return null;\n }\n return word.length > 0 ? [{ start: 0, end: word.length }] : [];\n}\n// Contiguous Substring\nexport function matchesContiguousSubString(word, wordToMatchAgainst) {\n const index = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase());\n if (index === -1) {\n return null;\n }\n return [{ start: index, end: index + word.length }];\n}\n// Substring\nexport function matchesSubString(word, wordToMatchAgainst) {\n return _matchesSubString(word.toLowerCase(), wordToMatchAgainst.toLowerCase(), 0, 0);\n}\nfunction _matchesSubString(word, wordToMatchAgainst, i, j) {\n if (i === word.length) {\n return [];\n }\n else if (j === wordToMatchAgainst.length) {\n return null;\n }\n else {\n if (word[i] === wordToMatchAgainst[j]) {\n let result = null;\n if (result = _matchesSubString(word, wordToMatchAgainst, i + 1, j + 1)) {\n return join({ start: j, end: j + 1 }, result);\n }\n return null;\n }\n return _matchesSubString(word, wordToMatchAgainst, i, j + 1);\n }\n}\n// CamelCase\nfunction isLower(code) {\n return 97 /* a */ <= code && code <= 122 /* z */;\n}\nexport function isUpper(code) {\n return 65 /* A */ <= code && code <= 90 /* Z */;\n}\nfunction isNumber(code) {\n return 48 /* Digit0 */ <= code && code <= 57 /* Digit9 */;\n}\nfunction isWhitespace(code) {\n return (code === 32 /* Space */\n || code === 9 /* Tab */\n || code === 10 /* LineFeed */\n || code === 13 /* CarriageReturn */);\n}\nconst wordSeparators = new Set();\n'`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?'\n .split('')\n .forEach(s => wordSeparators.add(s.charCodeAt(0)));\nfunction isWordSeparator(code) {\n return isWhitespace(code) || wordSeparators.has(code);\n}\nfunction charactersMatch(codeA, codeB) {\n return (codeA === codeB) || (isWordSeparator(codeA) && isWordSeparator(codeB));\n}\nfunction isAlphanumeric(code) {\n return isLower(code) || isUpper(code) || isNumber(code);\n}\nfunction join(head, tail) {\n if (tail.length === 0) {\n tail = [head];\n }\n else if (head.end === tail[0].start) {\n tail[0].start = head.start;\n }\n else {\n tail.unshift(head);\n }\n return tail;\n}\nfunction nextAnchor(camelCaseWord, start) {\n for (let i = start; i < camelCaseWord.length; i++) {\n const c = camelCaseWord.charCodeAt(i);\n if (isUpper(c) || isNumber(c) || (i > 0 && !isAlphanumeric(camelCaseWord.charCodeAt(i - 1)))) {\n return i;\n }\n }\n return camelCaseWord.length;\n}\nfunction _matchesCamelCase(word, camelCaseWord, i, j) {\n if (i === word.length) {\n return [];\n }\n else if (j === camelCaseWord.length) {\n return null;\n }\n else if (word[i] !== camelCaseWord[j].toLowerCase()) {\n return null;\n }\n else {\n let result = null;\n let nextUpperIndex = j + 1;\n result = _matchesCamelCase(word, camelCaseWord, i + 1, j + 1);\n while (!result && (nextUpperIndex = nextAnchor(camelCaseWord, nextUpperIndex)) < camelCaseWord.length) {\n result = _matchesCamelCase(word, camelCaseWord, i + 1, nextUpperIndex);\n nextUpperIndex++;\n }\n return result === null ? null : join({ start: j, end: j + 1 }, result);\n }\n}\n// Heuristic to avoid computing camel case matcher for words that don't\n// look like camelCaseWords.\nfunction analyzeCamelCaseWord(word) {\n let upper = 0, lower = 0, alpha = 0, numeric = 0, code = 0;\n for (let i = 0; i < word.length; i++) {\n code = word.charCodeAt(i);\n if (isUpper(code)) {\n upper++;\n }\n if (isLower(code)) {\n lower++;\n }\n if (isAlphanumeric(code)) {\n alpha++;\n }\n if (isNumber(code)) {\n numeric++;\n }\n }\n const upperPercent = upper / word.length;\n const lowerPercent = lower / word.length;\n const alphaPercent = alpha / word.length;\n const numericPercent = numeric / word.length;\n return { upperPercent, lowerPercent, alphaPercent, numericPercent };\n}\nfunction isUpperCaseWord(analysis) {\n const { upperPercent, lowerPercent } = analysis;\n return lowerPercent === 0 && upperPercent > 0.6;\n}\nfunction isCamelCaseWord(analysis) {\n const { upperPercent, lowerPercent, alphaPercent, numericPercent } = analysis;\n return lowerPercent > 0.2 && upperPercent < 0.8 && alphaPercent > 0.6 && numericPercent < 0.2;\n}\n// Heuristic to avoid computing camel case matcher for words that don't\n// look like camel case patterns.\nfunction isCamelCasePattern(word) {\n let upper = 0, lower = 0, code = 0, whitespace = 0;\n for (let i = 0; i < word.length; i++) {\n code = word.charCodeAt(i);\n if (isUpper(code)) {\n upper++;\n }\n if (isLower(code)) {\n lower++;\n }\n if (isWhitespace(code)) {\n whitespace++;\n }\n }\n if ((upper === 0 || lower === 0) && whitespace === 0) {\n return word.length <= 30;\n }\n else {\n return upper <= 5;\n }\n}\nexport function matchesCamelCase(word, camelCaseWord) {\n if (!camelCaseWord) {\n return null;\n }\n camelCaseWord = camelCaseWord.trim();\n if (camelCaseWord.length === 0) {\n return null;\n }\n if (!isCamelCasePattern(word)) {\n return null;\n }\n if (camelCaseWord.length > 60) {\n return null;\n }\n const analysis = analyzeCamelCaseWord(camelCaseWord);\n if (!isCamelCaseWord(analysis)) {\n if (!isUpperCaseWord(analysis)) {\n return null;\n }\n camelCaseWord = camelCaseWord.toLowerCase();\n }\n let result = null;\n let i = 0;\n word = word.toLowerCase();\n while (i < camelCaseWord.length && (result = _matchesCamelCase(word, camelCaseWord, 0, i)) === null) {\n i = nextAnchor(camelCaseWord, i + 1);\n }\n return result;\n}\n// Matches beginning of words supporting non-ASCII languages\n// If `contiguous` is true then matches word with beginnings of the words in the target. E.g. \"pul\" will match \"Git: Pull\"\n// Otherwise also matches sub string of the word with beginnings of the words in the target. E.g. \"gp\" or \"g p\" will match \"Git: Pull\"\n// Useful in cases where the target is words (e.g. command labels)\nexport function matchesWords(word, target, contiguous = false) {\n if (!target || target.length === 0) {\n return null;\n }\n let result = null;\n let i = 0;\n word = word.toLowerCase();\n target = target.toLowerCase();\n while (i < target.length && (result = _matchesWords(word, target, 0, i, contiguous)) === null) {\n i = nextWord(target, i + 1);\n }\n return result;\n}\nfunction _matchesWords(word, target, i, j, contiguous) {\n if (i === word.length) {\n return [];\n }\n else if (j === target.length) {\n return null;\n }\n else if (!charactersMatch(word.charCodeAt(i), target.charCodeAt(j))) {\n return null;\n }\n else {\n let result = null;\n let nextWordIndex = j + 1;\n result = _matchesWords(word, target, i + 1, j + 1, contiguous);\n if (!contiguous) {\n while (!result && (nextWordIndex = nextWord(target, nextWordIndex)) < target.length) {\n result = _matchesWords(word, target, i + 1, nextWordIndex, contiguous);\n nextWordIndex++;\n }\n }\n return result === null ? null : join({ start: j, end: j + 1 }, result);\n }\n}\nfunction nextWord(word, start) {\n for (let i = start; i < word.length; i++) {\n if (isWordSeparator(word.charCodeAt(i)) ||\n (i > 0 && isWordSeparator(word.charCodeAt(i - 1)))) {\n return i;\n }\n }\n return word.length;\n}\n// Fuzzy\nconst fuzzyContiguousFilter = or(matchesPrefix, matchesCamelCase, matchesContiguousSubString);\nconst fuzzySeparateFilter = or(matchesPrefix, matchesCamelCase, matchesSubString);\nconst fuzzyRegExpCache = new LRUCache(10000); // bounded to 10000 elements\nexport function matchesFuzzy(word, wordToMatchAgainst, enableSeparateSubstringMatching = false) {\n if (typeof word !== 'string' || typeof wordToMatchAgainst !== 'string') {\n return null; // return early for invalid input\n }\n // Form RegExp for wildcard matches\n let regexp = fuzzyRegExpCache.get(word);\n if (!regexp) {\n regexp = new RegExp(strings.convertSimple2RegExpPattern(word), 'i');\n fuzzyRegExpCache.set(word, regexp);\n }\n // RegExp Filter\n const match = regexp.exec(wordToMatchAgainst);\n if (match) {\n return [{ start: match.index, end: match.index + match[0].length }];\n }\n // Default Filter\n return enableSeparateSubstringMatching ? fuzzySeparateFilter(word, wordToMatchAgainst) : fuzzyContiguousFilter(word, wordToMatchAgainst);\n}\nexport function anyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos) {\n const max = Math.min(13, pattern.length);\n for (; patternPos < max; patternPos++) {\n const result = fuzzyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos, false);\n if (result) {\n return result;\n }\n }\n return [0, wordPos];\n}\n//#region --- fuzzyScore ---\nexport function createMatches(score) {\n if (typeof score === 'undefined') {\n return [];\n }\n const res = [];\n const wordPos = score[1];\n for (let i = score.length - 1; i > 1; i--) {\n const pos = score[i] + wordPos;\n const last = res[res.length - 1];\n if (last && last.end === pos) {\n last.end = pos + 1;\n }\n else {\n res.push({ start: pos, end: pos + 1 });\n }\n }\n return res;\n}\nconst _maxLen = 128;\nfunction initTable() {\n const table = [];\n const row = [];\n for (let i = 0; i <= _maxLen; i++) {\n row[i] = 0;\n }\n for (let i = 0; i <= _maxLen; i++) {\n table.push(row.slice(0));\n }\n return table;\n}\nfunction initArr(maxLen) {\n const row = [];\n for (let i = 0; i <= maxLen; i++) {\n row[i] = 0;\n }\n return row;\n}\nconst _minWordMatchPos = initArr(2 * _maxLen); // min word position for a certain pattern position\nconst _maxWordMatchPos = initArr(2 * _maxLen); // max word position for a certain pattern position\nconst _diag = initTable(); // the length of a contiguous diagonal match\nconst _table = initTable();\nconst _arrows = initTable();\nconst _debug = false;\nfunction printTable(table, pattern, patternLen, word, wordLen) {\n function pad(s, n, pad = ' ') {\n while (s.length < n) {\n s = pad + s;\n }\n return s;\n }\n let ret = ` | |${word.split('').map(c => pad(c, 3)).join('|')}\\n`;\n for (let i = 0; i <= patternLen; i++) {\n if (i === 0) {\n ret += ' |';\n }\n else {\n ret += `${pattern[i - 1]}|`;\n }\n ret += table[i].slice(0, wordLen + 1).map(n => pad(n.toString(), 3)).join('|') + '\\n';\n }\n return ret;\n}\nfunction printTables(pattern, patternStart, word, wordStart) {\n pattern = pattern.substr(patternStart);\n word = word.substr(wordStart);\n console.log(printTable(_table, pattern, pattern.length, word, word.length));\n console.log(printTable(_arrows, pattern, pattern.length, word, word.length));\n console.log(printTable(_diag, pattern, pattern.length, word, word.length));\n}\nfunction isSeparatorAtPos(value, index) {\n if (index < 0 || index >= value.length) {\n return false;\n }\n const code = value.codePointAt(index);\n switch (code) {\n case 95 /* Underline */:\n case 45 /* Dash */:\n case 46 /* Period */:\n case 32 /* Space */:\n case 47 /* Slash */:\n case 92 /* Backslash */:\n case 39 /* SingleQuote */:\n case 34 /* DoubleQuote */:\n case 58 /* Colon */:\n case 36 /* DollarSign */:\n case 60 /* LessThan */:\n case 40 /* OpenParen */:\n case 91 /* OpenSquareBracket */:\n return true;\n case undefined:\n return false;\n default:\n if (strings.isEmojiImprecise(code)) {\n return true;\n }\n return false;\n }\n}\nfunction isWhitespaceAtPos(value, index) {\n if (index < 0 || index >= value.length) {\n return false;\n }\n const code = value.charCodeAt(index);\n switch (code) {\n case 32 /* Space */:\n case 9 /* Tab */:\n return true;\n default:\n return false;\n }\n}\nfunction isUpperCaseAtPos(pos, word, wordLow) {\n return word[pos] !== wordLow[pos];\n}\nexport function isPatternInWord(patternLow, patternPos, patternLen, wordLow, wordPos, wordLen, fillMinWordPosArr = false) {\n while (patternPos < patternLen && wordPos < wordLen) {\n if (patternLow[patternPos] === wordLow[wordPos]) {\n if (fillMinWordPosArr) {\n // Remember the min word position for each pattern position\n _minWordMatchPos[patternPos] = wordPos;\n }\n patternPos += 1;\n }\n wordPos += 1;\n }\n return patternPos === patternLen; // pattern must be exhausted\n}\nexport var FuzzyScore;\n(function (FuzzyScore) {\n /**\n * No matches and value `-100`\n */\n FuzzyScore.Default = ([-100, 0]);\n function isDefault(score) {\n return !score || (score.length === 2 && score[0] === -100 && score[1] === 0);\n }\n FuzzyScore.isDefault = isDefault;\n})(FuzzyScore || (FuzzyScore = {}));\nexport function fuzzyScore(pattern, patternLow, patternStart, word, wordLow, wordStart, firstMatchCanBeWeak) {\n const patternLen = pattern.length > _maxLen ? _maxLen : pattern.length;\n const wordLen = word.length > _maxLen ? _maxLen : word.length;\n if (patternStart >= patternLen || wordStart >= wordLen || (patternLen - patternStart) > (wordLen - wordStart)) {\n return undefined;\n }\n // Run a simple check if the characters of pattern occur\n // (in order) at all in word. If that isn't the case we\n // stop because no match will be possible\n if (!isPatternInWord(patternLow, patternStart, patternLen, wordLow, wordStart, wordLen, true)) {\n return undefined;\n }\n // Find the max matching word position for each pattern position\n // NOTE: the min matching word position was filled in above, in the `isPatternInWord` call\n _fillInMaxWordMatchPos(patternLen, wordLen, patternStart, wordStart, patternLow, wordLow);\n let row = 1;\n let column = 1;\n let patternPos = patternStart;\n let wordPos = wordStart;\n const hasStrongFirstMatch = [false];\n // There will be a match, fill in tables\n for (row = 1, patternPos = patternStart; patternPos < patternLen; row++, patternPos++) {\n // Reduce search space to possible matching word positions and to possible access from next row\n const minWordMatchPos = _minWordMatchPos[patternPos];\n const maxWordMatchPos = _maxWordMatchPos[patternPos];\n const nextMaxWordMatchPos = (patternPos + 1 < patternLen ? _maxWordMatchPos[patternPos + 1] : wordLen);\n for (column = minWordMatchPos - wordStart + 1, wordPos = minWordMatchPos; wordPos < nextMaxWordMatchPos; column++, wordPos++) {\n let score = Number.MIN_SAFE_INTEGER;\n let canComeDiag = false;\n if (wordPos <= maxWordMatchPos) {\n score = _doScore(pattern, patternLow, patternPos, patternStart, word, wordLow, wordPos, wordLen, wordStart, _diag[row - 1][column - 1] === 0, hasStrongFirstMatch);\n }\n let diagScore = 0;\n if (score !== Number.MAX_SAFE_INTEGER) {\n canComeDiag = true;\n diagScore = score + _table[row - 1][column - 1];\n }\n const canComeLeft = wordPos > minWordMatchPos;\n const leftScore = canComeLeft ? _table[row][column - 1] + (_diag[row][column - 1] > 0 ? -5 : 0) : 0; // penalty for a gap start\n const canComeLeftLeft = wordPos > minWordMatchPos + 1 && _diag[row][column - 1] > 0;\n const leftLeftScore = canComeLeftLeft ? _table[row][column - 2] + (_diag[row][column - 2] > 0 ? -5 : 0) : 0; // penalty for a gap start\n if (canComeLeftLeft && (!canComeLeft || leftLeftScore >= leftScore) && (!canComeDiag || leftLeftScore >= diagScore)) {\n // always prefer choosing left left to jump over a diagonal because that means a match is earlier in the word\n _table[row][column] = leftLeftScore;\n _arrows[row][column] = 3 /* LeftLeft */;\n _diag[row][column] = 0;\n }\n else if (canComeLeft && (!canComeDiag || leftScore >= diagScore)) {\n // always prefer choosing left since that means a match is earlier in the word\n _table[row][column] = leftScore;\n _arrows[row][column] = 2 /* Left */;\n _diag[row][column] = 0;\n }\n else if (canComeDiag) {\n _table[row][column] = diagScore;\n _arrows[row][column] = 1 /* Diag */;\n _diag[row][column] = _diag[row - 1][column - 1] + 1;\n }\n else {\n throw new Error(`not possible`);\n }\n }\n }\n if (_debug) {\n printTables(pattern, patternStart, word, wordStart);\n }\n if (!hasStrongFirstMatch[0] && !firstMatchCanBeWeak) {\n return undefined;\n }\n row--;\n column--;\n const result = [_table[row][column], wordStart];\n let backwardsDiagLength = 0;\n let maxMatchColumn = 0;\n while (row >= 1) {\n // Find the column where we go diagonally up\n let diagColumn = column;\n do {\n const arrow = _arrows[row][diagColumn];\n if (arrow === 3 /* LeftLeft */) {\n diagColumn = diagColumn - 2;\n }\n else if (arrow === 2 /* Left */) {\n diagColumn = diagColumn - 1;\n }\n else {\n // found the diagonal\n break;\n }\n } while (diagColumn >= 1);\n // Overturn the \"forwards\" decision if keeping the \"backwards\" diagonal would give a better match\n if (backwardsDiagLength > 1 // only if we would have a contiguous match of 3 characters\n && patternLow[patternStart + row - 1] === wordLow[wordStart + column - 1] // only if we can do a contiguous match diagonally\n && !isUpperCaseAtPos(diagColumn + wordStart - 1, word, wordLow) // only if the forwards chose diagonal is not an uppercase\n && backwardsDiagLength + 1 > _diag[row][diagColumn] // only if our contiguous match would be longer than the \"forwards\" contiguous match\n ) {\n diagColumn = column;\n }\n if (diagColumn === column) {\n // this is a contiguous match\n backwardsDiagLength++;\n }\n else {\n backwardsDiagLength = 1;\n }\n if (!maxMatchColumn) {\n // remember the last matched column\n maxMatchColumn = diagColumn;\n }\n row--;\n column = diagColumn - 1;\n result.push(column);\n }\n if (wordLen === patternLen) {\n // the word matches the pattern with all characters!\n // giving the score a total match boost (to come up ahead other words)\n result[0] += 2;\n }\n // Add 1 penalty for each skipped character in the word\n const skippedCharsCount = maxMatchColumn - patternLen;\n result[0] -= skippedCharsCount;\n return result;\n}\nfunction _fillInMaxWordMatchPos(patternLen, wordLen, patternStart, wordStart, patternLow, wordLow) {\n let patternPos = patternLen - 1;\n let wordPos = wordLen - 1;\n while (patternPos >= patternStart && wordPos >= wordStart) {\n if (patternLow[patternPos] === wordLow[wordPos]) {\n _maxWordMatchPos[patternPos] = wordPos;\n patternPos--;\n }\n wordPos--;\n }\n}\nfunction _doScore(pattern, patternLow, patternPos, patternStart, word, wordLow, wordPos, wordLen, wordStart, newMatchStart, outFirstMatchStrong) {\n if (patternLow[patternPos] !== wordLow[wordPos]) {\n return Number.MIN_SAFE_INTEGER;\n }\n let score = 1;\n let isGapLocation = false;\n if (wordPos === (patternPos - patternStart)) {\n // common prefix: `foobar <-> foobaz`\n // ^^^^^\n score = pattern[patternPos] === word[wordPos] ? 7 : 5;\n }\n else if (isUpperCaseAtPos(wordPos, word, wordLow) && (wordPos === 0 || !isUpperCaseAtPos(wordPos - 1, word, wordLow))) {\n // hitting upper-case: `foo <-> forOthers`\n // ^^ ^\n score = pattern[patternPos] === word[wordPos] ? 7 : 5;\n isGapLocation = true;\n }\n else if (isSeparatorAtPos(wordLow, wordPos) && (wordPos === 0 || !isSeparatorAtPos(wordLow, wordPos - 1))) {\n // hitting a separator: `. <-> foo.bar`\n // ^\n score = 5;\n }\n else if (isSeparatorAtPos(wordLow, wordPos - 1) || isWhitespaceAtPos(wordLow, wordPos - 1)) {\n // post separator: `foo <-> bar_foo`\n // ^^^\n score = 5;\n isGapLocation = true;\n }\n if (score > 1 && patternPos === patternStart) {\n outFirstMatchStrong[0] = true;\n }\n if (!isGapLocation) {\n isGapLocation = isUpperCaseAtPos(wordPos, word, wordLow) || isSeparatorAtPos(wordLow, wordPos - 1) || isWhitespaceAtPos(wordLow, wordPos - 1);\n }\n //\n if (patternPos === patternStart) { // first character in pattern\n if (wordPos > wordStart) {\n // the first pattern character would match a word character that is not at the word start\n // so introduce a penalty to account for the gap preceding this match\n score -= isGapLocation ? 3 : 5;\n }\n }\n else {\n if (newMatchStart) {\n // this would be the beginning of a new match (i.e. there would be a gap before this location)\n score += isGapLocation ? 2 : 0;\n }\n else {\n // this is part of a contiguous match, so give it a slight bonus, but do so only if it would not be a preferred gap location\n score += isGapLocation ? 0 : 1;\n }\n }\n if (wordPos + 1 === wordLen) {\n // we always penalize gaps, but this gives unfair advantages to a match that would match the last character in the word\n // so pretend there is a gap after the last character in the word to normalize things\n score -= isGapLocation ? 3 : 5;\n }\n return score;\n}\n//#endregion\n//#region --- graceful ---\nexport function fuzzyScoreGracefulAggressive(pattern, lowPattern, patternPos, word, lowWord, wordPos, firstMatchCanBeWeak) {\n return fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, true, firstMatchCanBeWeak);\n}\nfunction fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, aggressive, firstMatchCanBeWeak) {\n let top = fuzzyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos, firstMatchCanBeWeak);\n if (top && !aggressive) {\n // when using the original pattern yield a result we`\n // return it unless we are aggressive and try to find\n // a better alignment, e.g. `cno` -> `^co^ns^ole` or `^c^o^nsole`.\n return top;\n }\n if (pattern.length >= 3) {\n // When the pattern is long enough then try a few (max 7)\n // permutations of the pattern to find a better match. The\n // permutations only swap neighbouring characters, e.g\n // `cnoso` becomes `conso`, `cnsoo`, `cnoos`.\n const tries = Math.min(7, pattern.length - 1);\n for (let movingPatternPos = patternPos + 1; movingPatternPos < tries; movingPatternPos++) {\n const newPattern = nextTypoPermutation(pattern, movingPatternPos);\n if (newPattern) {\n const candidate = fuzzyScore(newPattern, newPattern.toLowerCase(), patternPos, word, lowWord, wordPos, firstMatchCanBeWeak);\n if (candidate) {\n candidate[0] -= 3; // permutation penalty\n if (!top || candidate[0] > top[0]) {\n top = candidate;\n }\n }\n }\n }\n }\n return top;\n}\nfunction nextTypoPermutation(pattern, patternPos) {\n if (patternPos + 1 >= pattern.length) {\n return undefined;\n }\n const swap1 = pattern[patternPos];\n const swap2 = pattern[patternPos + 1];\n if (swap1 === swap2) {\n return undefined;\n }\n return pattern.slice(0, patternPos)\n + swap2\n + swap1\n + pattern.slice(patternPos + 2);\n}\n//#endregion\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Position } from './position.js';\nimport { Range } from './range.js';\n/**\n * A selection in the editor.\n * The selection is a range that has an orientation.\n */\nexport class Selection extends Range {\n constructor(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn) {\n super(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn);\n this.selectionStartLineNumber = selectionStartLineNumber;\n this.selectionStartColumn = selectionStartColumn;\n this.positionLineNumber = positionLineNumber;\n this.positionColumn = positionColumn;\n }\n /**\n * Transform to a human-readable representation.\n */\n toString() {\n return '[' + this.selectionStartLineNumber + ',' + this.selectionStartColumn + ' -> ' + this.positionLineNumber + ',' + this.positionColumn + ']';\n }\n /**\n * Test if equals other selection.\n */\n equalsSelection(other) {\n return (Selection.selectionsEqual(this, other));\n }\n /**\n * Test if the two selections are equal.\n */\n static selectionsEqual(a, b) {\n return (a.selectionStartLineNumber === b.selectionStartLineNumber &&\n a.selectionStartColumn === b.selectionStartColumn &&\n a.positionLineNumber === b.positionLineNumber &&\n a.positionColumn === b.positionColumn);\n }\n /**\n * Get directions (LTR or RTL).\n */\n getDirection() {\n if (this.selectionStartLineNumber === this.startLineNumber && this.selectionStartColumn === this.startColumn) {\n return 0 /* LTR */;\n }\n return 1 /* RTL */;\n }\n /**\n * Create a new selection with a different `positionLineNumber` and `positionColumn`.\n */\n setEndPosition(endLineNumber, endColumn) {\n if (this.getDirection() === 0 /* LTR */) {\n return new Selection(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n }\n return new Selection(endLineNumber, endColumn, this.startLineNumber, this.startColumn);\n }\n /**\n * Get the position at `positionLineNumber` and `positionColumn`.\n */\n getPosition() {\n return new Position(this.positionLineNumber, this.positionColumn);\n }\n /**\n * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`.\n */\n setStartPosition(startLineNumber, startColumn) {\n if (this.getDirection() === 0 /* LTR */) {\n return new Selection(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n }\n return new Selection(this.endLineNumber, this.endColumn, startLineNumber, startColumn);\n }\n // ----\n /**\n * Create a `Selection` from one or two positions\n */\n static fromPositions(start, end = start) {\n return new Selection(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n /**\n * Create a `Selection` from an `ISelection`.\n */\n static liftSelection(sel) {\n return new Selection(sel.selectionStartLineNumber, sel.selectionStartColumn, sel.positionLineNumber, sel.positionColumn);\n }\n /**\n * `a` equals `b`.\n */\n static selectionsArrEqual(a, b) {\n if (a && !b || !a && b) {\n return false;\n }\n if (!a && !b) {\n return true;\n }\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0, len = a.length; i < len; i++) {\n if (!this.selectionsEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n /**\n * Test if `obj` is an `ISelection`.\n */\n static isISelection(obj) {\n return (obj\n && (typeof obj.selectionStartLineNumber === 'number')\n && (typeof obj.selectionStartColumn === 'number')\n && (typeof obj.positionLineNumber === 'number')\n && (typeof obj.positionColumn === 'number'));\n }\n /**\n * Create with a direction.\n */\n static createWithDirection(startLineNumber, startColumn, endLineNumber, endColumn, direction) {\n if (direction === 0 /* LTR */) {\n return new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n return new Selection(endLineNumber, endColumn, startLineNumber, startColumn);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as extpath from './extpath.js';\nimport { Schemas } from './network.js';\nimport * as paths from './path.js';\nimport { compare as strCompare } from './strings.js';\nimport { URI, uriToFsPath } from './uri.js';\nexport function originalFSPath(uri) {\n return uriToFsPath(uri, true);\n}\nexport class ExtUri {\n constructor(_ignorePathCasing) {\n this._ignorePathCasing = _ignorePathCasing;\n }\n compare(uri1, uri2, ignoreFragment = false) {\n if (uri1 === uri2) {\n return 0;\n }\n return strCompare(this.getComparisonKey(uri1, ignoreFragment), this.getComparisonKey(uri2, ignoreFragment));\n }\n isEqual(uri1, uri2, ignoreFragment = false) {\n if (uri1 === uri2) {\n return true;\n }\n if (!uri1 || !uri2) {\n return false;\n }\n return this.getComparisonKey(uri1, ignoreFragment) === this.getComparisonKey(uri2, ignoreFragment);\n }\n getComparisonKey(uri, ignoreFragment = false) {\n return uri.with({\n path: this._ignorePathCasing(uri) ? uri.path.toLowerCase() : undefined,\n fragment: ignoreFragment ? null : undefined\n }).toString();\n }\n // --- path math\n joinPath(resource, ...pathFragment) {\n return URI.joinPath(resource, ...pathFragment);\n }\n basenameOrAuthority(resource) {\n return basename(resource) || resource.authority;\n }\n basename(resource) {\n return paths.posix.basename(resource.path);\n }\n dirname(resource) {\n if (resource.path.length === 0) {\n return resource;\n }\n let dirname;\n if (resource.scheme === Schemas.file) {\n dirname = URI.file(paths.dirname(originalFSPath(resource))).path;\n }\n else {\n dirname = paths.posix.dirname(resource.path);\n if (resource.authority && dirname.length && dirname.charCodeAt(0) !== 47 /* Slash */) {\n console.error(`dirname(\"${resource.toString})) resulted in a relative path`);\n dirname = '/'; // If a URI contains an authority component, then the path component must either be empty or begin with a CharCode.Slash (\"/\") character\n }\n }\n return resource.with({\n path: dirname\n });\n }\n normalizePath(resource) {\n if (!resource.path.length) {\n return resource;\n }\n let normalizedPath;\n if (resource.scheme === Schemas.file) {\n normalizedPath = URI.file(paths.normalize(originalFSPath(resource))).path;\n }\n else {\n normalizedPath = paths.posix.normalize(resource.path);\n }\n return resource.with({\n path: normalizedPath\n });\n }\n resolvePath(base, path) {\n if (base.scheme === Schemas.file) {\n const newURI = URI.file(paths.resolve(originalFSPath(base), path));\n return base.with({\n authority: newURI.authority,\n path: newURI.path\n });\n }\n path = extpath.toPosixPath(path); // we allow path to be a windows path\n return base.with({\n path: paths.posix.resolve(base.path, path)\n });\n }\n}\n/**\n * Unbiased utility that takes uris \"as they are\". This means it can be interchanged with\n * uri#toString() usages. The following is true\n * ```\n * assertEqual(aUri.toString() === bUri.toString(), exturi.isEqual(aUri, bUri))\n * ```\n */\nexport const extUri = new ExtUri(() => false);\nexport const isEqual = extUri.isEqual.bind(extUri);\nexport const basenameOrAuthority = extUri.basenameOrAuthority.bind(extUri);\nexport const basename = extUri.basename.bind(extUri);\nexport const dirname = extUri.dirname.bind(extUri);\nexport const joinPath = extUri.joinPath.bind(extUri);\nexport const normalizePath = extUri.normalizePath.bind(extUri);\nexport const resolvePath = extUri.resolvePath.bind(extUri);\n/**\n * Data URI related helpers.\n */\nexport var DataUri;\n(function (DataUri) {\n DataUri.META_DATA_LABEL = 'label';\n DataUri.META_DATA_DESCRIPTION = 'description';\n DataUri.META_DATA_SIZE = 'size';\n DataUri.META_DATA_MIME = 'mime';\n function parseMetaData(dataUri) {\n const metadata = new Map();\n // Given a URI of: data:image/png;size:2313;label:SomeLabel;description:SomeDescription;base64,77+9UE5...\n // the metadata is: size:2313;label:SomeLabel;description:SomeDescription\n const meta = dataUri.path.substring(dataUri.path.indexOf(';') + 1, dataUri.path.lastIndexOf(';'));\n meta.split(';').forEach(property => {\n const [key, value] = property.split(':');\n if (key && value) {\n metadata.set(key, value);\n }\n });\n // Given a URI of: data:image/png;size:2313;label:SomeLabel;description:SomeDescription;base64,77+9UE5...\n // the mime is: image/png\n const mime = dataUri.path.substring(0, dataUri.path.indexOf(';'));\n if (mime) {\n metadata.set(DataUri.META_DATA_MIME, mime);\n }\n return metadata;\n }\n DataUri.parseMetaData = parseMetaData;\n})(DataUri || (DataUri = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as Assert from '../../../base/common/assert.js';\nimport * as Types from '../../../base/common/types.js';\nclass RegistryImpl {\n constructor() {\n this.data = new Map();\n }\n add(id, data) {\n Assert.ok(Types.isString(id));\n Assert.ok(Types.isObject(data));\n Assert.ok(!this.data.has(id), 'There is already an extension with this id');\n this.data.set(id, data);\n }\n as(id) {\n return this.data.get(id) || null;\n }\n}\nexport const Registry = new RegistryImpl();\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Token, TokenizationResult, TokenizationResult2 } from '../core/token.js';\nclass NullStateImpl {\n clone() {\n return this;\n }\n equals(other) {\n return (this === other);\n }\n}\nexport const NULL_STATE = new NullStateImpl();\nexport const NULL_MODE_ID = 'vs.editor.nullMode';\nexport function nullTokenize(languageId, buffer, state, deltaOffset) {\n return new TokenizationResult([new Token(deltaOffset, '', languageId)], state);\n}\nexport function nullTokenize2(languageId, buffer, state, deltaOffset) {\n let tokens = new Uint32Array(2);\n tokens[0] = deltaOffset;\n tokens[1] = ((languageId << 0 /* LANGUAGEID_OFFSET */)\n | (0 /* Other */ << 8 /* TOKEN_TYPE_OFFSET */)\n | (0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\n return new TokenizationResult2(tokens, state === null ? NULL_STATE : state);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { getMapForWordSeparators } from '../controller/wordCharacterClassifier.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { FindMatch } from '../model.js';\nconst LIMIT_FIND_COUNT = 999;\nexport class SearchParams {\n constructor(searchString, isRegex, matchCase, wordSeparators) {\n this.searchString = searchString;\n this.isRegex = isRegex;\n this.matchCase = matchCase;\n this.wordSeparators = wordSeparators;\n }\n parseSearchRequest() {\n if (this.searchString === '') {\n return null;\n }\n // Try to create a RegExp out of the params\n let multiline;\n if (this.isRegex) {\n multiline = isMultilineRegexSource(this.searchString);\n }\n else {\n multiline = (this.searchString.indexOf('\\n') >= 0);\n }\n let regex = null;\n try {\n regex = strings.createRegExp(this.searchString, this.isRegex, {\n matchCase: this.matchCase,\n wholeWord: false,\n multiline: multiline,\n global: true,\n unicode: true\n });\n }\n catch (err) {\n return null;\n }\n if (!regex) {\n return null;\n }\n let canUseSimpleSearch = (!this.isRegex && !multiline);\n if (canUseSimpleSearch && this.searchString.toLowerCase() !== this.searchString.toUpperCase()) {\n // casing might make a difference\n canUseSimpleSearch = this.matchCase;\n }\n return new SearchData(regex, this.wordSeparators ? getMapForWordSeparators(this.wordSeparators) : null, canUseSimpleSearch ? this.searchString : null);\n }\n}\nexport function isMultilineRegexSource(searchString) {\n if (!searchString || searchString.length === 0) {\n return false;\n }\n for (let i = 0, len = searchString.length; i < len; i++) {\n const chCode = searchString.charCodeAt(i);\n if (chCode === 92 /* Backslash */) {\n // move to next char\n i++;\n if (i >= len) {\n // string ends with a \\\n break;\n }\n const nextChCode = searchString.charCodeAt(i);\n if (nextChCode === 110 /* n */ || nextChCode === 114 /* r */ || nextChCode === 87 /* W */) {\n return true;\n }\n }\n }\n return false;\n}\nexport class SearchData {\n constructor(regex, wordSeparators, simpleSearch) {\n this.regex = regex;\n this.wordSeparators = wordSeparators;\n this.simpleSearch = simpleSearch;\n }\n}\nexport function createFindMatch(range, rawMatches, captureMatches) {\n if (!captureMatches) {\n return new FindMatch(range, null);\n }\n let matches = [];\n for (let i = 0, len = rawMatches.length; i < len; i++) {\n matches[i] = rawMatches[i];\n }\n return new FindMatch(range, matches);\n}\nclass LineFeedCounter {\n constructor(text) {\n let lineFeedsOffsets = [];\n let lineFeedsOffsetsLen = 0;\n for (let i = 0, textLen = text.length; i < textLen; i++) {\n if (text.charCodeAt(i) === 10 /* LineFeed */) {\n lineFeedsOffsets[lineFeedsOffsetsLen++] = i;\n }\n }\n this._lineFeedsOffsets = lineFeedsOffsets;\n }\n findLineFeedCountBeforeOffset(offset) {\n const lineFeedsOffsets = this._lineFeedsOffsets;\n let min = 0;\n let max = lineFeedsOffsets.length - 1;\n if (max === -1) {\n // no line feeds\n return 0;\n }\n if (offset <= lineFeedsOffsets[0]) {\n // before first line feed\n return 0;\n }\n while (min < max) {\n const mid = min + ((max - min) / 2 >> 0);\n if (lineFeedsOffsets[mid] >= offset) {\n max = mid - 1;\n }\n else {\n if (lineFeedsOffsets[mid + 1] >= offset) {\n // bingo!\n min = mid;\n max = mid;\n }\n else {\n min = mid + 1;\n }\n }\n }\n return min + 1;\n }\n}\nexport class TextModelSearch {\n static findMatches(model, searchParams, searchRange, captureMatches, limitResultCount) {\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return [];\n }\n if (searchData.regex.multiline) {\n return this._doFindMatchesMultiline(model, searchRange, new Searcher(searchData.wordSeparators, searchData.regex), captureMatches, limitResultCount);\n }\n return this._doFindMatchesLineByLine(model, searchRange, searchData, captureMatches, limitResultCount);\n }\n /**\n * Multiline search always executes on the lines concatenated with \\n.\n * We must therefore compensate for the count of \\n in case the model is CRLF\n */\n static _getMultilineMatchRange(model, deltaOffset, text, lfCounter, matchIndex, match0) {\n let startOffset;\n let lineFeedCountBeforeMatch = 0;\n if (lfCounter) {\n lineFeedCountBeforeMatch = lfCounter.findLineFeedCountBeforeOffset(matchIndex);\n startOffset = deltaOffset + matchIndex + lineFeedCountBeforeMatch /* add as many \\r as there were \\n */;\n }\n else {\n startOffset = deltaOffset + matchIndex;\n }\n let endOffset;\n if (lfCounter) {\n let lineFeedCountBeforeEndOfMatch = lfCounter.findLineFeedCountBeforeOffset(matchIndex + match0.length);\n let lineFeedCountInMatch = lineFeedCountBeforeEndOfMatch - lineFeedCountBeforeMatch;\n endOffset = startOffset + match0.length + lineFeedCountInMatch /* add as many \\r as there were \\n */;\n }\n else {\n endOffset = startOffset + match0.length;\n }\n const startPosition = model.getPositionAt(startOffset);\n const endPosition = model.getPositionAt(endOffset);\n return new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column);\n }\n static _doFindMatchesMultiline(model, searchRange, searcher, captureMatches, limitResultCount) {\n const deltaOffset = model.getOffsetAt(searchRange.getStartPosition());\n // We always execute multiline search over the lines joined with \\n\n // This makes it that \\n will match the EOL for both CRLF and LF models\n // We compensate for offset errors in `_getMultilineMatchRange`\n const text = model.getValueInRange(searchRange, 1 /* LF */);\n const lfCounter = (model.getEOL() === '\\r\\n' ? new LineFeedCounter(text) : null);\n const result = [];\n let counter = 0;\n let m;\n searcher.reset(0);\n while ((m = searcher.next(text))) {\n result[counter++] = createFindMatch(this._getMultilineMatchRange(model, deltaOffset, text, lfCounter, m.index, m[0]), m, captureMatches);\n if (counter >= limitResultCount) {\n return result;\n }\n }\n return result;\n }\n static _doFindMatchesLineByLine(model, searchRange, searchData, captureMatches, limitResultCount) {\n const result = [];\n let resultLen = 0;\n // Early case for a search range that starts & stops on the same line number\n if (searchRange.startLineNumber === searchRange.endLineNumber) {\n const text = model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn - 1, searchRange.endColumn - 1);\n resultLen = this._findMatchesInLine(searchData, text, searchRange.startLineNumber, searchRange.startColumn - 1, resultLen, result, captureMatches, limitResultCount);\n return result;\n }\n // Collect results from first line\n const text = model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn - 1);\n resultLen = this._findMatchesInLine(searchData, text, searchRange.startLineNumber, searchRange.startColumn - 1, resultLen, result, captureMatches, limitResultCount);\n // Collect results from middle lines\n for (let lineNumber = searchRange.startLineNumber + 1; lineNumber < searchRange.endLineNumber && resultLen < limitResultCount; lineNumber++) {\n resultLen = this._findMatchesInLine(searchData, model.getLineContent(lineNumber), lineNumber, 0, resultLen, result, captureMatches, limitResultCount);\n }\n // Collect results from last line\n if (resultLen < limitResultCount) {\n const text = model.getLineContent(searchRange.endLineNumber).substring(0, searchRange.endColumn - 1);\n resultLen = this._findMatchesInLine(searchData, text, searchRange.endLineNumber, 0, resultLen, result, captureMatches, limitResultCount);\n }\n return result;\n }\n static _findMatchesInLine(searchData, text, lineNumber, deltaOffset, resultLen, result, captureMatches, limitResultCount) {\n const wordSeparators = searchData.wordSeparators;\n if (!captureMatches && searchData.simpleSearch) {\n const searchString = searchData.simpleSearch;\n const searchStringLen = searchString.length;\n const textLength = text.length;\n let lastMatchIndex = -searchStringLen;\n while ((lastMatchIndex = text.indexOf(searchString, lastMatchIndex + searchStringLen)) !== -1) {\n if (!wordSeparators || isValidMatch(wordSeparators, text, textLength, lastMatchIndex, searchStringLen)) {\n result[resultLen++] = new FindMatch(new Range(lineNumber, lastMatchIndex + 1 + deltaOffset, lineNumber, lastMatchIndex + 1 + searchStringLen + deltaOffset), null);\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n }\n return resultLen;\n }\n const searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n let m;\n // Reset regex to search from the beginning\n searcher.reset(0);\n do {\n m = searcher.next(text);\n if (m) {\n result[resultLen++] = createFindMatch(new Range(lineNumber, m.index + 1 + deltaOffset, lineNumber, m.index + 1 + m[0].length + deltaOffset), m, captureMatches);\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n } while (m);\n return resultLen;\n }\n static findNextMatch(model, searchParams, searchStart, captureMatches) {\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return null;\n }\n const searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n if (searchData.regex.multiline) {\n return this._doFindNextMatchMultiline(model, searchStart, searcher, captureMatches);\n }\n return this._doFindNextMatchLineByLine(model, searchStart, searcher, captureMatches);\n }\n static _doFindNextMatchMultiline(model, searchStart, searcher, captureMatches) {\n const searchTextStart = new Position(searchStart.lineNumber, 1);\n const deltaOffset = model.getOffsetAt(searchTextStart);\n const lineCount = model.getLineCount();\n // We always execute multiline search over the lines joined with \\n\n // This makes it that \\n will match the EOL for both CRLF and LF models\n // We compensate for offset errors in `_getMultilineMatchRange`\n const text = model.getValueInRange(new Range(searchTextStart.lineNumber, searchTextStart.column, lineCount, model.getLineMaxColumn(lineCount)), 1 /* LF */);\n const lfCounter = (model.getEOL() === '\\r\\n' ? new LineFeedCounter(text) : null);\n searcher.reset(searchStart.column - 1);\n let m = searcher.next(text);\n if (m) {\n return createFindMatch(this._getMultilineMatchRange(model, deltaOffset, text, lfCounter, m.index, m[0]), m, captureMatches);\n }\n if (searchStart.lineNumber !== 1 || searchStart.column !== 1) {\n // Try again from the top\n return this._doFindNextMatchMultiline(model, new Position(1, 1), searcher, captureMatches);\n }\n return null;\n }\n static _doFindNextMatchLineByLine(model, searchStart, searcher, captureMatches) {\n const lineCount = model.getLineCount();\n const startLineNumber = searchStart.lineNumber;\n // Look in first line\n const text = model.getLineContent(startLineNumber);\n const r = this._findFirstMatchInLine(searcher, text, startLineNumber, searchStart.column, captureMatches);\n if (r) {\n return r;\n }\n for (let i = 1; i <= lineCount; i++) {\n const lineIndex = (startLineNumber + i - 1) % lineCount;\n const text = model.getLineContent(lineIndex + 1);\n const r = this._findFirstMatchInLine(searcher, text, lineIndex + 1, 1, captureMatches);\n if (r) {\n return r;\n }\n }\n return null;\n }\n static _findFirstMatchInLine(searcher, text, lineNumber, fromColumn, captureMatches) {\n // Set regex to search from column\n searcher.reset(fromColumn - 1);\n const m = searcher.next(text);\n if (m) {\n return createFindMatch(new Range(lineNumber, m.index + 1, lineNumber, m.index + 1 + m[0].length), m, captureMatches);\n }\n return null;\n }\n static findPreviousMatch(model, searchParams, searchStart, captureMatches) {\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return null;\n }\n const searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n if (searchData.regex.multiline) {\n return this._doFindPreviousMatchMultiline(model, searchStart, searcher, captureMatches);\n }\n return this._doFindPreviousMatchLineByLine(model, searchStart, searcher, captureMatches);\n }\n static _doFindPreviousMatchMultiline(model, searchStart, searcher, captureMatches) {\n const matches = this._doFindMatchesMultiline(model, new Range(1, 1, searchStart.lineNumber, searchStart.column), searcher, captureMatches, 10 * LIMIT_FIND_COUNT);\n if (matches.length > 0) {\n return matches[matches.length - 1];\n }\n const lineCount = model.getLineCount();\n if (searchStart.lineNumber !== lineCount || searchStart.column !== model.getLineMaxColumn(lineCount)) {\n // Try again with all content\n return this._doFindPreviousMatchMultiline(model, new Position(lineCount, model.getLineMaxColumn(lineCount)), searcher, captureMatches);\n }\n return null;\n }\n static _doFindPreviousMatchLineByLine(model, searchStart, searcher, captureMatches) {\n const lineCount = model.getLineCount();\n const startLineNumber = searchStart.lineNumber;\n // Look in first line\n const text = model.getLineContent(startLineNumber).substring(0, searchStart.column - 1);\n const r = this._findLastMatchInLine(searcher, text, startLineNumber, captureMatches);\n if (r) {\n return r;\n }\n for (let i = 1; i <= lineCount; i++) {\n const lineIndex = (lineCount + startLineNumber - i - 1) % lineCount;\n const text = model.getLineContent(lineIndex + 1);\n const r = this._findLastMatchInLine(searcher, text, lineIndex + 1, captureMatches);\n if (r) {\n return r;\n }\n }\n return null;\n }\n static _findLastMatchInLine(searcher, text, lineNumber, captureMatches) {\n let bestResult = null;\n let m;\n searcher.reset(0);\n while ((m = searcher.next(text))) {\n bestResult = createFindMatch(new Range(lineNumber, m.index + 1, lineNumber, m.index + 1 + m[0].length), m, captureMatches);\n }\n return bestResult;\n }\n}\nfunction leftIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength) {\n if (matchStartIndex === 0) {\n // Match starts at start of string\n return true;\n }\n const charBefore = text.charCodeAt(matchStartIndex - 1);\n if (wordSeparators.get(charBefore) !== 0 /* Regular */) {\n // The character before the match is a word separator\n return true;\n }\n if (charBefore === 13 /* CarriageReturn */ || charBefore === 10 /* LineFeed */) {\n // The character before the match is line break or carriage return.\n return true;\n }\n if (matchLength > 0) {\n const firstCharInMatch = text.charCodeAt(matchStartIndex);\n if (wordSeparators.get(firstCharInMatch) !== 0 /* Regular */) {\n // The first character inside the match is a word separator\n return true;\n }\n }\n return false;\n}\nfunction rightIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength) {\n if (matchStartIndex + matchLength === textLength) {\n // Match ends at end of string\n return true;\n }\n const charAfter = text.charCodeAt(matchStartIndex + matchLength);\n if (wordSeparators.get(charAfter) !== 0 /* Regular */) {\n // The character after the match is a word separator\n return true;\n }\n if (charAfter === 13 /* CarriageReturn */ || charAfter === 10 /* LineFeed */) {\n // The character after the match is line break or carriage return.\n return true;\n }\n if (matchLength > 0) {\n const lastCharInMatch = text.charCodeAt(matchStartIndex + matchLength - 1);\n if (wordSeparators.get(lastCharInMatch) !== 0 /* Regular */) {\n // The last character in the match is a word separator\n return true;\n }\n }\n return false;\n}\nexport function isValidMatch(wordSeparators, text, textLength, matchStartIndex, matchLength) {\n return (leftIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength)\n && rightIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength));\n}\nexport class Searcher {\n constructor(wordSeparators, searchRegex) {\n this._wordSeparators = wordSeparators;\n this._searchRegex = searchRegex;\n this._prevMatchStartIndex = -1;\n this._prevMatchLength = 0;\n }\n reset(lastIndex) {\n this._searchRegex.lastIndex = lastIndex;\n this._prevMatchStartIndex = -1;\n this._prevMatchLength = 0;\n }\n next(text) {\n const textLength = text.length;\n let m;\n do {\n if (this._prevMatchStartIndex + this._prevMatchLength === textLength) {\n // Reached the end of the line\n return null;\n }\n m = this._searchRegex.exec(text);\n if (!m) {\n return null;\n }\n const matchStartIndex = m.index;\n const matchLength = m[0].length;\n if (matchStartIndex === this._prevMatchStartIndex && matchLength === this._prevMatchLength) {\n if (matchLength === 0) {\n // the search result is an empty string and won't advance `regex.lastIndex`, so `regex.exec` will stuck here\n // we attempt to recover from that by advancing by two if surrogate pair found and by one otherwise\n if (strings.getNextCodePoint(text, textLength, this._searchRegex.lastIndex) > 0xFFFF) {\n this._searchRegex.lastIndex += 2;\n }\n else {\n this._searchRegex.lastIndex += 1;\n }\n continue;\n }\n // Exit early if the regex matches the same range twice\n return null;\n }\n this._prevMatchStartIndex = matchStartIndex;\n this._prevMatchLength = matchLength;\n if (!this._wordSeparators || isValidMatch(this._wordSeparators, text, textLength, matchStartIndex, matchLength)) {\n return m;\n }\n } while (m);\n return null;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { Color, RGBA } from '../../../base/common/color.js';\nimport { activeContrastBorder, editorBackground, editorForeground, registerColor, editorWarningForeground, editorInfoForeground, editorWarningBorder, editorInfoBorder, contrastBorder, editorFindMatchHighlight } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\n/**\n * Definition of the editor colors\n */\nexport const editorLineHighlight = registerColor('editor.lineHighlightBackground', { dark: null, light: null, hc: null }, nls.localize('lineHighlight', 'Background color for the highlight of line at the cursor position.'));\nexport const editorLineHighlightBorder = registerColor('editor.lineHighlightBorder', { dark: '#282828', light: '#eeeeee', hc: '#f38518' }, nls.localize('lineHighlightBorderBox', 'Background color for the border around the line at the cursor position.'));\nexport const editorRangeHighlight = registerColor('editor.rangeHighlightBackground', { dark: '#ffffff0b', light: '#fdff0033', hc: null }, nls.localize('rangeHighlight', 'Background color of highlighted ranges, like by quick open and find features. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorRangeHighlightBorder = registerColor('editor.rangeHighlightBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('rangeHighlightBorder', 'Background color of the border around highlighted ranges.'), true);\nexport const editorSymbolHighlight = registerColor('editor.symbolHighlightBackground', { dark: editorFindMatchHighlight, light: editorFindMatchHighlight, hc: null }, nls.localize('symbolHighlight', 'Background color of highlighted symbol, like for go to definition or go next/previous symbol. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorSymbolHighlightBorder = registerColor('editor.symbolHighlightBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('symbolHighlightBorder', 'Background color of the border around highlighted symbols.'), true);\nexport const editorCursorForeground = registerColor('editorCursor.foreground', { dark: '#AEAFAD', light: Color.black, hc: Color.white }, nls.localize('caret', 'Color of the editor cursor.'));\nexport const editorCursorBackground = registerColor('editorCursor.background', null, nls.localize('editorCursorBackground', 'The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.'));\nexport const editorWhitespaces = registerColor('editorWhitespace.foreground', { dark: '#e3e4e229', light: '#33333333', hc: '#e3e4e229' }, nls.localize('editorWhitespaces', 'Color of whitespace characters in the editor.'));\nexport const editorIndentGuides = registerColor('editorIndentGuide.background', { dark: editorWhitespaces, light: editorWhitespaces, hc: editorWhitespaces }, nls.localize('editorIndentGuides', 'Color of the editor indentation guides.'));\nexport const editorActiveIndentGuides = registerColor('editorIndentGuide.activeBackground', { dark: editorWhitespaces, light: editorWhitespaces, hc: editorWhitespaces }, nls.localize('editorActiveIndentGuide', 'Color of the active editor indentation guides.'));\nexport const editorLineNumbers = registerColor('editorLineNumber.foreground', { dark: '#858585', light: '#237893', hc: Color.white }, nls.localize('editorLineNumbers', 'Color of editor line numbers.'));\nconst deprecatedEditorActiveLineNumber = registerColor('editorActiveLineNumber.foreground', { dark: '#c6c6c6', light: '#0B216F', hc: activeContrastBorder }, nls.localize('editorActiveLineNumber', 'Color of editor active line number'), false, nls.localize('deprecatedEditorActiveLineNumber', 'Id is deprecated. Use \\'editorLineNumber.activeForeground\\' instead.'));\nexport const editorActiveLineNumber = registerColor('editorLineNumber.activeForeground', { dark: deprecatedEditorActiveLineNumber, light: deprecatedEditorActiveLineNumber, hc: deprecatedEditorActiveLineNumber }, nls.localize('editorActiveLineNumber', 'Color of editor active line number'));\nexport const editorRuler = registerColor('editorRuler.foreground', { dark: '#5A5A5A', light: Color.lightgrey, hc: Color.white }, nls.localize('editorRuler', 'Color of the editor rulers.'));\nexport const editorCodeLensForeground = registerColor('editorCodeLens.foreground', { dark: '#999999', light: '#919191', hc: '#999999' }, nls.localize('editorCodeLensForeground', 'Foreground color of editor CodeLens'));\nexport const editorBracketMatchBackground = registerColor('editorBracketMatch.background', { dark: '#0064001a', light: '#0064001a', hc: '#0064001a' }, nls.localize('editorBracketMatchBackground', 'Background color behind matching brackets'));\nexport const editorBracketMatchBorder = registerColor('editorBracketMatch.border', { dark: '#888', light: '#B9B9B9', hc: contrastBorder }, nls.localize('editorBracketMatchBorder', 'Color for matching brackets boxes'));\nexport const editorOverviewRulerBorder = registerColor('editorOverviewRuler.border', { dark: '#7f7f7f4d', light: '#7f7f7f4d', hc: '#7f7f7f4d' }, nls.localize('editorOverviewRulerBorder', 'Color of the overview ruler border.'));\nexport const editorOverviewRulerBackground = registerColor('editorOverviewRuler.background', null, nls.localize('editorOverviewRulerBackground', 'Background color of the editor overview ruler. Only used when the minimap is enabled and placed on the right side of the editor.'));\nexport const editorGutter = registerColor('editorGutter.background', { dark: editorBackground, light: editorBackground, hc: editorBackground }, nls.localize('editorGutter', 'Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.'));\nexport const editorUnnecessaryCodeBorder = registerColor('editorUnnecessaryCode.border', { dark: null, light: null, hc: Color.fromHex('#fff').transparent(0.8) }, nls.localize('unnecessaryCodeBorder', 'Border color of unnecessary (unused) source code in the editor.'));\nexport const editorUnnecessaryCodeOpacity = registerColor('editorUnnecessaryCode.opacity', { dark: Color.fromHex('#000a'), light: Color.fromHex('#0007'), hc: null }, nls.localize('unnecessaryCodeOpacity', 'Opacity of unnecessary (unused) source code in the editor. For example, \"#000000c0\" will render the code with 75% opacity. For high contrast themes, use the \\'editorUnnecessaryCode.border\\' theme color to underline unnecessary code instead of fading it out.'));\nexport const ghostTextBorder = registerColor('editorGhostText.border', { dark: null, light: null, hc: Color.fromHex('#fff').transparent(0.8) }, nls.localize('editorGhostTextBorder', 'Border color of ghost text in the editor.'));\nexport const ghostTextForeground = registerColor('editorGhostText.foreground', { dark: Color.fromHex('#ffffff56'), light: Color.fromHex('#0007'), hc: null }, nls.localize('editorGhostTextForeground', 'Foreground color of the ghost text in the editor.'));\nconst rulerRangeDefault = new Color(new RGBA(0, 122, 204, 0.6));\nexport const overviewRulerRangeHighlight = registerColor('editorOverviewRuler.rangeHighlightForeground', { dark: rulerRangeDefault, light: rulerRangeDefault, hc: rulerRangeDefault }, nls.localize('overviewRulerRangeHighlight', 'Overview ruler marker color for range highlights. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const overviewRulerError = registerColor('editorOverviewRuler.errorForeground', { dark: new Color(new RGBA(255, 18, 18, 0.7)), light: new Color(new RGBA(255, 18, 18, 0.7)), hc: new Color(new RGBA(255, 50, 50, 1)) }, nls.localize('overviewRuleError', 'Overview ruler marker color for errors.'));\nexport const overviewRulerWarning = registerColor('editorOverviewRuler.warningForeground', { dark: editorWarningForeground, light: editorWarningForeground, hc: editorWarningBorder }, nls.localize('overviewRuleWarning', 'Overview ruler marker color for warnings.'));\nexport const overviewRulerInfo = registerColor('editorOverviewRuler.infoForeground', { dark: editorInfoForeground, light: editorInfoForeground, hc: editorInfoBorder }, nls.localize('overviewRuleInfo', 'Overview ruler marker color for infos.'));\nexport const editorBracketHighlightingForeground1 = registerColor('editorBracketHighlight.foreground1', { dark: '#FFD700', light: '#0431FAFF', hc: '#FFD700' }, nls.localize('editorBracketHighlightForeground1', 'Foreground color of brackets (1). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground2 = registerColor('editorBracketHighlight.foreground2', { dark: '#DA70D6', light: '#319331FF', hc: '#DA70D6' }, nls.localize('editorBracketHighlightForeground2', 'Foreground color of brackets (2). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground3 = registerColor('editorBracketHighlight.foreground3', { dark: '#179FFF', light: '#7B3814FF', hc: '#87CEFA' }, nls.localize('editorBracketHighlightForeground3', 'Foreground color of brackets (3). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground4 = registerColor('editorBracketHighlight.foreground4', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketHighlightForeground4', 'Foreground color of brackets (4). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground5 = registerColor('editorBracketHighlight.foreground5', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketHighlightForeground5', 'Foreground color of brackets (5). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground6 = registerColor('editorBracketHighlight.foreground6', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketHighlightForeground6', 'Foreground color of brackets (6). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingUnexpectedBracketForeground = registerColor('editorBracketHighlight.unexpectedBracket.foreground', { dark: new Color(new RGBA(255, 18, 18, 0.8)), light: new Color(new RGBA(255, 18, 18, 0.8)), hc: new Color(new RGBA(255, 50, 50, 1)) }, nls.localize('editorBracketHighlightUnexpectedBracketForeground', 'Foreground color of unexpected brackets.'));\nexport const editorBracketPairGuideBackground1 = registerColor('editorBracketPairGuide.background1', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.background1', 'Background color of inactive bracket pair guides (1). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground2 = registerColor('editorBracketPairGuide.background2', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.background2', 'Background color of inactive bracket pair guides (2). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground3 = registerColor('editorBracketPairGuide.background3', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.background3', 'Background color of inactive bracket pair guides (3). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground4 = registerColor('editorBracketPairGuide.background4', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.background4', 'Background color of inactive bracket pair guides (4). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground5 = registerColor('editorBracketPairGuide.background5', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.background5', 'Background color of inactive bracket pair guides (5). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground6 = registerColor('editorBracketPairGuide.background6', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.background6', 'Background color of inactive bracket pair guides (6). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground1 = registerColor('editorBracketPairGuide.activeBackground1', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.activeBackground1', 'Background color of active bracket pair guides (1). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground2 = registerColor('editorBracketPairGuide.activeBackground2', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.activeBackground2', 'Background color of active bracket pair guides (2). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground3 = registerColor('editorBracketPairGuide.activeBackground3', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.activeBackground3', 'Background color of active bracket pair guides (3). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground4 = registerColor('editorBracketPairGuide.activeBackground4', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.activeBackground4', 'Background color of active bracket pair guides (4). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground5 = registerColor('editorBracketPairGuide.activeBackground5', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.activeBackground5', 'Background color of active bracket pair guides (5). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground6 = registerColor('editorBracketPairGuide.activeBackground6', { dark: '#00000000', light: '#00000000', hc: '#00000000' }, nls.localize('editorBracketPairGuide.activeBackground6', 'Background color of active bracket pair guides (6). Requires enabling bracket pair guides.'));\n// contains all color rules that used to defined in editor/browser/widget/editor.css\nregisterThemingParticipant((theme, collector) => {\n const background = theme.getColor(editorBackground);\n if (background) {\n collector.addRule(`.monaco-editor, .monaco-editor-background, .monaco-editor .inputarea.ime-input { background-color: ${background}; }`);\n }\n const foreground = theme.getColor(editorForeground);\n if (foreground) {\n collector.addRule(`.monaco-editor, .monaco-editor .inputarea.ime-input { color: ${foreground}; }`);\n }\n const gutter = theme.getColor(editorGutter);\n if (gutter) {\n collector.addRule(`.monaco-editor .margin { background-color: ${gutter}; }`);\n }\n const rangeHighlight = theme.getColor(editorRangeHighlight);\n if (rangeHighlight) {\n collector.addRule(`.monaco-editor .rangeHighlight { background-color: ${rangeHighlight}; }`);\n }\n const rangeHighlightBorder = theme.getColor(editorRangeHighlightBorder);\n if (rangeHighlightBorder) {\n collector.addRule(`.monaco-editor .rangeHighlight { border: 1px ${theme.type === 'hc' ? 'dotted' : 'solid'} ${rangeHighlightBorder}; }`);\n }\n const symbolHighlight = theme.getColor(editorSymbolHighlight);\n if (symbolHighlight) {\n collector.addRule(`.monaco-editor .symbolHighlight { background-color: ${symbolHighlight}; }`);\n }\n const symbolHighlightBorder = theme.getColor(editorSymbolHighlightBorder);\n if (symbolHighlightBorder) {\n collector.addRule(`.monaco-editor .symbolHighlight { border: 1px ${theme.type === 'hc' ? 'dotted' : 'solid'} ${symbolHighlightBorder}; }`);\n }\n const invisibles = theme.getColor(editorWhitespaces);\n if (invisibles) {\n collector.addRule(`.monaco-editor .mtkw { color: ${invisibles} !important; }`);\n collector.addRule(`.monaco-editor .mtkz { color: ${invisibles} !important; }`);\n }\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isThenable } from './async.js';\nimport * as extpath from './extpath.js';\nimport { LRUCache } from './map.js';\nimport * as paths from './path.js';\nimport * as strings from './strings.js';\nconst GLOBSTAR = '**';\nconst GLOB_SPLIT = '/';\nconst PATH_REGEX = '[/\\\\\\\\]'; // any slash or backslash\nconst NO_PATH_REGEX = '[^/\\\\\\\\]'; // any non-slash and non-backslash\nconst ALL_FORWARD_SLASHES = /\\//g;\nfunction starsToRegExp(starCount) {\n switch (starCount) {\n case 0:\n return '';\n case 1:\n return `${NO_PATH_REGEX}*?`; // 1 star matches any number of characters except path separator (/ and \\) - non greedy (?)\n default:\n // Matches: (Path Sep OR Path Val followed by Path Sep OR Path Sep followed by Path Val) 0-many times\n // Group is non capturing because we don't need to capture at all (?:...)\n // Overall we use non-greedy matching because it could be that we match too much\n return `(?:${PATH_REGEX}|${NO_PATH_REGEX}+${PATH_REGEX}|${PATH_REGEX}${NO_PATH_REGEX}+)*?`;\n }\n}\nexport function splitGlobAware(pattern, splitChar) {\n if (!pattern) {\n return [];\n }\n const segments = [];\n let inBraces = false;\n let inBrackets = false;\n let curVal = '';\n for (const char of pattern) {\n switch (char) {\n case splitChar:\n if (!inBraces && !inBrackets) {\n segments.push(curVal);\n curVal = '';\n continue;\n }\n break;\n case '{':\n inBraces = true;\n break;\n case '}':\n inBraces = false;\n break;\n case '[':\n inBrackets = true;\n break;\n case ']':\n inBrackets = false;\n break;\n }\n curVal += char;\n }\n // Tail\n if (curVal) {\n segments.push(curVal);\n }\n return segments;\n}\nfunction parseRegExp(pattern) {\n if (!pattern) {\n return '';\n }\n let regEx = '';\n // Split up into segments for each slash found\n const segments = splitGlobAware(pattern, GLOB_SPLIT);\n // Special case where we only have globstars\n if (segments.every(s => s === GLOBSTAR)) {\n regEx = '.*';\n }\n // Build regex over segments\n else {\n let previousSegmentWasGlobStar = false;\n segments.forEach((segment, index) => {\n // Globstar is special\n if (segment === GLOBSTAR) {\n // if we have more than one globstar after another, just ignore it\n if (!previousSegmentWasGlobStar) {\n regEx += starsToRegExp(2);\n previousSegmentWasGlobStar = true;\n }\n return;\n }\n // States\n let inBraces = false;\n let braceVal = '';\n let inBrackets = false;\n let bracketVal = '';\n for (const char of segment) {\n // Support brace expansion\n if (char !== '}' && inBraces) {\n braceVal += char;\n continue;\n }\n // Support brackets\n if (inBrackets && (char !== ']' || !bracketVal) /* ] is literally only allowed as first character in brackets to match it */) {\n let res;\n // range operator\n if (char === '-') {\n res = char;\n }\n // negation operator (only valid on first index in bracket)\n else if ((char === '^' || char === '!') && !bracketVal) {\n res = '^';\n }\n // glob split matching is not allowed within character ranges\n // see http://man7.org/linux/man-pages/man7/glob.7.html\n else if (char === GLOB_SPLIT) {\n res = '';\n }\n // anything else gets escaped\n else {\n res = strings.escapeRegExpCharacters(char);\n }\n bracketVal += res;\n continue;\n }\n switch (char) {\n case '{':\n inBraces = true;\n continue;\n case '[':\n inBrackets = true;\n continue;\n case '}':\n const choices = splitGlobAware(braceVal, ',');\n // Converts {foo,bar} => [foo|bar]\n const braceRegExp = `(?:${choices.map(c => parseRegExp(c)).join('|')})`;\n regEx += braceRegExp;\n inBraces = false;\n braceVal = '';\n break;\n case ']':\n regEx += ('[' + bracketVal + ']');\n inBrackets = false;\n bracketVal = '';\n break;\n case '?':\n regEx += NO_PATH_REGEX; // 1 ? matches any single character except path separator (/ and \\)\n continue;\n case '*':\n regEx += starsToRegExp(1);\n continue;\n default:\n regEx += strings.escapeRegExpCharacters(char);\n }\n }\n // Tail: Add the slash we had split on if there is more to come and the remaining pattern is not a globstar\n // For example if pattern: some/**/*.js we want the \"/\" after some to be included in the RegEx to prevent\n // a folder called \"something\" to match as well.\n // However, if pattern: some/**, we tolerate that we also match on \"something\" because our globstar behaviour\n // is to match 0-N segments.\n if (index < segments.length - 1 && (segments[index + 1] !== GLOBSTAR || index + 2 < segments.length)) {\n regEx += PATH_REGEX;\n }\n // reset state\n previousSegmentWasGlobStar = false;\n });\n }\n return regEx;\n}\n// regexes to check for trivial glob patterns that just check for String#endsWith\nconst T1 = /^\\*\\*\\/\\*\\.[\\w\\.-]+$/; // **/*.something\nconst T2 = /^\\*\\*\\/([\\w\\.-]+)\\/?$/; // **/something\nconst T3 = /^{\\*\\*\\/[\\*\\.]?[\\w\\.-]+\\/?(,\\*\\*\\/[\\*\\.]?[\\w\\.-]+\\/?)*}$/; // {**/*.something,**/*.else} or {**/package.json,**/project.json}\nconst T3_2 = /^{\\*\\*\\/[\\*\\.]?[\\w\\.-]+(\\/(\\*\\*)?)?(,\\*\\*\\/[\\*\\.]?[\\w\\.-]+(\\/(\\*\\*)?)?)*}$/; // Like T3, with optional trailing /**\nconst T4 = /^\\*\\*((\\/[\\w\\.-]+)+)\\/?$/; // **/something/else\nconst T5 = /^([\\w\\.-]+(\\/[\\w\\.-]+)*)\\/?$/; // something/else\nconst CACHE = new LRUCache(10000); // bounded to 10000 elements\nconst FALSE = function () {\n return false;\n};\nconst NULL = function () {\n return null;\n};\nfunction parsePattern(arg1, options) {\n if (!arg1) {\n return NULL;\n }\n // Handle IRelativePattern\n let pattern;\n if (typeof arg1 !== 'string') {\n pattern = arg1.pattern;\n }\n else {\n pattern = arg1;\n }\n // Whitespace trimming\n pattern = pattern.trim();\n // Check cache\n const patternKey = `${pattern}_${!!options.trimForExclusions}`;\n let parsedPattern = CACHE.get(patternKey);\n if (parsedPattern) {\n return wrapRelativePattern(parsedPattern, arg1);\n }\n // Check for Trivials\n let match;\n if (T1.test(pattern)) { // common pattern: **/*.txt just need endsWith check\n const base = pattern.substr(4); // '**/*'.length === 4\n parsedPattern = function (path, basename) {\n return typeof path === 'string' && path.endsWith(base) ? pattern : null;\n };\n }\n else if (match = T2.exec(trimForExclusions(pattern, options))) { // common pattern: **/some.txt just need basename check\n parsedPattern = trivia2(match[1], pattern);\n }\n else if ((options.trimForExclusions ? T3_2 : T3).test(pattern)) { // repetition of common patterns (see above) {**/*.txt,**/*.png}\n parsedPattern = trivia3(pattern, options);\n }\n else if (match = T4.exec(trimForExclusions(pattern, options))) { // common pattern: **/something/else just need endsWith check\n parsedPattern = trivia4and5(match[1].substr(1), pattern, true);\n }\n else if (match = T5.exec(trimForExclusions(pattern, options))) { // common pattern: something/else just need equals check\n parsedPattern = trivia4and5(match[1], pattern, false);\n }\n // Otherwise convert to pattern\n else {\n parsedPattern = toRegExp(pattern);\n }\n // Cache\n CACHE.set(patternKey, parsedPattern);\n return wrapRelativePattern(parsedPattern, arg1);\n}\nfunction wrapRelativePattern(parsedPattern, arg2) {\n if (typeof arg2 === 'string') {\n return parsedPattern;\n }\n return function (path, basename) {\n if (!extpath.isEqualOrParent(path, arg2.base)) {\n return null;\n }\n return parsedPattern(paths.relative(arg2.base, path), basename);\n };\n}\nfunction trimForExclusions(pattern, options) {\n return options.trimForExclusions && pattern.endsWith('/**') ? pattern.substr(0, pattern.length - 2) : pattern; // dropping **, tailing / is dropped later\n}\n// common pattern: **/some.txt just need basename check\nfunction trivia2(base, originalPattern) {\n const slashBase = `/${base}`;\n const backslashBase = `\\\\${base}`;\n const parsedPattern = function (path, basename) {\n if (typeof path !== 'string') {\n return null;\n }\n if (basename) {\n return basename === base ? originalPattern : null;\n }\n return path === base || path.endsWith(slashBase) || path.endsWith(backslashBase) ? originalPattern : null;\n };\n const basenames = [base];\n parsedPattern.basenames = basenames;\n parsedPattern.patterns = [originalPattern];\n parsedPattern.allBasenames = basenames;\n return parsedPattern;\n}\n// repetition of common patterns (see above) {**/*.txt,**/*.png}\nfunction trivia3(pattern, options) {\n const parsedPatterns = aggregateBasenameMatches(pattern.slice(1, -1).split(',')\n .map(pattern => parsePattern(pattern, options))\n .filter(pattern => pattern !== NULL), pattern);\n const n = parsedPatterns.length;\n if (!n) {\n return NULL;\n }\n if (n === 1) {\n return parsedPatterns[0];\n }\n const parsedPattern = function (path, basename) {\n for (let i = 0, n = parsedPatterns.length; i < n; i++) {\n if (parsedPatterns[i](path, basename)) {\n return pattern;\n }\n }\n return null;\n };\n const withBasenames = parsedPatterns.find(pattern => !!pattern.allBasenames);\n if (withBasenames) {\n parsedPattern.allBasenames = withBasenames.allBasenames;\n }\n const allPaths = parsedPatterns.reduce((all, current) => current.allPaths ? all.concat(current.allPaths) : all, []);\n if (allPaths.length) {\n parsedPattern.allPaths = allPaths;\n }\n return parsedPattern;\n}\n// common patterns: **/something/else just need endsWith check, something/else just needs and equals check\nfunction trivia4and5(targetPath, pattern, matchPathEnds) {\n const usingPosixSep = paths.sep === paths.posix.sep;\n const nativePath = usingPosixSep ? targetPath : targetPath.replace(ALL_FORWARD_SLASHES, paths.sep);\n const nativePathEnd = paths.sep + nativePath;\n const targetPathEnd = paths.posix.sep + targetPath;\n const parsedPattern = matchPathEnds ? function (testPath, basename) {\n return typeof testPath === 'string' &&\n ((testPath === nativePath || testPath.endsWith(nativePathEnd))\n || !usingPosixSep && (testPath === targetPath || testPath.endsWith(targetPathEnd)))\n ? pattern : null;\n } : function (testPath, basename) {\n return typeof testPath === 'string' &&\n (testPath === nativePath\n || (!usingPosixSep && testPath === targetPath))\n ? pattern : null;\n };\n parsedPattern.allPaths = [(matchPathEnds ? '*/' : './') + targetPath];\n return parsedPattern;\n}\nfunction toRegExp(pattern) {\n try {\n const regExp = new RegExp(`^${parseRegExp(pattern)}$`);\n return function (path) {\n regExp.lastIndex = 0; // reset RegExp to its initial state to reuse it!\n return typeof path === 'string' && regExp.test(path) ? pattern : null;\n };\n }\n catch (error) {\n return NULL;\n }\n}\nexport function match(arg1, path, hasSibling) {\n if (!arg1 || typeof path !== 'string') {\n return false;\n }\n return parse(arg1)(path, undefined, hasSibling);\n}\nexport function parse(arg1, options = {}) {\n if (!arg1) {\n return FALSE;\n }\n // Glob with String\n if (typeof arg1 === 'string' || isRelativePattern(arg1)) {\n const parsedPattern = parsePattern(arg1, options);\n if (parsedPattern === NULL) {\n return FALSE;\n }\n const resultPattern = function (path, basename) {\n return !!parsedPattern(path, basename);\n };\n if (parsedPattern.allBasenames) {\n resultPattern.allBasenames = parsedPattern.allBasenames;\n }\n if (parsedPattern.allPaths) {\n resultPattern.allPaths = parsedPattern.allPaths;\n }\n return resultPattern;\n }\n // Glob with Expression\n return parsedExpression(arg1, options);\n}\nexport function isRelativePattern(obj) {\n const rp = obj;\n return rp && typeof rp.base === 'string' && typeof rp.pattern === 'string';\n}\nfunction parsedExpression(expression, options) {\n const parsedPatterns = aggregateBasenameMatches(Object.getOwnPropertyNames(expression)\n .map(pattern => parseExpressionPattern(pattern, expression[pattern], options))\n .filter(pattern => pattern !== NULL));\n const n = parsedPatterns.length;\n if (!n) {\n return NULL;\n }\n if (!parsedPatterns.some(parsedPattern => !!parsedPattern.requiresSiblings)) {\n if (n === 1) {\n return parsedPatterns[0];\n }\n const resultExpression = function (path, basename) {\n for (let i = 0, n = parsedPatterns.length; i < n; i++) {\n // Pattern matches path\n const result = parsedPatterns[i](path, basename);\n if (result) {\n return result;\n }\n }\n return null;\n };\n const withBasenames = parsedPatterns.find(pattern => !!pattern.allBasenames);\n if (withBasenames) {\n resultExpression.allBasenames = withBasenames.allBasenames;\n }\n const allPaths = parsedPatterns.reduce((all, current) => current.allPaths ? all.concat(current.allPaths) : all, []);\n if (allPaths.length) {\n resultExpression.allPaths = allPaths;\n }\n return resultExpression;\n }\n const resultExpression = function (path, basename, hasSibling) {\n let name = undefined;\n for (let i = 0, n = parsedPatterns.length; i < n; i++) {\n // Pattern matches path\n const parsedPattern = parsedPatterns[i];\n if (parsedPattern.requiresSiblings && hasSibling) {\n if (!basename) {\n basename = paths.basename(path);\n }\n if (!name) {\n name = basename.substr(0, basename.length - paths.extname(path).length);\n }\n }\n const result = parsedPattern(path, basename, name, hasSibling);\n if (result) {\n return result;\n }\n }\n return null;\n };\n const withBasenames = parsedPatterns.find(pattern => !!pattern.allBasenames);\n if (withBasenames) {\n resultExpression.allBasenames = withBasenames.allBasenames;\n }\n const allPaths = parsedPatterns.reduce((all, current) => current.allPaths ? all.concat(current.allPaths) : all, []);\n if (allPaths.length) {\n resultExpression.allPaths = allPaths;\n }\n return resultExpression;\n}\nfunction parseExpressionPattern(pattern, value, options) {\n if (value === false) {\n return NULL; // pattern is disabled\n }\n const parsedPattern = parsePattern(pattern, options);\n if (parsedPattern === NULL) {\n return NULL;\n }\n // Expression Pattern is \n if (typeof value === 'boolean') {\n return parsedPattern;\n }\n // Expression Pattern is \n if (value) {\n const when = value.when;\n if (typeof when === 'string') {\n const result = (path, basename, name, hasSibling) => {\n if (!hasSibling || !parsedPattern(path, basename)) {\n return null;\n }\n const clausePattern = when.replace('$(basename)', name);\n const matched = hasSibling(clausePattern);\n return isThenable(matched) ?\n matched.then(m => m ? pattern : null) :\n matched ? pattern : null;\n };\n result.requiresSiblings = true;\n return result;\n }\n }\n // Expression is Anything\n return parsedPattern;\n}\nfunction aggregateBasenameMatches(parsedPatterns, result) {\n const basenamePatterns = parsedPatterns.filter(parsedPattern => !!parsedPattern.basenames);\n if (basenamePatterns.length < 2) {\n return parsedPatterns;\n }\n const basenames = basenamePatterns.reduce((all, current) => {\n const basenames = current.basenames;\n return basenames ? all.concat(basenames) : all;\n }, []);\n let patterns;\n if (result) {\n patterns = [];\n for (let i = 0, n = basenames.length; i < n; i++) {\n patterns.push(result);\n }\n }\n else {\n patterns = basenamePatterns.reduce((all, current) => {\n const patterns = current.patterns;\n return patterns ? all.concat(patterns) : all;\n }, []);\n }\n const aggregate = function (path, basename) {\n if (typeof path !== 'string') {\n return null;\n }\n if (!basename) {\n let i;\n for (i = path.length; i > 0; i--) {\n const ch = path.charCodeAt(i - 1);\n if (ch === 47 /* Slash */ || ch === 92 /* Backslash */) {\n break;\n }\n }\n basename = path.substr(i);\n }\n const index = basenames.indexOf(basename);\n return index !== -1 ? patterns[index] : null;\n };\n aggregate.basenames = basenames;\n aggregate.patterns = patterns;\n aggregate.allBasenames = basenames;\n const aggregatedPatterns = parsedPatterns.filter(parsedPattern => !parsedPattern.basenames);\n aggregatedPatterns.push(aggregate);\n return aggregatedPatterns;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Color scheme used by the OS and by color themes.\n */\nexport var ColorScheme;\n(function (ColorScheme) {\n ColorScheme[\"DARK\"] = \"dark\";\n ColorScheme[\"LIGHT\"] = \"light\";\n ColorScheme[\"HIGH_CONTRAST\"] = \"hc\";\n})(ColorScheme || (ColorScheme = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { validateConstraints } from '../../../base/common/types.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const ICommandService = createDecorator('commandService');\nexport const CommandsRegistry = new class {\n constructor() {\n this._commands = new Map();\n this._onDidRegisterCommand = new Emitter();\n this.onDidRegisterCommand = this._onDidRegisterCommand.event;\n }\n registerCommand(idOrCommand, handler) {\n if (!idOrCommand) {\n throw new Error(`invalid command`);\n }\n if (typeof idOrCommand === 'string') {\n if (!handler) {\n throw new Error(`invalid command`);\n }\n return this.registerCommand({ id: idOrCommand, handler });\n }\n // add argument validation if rich command metadata is provided\n if (idOrCommand.description) {\n const constraints = [];\n for (let arg of idOrCommand.description.args) {\n constraints.push(arg.constraint);\n }\n const actualHandler = idOrCommand.handler;\n idOrCommand.handler = function (accessor, ...args) {\n validateConstraints(args, constraints);\n return actualHandler(accessor, ...args);\n };\n }\n // find a place to store the command\n const { id } = idOrCommand;\n let commands = this._commands.get(id);\n if (!commands) {\n commands = new LinkedList();\n this._commands.set(id, commands);\n }\n let removeFn = commands.unshift(idOrCommand);\n let ret = toDisposable(() => {\n removeFn();\n const command = this._commands.get(id);\n if (command === null || command === void 0 ? void 0 : command.isEmpty()) {\n this._commands.delete(id);\n }\n });\n // tell the world about this command\n this._onDidRegisterCommand.fire(id);\n return ret;\n }\n registerCommandAlias(oldId, newId) {\n return CommandsRegistry.registerCommand(oldId, (accessor, ...args) => accessor.get(ICommandService).executeCommand(newId, ...args));\n }\n getCommand(id) {\n const list = this._commands.get(id);\n if (!list || list.isEmpty()) {\n return undefined;\n }\n return Iterable.first(list);\n }\n getCommands() {\n const result = new Map();\n for (const key of this._commands.keys()) {\n const command = this.getCommand(key);\n if (command) {\n result.set(key, command);\n }\n }\n return result;\n }\n};\nCommandsRegistry.registerCommand('noop', () => { });\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createKeybinding } from '../../../base/common/keybindings.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { CommandsRegistry } from '../../commands/common/commands.js';\nimport { Registry } from '../../registry/common/platform.js';\nclass KeybindingsRegistryImpl {\n constructor() {\n this._coreKeybindings = [];\n this._extensionKeybindings = [];\n this._cachedMergedKeybindings = null;\n }\n /**\n * Take current platform into account and reduce to primary & secondary.\n */\n static bindToCurrentPlatform(kb) {\n if (OS === 1 /* Windows */) {\n if (kb && kb.win) {\n return kb.win;\n }\n }\n else if (OS === 2 /* Macintosh */) {\n if (kb && kb.mac) {\n return kb.mac;\n }\n }\n else {\n if (kb && kb.linux) {\n return kb.linux;\n }\n }\n return kb;\n }\n registerKeybindingRule(rule) {\n const actualKb = KeybindingsRegistryImpl.bindToCurrentPlatform(rule);\n if (actualKb && actualKb.primary) {\n const kk = createKeybinding(actualKb.primary, OS);\n if (kk) {\n this._registerDefaultKeybinding(kk, rule.id, rule.args, rule.weight, 0, rule.when);\n }\n }\n if (actualKb && Array.isArray(actualKb.secondary)) {\n for (let i = 0, len = actualKb.secondary.length; i < len; i++) {\n const k = actualKb.secondary[i];\n const kk = createKeybinding(k, OS);\n if (kk) {\n this._registerDefaultKeybinding(kk, rule.id, rule.args, rule.weight, -i - 1, rule.when);\n }\n }\n }\n }\n registerCommandAndKeybindingRule(desc) {\n this.registerKeybindingRule(desc);\n CommandsRegistry.registerCommand(desc);\n }\n static _mightProduceChar(keyCode) {\n if (keyCode >= 21 /* Digit0 */ && keyCode <= 30 /* Digit9 */) {\n return true;\n }\n if (keyCode >= 31 /* KeyA */ && keyCode <= 56 /* KeyZ */) {\n return true;\n }\n return (keyCode === 80 /* Semicolon */\n || keyCode === 81 /* Equal */\n || keyCode === 82 /* Comma */\n || keyCode === 83 /* Minus */\n || keyCode === 84 /* Period */\n || keyCode === 85 /* Slash */\n || keyCode === 86 /* Backquote */\n || keyCode === 110 /* ABNT_C1 */\n || keyCode === 111 /* ABNT_C2 */\n || keyCode === 87 /* BracketLeft */\n || keyCode === 88 /* Backslash */\n || keyCode === 89 /* BracketRight */\n || keyCode === 90 /* Quote */\n || keyCode === 91 /* OEM_8 */\n || keyCode === 92 /* IntlBackslash */);\n }\n _assertNoCtrlAlt(keybinding, commandId) {\n if (keybinding.ctrlKey && keybinding.altKey && !keybinding.metaKey) {\n if (KeybindingsRegistryImpl._mightProduceChar(keybinding.keyCode)) {\n console.warn('Ctrl+Alt+ keybindings should not be used by default under Windows. Offender: ', keybinding, ' for ', commandId);\n }\n }\n }\n _registerDefaultKeybinding(keybinding, commandId, commandArgs, weight1, weight2, when) {\n if (OS === 1 /* Windows */) {\n this._assertNoCtrlAlt(keybinding.parts[0], commandId);\n }\n this._coreKeybindings.push({\n keybinding: keybinding.parts,\n command: commandId,\n commandArgs: commandArgs,\n when: when,\n weight1: weight1,\n weight2: weight2,\n extensionId: null,\n isBuiltinExtension: false\n });\n this._cachedMergedKeybindings = null;\n }\n getDefaultKeybindings() {\n if (!this._cachedMergedKeybindings) {\n this._cachedMergedKeybindings = [].concat(this._coreKeybindings).concat(this._extensionKeybindings);\n this._cachedMergedKeybindings.sort(sorter);\n }\n return this._cachedMergedKeybindings.slice(0);\n }\n}\nexport const KeybindingsRegistry = new KeybindingsRegistryImpl();\n// Define extension point ids\nexport const Extensions = {\n EditorModes: 'platform.keybindingsRegistry'\n};\nRegistry.add(Extensions.EditorModes, KeybindingsRegistry);\nfunction sorter(a, b) {\n if (a.weight1 !== b.weight1) {\n return a.weight1 - b.weight1;\n }\n if (a.command < b.command) {\n return -1;\n }\n if (a.command > b.command) {\n return 1;\n }\n return a.weight2 - b.weight2;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Selection } from '../core/selection.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { TextChange, compressConsecutiveTextChanges } from './textChange.js';\nimport * as buffer from '../../../base/common/buffer.js';\nimport { basename } from '../../../base/common/resources.js';\nfunction uriGetComparisonKey(resource) {\n return resource.toString();\n}\nexport class SingleModelEditStackData {\n constructor(beforeVersionId, afterVersionId, beforeEOL, afterEOL, beforeCursorState, afterCursorState, changes) {\n this.beforeVersionId = beforeVersionId;\n this.afterVersionId = afterVersionId;\n this.beforeEOL = beforeEOL;\n this.afterEOL = afterEOL;\n this.beforeCursorState = beforeCursorState;\n this.afterCursorState = afterCursorState;\n this.changes = changes;\n }\n static create(model, beforeCursorState) {\n const alternativeVersionId = model.getAlternativeVersionId();\n const eol = getModelEOL(model);\n return new SingleModelEditStackData(alternativeVersionId, alternativeVersionId, eol, eol, beforeCursorState, beforeCursorState, []);\n }\n append(model, textChanges, afterEOL, afterVersionId, afterCursorState) {\n if (textChanges.length > 0) {\n this.changes = compressConsecutiveTextChanges(this.changes, textChanges);\n }\n this.afterEOL = afterEOL;\n this.afterVersionId = afterVersionId;\n this.afterCursorState = afterCursorState;\n }\n static _writeSelectionsSize(selections) {\n return 4 + 4 * 4 * (selections ? selections.length : 0);\n }\n static _writeSelections(b, selections, offset) {\n buffer.writeUInt32BE(b, (selections ? selections.length : 0), offset);\n offset += 4;\n if (selections) {\n for (const selection of selections) {\n buffer.writeUInt32BE(b, selection.selectionStartLineNumber, offset);\n offset += 4;\n buffer.writeUInt32BE(b, selection.selectionStartColumn, offset);\n offset += 4;\n buffer.writeUInt32BE(b, selection.positionLineNumber, offset);\n offset += 4;\n buffer.writeUInt32BE(b, selection.positionColumn, offset);\n offset += 4;\n }\n }\n return offset;\n }\n static _readSelections(b, offset, dest) {\n const count = buffer.readUInt32BE(b, offset);\n offset += 4;\n for (let i = 0; i < count; i++) {\n const selectionStartLineNumber = buffer.readUInt32BE(b, offset);\n offset += 4;\n const selectionStartColumn = buffer.readUInt32BE(b, offset);\n offset += 4;\n const positionLineNumber = buffer.readUInt32BE(b, offset);\n offset += 4;\n const positionColumn = buffer.readUInt32BE(b, offset);\n offset += 4;\n dest.push(new Selection(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn));\n }\n return offset;\n }\n serialize() {\n let necessarySize = (+4 // beforeVersionId\n + 4 // afterVersionId\n + 1 // beforeEOL\n + 1 // afterEOL\n + SingleModelEditStackData._writeSelectionsSize(this.beforeCursorState)\n + SingleModelEditStackData._writeSelectionsSize(this.afterCursorState)\n + 4 // change count\n );\n for (const change of this.changes) {\n necessarySize += change.writeSize();\n }\n const b = new Uint8Array(necessarySize);\n let offset = 0;\n buffer.writeUInt32BE(b, this.beforeVersionId, offset);\n offset += 4;\n buffer.writeUInt32BE(b, this.afterVersionId, offset);\n offset += 4;\n buffer.writeUInt8(b, this.beforeEOL, offset);\n offset += 1;\n buffer.writeUInt8(b, this.afterEOL, offset);\n offset += 1;\n offset = SingleModelEditStackData._writeSelections(b, this.beforeCursorState, offset);\n offset = SingleModelEditStackData._writeSelections(b, this.afterCursorState, offset);\n buffer.writeUInt32BE(b, this.changes.length, offset);\n offset += 4;\n for (const change of this.changes) {\n offset = change.write(b, offset);\n }\n return b.buffer;\n }\n static deserialize(source) {\n const b = new Uint8Array(source);\n let offset = 0;\n const beforeVersionId = buffer.readUInt32BE(b, offset);\n offset += 4;\n const afterVersionId = buffer.readUInt32BE(b, offset);\n offset += 4;\n const beforeEOL = buffer.readUInt8(b, offset);\n offset += 1;\n const afterEOL = buffer.readUInt8(b, offset);\n offset += 1;\n const beforeCursorState = [];\n offset = SingleModelEditStackData._readSelections(b, offset, beforeCursorState);\n const afterCursorState = [];\n offset = SingleModelEditStackData._readSelections(b, offset, afterCursorState);\n const changeCount = buffer.readUInt32BE(b, offset);\n offset += 4;\n const changes = [];\n for (let i = 0; i < changeCount; i++) {\n offset = TextChange.read(b, offset, changes);\n }\n return new SingleModelEditStackData(beforeVersionId, afterVersionId, beforeEOL, afterEOL, beforeCursorState, afterCursorState, changes);\n }\n}\nexport class SingleModelEditStackElement {\n constructor(model, beforeCursorState) {\n this.model = model;\n this._data = SingleModelEditStackData.create(model, beforeCursorState);\n }\n get type() {\n return 0 /* Resource */;\n }\n get resource() {\n if (URI.isUri(this.model)) {\n return this.model;\n }\n return this.model.uri;\n }\n get label() {\n return nls.localize('edit', \"Typing\");\n }\n toString() {\n const data = (this._data instanceof SingleModelEditStackData ? this._data : SingleModelEditStackData.deserialize(this._data));\n return data.changes.map(change => change.toString()).join(', ');\n }\n matchesResource(resource) {\n const uri = (URI.isUri(this.model) ? this.model : this.model.uri);\n return (uri.toString() === resource.toString());\n }\n setModel(model) {\n this.model = model;\n }\n canAppend(model) {\n return (this.model === model && this._data instanceof SingleModelEditStackData);\n }\n append(model, textChanges, afterEOL, afterVersionId, afterCursorState) {\n if (this._data instanceof SingleModelEditStackData) {\n this._data.append(model, textChanges, afterEOL, afterVersionId, afterCursorState);\n }\n }\n close() {\n if (this._data instanceof SingleModelEditStackData) {\n this._data = this._data.serialize();\n }\n }\n open() {\n if (!(this._data instanceof SingleModelEditStackData)) {\n this._data = SingleModelEditStackData.deserialize(this._data);\n }\n }\n undo() {\n if (URI.isUri(this.model)) {\n // don't have a model\n throw new Error(`Invalid SingleModelEditStackElement`);\n }\n if (this._data instanceof SingleModelEditStackData) {\n this._data = this._data.serialize();\n }\n const data = SingleModelEditStackData.deserialize(this._data);\n this.model._applyUndo(data.changes, data.beforeEOL, data.beforeVersionId, data.beforeCursorState);\n }\n redo() {\n if (URI.isUri(this.model)) {\n // don't have a model\n throw new Error(`Invalid SingleModelEditStackElement`);\n }\n if (this._data instanceof SingleModelEditStackData) {\n this._data = this._data.serialize();\n }\n const data = SingleModelEditStackData.deserialize(this._data);\n this.model._applyRedo(data.changes, data.afterEOL, data.afterVersionId, data.afterCursorState);\n }\n heapSize() {\n if (this._data instanceof SingleModelEditStackData) {\n this._data = this._data.serialize();\n }\n return this._data.byteLength + 168 /*heap overhead*/;\n }\n}\nexport class MultiModelEditStackElement {\n constructor(label, editStackElements) {\n this.type = 1 /* Workspace */;\n this.label = label;\n this._isOpen = true;\n this._editStackElementsArr = editStackElements.slice(0);\n this._editStackElementsMap = new Map();\n for (const editStackElement of this._editStackElementsArr) {\n const key = uriGetComparisonKey(editStackElement.resource);\n this._editStackElementsMap.set(key, editStackElement);\n }\n this._delegate = null;\n }\n get resources() {\n return this._editStackElementsArr.map(editStackElement => editStackElement.resource);\n }\n prepareUndoRedo() {\n if (this._delegate) {\n return this._delegate.prepareUndoRedo(this);\n }\n }\n matchesResource(resource) {\n const key = uriGetComparisonKey(resource);\n return (this._editStackElementsMap.has(key));\n }\n setModel(model) {\n const key = uriGetComparisonKey(URI.isUri(model) ? model : model.uri);\n if (this._editStackElementsMap.has(key)) {\n this._editStackElementsMap.get(key).setModel(model);\n }\n }\n canAppend(model) {\n if (!this._isOpen) {\n return false;\n }\n const key = uriGetComparisonKey(model.uri);\n if (this._editStackElementsMap.has(key)) {\n const editStackElement = this._editStackElementsMap.get(key);\n return editStackElement.canAppend(model);\n }\n return false;\n }\n append(model, textChanges, afterEOL, afterVersionId, afterCursorState) {\n const key = uriGetComparisonKey(model.uri);\n const editStackElement = this._editStackElementsMap.get(key);\n editStackElement.append(model, textChanges, afterEOL, afterVersionId, afterCursorState);\n }\n close() {\n this._isOpen = false;\n }\n open() {\n // cannot reopen\n }\n undo() {\n this._isOpen = false;\n for (const editStackElement of this._editStackElementsArr) {\n editStackElement.undo();\n }\n }\n redo() {\n for (const editStackElement of this._editStackElementsArr) {\n editStackElement.redo();\n }\n }\n heapSize(resource) {\n const key = uriGetComparisonKey(resource);\n if (this._editStackElementsMap.has(key)) {\n const editStackElement = this._editStackElementsMap.get(key);\n return editStackElement.heapSize();\n }\n return 0;\n }\n split() {\n return this._editStackElementsArr;\n }\n toString() {\n let result = [];\n for (const editStackElement of this._editStackElementsArr) {\n result.push(`${basename(editStackElement.resource)}: ${editStackElement}`);\n }\n return `{${result.join(', ')}}`;\n }\n}\nfunction getModelEOL(model) {\n const eol = model.getEOL();\n if (eol === '\\n') {\n return 0 /* LF */;\n }\n else {\n return 1 /* CRLF */;\n }\n}\nexport function isEditStackElement(element) {\n if (!element) {\n return false;\n }\n return ((element instanceof SingleModelEditStackElement) || (element instanceof MultiModelEditStackElement));\n}\nexport class EditStack {\n constructor(model, undoRedoService) {\n this._model = model;\n this._undoRedoService = undoRedoService;\n }\n pushStackElement() {\n const lastElement = this._undoRedoService.getLastElement(this._model.uri);\n if (isEditStackElement(lastElement)) {\n lastElement.close();\n }\n }\n popStackElement() {\n const lastElement = this._undoRedoService.getLastElement(this._model.uri);\n if (isEditStackElement(lastElement)) {\n lastElement.open();\n }\n }\n clear() {\n this._undoRedoService.removeElements(this._model.uri);\n }\n _getOrCreateEditStackElement(beforeCursorState) {\n const lastElement = this._undoRedoService.getLastElement(this._model.uri);\n if (isEditStackElement(lastElement) && lastElement.canAppend(this._model)) {\n return lastElement;\n }\n const newElement = new SingleModelEditStackElement(this._model, beforeCursorState);\n this._undoRedoService.pushElement(newElement);\n return newElement;\n }\n pushEOL(eol) {\n const editStackElement = this._getOrCreateEditStackElement(null);\n this._model.setEOL(eol);\n editStackElement.append(this._model, [], getModelEOL(this._model), this._model.getAlternativeVersionId(), null);\n }\n pushEditOperation(beforeCursorState, editOperations, cursorStateComputer) {\n const editStackElement = this._getOrCreateEditStackElement(beforeCursorState);\n const inverseEditOperations = this._model.applyEdits(editOperations, true);\n const afterCursorState = EditStack._computeCursorState(cursorStateComputer, inverseEditOperations);\n const textChanges = inverseEditOperations.map((op, index) => ({ index: index, textChange: op.textChange }));\n textChanges.sort((a, b) => {\n if (a.textChange.oldPosition === b.textChange.oldPosition) {\n return a.index - b.index;\n }\n return a.textChange.oldPosition - b.textChange.oldPosition;\n });\n editStackElement.append(this._model, textChanges.map(op => op.textChange), getModelEOL(this._model), this._model.getAlternativeVersionId(), afterCursorState);\n return afterCursorState;\n }\n static _computeCursorState(cursorStateComputer, inverseEditOperations) {\n try {\n return cursorStateComputer ? cursorStateComputer(inverseEditOperations) : null;\n }\n catch (e) {\n onUnexpectedError(e);\n return null;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../../common/core/range.js';\nimport { MinimapPosition, OverviewRulerLane } from '../../common/model.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { minimapFindMatch, overviewRulerFindMatchForeground } from '../../../platform/theme/common/colorRegistry.js';\nimport { themeColorFromId } from '../../../platform/theme/common/themeService.js';\nexport class FindDecorations {\n constructor(editor) {\n this._editor = editor;\n this._decorations = [];\n this._overviewRulerApproximateDecorations = [];\n this._findScopeDecorationIds = [];\n this._rangeHighlightDecorationId = null;\n this._highlightedDecorationId = null;\n this._startPosition = this._editor.getPosition();\n }\n dispose() {\n this._editor.deltaDecorations(this._allDecorations(), []);\n this._decorations = [];\n this._overviewRulerApproximateDecorations = [];\n this._findScopeDecorationIds = [];\n this._rangeHighlightDecorationId = null;\n this._highlightedDecorationId = null;\n }\n reset() {\n this._decorations = [];\n this._overviewRulerApproximateDecorations = [];\n this._findScopeDecorationIds = [];\n this._rangeHighlightDecorationId = null;\n this._highlightedDecorationId = null;\n }\n getCount() {\n return this._decorations.length;\n }\n /** @deprecated use getFindScopes to support multiple selections */\n getFindScope() {\n if (this._findScopeDecorationIds[0]) {\n return this._editor.getModel().getDecorationRange(this._findScopeDecorationIds[0]);\n }\n return null;\n }\n getFindScopes() {\n if (this._findScopeDecorationIds.length) {\n const scopes = this._findScopeDecorationIds.map(findScopeDecorationId => this._editor.getModel().getDecorationRange(findScopeDecorationId)).filter(element => !!element);\n if (scopes.length) {\n return scopes;\n }\n }\n return null;\n }\n getStartPosition() {\n return this._startPosition;\n }\n setStartPosition(newStartPosition) {\n this._startPosition = newStartPosition;\n this.setCurrentFindMatch(null);\n }\n _getDecorationIndex(decorationId) {\n const index = this._decorations.indexOf(decorationId);\n if (index >= 0) {\n return index + 1;\n }\n return 1;\n }\n getCurrentMatchesPosition(desiredRange) {\n let candidates = this._editor.getModel().getDecorationsInRange(desiredRange);\n for (const candidate of candidates) {\n const candidateOpts = candidate.options;\n if (candidateOpts === FindDecorations._FIND_MATCH_DECORATION || candidateOpts === FindDecorations._CURRENT_FIND_MATCH_DECORATION) {\n return this._getDecorationIndex(candidate.id);\n }\n }\n // We don't know the current match position, so returns zero to show '?' in find widget\n return 0;\n }\n setCurrentFindMatch(nextMatch) {\n let newCurrentDecorationId = null;\n let matchPosition = 0;\n if (nextMatch) {\n for (let i = 0, len = this._decorations.length; i < len; i++) {\n let range = this._editor.getModel().getDecorationRange(this._decorations[i]);\n if (nextMatch.equalsRange(range)) {\n newCurrentDecorationId = this._decorations[i];\n matchPosition = (i + 1);\n break;\n }\n }\n }\n if (this._highlightedDecorationId !== null || newCurrentDecorationId !== null) {\n this._editor.changeDecorations((changeAccessor) => {\n if (this._highlightedDecorationId !== null) {\n changeAccessor.changeDecorationOptions(this._highlightedDecorationId, FindDecorations._FIND_MATCH_DECORATION);\n this._highlightedDecorationId = null;\n }\n if (newCurrentDecorationId !== null) {\n this._highlightedDecorationId = newCurrentDecorationId;\n changeAccessor.changeDecorationOptions(this._highlightedDecorationId, FindDecorations._CURRENT_FIND_MATCH_DECORATION);\n }\n if (this._rangeHighlightDecorationId !== null) {\n changeAccessor.removeDecoration(this._rangeHighlightDecorationId);\n this._rangeHighlightDecorationId = null;\n }\n if (newCurrentDecorationId !== null) {\n let rng = this._editor.getModel().getDecorationRange(newCurrentDecorationId);\n if (rng.startLineNumber !== rng.endLineNumber && rng.endColumn === 1) {\n let lineBeforeEnd = rng.endLineNumber - 1;\n let lineBeforeEndMaxColumn = this._editor.getModel().getLineMaxColumn(lineBeforeEnd);\n rng = new Range(rng.startLineNumber, rng.startColumn, lineBeforeEnd, lineBeforeEndMaxColumn);\n }\n this._rangeHighlightDecorationId = changeAccessor.addDecoration(rng, FindDecorations._RANGE_HIGHLIGHT_DECORATION);\n }\n });\n }\n return matchPosition;\n }\n set(findMatches, findScopes) {\n this._editor.changeDecorations((accessor) => {\n let findMatchesOptions = FindDecorations._FIND_MATCH_DECORATION;\n let newOverviewRulerApproximateDecorations = [];\n if (findMatches.length > 1000) {\n // we go into a mode where the overview ruler gets \"approximate\" decorations\n // the reason is that the overview ruler paints all the decorations in the file and we don't want to cause freezes\n findMatchesOptions = FindDecorations._FIND_MATCH_NO_OVERVIEW_DECORATION;\n // approximate a distance in lines where matches should be merged\n const lineCount = this._editor.getModel().getLineCount();\n const height = this._editor.getLayoutInfo().height;\n const approxPixelsPerLine = height / lineCount;\n const mergeLinesDelta = Math.max(2, Math.ceil(3 / approxPixelsPerLine));\n // merge decorations as much as possible\n let prevStartLineNumber = findMatches[0].range.startLineNumber;\n let prevEndLineNumber = findMatches[0].range.endLineNumber;\n for (let i = 1, len = findMatches.length; i < len; i++) {\n const range = findMatches[i].range;\n if (prevEndLineNumber + mergeLinesDelta >= range.startLineNumber) {\n if (range.endLineNumber > prevEndLineNumber) {\n prevEndLineNumber = range.endLineNumber;\n }\n }\n else {\n newOverviewRulerApproximateDecorations.push({\n range: new Range(prevStartLineNumber, 1, prevEndLineNumber, 1),\n options: FindDecorations._FIND_MATCH_ONLY_OVERVIEW_DECORATION\n });\n prevStartLineNumber = range.startLineNumber;\n prevEndLineNumber = range.endLineNumber;\n }\n }\n newOverviewRulerApproximateDecorations.push({\n range: new Range(prevStartLineNumber, 1, prevEndLineNumber, 1),\n options: FindDecorations._FIND_MATCH_ONLY_OVERVIEW_DECORATION\n });\n }\n // Find matches\n let newFindMatchesDecorations = new Array(findMatches.length);\n for (let i = 0, len = findMatches.length; i < len; i++) {\n newFindMatchesDecorations[i] = {\n range: findMatches[i].range,\n options: findMatchesOptions\n };\n }\n this._decorations = accessor.deltaDecorations(this._decorations, newFindMatchesDecorations);\n // Overview ruler approximate decorations\n this._overviewRulerApproximateDecorations = accessor.deltaDecorations(this._overviewRulerApproximateDecorations, newOverviewRulerApproximateDecorations);\n // Range highlight\n if (this._rangeHighlightDecorationId) {\n accessor.removeDecoration(this._rangeHighlightDecorationId);\n this._rangeHighlightDecorationId = null;\n }\n // Find scope\n if (this._findScopeDecorationIds.length) {\n this._findScopeDecorationIds.forEach(findScopeDecorationId => accessor.removeDecoration(findScopeDecorationId));\n this._findScopeDecorationIds = [];\n }\n if (findScopes === null || findScopes === void 0 ? void 0 : findScopes.length) {\n this._findScopeDecorationIds = findScopes.map(findScope => accessor.addDecoration(findScope, FindDecorations._FIND_SCOPE_DECORATION));\n }\n });\n }\n matchBeforePosition(position) {\n if (this._decorations.length === 0) {\n return null;\n }\n for (let i = this._decorations.length - 1; i >= 0; i--) {\n let decorationId = this._decorations[i];\n let r = this._editor.getModel().getDecorationRange(decorationId);\n if (!r || r.endLineNumber > position.lineNumber) {\n continue;\n }\n if (r.endLineNumber < position.lineNumber) {\n return r;\n }\n if (r.endColumn > position.column) {\n continue;\n }\n return r;\n }\n return this._editor.getModel().getDecorationRange(this._decorations[this._decorations.length - 1]);\n }\n matchAfterPosition(position) {\n if (this._decorations.length === 0) {\n return null;\n }\n for (let i = 0, len = this._decorations.length; i < len; i++) {\n let decorationId = this._decorations[i];\n let r = this._editor.getModel().getDecorationRange(decorationId);\n if (!r || r.startLineNumber < position.lineNumber) {\n continue;\n }\n if (r.startLineNumber > position.lineNumber) {\n return r;\n }\n if (r.startColumn < position.column) {\n continue;\n }\n return r;\n }\n return this._editor.getModel().getDecorationRange(this._decorations[0]);\n }\n _allDecorations() {\n let result = [];\n result = result.concat(this._decorations);\n result = result.concat(this._overviewRulerApproximateDecorations);\n if (this._findScopeDecorationIds.length) {\n result.push(...this._findScopeDecorationIds);\n }\n if (this._rangeHighlightDecorationId) {\n result.push(this._rangeHighlightDecorationId);\n }\n return result;\n }\n}\nFindDecorations._CURRENT_FIND_MATCH_DECORATION = ModelDecorationOptions.register({\n description: 'current-find-match',\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n zIndex: 13,\n className: 'currentFindMatch',\n showIfCollapsed: true,\n overviewRuler: {\n color: themeColorFromId(overviewRulerFindMatchForeground),\n position: OverviewRulerLane.Center\n },\n minimap: {\n color: themeColorFromId(minimapFindMatch),\n position: MinimapPosition.Inline\n }\n});\nFindDecorations._FIND_MATCH_DECORATION = ModelDecorationOptions.register({\n description: 'find-match',\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n zIndex: 10,\n className: 'findMatch',\n showIfCollapsed: true,\n overviewRuler: {\n color: themeColorFromId(overviewRulerFindMatchForeground),\n position: OverviewRulerLane.Center\n },\n minimap: {\n color: themeColorFromId(minimapFindMatch),\n position: MinimapPosition.Inline\n }\n});\nFindDecorations._FIND_MATCH_NO_OVERVIEW_DECORATION = ModelDecorationOptions.register({\n description: 'find-match-no-overview',\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'findMatch',\n showIfCollapsed: true\n});\nFindDecorations._FIND_MATCH_ONLY_OVERVIEW_DECORATION = ModelDecorationOptions.register({\n description: 'find-match-only-overview',\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n overviewRuler: {\n color: themeColorFromId(overviewRulerFindMatchForeground),\n position: OverviewRulerLane.Center\n }\n});\nFindDecorations._RANGE_HIGHLIGHT_DECORATION = ModelDecorationOptions.register({\n description: 'find-range-highlight',\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'rangeHighlight',\n isWholeLine: true\n});\nFindDecorations._FIND_SCOPE_DECORATION = ModelDecorationOptions.register({\n description: 'find-scope',\n className: 'findScope',\n isWholeLine: true\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../../common/core/range.js';\nexport class ReplaceAllCommand {\n constructor(editorSelection, ranges, replaceStrings) {\n this._editorSelection = editorSelection;\n this._ranges = ranges;\n this._replaceStrings = replaceStrings;\n this._trackedEditorSelectionId = null;\n }\n getEditOperations(model, builder) {\n if (this._ranges.length > 0) {\n // Collect all edit operations\n let ops = [];\n for (let i = 0; i < this._ranges.length; i++) {\n ops.push({\n range: this._ranges[i],\n text: this._replaceStrings[i]\n });\n }\n // Sort them in ascending order by range starts\n ops.sort((o1, o2) => {\n return Range.compareRangesUsingStarts(o1.range, o2.range);\n });\n // Merge operations that touch each other\n let resultOps = [];\n let previousOp = ops[0];\n for (let i = 1; i < ops.length; i++) {\n if (previousOp.range.endLineNumber === ops[i].range.startLineNumber && previousOp.range.endColumn === ops[i].range.startColumn) {\n // These operations are one after another and can be merged\n previousOp.range = previousOp.range.plusRange(ops[i].range);\n previousOp.text = previousOp.text + ops[i].text;\n }\n else {\n resultOps.push(previousOp);\n previousOp = ops[i];\n }\n }\n resultOps.push(previousOp);\n for (const op of resultOps) {\n builder.addEditOperation(op.range, op.text);\n }\n }\n this._trackedEditorSelectionId = builder.trackSelection(this._editorSelection);\n }\n computeCursorState(model, helper) {\n return helper.getTrackedSelection(this._trackedEditorSelectionId);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from './strings.js';\nexport function buildReplaceStringWithCasePreserved(matches, pattern) {\n if (matches && (matches[0] !== '')) {\n const containsHyphens = validateSpecificSpecialCharacter(matches, pattern, '-');\n const containsUnderscores = validateSpecificSpecialCharacter(matches, pattern, '_');\n if (containsHyphens && !containsUnderscores) {\n return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '-');\n }\n else if (!containsHyphens && containsUnderscores) {\n return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '_');\n }\n if (matches[0].toUpperCase() === matches[0]) {\n return pattern.toUpperCase();\n }\n else if (matches[0].toLowerCase() === matches[0]) {\n return pattern.toLowerCase();\n }\n else if (strings.containsUppercaseCharacter(matches[0][0]) && pattern.length > 0) {\n return pattern[0].toUpperCase() + pattern.substr(1);\n }\n else if (matches[0][0].toUpperCase() !== matches[0][0] && pattern.length > 0) {\n return pattern[0].toLowerCase() + pattern.substr(1);\n }\n else {\n // we don't understand its pattern yet.\n return pattern;\n }\n }\n else {\n return pattern;\n }\n}\nfunction validateSpecificSpecialCharacter(matches, pattern, specialCharacter) {\n const doesContainSpecialCharacter = matches[0].indexOf(specialCharacter) !== -1 && pattern.indexOf(specialCharacter) !== -1;\n return doesContainSpecialCharacter && matches[0].split(specialCharacter).length === pattern.split(specialCharacter).length;\n}\nfunction buildReplaceStringForSpecificSpecialCharacter(matches, pattern, specialCharacter) {\n const splitPatternAtSpecialCharacter = pattern.split(specialCharacter);\n const splitMatchAtSpecialCharacter = matches[0].split(specialCharacter);\n let replaceString = '';\n splitPatternAtSpecialCharacter.forEach((splitValue, index) => {\n replaceString += buildReplaceStringWithCasePreserved([splitMatchAtSpecialCharacter[index]], splitValue) + specialCharacter;\n });\n return replaceString.slice(0, -1);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { buildReplaceStringWithCasePreserved } from '../../../base/common/search.js';\n/**\n * Assigned when the replace pattern is entirely static.\n */\nclass StaticValueReplacePattern {\n constructor(staticValue) {\n this.staticValue = staticValue;\n this.kind = 0 /* StaticValue */;\n }\n}\n/**\n * Assigned when the replace pattern has replacement patterns.\n */\nclass DynamicPiecesReplacePattern {\n constructor(pieces) {\n this.pieces = pieces;\n this.kind = 1 /* DynamicPieces */;\n }\n}\nexport class ReplacePattern {\n constructor(pieces) {\n if (!pieces || pieces.length === 0) {\n this._state = new StaticValueReplacePattern('');\n }\n else if (pieces.length === 1 && pieces[0].staticValue !== null) {\n this._state = new StaticValueReplacePattern(pieces[0].staticValue);\n }\n else {\n this._state = new DynamicPiecesReplacePattern(pieces);\n }\n }\n static fromStaticValue(value) {\n return new ReplacePattern([ReplacePiece.staticValue(value)]);\n }\n get hasReplacementPatterns() {\n return (this._state.kind === 1 /* DynamicPieces */);\n }\n buildReplaceString(matches, preserveCase) {\n if (this._state.kind === 0 /* StaticValue */) {\n if (preserveCase) {\n return buildReplaceStringWithCasePreserved(matches, this._state.staticValue);\n }\n else {\n return this._state.staticValue;\n }\n }\n let result = '';\n for (let i = 0, len = this._state.pieces.length; i < len; i++) {\n let piece = this._state.pieces[i];\n if (piece.staticValue !== null) {\n // static value ReplacePiece\n result += piece.staticValue;\n continue;\n }\n // match index ReplacePiece\n let match = ReplacePattern._substitute(piece.matchIndex, matches);\n if (piece.caseOps !== null && piece.caseOps.length > 0) {\n let repl = [];\n let lenOps = piece.caseOps.length;\n let opIdx = 0;\n for (let idx = 0, len = match.length; idx < len; idx++) {\n if (opIdx >= lenOps) {\n repl.push(match.slice(idx));\n break;\n }\n switch (piece.caseOps[opIdx]) {\n case 'U':\n repl.push(match[idx].toUpperCase());\n break;\n case 'u':\n repl.push(match[idx].toUpperCase());\n opIdx++;\n break;\n case 'L':\n repl.push(match[idx].toLowerCase());\n break;\n case 'l':\n repl.push(match[idx].toLowerCase());\n opIdx++;\n break;\n default:\n repl.push(match[idx]);\n }\n }\n match = repl.join('');\n }\n result += match;\n }\n return result;\n }\n static _substitute(matchIndex, matches) {\n if (matches === null) {\n return '';\n }\n if (matchIndex === 0) {\n return matches[0];\n }\n let remainder = '';\n while (matchIndex > 0) {\n if (matchIndex < matches.length) {\n // A match can be undefined\n let match = (matches[matchIndex] || '');\n return match + remainder;\n }\n remainder = String(matchIndex % 10) + remainder;\n matchIndex = Math.floor(matchIndex / 10);\n }\n return '$' + remainder;\n }\n}\n/**\n * A replace piece can either be a static string or an index to a specific match.\n */\nexport class ReplacePiece {\n constructor(staticValue, matchIndex, caseOps) {\n this.staticValue = staticValue;\n this.matchIndex = matchIndex;\n if (!caseOps || caseOps.length === 0) {\n this.caseOps = null;\n }\n else {\n this.caseOps = caseOps.slice(0);\n }\n }\n static staticValue(value) {\n return new ReplacePiece(value, -1, null);\n }\n static caseOps(index, caseOps) {\n return new ReplacePiece(null, index, caseOps);\n }\n}\nclass ReplacePieceBuilder {\n constructor(source) {\n this._source = source;\n this._lastCharIndex = 0;\n this._result = [];\n this._resultLen = 0;\n this._currentStaticPiece = '';\n }\n emitUnchanged(toCharIndex) {\n this._emitStatic(this._source.substring(this._lastCharIndex, toCharIndex));\n this._lastCharIndex = toCharIndex;\n }\n emitStatic(value, toCharIndex) {\n this._emitStatic(value);\n this._lastCharIndex = toCharIndex;\n }\n _emitStatic(value) {\n if (value.length === 0) {\n return;\n }\n this._currentStaticPiece += value;\n }\n emitMatchIndex(index, toCharIndex, caseOps) {\n if (this._currentStaticPiece.length !== 0) {\n this._result[this._resultLen++] = ReplacePiece.staticValue(this._currentStaticPiece);\n this._currentStaticPiece = '';\n }\n this._result[this._resultLen++] = ReplacePiece.caseOps(index, caseOps);\n this._lastCharIndex = toCharIndex;\n }\n finalize() {\n this.emitUnchanged(this._source.length);\n if (this._currentStaticPiece.length !== 0) {\n this._result[this._resultLen++] = ReplacePiece.staticValue(this._currentStaticPiece);\n this._currentStaticPiece = '';\n }\n return new ReplacePattern(this._result);\n }\n}\n/**\n * \\n\t\t\t=> inserts a LF\n * \\t\t\t\t=> inserts a TAB\n * \\\\\t\t\t=> inserts a \"\\\".\n * \\u\t\t\t=> upper-cases one character in a match.\n * \\U\t\t\t=> upper-cases ALL remaining characters in a match.\n * \\l\t\t\t=> lower-cases one character in a match.\n * \\L\t\t\t=> lower-cases ALL remaining characters in a match.\n * $$\t\t\t=> inserts a \"$\".\n * $& and $0\t=> inserts the matched substring.\n * $n\t\t\t=> Where n is a non-negative integer lesser than 100, inserts the nth parenthesized submatch string\n * everything else stays untouched\n *\n * Also see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter\n */\nexport function parseReplaceString(replaceString) {\n if (!replaceString || replaceString.length === 0) {\n return new ReplacePattern(null);\n }\n let caseOps = [];\n let result = new ReplacePieceBuilder(replaceString);\n for (let i = 0, len = replaceString.length; i < len; i++) {\n let chCode = replaceString.charCodeAt(i);\n if (chCode === 92 /* Backslash */) {\n // move to next char\n i++;\n if (i >= len) {\n // string ends with a \\\n break;\n }\n let nextChCode = replaceString.charCodeAt(i);\n // let replaceWithCharacter: string | null = null;\n switch (nextChCode) {\n case 92 /* Backslash */:\n // \\\\ => inserts a \"\\\"\n result.emitUnchanged(i - 1);\n result.emitStatic('\\\\', i + 1);\n break;\n case 110 /* n */:\n // \\n => inserts a LF\n result.emitUnchanged(i - 1);\n result.emitStatic('\\n', i + 1);\n break;\n case 116 /* t */:\n // \\t => inserts a TAB\n result.emitUnchanged(i - 1);\n result.emitStatic('\\t', i + 1);\n break;\n // Case modification of string replacements, patterned after Boost, but only applied\n // to the replacement text, not subsequent content.\n case 117 /* u */:\n // \\u => upper-cases one character.\n case 85 /* U */:\n // \\U => upper-cases ALL following characters.\n case 108 /* l */:\n // \\l => lower-cases one character.\n case 76 /* L */:\n // \\L => lower-cases ALL following characters.\n result.emitUnchanged(i - 1);\n result.emitStatic('', i + 1);\n caseOps.push(String.fromCharCode(nextChCode));\n break;\n }\n continue;\n }\n if (chCode === 36 /* DollarSign */) {\n // move to next char\n i++;\n if (i >= len) {\n // string ends with a $\n break;\n }\n let nextChCode = replaceString.charCodeAt(i);\n if (nextChCode === 36 /* DollarSign */) {\n // $$ => inserts a \"$\"\n result.emitUnchanged(i - 1);\n result.emitStatic('$', i + 1);\n continue;\n }\n if (nextChCode === 48 /* Digit0 */ || nextChCode === 38 /* Ampersand */) {\n // $& and $0 => inserts the matched substring.\n result.emitUnchanged(i - 1);\n result.emitMatchIndex(0, i + 1, caseOps);\n caseOps.length = 0;\n continue;\n }\n if (49 /* Digit1 */ <= nextChCode && nextChCode <= 57 /* Digit9 */) {\n // $n\n let matchIndex = nextChCode - 48 /* Digit0 */;\n // peek next char to probe for $nn\n if (i + 1 < len) {\n let nextNextChCode = replaceString.charCodeAt(i + 1);\n if (48 /* Digit0 */ <= nextNextChCode && nextNextChCode <= 57 /* Digit9 */) {\n // $nn\n // move to next char\n i++;\n matchIndex = matchIndex * 10 + (nextNextChCode - 48 /* Digit0 */);\n result.emitUnchanged(i - 2);\n result.emitMatchIndex(matchIndex, i + 1, caseOps);\n caseOps.length = 0;\n continue;\n }\n }\n result.emitUnchanged(i - 1);\n result.emitMatchIndex(matchIndex, i + 1, caseOps);\n caseOps.length = 0;\n continue;\n }\n }\n }\n return result.finalize();\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { findFirstInSorted } from '../../../base/common/arrays.js';\nimport { RunOnceScheduler, TimeoutTimer } from '../../../base/common/async.js';\nimport { DisposableStore, dispose } from '../../../base/common/lifecycle.js';\nimport { ReplaceCommand, ReplaceCommandThatPreservesSelection } from '../../common/commands/replaceCommand.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { SearchParams } from '../../common/model/textModelSearch.js';\nimport { FindDecorations } from './findDecorations.js';\nimport { ReplaceAllCommand } from './replaceAllCommand.js';\nimport { parseReplaceString, ReplacePattern } from './replacePattern.js';\nimport { RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nexport const CONTEXT_FIND_WIDGET_VISIBLE = new RawContextKey('findWidgetVisible', false);\n// Keep ContextKey use of 'Focussed' to not break when clauses\nexport const CONTEXT_FIND_INPUT_FOCUSED = new RawContextKey('findInputFocussed', false);\nexport const CONTEXT_REPLACE_INPUT_FOCUSED = new RawContextKey('replaceInputFocussed', false);\nexport const ToggleCaseSensitiveKeybinding = {\n primary: 512 /* Alt */ | 33 /* KeyC */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 33 /* KeyC */ }\n};\nexport const ToggleWholeWordKeybinding = {\n primary: 512 /* Alt */ | 53 /* KeyW */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 53 /* KeyW */ }\n};\nexport const ToggleRegexKeybinding = {\n primary: 512 /* Alt */ | 48 /* KeyR */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 48 /* KeyR */ }\n};\nexport const ToggleSearchScopeKeybinding = {\n primary: 512 /* Alt */ | 42 /* KeyL */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 42 /* KeyL */ }\n};\nexport const TogglePreserveCaseKeybinding = {\n primary: 512 /* Alt */ | 46 /* KeyP */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 46 /* KeyP */ }\n};\nexport const FIND_IDS = {\n StartFindAction: 'actions.find',\n StartFindWithSelection: 'actions.findWithSelection',\n NextMatchFindAction: 'editor.action.nextMatchFindAction',\n PreviousMatchFindAction: 'editor.action.previousMatchFindAction',\n NextSelectionMatchFindAction: 'editor.action.nextSelectionMatchFindAction',\n PreviousSelectionMatchFindAction: 'editor.action.previousSelectionMatchFindAction',\n StartFindReplaceAction: 'editor.action.startFindReplaceAction',\n CloseFindWidgetCommand: 'closeFindWidget',\n ToggleCaseSensitiveCommand: 'toggleFindCaseSensitive',\n ToggleWholeWordCommand: 'toggleFindWholeWord',\n ToggleRegexCommand: 'toggleFindRegex',\n ToggleSearchScopeCommand: 'toggleFindInSelection',\n TogglePreserveCaseCommand: 'togglePreserveCase',\n ReplaceOneAction: 'editor.action.replaceOne',\n ReplaceAllAction: 'editor.action.replaceAll',\n SelectAllMatchesAction: 'editor.action.selectAllMatches'\n};\nexport const MATCHES_LIMIT = 19999;\nconst RESEARCH_DELAY = 240;\nexport class FindModelBoundToEditorModel {\n constructor(editor, state) {\n this._toDispose = new DisposableStore();\n this._editor = editor;\n this._state = state;\n this._isDisposed = false;\n this._startSearchingTimer = new TimeoutTimer();\n this._decorations = new FindDecorations(editor);\n this._toDispose.add(this._decorations);\n this._updateDecorationsScheduler = new RunOnceScheduler(() => this.research(false), 100);\n this._toDispose.add(this._updateDecorationsScheduler);\n this._toDispose.add(this._editor.onDidChangeCursorPosition((e) => {\n if (e.reason === 3 /* Explicit */\n || e.reason === 5 /* Undo */\n || e.reason === 6 /* Redo */) {\n this._decorations.setStartPosition(this._editor.getPosition());\n }\n }));\n this._ignoreModelContentChanged = false;\n this._toDispose.add(this._editor.onDidChangeModelContent((e) => {\n if (this._ignoreModelContentChanged) {\n return;\n }\n if (e.isFlush) {\n // a model.setValue() was called\n this._decorations.reset();\n }\n this._decorations.setStartPosition(this._editor.getPosition());\n this._updateDecorationsScheduler.schedule();\n }));\n this._toDispose.add(this._state.onFindReplaceStateChange((e) => this._onStateChanged(e)));\n this.research(false, this._state.searchScope);\n }\n dispose() {\n this._isDisposed = true;\n dispose(this._startSearchingTimer);\n this._toDispose.dispose();\n }\n _onStateChanged(e) {\n if (this._isDisposed) {\n // The find model is disposed during a find state changed event\n return;\n }\n if (!this._editor.hasModel()) {\n // The find model will be disposed momentarily\n return;\n }\n if (e.searchString || e.isReplaceRevealed || e.isRegex || e.wholeWord || e.matchCase || e.searchScope) {\n let model = this._editor.getModel();\n if (model.isTooLargeForSyncing()) {\n this._startSearchingTimer.cancel();\n this._startSearchingTimer.setIfNotSet(() => {\n if (e.searchScope) {\n this.research(e.moveCursor, this._state.searchScope);\n }\n else {\n this.research(e.moveCursor);\n }\n }, RESEARCH_DELAY);\n }\n else {\n if (e.searchScope) {\n this.research(e.moveCursor, this._state.searchScope);\n }\n else {\n this.research(e.moveCursor);\n }\n }\n }\n }\n static _getSearchRange(model, findScope) {\n // If we have set now or before a find scope, use it for computing the search range\n if (findScope) {\n return findScope;\n }\n return model.getFullModelRange();\n }\n research(moveCursor, newFindScope) {\n let findScopes = null;\n if (typeof newFindScope !== 'undefined') {\n if (newFindScope !== null) {\n if (!Array.isArray(newFindScope)) {\n findScopes = [newFindScope];\n }\n else {\n findScopes = newFindScope;\n }\n }\n }\n else {\n findScopes = this._decorations.getFindScopes();\n }\n if (findScopes !== null) {\n findScopes = findScopes.map(findScope => {\n if (findScope.startLineNumber !== findScope.endLineNumber) {\n let endLineNumber = findScope.endLineNumber;\n if (findScope.endColumn === 1) {\n endLineNumber = endLineNumber - 1;\n }\n return new Range(findScope.startLineNumber, 1, endLineNumber, this._editor.getModel().getLineMaxColumn(endLineNumber));\n }\n return findScope;\n });\n }\n let findMatches = this._findMatches(findScopes, false, MATCHES_LIMIT);\n this._decorations.set(findMatches, findScopes);\n const editorSelection = this._editor.getSelection();\n let currentMatchesPosition = this._decorations.getCurrentMatchesPosition(editorSelection);\n if (currentMatchesPosition === 0 && findMatches.length > 0) {\n // current selection is not on top of a match\n // try to find its nearest result from the top of the document\n const matchAfterSelection = findFirstInSorted(findMatches.map(match => match.range), range => Range.compareRangesUsingStarts(range, editorSelection) >= 0);\n currentMatchesPosition = matchAfterSelection > 0 ? matchAfterSelection - 1 + 1 /** match position is one based */ : currentMatchesPosition;\n }\n this._state.changeMatchInfo(currentMatchesPosition, this._decorations.getCount(), undefined);\n if (moveCursor && this._editor.getOption(35 /* find */).cursorMoveOnType) {\n this._moveToNextMatch(this._decorations.getStartPosition());\n }\n }\n _hasMatches() {\n return (this._state.matchesCount > 0);\n }\n _cannotFind() {\n if (!this._hasMatches()) {\n let findScope = this._decorations.getFindScope();\n if (findScope) {\n // Reveal the selection so user is reminded that 'selection find' is on.\n this._editor.revealRangeInCenterIfOutsideViewport(findScope, 0 /* Smooth */);\n }\n return true;\n }\n return false;\n }\n _setCurrentFindMatch(match) {\n let matchesPosition = this._decorations.setCurrentFindMatch(match);\n this._state.changeMatchInfo(matchesPosition, this._decorations.getCount(), match);\n this._editor.setSelection(match);\n this._editor.revealRangeInCenterIfOutsideViewport(match, 0 /* Smooth */);\n }\n _prevSearchPosition(before) {\n let isUsingLineStops = this._state.isRegex && (this._state.searchString.indexOf('^') >= 0\n || this._state.searchString.indexOf('$') >= 0);\n let { lineNumber, column } = before;\n let model = this._editor.getModel();\n if (isUsingLineStops || column === 1) {\n if (lineNumber === 1) {\n lineNumber = model.getLineCount();\n }\n else {\n lineNumber--;\n }\n column = model.getLineMaxColumn(lineNumber);\n }\n else {\n column--;\n }\n return new Position(lineNumber, column);\n }\n _moveToPrevMatch(before, isRecursed = false) {\n if (!this._state.canNavigateBack()) {\n // we are beyond the first matched find result\n // instead of doing nothing, we should refocus the first item\n const nextMatchRange = this._decorations.matchAfterPosition(before);\n if (nextMatchRange) {\n this._setCurrentFindMatch(nextMatchRange);\n }\n return;\n }\n if (this._decorations.getCount() < MATCHES_LIMIT) {\n let prevMatchRange = this._decorations.matchBeforePosition(before);\n if (prevMatchRange && prevMatchRange.isEmpty() && prevMatchRange.getStartPosition().equals(before)) {\n before = this._prevSearchPosition(before);\n prevMatchRange = this._decorations.matchBeforePosition(before);\n }\n if (prevMatchRange) {\n this._setCurrentFindMatch(prevMatchRange);\n }\n return;\n }\n if (this._cannotFind()) {\n return;\n }\n let findScope = this._decorations.getFindScope();\n let searchRange = FindModelBoundToEditorModel._getSearchRange(this._editor.getModel(), findScope);\n // ...(----)...|...\n if (searchRange.getEndPosition().isBefore(before)) {\n before = searchRange.getEndPosition();\n }\n // ...|...(----)...\n if (before.isBefore(searchRange.getStartPosition())) {\n before = searchRange.getEndPosition();\n }\n let { lineNumber, column } = before;\n let model = this._editor.getModel();\n let position = new Position(lineNumber, column);\n let prevMatch = model.findPreviousMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(115 /* wordSeparators */) : null, false);\n if (prevMatch && prevMatch.range.isEmpty() && prevMatch.range.getStartPosition().equals(position)) {\n // Looks like we're stuck at this position, unacceptable!\n position = this._prevSearchPosition(position);\n prevMatch = model.findPreviousMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(115 /* wordSeparators */) : null, false);\n }\n if (!prevMatch) {\n // there is precisely one match and selection is on top of it\n return;\n }\n if (!isRecursed && !searchRange.containsRange(prevMatch.range)) {\n return this._moveToPrevMatch(prevMatch.range.getStartPosition(), true);\n }\n this._setCurrentFindMatch(prevMatch.range);\n }\n moveToPrevMatch() {\n this._moveToPrevMatch(this._editor.getSelection().getStartPosition());\n }\n _nextSearchPosition(after) {\n let isUsingLineStops = this._state.isRegex && (this._state.searchString.indexOf('^') >= 0\n || this._state.searchString.indexOf('$') >= 0);\n let { lineNumber, column } = after;\n let model = this._editor.getModel();\n if (isUsingLineStops || column === model.getLineMaxColumn(lineNumber)) {\n if (lineNumber === model.getLineCount()) {\n lineNumber = 1;\n }\n else {\n lineNumber++;\n }\n column = 1;\n }\n else {\n column++;\n }\n return new Position(lineNumber, column);\n }\n _moveToNextMatch(after) {\n if (!this._state.canNavigateForward()) {\n // we are beyond the last matched find result\n // instead of doing nothing, we should refocus the last item\n const prevMatchRange = this._decorations.matchBeforePosition(after);\n if (prevMatchRange) {\n this._setCurrentFindMatch(prevMatchRange);\n }\n return;\n }\n if (this._decorations.getCount() < MATCHES_LIMIT) {\n let nextMatchRange = this._decorations.matchAfterPosition(after);\n if (nextMatchRange && nextMatchRange.isEmpty() && nextMatchRange.getStartPosition().equals(after)) {\n // Looks like we're stuck at this position, unacceptable!\n after = this._nextSearchPosition(after);\n nextMatchRange = this._decorations.matchAfterPosition(after);\n }\n if (nextMatchRange) {\n this._setCurrentFindMatch(nextMatchRange);\n }\n return;\n }\n let nextMatch = this._getNextMatch(after, false, true);\n if (nextMatch) {\n this._setCurrentFindMatch(nextMatch.range);\n }\n }\n _getNextMatch(after, captureMatches, forceMove, isRecursed = false) {\n if (this._cannotFind()) {\n return null;\n }\n let findScope = this._decorations.getFindScope();\n let searchRange = FindModelBoundToEditorModel._getSearchRange(this._editor.getModel(), findScope);\n // ...(----)...|...\n if (searchRange.getEndPosition().isBefore(after)) {\n after = searchRange.getStartPosition();\n }\n // ...|...(----)...\n if (after.isBefore(searchRange.getStartPosition())) {\n after = searchRange.getStartPosition();\n }\n let { lineNumber, column } = after;\n let model = this._editor.getModel();\n let position = new Position(lineNumber, column);\n let nextMatch = model.findNextMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(115 /* wordSeparators */) : null, captureMatches);\n if (forceMove && nextMatch && nextMatch.range.isEmpty() && nextMatch.range.getStartPosition().equals(position)) {\n // Looks like we're stuck at this position, unacceptable!\n position = this._nextSearchPosition(position);\n nextMatch = model.findNextMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(115 /* wordSeparators */) : null, captureMatches);\n }\n if (!nextMatch) {\n // there is precisely one match and selection is on top of it\n return null;\n }\n if (!isRecursed && !searchRange.containsRange(nextMatch.range)) {\n return this._getNextMatch(nextMatch.range.getEndPosition(), captureMatches, forceMove, true);\n }\n return nextMatch;\n }\n moveToNextMatch() {\n this._moveToNextMatch(this._editor.getSelection().getEndPosition());\n }\n _getReplacePattern() {\n if (this._state.isRegex) {\n return parseReplaceString(this._state.replaceString);\n }\n return ReplacePattern.fromStaticValue(this._state.replaceString);\n }\n replace() {\n if (!this._hasMatches()) {\n return;\n }\n let replacePattern = this._getReplacePattern();\n let selection = this._editor.getSelection();\n let nextMatch = this._getNextMatch(selection.getStartPosition(), true, false);\n if (nextMatch) {\n if (selection.equalsRange(nextMatch.range)) {\n // selection sits on a find match => replace it!\n let replaceString = replacePattern.buildReplaceString(nextMatch.matches, this._state.preserveCase);\n let command = new ReplaceCommand(selection, replaceString);\n this._executeEditorCommand('replace', command);\n this._decorations.setStartPosition(new Position(selection.startLineNumber, selection.startColumn + replaceString.length));\n this.research(true);\n }\n else {\n this._decorations.setStartPosition(this._editor.getPosition());\n this._setCurrentFindMatch(nextMatch.range);\n }\n }\n }\n _findMatches(findScopes, captureMatches, limitResultCount) {\n const searchRanges = (findScopes || [null]).map((scope) => FindModelBoundToEditorModel._getSearchRange(this._editor.getModel(), scope));\n return this._editor.getModel().findMatches(this._state.searchString, searchRanges, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(115 /* wordSeparators */) : null, captureMatches, limitResultCount);\n }\n replaceAll() {\n if (!this._hasMatches()) {\n return;\n }\n const findScopes = this._decorations.getFindScopes();\n if (findScopes === null && this._state.matchesCount >= MATCHES_LIMIT) {\n // Doing a replace on the entire file that is over ${MATCHES_LIMIT} matches\n this._largeReplaceAll();\n }\n else {\n this._regularReplaceAll(findScopes);\n }\n this.research(false);\n }\n _largeReplaceAll() {\n const searchParams = new SearchParams(this._state.searchString, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(115 /* wordSeparators */) : null);\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return;\n }\n let searchRegex = searchData.regex;\n if (!searchRegex.multiline) {\n let mod = 'mu';\n if (searchRegex.ignoreCase) {\n mod += 'i';\n }\n if (searchRegex.global) {\n mod += 'g';\n }\n searchRegex = new RegExp(searchRegex.source, mod);\n }\n const model = this._editor.getModel();\n const modelText = model.getValue(1 /* LF */);\n const fullModelRange = model.getFullModelRange();\n const replacePattern = this._getReplacePattern();\n let resultText;\n const preserveCase = this._state.preserveCase;\n if (replacePattern.hasReplacementPatterns || preserveCase) {\n resultText = modelText.replace(searchRegex, function () {\n return replacePattern.buildReplaceString(arguments, preserveCase);\n });\n }\n else {\n resultText = modelText.replace(searchRegex, replacePattern.buildReplaceString(null, preserveCase));\n }\n let command = new ReplaceCommandThatPreservesSelection(fullModelRange, resultText, this._editor.getSelection());\n this._executeEditorCommand('replaceAll', command);\n }\n _regularReplaceAll(findScopes) {\n const replacePattern = this._getReplacePattern();\n // Get all the ranges (even more than the highlighted ones)\n let matches = this._findMatches(findScopes, replacePattern.hasReplacementPatterns || this._state.preserveCase, 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n let replaceStrings = [];\n for (let i = 0, len = matches.length; i < len; i++) {\n replaceStrings[i] = replacePattern.buildReplaceString(matches[i].matches, this._state.preserveCase);\n }\n let command = new ReplaceAllCommand(this._editor.getSelection(), matches.map(m => m.range), replaceStrings);\n this._executeEditorCommand('replaceAll', command);\n }\n selectAllMatches() {\n if (!this._hasMatches()) {\n return;\n }\n let findScopes = this._decorations.getFindScopes();\n // Get all the ranges (even more than the highlighted ones)\n let matches = this._findMatches(findScopes, false, 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n let selections = matches.map(m => new Selection(m.range.startLineNumber, m.range.startColumn, m.range.endLineNumber, m.range.endColumn));\n // If one of the ranges is the editor selection, then maintain it as primary\n let editorSelection = this._editor.getSelection();\n for (let i = 0, len = selections.length; i < len; i++) {\n let sel = selections[i];\n if (sel.equalsRange(editorSelection)) {\n selections = [editorSelection].concat(selections.slice(0, i)).concat(selections.slice(i + 1));\n break;\n }\n }\n this._editor.setSelections(selections);\n }\n _executeEditorCommand(source, command) {\n try {\n this._ignoreModelContentChanged = true;\n this._editor.pushUndoStop();\n this._editor.executeCommand(source, command);\n this._editor.pushUndoStop();\n }\n finally {\n this._ignoreModelContentChanged = false;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Widget } from '../widget.js';\nimport { CSSIcon } from '../../../common/codicons.js';\nimport { Color } from '../../../common/color.js';\nimport { Emitter } from '../../../common/event.js';\nimport './checkbox.css';\nconst defaultOpts = {\n inputActiveOptionBorder: Color.fromHex('#007ACC00'),\n inputActiveOptionForeground: Color.fromHex('#FFFFFF'),\n inputActiveOptionBackground: Color.fromHex('#0E639C50')\n};\nexport class Checkbox extends Widget {\n constructor(opts) {\n super();\n this._onChange = this._register(new Emitter());\n this.onChange = this._onChange.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._opts = Object.assign(Object.assign({}, defaultOpts), opts);\n this._checked = this._opts.isChecked;\n const classes = ['monaco-custom-checkbox'];\n if (this._opts.icon) {\n classes.push(...CSSIcon.asClassNameArray(this._opts.icon));\n }\n if (this._opts.actionClassName) {\n classes.push(...this._opts.actionClassName.split(' '));\n }\n if (this._checked) {\n classes.push('checked');\n }\n this.domNode = document.createElement('div');\n this.domNode.title = this._opts.title;\n this.domNode.classList.add(...classes);\n if (!this._opts.notFocusable) {\n this.domNode.tabIndex = 0;\n }\n this.domNode.setAttribute('role', 'checkbox');\n this.domNode.setAttribute('aria-checked', String(this._checked));\n this.domNode.setAttribute('aria-label', this._opts.title);\n this.applyStyles();\n this.onclick(this.domNode, (ev) => {\n this.checked = !this._checked;\n this._onChange.fire(false);\n ev.preventDefault();\n });\n this.ignoreGesture(this.domNode);\n this.onkeydown(this.domNode, (keyboardEvent) => {\n if (keyboardEvent.keyCode === 10 /* Space */ || keyboardEvent.keyCode === 3 /* Enter */) {\n this.checked = !this._checked;\n this._onChange.fire(true);\n keyboardEvent.preventDefault();\n return;\n }\n this._onKeyDown.fire(keyboardEvent);\n });\n }\n get enabled() {\n return this.domNode.getAttribute('aria-disabled') !== 'true';\n }\n focus() {\n this.domNode.focus();\n }\n get checked() {\n return this._checked;\n }\n set checked(newIsChecked) {\n this._checked = newIsChecked;\n this.domNode.setAttribute('aria-checked', String(this._checked));\n this.domNode.classList.toggle('checked', this._checked);\n this.applyStyles();\n }\n width() {\n return 2 /*margin left*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */;\n }\n style(styles) {\n if (styles.inputActiveOptionBorder) {\n this._opts.inputActiveOptionBorder = styles.inputActiveOptionBorder;\n }\n if (styles.inputActiveOptionForeground) {\n this._opts.inputActiveOptionForeground = styles.inputActiveOptionForeground;\n }\n if (styles.inputActiveOptionBackground) {\n this._opts.inputActiveOptionBackground = styles.inputActiveOptionBackground;\n }\n this.applyStyles();\n }\n applyStyles() {\n if (this.domNode) {\n this.domNode.style.borderColor = this._checked && this._opts.inputActiveOptionBorder ? this._opts.inputActiveOptionBorder.toString() : 'transparent';\n this.domNode.style.color = this._checked && this._opts.inputActiveOptionForeground ? this._opts.inputActiveOptionForeground.toString() : 'inherit';\n this.domNode.style.backgroundColor = this._checked && this._opts.inputActiveOptionBackground ? this._opts.inputActiveOptionBackground.toString() : 'transparent';\n }\n }\n enable() {\n this.domNode.setAttribute('aria-disabled', String(false));\n }\n disable() {\n this.domNode.setAttribute('aria-disabled', String(true));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Checkbox } from '../checkbox/checkbox.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport * as nls from '../../../../nls.js';\nconst NLS_CASE_SENSITIVE_CHECKBOX_LABEL = nls.localize('caseDescription', \"Match Case\");\nconst NLS_WHOLE_WORD_CHECKBOX_LABEL = nls.localize('wordsDescription', \"Match Whole Word\");\nconst NLS_REGEX_CHECKBOX_LABEL = nls.localize('regexDescription', \"Use Regular Expression\");\nexport class CaseSensitiveCheckbox extends Checkbox {\n constructor(opts) {\n super({\n icon: Codicon.caseSensitive,\n title: NLS_CASE_SENSITIVE_CHECKBOX_LABEL + opts.appendTitle,\n isChecked: opts.isChecked,\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\n}\nexport class WholeWordsCheckbox extends Checkbox {\n constructor(opts) {\n super({\n icon: Codicon.wholeWord,\n title: NLS_WHOLE_WORD_CHECKBOX_LABEL + opts.appendTitle,\n isChecked: opts.isChecked,\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\n}\nexport class RegexCheckbox extends Checkbox {\n constructor(opts) {\n super({\n icon: Codicon.regex,\n title: NLS_REGEX_CHECKBOX_LABEL + opts.appendTitle,\n isChecked: opts.isChecked,\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport { CaseSensitiveCheckbox, RegexCheckbox, WholeWordsCheckbox } from '../../../base/browser/ui/findinput/findInputCheckboxes.js';\nimport { Widget } from '../../../base/browser/ui/widget.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { FIND_IDS } from './findModel.js';\nimport { contrastBorder, editorWidgetBackground, editorWidgetForeground, inputActiveOptionBackground, inputActiveOptionBorder, inputActiveOptionForeground, widgetShadow } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nexport class FindOptionsWidget extends Widget {\n constructor(editor, state, keybindingService, themeService) {\n super();\n this._hideSoon = this._register(new RunOnceScheduler(() => this._hide(), 2000));\n this._isVisible = false;\n this._editor = editor;\n this._state = state;\n this._keybindingService = keybindingService;\n this._domNode = document.createElement('div');\n this._domNode.className = 'findOptionsWidget';\n this._domNode.style.display = 'none';\n this._domNode.style.top = '10px';\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n const inputActiveOptionBorderColor = themeService.getColorTheme().getColor(inputActiveOptionBorder);\n const inputActiveOptionForegroundColor = themeService.getColorTheme().getColor(inputActiveOptionForeground);\n const inputActiveOptionBackgroundColor = themeService.getColorTheme().getColor(inputActiveOptionBackground);\n this.caseSensitive = this._register(new CaseSensitiveCheckbox({\n appendTitle: this._keybindingLabelFor(FIND_IDS.ToggleCaseSensitiveCommand),\n isChecked: this._state.matchCase,\n inputActiveOptionBorder: inputActiveOptionBorderColor,\n inputActiveOptionForeground: inputActiveOptionForegroundColor,\n inputActiveOptionBackground: inputActiveOptionBackgroundColor\n }));\n this._domNode.appendChild(this.caseSensitive.domNode);\n this._register(this.caseSensitive.onChange(() => {\n this._state.change({\n matchCase: this.caseSensitive.checked\n }, false);\n }));\n this.wholeWords = this._register(new WholeWordsCheckbox({\n appendTitle: this._keybindingLabelFor(FIND_IDS.ToggleWholeWordCommand),\n isChecked: this._state.wholeWord,\n inputActiveOptionBorder: inputActiveOptionBorderColor,\n inputActiveOptionForeground: inputActiveOptionForegroundColor,\n inputActiveOptionBackground: inputActiveOptionBackgroundColor\n }));\n this._domNode.appendChild(this.wholeWords.domNode);\n this._register(this.wholeWords.onChange(() => {\n this._state.change({\n wholeWord: this.wholeWords.checked\n }, false);\n }));\n this.regex = this._register(new RegexCheckbox({\n appendTitle: this._keybindingLabelFor(FIND_IDS.ToggleRegexCommand),\n isChecked: this._state.isRegex,\n inputActiveOptionBorder: inputActiveOptionBorderColor,\n inputActiveOptionForeground: inputActiveOptionForegroundColor,\n inputActiveOptionBackground: inputActiveOptionBackgroundColor\n }));\n this._domNode.appendChild(this.regex.domNode);\n this._register(this.regex.onChange(() => {\n this._state.change({\n isRegex: this.regex.checked\n }, false);\n }));\n this._editor.addOverlayWidget(this);\n this._register(this._state.onFindReplaceStateChange((e) => {\n let somethingChanged = false;\n if (e.isRegex) {\n this.regex.checked = this._state.isRegex;\n somethingChanged = true;\n }\n if (e.wholeWord) {\n this.wholeWords.checked = this._state.wholeWord;\n somethingChanged = true;\n }\n if (e.matchCase) {\n this.caseSensitive.checked = this._state.matchCase;\n somethingChanged = true;\n }\n if (!this._state.isRevealed && somethingChanged) {\n this._revealTemporarily();\n }\n }));\n this._register(dom.addDisposableNonBubblingMouseOutListener(this._domNode, (e) => this._onMouseOut()));\n this._register(dom.addDisposableListener(this._domNode, 'mouseover', (e) => this._onMouseOver()));\n this._applyTheme(themeService.getColorTheme());\n this._register(themeService.onDidColorThemeChange(this._applyTheme.bind(this)));\n }\n _keybindingLabelFor(actionId) {\n let kb = this._keybindingService.lookupKeybinding(actionId);\n if (!kb) {\n return '';\n }\n return ` (${kb.getLabel()})`;\n }\n dispose() {\n this._editor.removeOverlayWidget(this);\n super.dispose();\n }\n // ----- IOverlayWidget API\n getId() {\n return FindOptionsWidget.ID;\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n return {\n preference: 0 /* TOP_RIGHT_CORNER */\n };\n }\n highlightFindOptions() {\n this._revealTemporarily();\n }\n _revealTemporarily() {\n this._show();\n this._hideSoon.schedule();\n }\n _onMouseOut() {\n this._hideSoon.schedule();\n }\n _onMouseOver() {\n this._hideSoon.cancel();\n }\n _show() {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n this._domNode.style.display = 'block';\n }\n _hide() {\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode.style.display = 'none';\n }\n _applyTheme(theme) {\n let inputStyles = {\n inputActiveOptionBorder: theme.getColor(inputActiveOptionBorder),\n inputActiveOptionForeground: theme.getColor(inputActiveOptionForeground),\n inputActiveOptionBackground: theme.getColor(inputActiveOptionBackground)\n };\n this.caseSensitive.style(inputStyles);\n this.wholeWords.style(inputStyles);\n this.regex.style(inputStyles);\n }\n}\nFindOptionsWidget.ID = 'editor.contrib.findOptionsWidget';\nregisterThemingParticipant((theme, collector) => {\n const widgetBackground = theme.getColor(editorWidgetBackground);\n if (widgetBackground) {\n collector.addRule(`.monaco-editor .findOptionsWidget { background-color: ${widgetBackground}; }`);\n }\n const widgetForeground = theme.getColor(editorWidgetForeground);\n if (widgetForeground) {\n collector.addRule(`.monaco-editor .findOptionsWidget { color: ${widgetForeground}; }`);\n }\n const widgetShadowColor = theme.getColor(widgetShadow);\n if (widgetShadowColor) {\n collector.addRule(`.monaco-editor .findOptionsWidget { box-shadow: 0 0 8px 2px ${widgetShadowColor}; }`);\n }\n const hcBorder = theme.getColor(contrastBorder);\n if (hcBorder) {\n collector.addRule(`.monaco-editor .findOptionsWidget { border: 2px solid ${hcBorder}; }`);\n }\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { Range } from '../../common/core/range.js';\nimport { MATCHES_LIMIT } from './findModel.js';\nfunction effectiveOptionValue(override, value) {\n if (override === 1 /* True */) {\n return true;\n }\n if (override === 2 /* False */) {\n return false;\n }\n return value;\n}\nexport class FindReplaceState extends Disposable {\n constructor() {\n super();\n this._onFindReplaceStateChange = this._register(new Emitter());\n this.onFindReplaceStateChange = this._onFindReplaceStateChange.event;\n this._searchString = '';\n this._replaceString = '';\n this._isRevealed = false;\n this._isReplaceRevealed = false;\n this._isRegex = false;\n this._isRegexOverride = 0 /* NotSet */;\n this._wholeWord = false;\n this._wholeWordOverride = 0 /* NotSet */;\n this._matchCase = false;\n this._matchCaseOverride = 0 /* NotSet */;\n this._preserveCase = false;\n this._preserveCaseOverride = 0 /* NotSet */;\n this._searchScope = null;\n this._matchesPosition = 0;\n this._matchesCount = 0;\n this._currentMatch = null;\n this._loop = true;\n }\n get searchString() { return this._searchString; }\n get replaceString() { return this._replaceString; }\n get isRevealed() { return this._isRevealed; }\n get isReplaceRevealed() { return this._isReplaceRevealed; }\n get isRegex() { return effectiveOptionValue(this._isRegexOverride, this._isRegex); }\n get wholeWord() { return effectiveOptionValue(this._wholeWordOverride, this._wholeWord); }\n get matchCase() { return effectiveOptionValue(this._matchCaseOverride, this._matchCase); }\n get preserveCase() { return effectiveOptionValue(this._preserveCaseOverride, this._preserveCase); }\n get actualIsRegex() { return this._isRegex; }\n get actualWholeWord() { return this._wholeWord; }\n get actualMatchCase() { return this._matchCase; }\n get actualPreserveCase() { return this._preserveCase; }\n get searchScope() { return this._searchScope; }\n get matchesPosition() { return this._matchesPosition; }\n get matchesCount() { return this._matchesCount; }\n get currentMatch() { return this._currentMatch; }\n changeMatchInfo(matchesPosition, matchesCount, currentMatch) {\n let changeEvent = {\n moveCursor: false,\n updateHistory: false,\n searchString: false,\n replaceString: false,\n isRevealed: false,\n isReplaceRevealed: false,\n isRegex: false,\n wholeWord: false,\n matchCase: false,\n preserveCase: false,\n searchScope: false,\n matchesPosition: false,\n matchesCount: false,\n currentMatch: false,\n loop: false\n };\n let somethingChanged = false;\n if (matchesCount === 0) {\n matchesPosition = 0;\n }\n if (matchesPosition > matchesCount) {\n matchesPosition = matchesCount;\n }\n if (this._matchesPosition !== matchesPosition) {\n this._matchesPosition = matchesPosition;\n changeEvent.matchesPosition = true;\n somethingChanged = true;\n }\n if (this._matchesCount !== matchesCount) {\n this._matchesCount = matchesCount;\n changeEvent.matchesCount = true;\n somethingChanged = true;\n }\n if (typeof currentMatch !== 'undefined') {\n if (!Range.equalsRange(this._currentMatch, currentMatch)) {\n this._currentMatch = currentMatch;\n changeEvent.currentMatch = true;\n somethingChanged = true;\n }\n }\n if (somethingChanged) {\n this._onFindReplaceStateChange.fire(changeEvent);\n }\n }\n change(newState, moveCursor, updateHistory = true) {\n var _a;\n let changeEvent = {\n moveCursor: moveCursor,\n updateHistory: updateHistory,\n searchString: false,\n replaceString: false,\n isRevealed: false,\n isReplaceRevealed: false,\n isRegex: false,\n wholeWord: false,\n matchCase: false,\n preserveCase: false,\n searchScope: false,\n matchesPosition: false,\n matchesCount: false,\n currentMatch: false,\n loop: false\n };\n let somethingChanged = false;\n const oldEffectiveIsRegex = this.isRegex;\n const oldEffectiveWholeWords = this.wholeWord;\n const oldEffectiveMatchCase = this.matchCase;\n const oldEffectivePreserveCase = this.preserveCase;\n if (typeof newState.searchString !== 'undefined') {\n if (this._searchString !== newState.searchString) {\n this._searchString = newState.searchString;\n changeEvent.searchString = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.replaceString !== 'undefined') {\n if (this._replaceString !== newState.replaceString) {\n this._replaceString = newState.replaceString;\n changeEvent.replaceString = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.isRevealed !== 'undefined') {\n if (this._isRevealed !== newState.isRevealed) {\n this._isRevealed = newState.isRevealed;\n changeEvent.isRevealed = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.isReplaceRevealed !== 'undefined') {\n if (this._isReplaceRevealed !== newState.isReplaceRevealed) {\n this._isReplaceRevealed = newState.isReplaceRevealed;\n changeEvent.isReplaceRevealed = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.isRegex !== 'undefined') {\n this._isRegex = newState.isRegex;\n }\n if (typeof newState.wholeWord !== 'undefined') {\n this._wholeWord = newState.wholeWord;\n }\n if (typeof newState.matchCase !== 'undefined') {\n this._matchCase = newState.matchCase;\n }\n if (typeof newState.preserveCase !== 'undefined') {\n this._preserveCase = newState.preserveCase;\n }\n if (typeof newState.searchScope !== 'undefined') {\n if (!((_a = newState.searchScope) === null || _a === void 0 ? void 0 : _a.every((newSearchScope) => {\n var _a;\n return (_a = this._searchScope) === null || _a === void 0 ? void 0 : _a.some(existingSearchScope => {\n return !Range.equalsRange(existingSearchScope, newSearchScope);\n });\n }))) {\n this._searchScope = newState.searchScope;\n changeEvent.searchScope = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.loop !== 'undefined') {\n if (this._loop !== newState.loop) {\n this._loop = newState.loop;\n changeEvent.loop = true;\n somethingChanged = true;\n }\n }\n // Overrides get set when they explicitly come in and get reset anytime something else changes\n this._isRegexOverride = (typeof newState.isRegexOverride !== 'undefined' ? newState.isRegexOverride : 0 /* NotSet */);\n this._wholeWordOverride = (typeof newState.wholeWordOverride !== 'undefined' ? newState.wholeWordOverride : 0 /* NotSet */);\n this._matchCaseOverride = (typeof newState.matchCaseOverride !== 'undefined' ? newState.matchCaseOverride : 0 /* NotSet */);\n this._preserveCaseOverride = (typeof newState.preserveCaseOverride !== 'undefined' ? newState.preserveCaseOverride : 0 /* NotSet */);\n if (oldEffectiveIsRegex !== this.isRegex) {\n somethingChanged = true;\n changeEvent.isRegex = true;\n }\n if (oldEffectiveWholeWords !== this.wholeWord) {\n somethingChanged = true;\n changeEvent.wholeWord = true;\n }\n if (oldEffectiveMatchCase !== this.matchCase) {\n somethingChanged = true;\n changeEvent.matchCase = true;\n }\n if (oldEffectivePreserveCase !== this.preserveCase) {\n somethingChanged = true;\n changeEvent.preserveCase = true;\n }\n if (somethingChanged) {\n this._onFindReplaceStateChange.fire(changeEvent);\n }\n }\n canNavigateBack() {\n return this.canNavigateInLoop() || (this.matchesPosition !== 1);\n }\n canNavigateForward() {\n return this.canNavigateInLoop() || (this.matchesPosition < this.matchesCount);\n }\n canNavigateInLoop() {\n return this._loop || (this.matchesCount >= MATCHES_LIMIT);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../dom.js';\nimport { CaseSensitiveCheckbox, RegexCheckbox, WholeWordsCheckbox } from './findInputCheckboxes.js';\nimport { HistoryInputBox } from '../inputbox/inputBox.js';\nimport { Widget } from '../widget.js';\nimport { Emitter } from '../../../common/event.js';\nimport './findInput.css';\nimport * as nls from '../../../../nls.js';\nconst NLS_DEFAULT_LABEL = nls.localize('defaultLabel', \"input\");\nexport class FindInput extends Widget {\n constructor(parent, contextViewProvider, _showOptionButtons, options) {\n super();\n this._showOptionButtons = _showOptionButtons;\n this.fixFocusOnOptionClickEnabled = true;\n this.imeSessionInProgress = false;\n this._onDidOptionChange = this._register(new Emitter());\n this.onDidOptionChange = this._onDidOptionChange.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._onMouseDown = this._register(new Emitter());\n this.onMouseDown = this._onMouseDown.event;\n this._onInput = this._register(new Emitter());\n this._onKeyUp = this._register(new Emitter());\n this._onCaseSensitiveKeyDown = this._register(new Emitter());\n this.onCaseSensitiveKeyDown = this._onCaseSensitiveKeyDown.event;\n this._onRegexKeyDown = this._register(new Emitter());\n this.onRegexKeyDown = this._onRegexKeyDown.event;\n this._lastHighlightFindOptions = 0;\n this.contextViewProvider = contextViewProvider;\n this.placeholder = options.placeholder || '';\n this.validation = options.validation;\n this.label = options.label || NLS_DEFAULT_LABEL;\n this.inputActiveOptionBorder = options.inputActiveOptionBorder;\n this.inputActiveOptionForeground = options.inputActiveOptionForeground;\n this.inputActiveOptionBackground = options.inputActiveOptionBackground;\n this.inputBackground = options.inputBackground;\n this.inputForeground = options.inputForeground;\n this.inputBorder = options.inputBorder;\n this.inputValidationInfoBorder = options.inputValidationInfoBorder;\n this.inputValidationInfoBackground = options.inputValidationInfoBackground;\n this.inputValidationInfoForeground = options.inputValidationInfoForeground;\n this.inputValidationWarningBorder = options.inputValidationWarningBorder;\n this.inputValidationWarningBackground = options.inputValidationWarningBackground;\n this.inputValidationWarningForeground = options.inputValidationWarningForeground;\n this.inputValidationErrorBorder = options.inputValidationErrorBorder;\n this.inputValidationErrorBackground = options.inputValidationErrorBackground;\n this.inputValidationErrorForeground = options.inputValidationErrorForeground;\n const appendCaseSensitiveLabel = options.appendCaseSensitiveLabel || '';\n const appendWholeWordsLabel = options.appendWholeWordsLabel || '';\n const appendRegexLabel = options.appendRegexLabel || '';\n const history = options.history || [];\n const flexibleHeight = !!options.flexibleHeight;\n const flexibleWidth = !!options.flexibleWidth;\n const flexibleMaxHeight = options.flexibleMaxHeight;\n this.domNode = document.createElement('div');\n this.domNode.classList.add('monaco-findInput');\n this.inputBox = this._register(new HistoryInputBox(this.domNode, this.contextViewProvider, {\n placeholder: this.placeholder || '',\n ariaLabel: this.label || '',\n validationOptions: {\n validation: this.validation\n },\n inputBackground: this.inputBackground,\n inputForeground: this.inputForeground,\n inputBorder: this.inputBorder,\n inputValidationInfoBackground: this.inputValidationInfoBackground,\n inputValidationInfoForeground: this.inputValidationInfoForeground,\n inputValidationInfoBorder: this.inputValidationInfoBorder,\n inputValidationWarningBackground: this.inputValidationWarningBackground,\n inputValidationWarningForeground: this.inputValidationWarningForeground,\n inputValidationWarningBorder: this.inputValidationWarningBorder,\n inputValidationErrorBackground: this.inputValidationErrorBackground,\n inputValidationErrorForeground: this.inputValidationErrorForeground,\n inputValidationErrorBorder: this.inputValidationErrorBorder,\n history,\n showHistoryHint: options.showHistoryHint,\n flexibleHeight,\n flexibleWidth,\n flexibleMaxHeight\n }));\n this.regex = this._register(new RegexCheckbox({\n appendTitle: appendRegexLabel,\n isChecked: false,\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground\n }));\n this._register(this.regex.onChange(viaKeyboard => {\n this._onDidOptionChange.fire(viaKeyboard);\n if (!viaKeyboard && this.fixFocusOnOptionClickEnabled) {\n this.inputBox.focus();\n }\n this.validate();\n }));\n this._register(this.regex.onKeyDown(e => {\n this._onRegexKeyDown.fire(e);\n }));\n this.wholeWords = this._register(new WholeWordsCheckbox({\n appendTitle: appendWholeWordsLabel,\n isChecked: false,\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground\n }));\n this._register(this.wholeWords.onChange(viaKeyboard => {\n this._onDidOptionChange.fire(viaKeyboard);\n if (!viaKeyboard && this.fixFocusOnOptionClickEnabled) {\n this.inputBox.focus();\n }\n this.validate();\n }));\n this.caseSensitive = this._register(new CaseSensitiveCheckbox({\n appendTitle: appendCaseSensitiveLabel,\n isChecked: false,\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground\n }));\n this._register(this.caseSensitive.onChange(viaKeyboard => {\n this._onDidOptionChange.fire(viaKeyboard);\n if (!viaKeyboard && this.fixFocusOnOptionClickEnabled) {\n this.inputBox.focus();\n }\n this.validate();\n }));\n this._register(this.caseSensitive.onKeyDown(e => {\n this._onCaseSensitiveKeyDown.fire(e);\n }));\n if (this._showOptionButtons) {\n this.inputBox.paddingRight = this.caseSensitive.width() + this.wholeWords.width() + this.regex.width();\n }\n // Arrow-Key support to navigate between options\n let indexes = [this.caseSensitive.domNode, this.wholeWords.domNode, this.regex.domNode];\n this.onkeydown(this.domNode, (event) => {\n if (event.equals(15 /* LeftArrow */) || event.equals(17 /* RightArrow */) || event.equals(9 /* Escape */)) {\n let index = indexes.indexOf(document.activeElement);\n if (index >= 0) {\n let newIndex = -1;\n if (event.equals(17 /* RightArrow */)) {\n newIndex = (index + 1) % indexes.length;\n }\n else if (event.equals(15 /* LeftArrow */)) {\n if (index === 0) {\n newIndex = indexes.length - 1;\n }\n else {\n newIndex = index - 1;\n }\n }\n if (event.equals(9 /* Escape */)) {\n indexes[index].blur();\n this.inputBox.focus();\n }\n else if (newIndex >= 0) {\n indexes[newIndex].focus();\n }\n dom.EventHelper.stop(event, true);\n }\n }\n });\n let controls = document.createElement('div');\n controls.className = 'controls';\n controls.style.display = this._showOptionButtons ? 'block' : 'none';\n controls.appendChild(this.caseSensitive.domNode);\n controls.appendChild(this.wholeWords.domNode);\n controls.appendChild(this.regex.domNode);\n this.domNode.appendChild(controls);\n if (parent) {\n parent.appendChild(this.domNode);\n }\n this._register(dom.addDisposableListener(this.inputBox.inputElement, 'compositionstart', (e) => {\n this.imeSessionInProgress = true;\n }));\n this._register(dom.addDisposableListener(this.inputBox.inputElement, 'compositionend', (e) => {\n this.imeSessionInProgress = false;\n this._onInput.fire();\n }));\n this.onkeydown(this.inputBox.inputElement, (e) => this._onKeyDown.fire(e));\n this.onkeyup(this.inputBox.inputElement, (e) => this._onKeyUp.fire(e));\n this.oninput(this.inputBox.inputElement, (e) => this._onInput.fire());\n this.onmousedown(this.inputBox.inputElement, (e) => this._onMouseDown.fire(e));\n }\n enable() {\n this.domNode.classList.remove('disabled');\n this.inputBox.enable();\n this.regex.enable();\n this.wholeWords.enable();\n this.caseSensitive.enable();\n }\n disable() {\n this.domNode.classList.add('disabled');\n this.inputBox.disable();\n this.regex.disable();\n this.wholeWords.disable();\n this.caseSensitive.disable();\n }\n setFocusInputOnOptionClick(value) {\n this.fixFocusOnOptionClickEnabled = value;\n }\n setEnabled(enabled) {\n if (enabled) {\n this.enable();\n }\n else {\n this.disable();\n }\n }\n getValue() {\n return this.inputBox.value;\n }\n setValue(value) {\n if (this.inputBox.value !== value) {\n this.inputBox.value = value;\n }\n }\n style(styles) {\n this.inputActiveOptionBorder = styles.inputActiveOptionBorder;\n this.inputActiveOptionForeground = styles.inputActiveOptionForeground;\n this.inputActiveOptionBackground = styles.inputActiveOptionBackground;\n this.inputBackground = styles.inputBackground;\n this.inputForeground = styles.inputForeground;\n this.inputBorder = styles.inputBorder;\n this.inputValidationInfoBackground = styles.inputValidationInfoBackground;\n this.inputValidationInfoForeground = styles.inputValidationInfoForeground;\n this.inputValidationInfoBorder = styles.inputValidationInfoBorder;\n this.inputValidationWarningBackground = styles.inputValidationWarningBackground;\n this.inputValidationWarningForeground = styles.inputValidationWarningForeground;\n this.inputValidationWarningBorder = styles.inputValidationWarningBorder;\n this.inputValidationErrorBackground = styles.inputValidationErrorBackground;\n this.inputValidationErrorForeground = styles.inputValidationErrorForeground;\n this.inputValidationErrorBorder = styles.inputValidationErrorBorder;\n this.applyStyles();\n }\n applyStyles() {\n if (this.domNode) {\n const checkBoxStyles = {\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground,\n };\n this.regex.style(checkBoxStyles);\n this.wholeWords.style(checkBoxStyles);\n this.caseSensitive.style(checkBoxStyles);\n const inputBoxStyles = {\n inputBackground: this.inputBackground,\n inputForeground: this.inputForeground,\n inputBorder: this.inputBorder,\n inputValidationInfoBackground: this.inputValidationInfoBackground,\n inputValidationInfoForeground: this.inputValidationInfoForeground,\n inputValidationInfoBorder: this.inputValidationInfoBorder,\n inputValidationWarningBackground: this.inputValidationWarningBackground,\n inputValidationWarningForeground: this.inputValidationWarningForeground,\n inputValidationWarningBorder: this.inputValidationWarningBorder,\n inputValidationErrorBackground: this.inputValidationErrorBackground,\n inputValidationErrorForeground: this.inputValidationErrorForeground,\n inputValidationErrorBorder: this.inputValidationErrorBorder\n };\n this.inputBox.style(inputBoxStyles);\n }\n }\n select() {\n this.inputBox.select();\n }\n focus() {\n this.inputBox.focus();\n }\n getCaseSensitive() {\n return this.caseSensitive.checked;\n }\n setCaseSensitive(value) {\n this.caseSensitive.checked = value;\n }\n getWholeWords() {\n return this.wholeWords.checked;\n }\n setWholeWords(value) {\n this.wholeWords.checked = value;\n }\n getRegex() {\n return this.regex.checked;\n }\n setRegex(value) {\n this.regex.checked = value;\n this.validate();\n }\n focusOnCaseSensitive() {\n this.caseSensitive.focus();\n }\n highlightFindOptions() {\n this.domNode.classList.remove('highlight-' + (this._lastHighlightFindOptions));\n this._lastHighlightFindOptions = 1 - this._lastHighlightFindOptions;\n this.domNode.classList.add('highlight-' + (this._lastHighlightFindOptions));\n }\n validate() {\n this.inputBox.validate();\n }\n clearMessage() {\n this.inputBox.hideMessage();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../dom.js';\nimport { Checkbox } from '../checkbox/checkbox.js';\nimport { HistoryInputBox } from '../inputbox/inputBox.js';\nimport { Widget } from '../widget.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { Emitter } from '../../../common/event.js';\nimport './findInput.css';\nimport * as nls from '../../../../nls.js';\nconst NLS_DEFAULT_LABEL = nls.localize('defaultLabel', \"input\");\nconst NLS_PRESERVE_CASE_LABEL = nls.localize('label.preserveCaseCheckbox', \"Preserve Case\");\nexport class PreserveCaseCheckbox extends Checkbox {\n constructor(opts) {\n super({\n // TODO: does this need its own icon?\n icon: Codicon.preserveCase,\n title: NLS_PRESERVE_CASE_LABEL + opts.appendTitle,\n isChecked: opts.isChecked,\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\n}\nexport class ReplaceInput extends Widget {\n constructor(parent, contextViewProvider, _showOptionButtons, options) {\n super();\n this._showOptionButtons = _showOptionButtons;\n this.fixFocusOnOptionClickEnabled = true;\n this.cachedOptionsWidth = 0;\n this._onDidOptionChange = this._register(new Emitter());\n this.onDidOptionChange = this._onDidOptionChange.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._onMouseDown = this._register(new Emitter());\n this._onInput = this._register(new Emitter());\n this._onKeyUp = this._register(new Emitter());\n this._onPreserveCaseKeyDown = this._register(new Emitter());\n this.onPreserveCaseKeyDown = this._onPreserveCaseKeyDown.event;\n this.contextViewProvider = contextViewProvider;\n this.placeholder = options.placeholder || '';\n this.validation = options.validation;\n this.label = options.label || NLS_DEFAULT_LABEL;\n this.inputActiveOptionBorder = options.inputActiveOptionBorder;\n this.inputActiveOptionForeground = options.inputActiveOptionForeground;\n this.inputActiveOptionBackground = options.inputActiveOptionBackground;\n this.inputBackground = options.inputBackground;\n this.inputForeground = options.inputForeground;\n this.inputBorder = options.inputBorder;\n this.inputValidationInfoBorder = options.inputValidationInfoBorder;\n this.inputValidationInfoBackground = options.inputValidationInfoBackground;\n this.inputValidationInfoForeground = options.inputValidationInfoForeground;\n this.inputValidationWarningBorder = options.inputValidationWarningBorder;\n this.inputValidationWarningBackground = options.inputValidationWarningBackground;\n this.inputValidationWarningForeground = options.inputValidationWarningForeground;\n this.inputValidationErrorBorder = options.inputValidationErrorBorder;\n this.inputValidationErrorBackground = options.inputValidationErrorBackground;\n this.inputValidationErrorForeground = options.inputValidationErrorForeground;\n const appendPreserveCaseLabel = options.appendPreserveCaseLabel || '';\n const history = options.history || [];\n const flexibleHeight = !!options.flexibleHeight;\n const flexibleWidth = !!options.flexibleWidth;\n const flexibleMaxHeight = options.flexibleMaxHeight;\n this.domNode = document.createElement('div');\n this.domNode.classList.add('monaco-findInput');\n this.inputBox = this._register(new HistoryInputBox(this.domNode, this.contextViewProvider, {\n ariaLabel: this.label || '',\n placeholder: this.placeholder || '',\n validationOptions: {\n validation: this.validation\n },\n inputBackground: this.inputBackground,\n inputForeground: this.inputForeground,\n inputBorder: this.inputBorder,\n inputValidationInfoBackground: this.inputValidationInfoBackground,\n inputValidationInfoForeground: this.inputValidationInfoForeground,\n inputValidationInfoBorder: this.inputValidationInfoBorder,\n inputValidationWarningBackground: this.inputValidationWarningBackground,\n inputValidationWarningForeground: this.inputValidationWarningForeground,\n inputValidationWarningBorder: this.inputValidationWarningBorder,\n inputValidationErrorBackground: this.inputValidationErrorBackground,\n inputValidationErrorForeground: this.inputValidationErrorForeground,\n inputValidationErrorBorder: this.inputValidationErrorBorder,\n history,\n showHistoryHint: options.showHistoryHint,\n flexibleHeight,\n flexibleWidth,\n flexibleMaxHeight\n }));\n this.preserveCase = this._register(new PreserveCaseCheckbox({\n appendTitle: appendPreserveCaseLabel,\n isChecked: false,\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground,\n }));\n this._register(this.preserveCase.onChange(viaKeyboard => {\n this._onDidOptionChange.fire(viaKeyboard);\n if (!viaKeyboard && this.fixFocusOnOptionClickEnabled) {\n this.inputBox.focus();\n }\n this.validate();\n }));\n this._register(this.preserveCase.onKeyDown(e => {\n this._onPreserveCaseKeyDown.fire(e);\n }));\n if (this._showOptionButtons) {\n this.cachedOptionsWidth = this.preserveCase.width();\n }\n else {\n this.cachedOptionsWidth = 0;\n }\n // Arrow-Key support to navigate between options\n let indexes = [this.preserveCase.domNode];\n this.onkeydown(this.domNode, (event) => {\n if (event.equals(15 /* LeftArrow */) || event.equals(17 /* RightArrow */) || event.equals(9 /* Escape */)) {\n let index = indexes.indexOf(document.activeElement);\n if (index >= 0) {\n let newIndex = -1;\n if (event.equals(17 /* RightArrow */)) {\n newIndex = (index + 1) % indexes.length;\n }\n else if (event.equals(15 /* LeftArrow */)) {\n if (index === 0) {\n newIndex = indexes.length - 1;\n }\n else {\n newIndex = index - 1;\n }\n }\n if (event.equals(9 /* Escape */)) {\n indexes[index].blur();\n this.inputBox.focus();\n }\n else if (newIndex >= 0) {\n indexes[newIndex].focus();\n }\n dom.EventHelper.stop(event, true);\n }\n }\n });\n let controls = document.createElement('div');\n controls.className = 'controls';\n controls.style.display = this._showOptionButtons ? 'block' : 'none';\n controls.appendChild(this.preserveCase.domNode);\n this.domNode.appendChild(controls);\n if (parent) {\n parent.appendChild(this.domNode);\n }\n this.onkeydown(this.inputBox.inputElement, (e) => this._onKeyDown.fire(e));\n this.onkeyup(this.inputBox.inputElement, (e) => this._onKeyUp.fire(e));\n this.oninput(this.inputBox.inputElement, (e) => this._onInput.fire());\n this.onmousedown(this.inputBox.inputElement, (e) => this._onMouseDown.fire(e));\n }\n enable() {\n this.domNode.classList.remove('disabled');\n this.inputBox.enable();\n this.preserveCase.enable();\n }\n disable() {\n this.domNode.classList.add('disabled');\n this.inputBox.disable();\n this.preserveCase.disable();\n }\n setEnabled(enabled) {\n if (enabled) {\n this.enable();\n }\n else {\n this.disable();\n }\n }\n style(styles) {\n this.inputActiveOptionBorder = styles.inputActiveOptionBorder;\n this.inputActiveOptionForeground = styles.inputActiveOptionForeground;\n this.inputActiveOptionBackground = styles.inputActiveOptionBackground;\n this.inputBackground = styles.inputBackground;\n this.inputForeground = styles.inputForeground;\n this.inputBorder = styles.inputBorder;\n this.inputValidationInfoBackground = styles.inputValidationInfoBackground;\n this.inputValidationInfoForeground = styles.inputValidationInfoForeground;\n this.inputValidationInfoBorder = styles.inputValidationInfoBorder;\n this.inputValidationWarningBackground = styles.inputValidationWarningBackground;\n this.inputValidationWarningForeground = styles.inputValidationWarningForeground;\n this.inputValidationWarningBorder = styles.inputValidationWarningBorder;\n this.inputValidationErrorBackground = styles.inputValidationErrorBackground;\n this.inputValidationErrorForeground = styles.inputValidationErrorForeground;\n this.inputValidationErrorBorder = styles.inputValidationErrorBorder;\n this.applyStyles();\n }\n applyStyles() {\n if (this.domNode) {\n const checkBoxStyles = {\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground,\n };\n this.preserveCase.style(checkBoxStyles);\n const inputBoxStyles = {\n inputBackground: this.inputBackground,\n inputForeground: this.inputForeground,\n inputBorder: this.inputBorder,\n inputValidationInfoBackground: this.inputValidationInfoBackground,\n inputValidationInfoForeground: this.inputValidationInfoForeground,\n inputValidationInfoBorder: this.inputValidationInfoBorder,\n inputValidationWarningBackground: this.inputValidationWarningBackground,\n inputValidationWarningForeground: this.inputValidationWarningForeground,\n inputValidationWarningBorder: this.inputValidationWarningBorder,\n inputValidationErrorBackground: this.inputValidationErrorBackground,\n inputValidationErrorForeground: this.inputValidationErrorForeground,\n inputValidationErrorBorder: this.inputValidationErrorBorder\n };\n this.inputBox.style(inputBoxStyles);\n }\n }\n select() {\n this.inputBox.select();\n }\n focus() {\n this.inputBox.focus();\n }\n getPreserveCase() {\n return this.preserveCase.checked;\n }\n setPreserveCase(value) {\n this.preserveCase.checked = value;\n }\n focusOnPreserve() {\n this.preserveCase.focus();\n }\n validate() {\n if (this.inputBox) {\n this.inputBox.validate();\n }\n }\n set width(newWidth) {\n this.inputBox.paddingRight = this.cachedOptionsWidth;\n this.inputBox.width = newWidth;\n this.domNode.style.width = newWidth + 'px';\n }\n dispose() {\n super.dispose();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class Scanner {\n constructor() {\n this.value = '';\n this.pos = 0;\n }\n static isDigitCharacter(ch) {\n return ch >= 48 /* Digit0 */ && ch <= 57 /* Digit9 */;\n }\n static isVariableCharacter(ch) {\n return ch === 95 /* Underline */\n || (ch >= 97 /* a */ && ch <= 122 /* z */)\n || (ch >= 65 /* A */ && ch <= 90 /* Z */);\n }\n text(value) {\n this.value = value;\n this.pos = 0;\n }\n tokenText(token) {\n return this.value.substr(token.pos, token.len);\n }\n next() {\n if (this.pos >= this.value.length) {\n return { type: 14 /* EOF */, pos: this.pos, len: 0 };\n }\n let pos = this.pos;\n let len = 0;\n let ch = this.value.charCodeAt(pos);\n let type;\n // static types\n type = Scanner._table[ch];\n if (typeof type === 'number') {\n this.pos += 1;\n return { type, pos, len: 1 };\n }\n // number\n if (Scanner.isDigitCharacter(ch)) {\n type = 8 /* Int */;\n do {\n len += 1;\n ch = this.value.charCodeAt(pos + len);\n } while (Scanner.isDigitCharacter(ch));\n this.pos += len;\n return { type, pos, len };\n }\n // variable name\n if (Scanner.isVariableCharacter(ch)) {\n type = 9 /* VariableName */;\n do {\n ch = this.value.charCodeAt(pos + (++len));\n } while (Scanner.isVariableCharacter(ch) || Scanner.isDigitCharacter(ch));\n this.pos += len;\n return { type, pos, len };\n }\n // format\n type = 10 /* Format */;\n do {\n len += 1;\n ch = this.value.charCodeAt(pos + len);\n } while (!isNaN(ch)\n && typeof Scanner._table[ch] === 'undefined' // not static token\n && !Scanner.isDigitCharacter(ch) // not number\n && !Scanner.isVariableCharacter(ch) // not variable\n );\n this.pos += len;\n return { type, pos, len };\n }\n}\nScanner._table = {\n [36 /* DollarSign */]: 0 /* Dollar */,\n [58 /* Colon */]: 1 /* Colon */,\n [44 /* Comma */]: 2 /* Comma */,\n [123 /* OpenCurlyBrace */]: 3 /* CurlyOpen */,\n [125 /* CloseCurlyBrace */]: 4 /* CurlyClose */,\n [92 /* Backslash */]: 5 /* Backslash */,\n [47 /* Slash */]: 6 /* Forwardslash */,\n [124 /* Pipe */]: 7 /* Pipe */,\n [43 /* Plus */]: 11 /* Plus */,\n [45 /* Dash */]: 12 /* Dash */,\n [63 /* QuestionMark */]: 13 /* QuestionMark */,\n};\nexport class Marker {\n constructor() {\n this._children = [];\n }\n appendChild(child) {\n if (child instanceof Text && this._children[this._children.length - 1] instanceof Text) {\n // this and previous child are text -> merge them\n this._children[this._children.length - 1].value += child.value;\n }\n else {\n // normal adoption of child\n child.parent = this;\n this._children.push(child);\n }\n return this;\n }\n replace(child, others) {\n const { parent } = child;\n const idx = parent.children.indexOf(child);\n const newChildren = parent.children.slice(0);\n newChildren.splice(idx, 1, ...others);\n parent._children = newChildren;\n (function _fixParent(children, parent) {\n for (const child of children) {\n child.parent = parent;\n _fixParent(child.children, child);\n }\n })(others, parent);\n }\n get children() {\n return this._children;\n }\n get snippet() {\n let candidate = this;\n while (true) {\n if (!candidate) {\n return undefined;\n }\n if (candidate instanceof TextmateSnippet) {\n return candidate;\n }\n candidate = candidate.parent;\n }\n }\n toString() {\n return this.children.reduce((prev, cur) => prev + cur.toString(), '');\n }\n len() {\n return 0;\n }\n}\nexport class Text extends Marker {\n constructor(value) {\n super();\n this.value = value;\n }\n toString() {\n return this.value;\n }\n len() {\n return this.value.length;\n }\n clone() {\n return new Text(this.value);\n }\n}\nexport class TransformableMarker extends Marker {\n}\nexport class Placeholder extends TransformableMarker {\n constructor(index) {\n super();\n this.index = index;\n }\n static compareByIndex(a, b) {\n if (a.index === b.index) {\n return 0;\n }\n else if (a.isFinalTabstop) {\n return 1;\n }\n else if (b.isFinalTabstop) {\n return -1;\n }\n else if (a.index < b.index) {\n return -1;\n }\n else if (a.index > b.index) {\n return 1;\n }\n else {\n return 0;\n }\n }\n get isFinalTabstop() {\n return this.index === 0;\n }\n get choice() {\n return this._children.length === 1 && this._children[0] instanceof Choice\n ? this._children[0]\n : undefined;\n }\n clone() {\n let ret = new Placeholder(this.index);\n if (this.transform) {\n ret.transform = this.transform.clone();\n }\n ret._children = this.children.map(child => child.clone());\n return ret;\n }\n}\nexport class Choice extends Marker {\n constructor() {\n super(...arguments);\n this.options = [];\n }\n appendChild(marker) {\n if (marker instanceof Text) {\n marker.parent = this;\n this.options.push(marker);\n }\n return this;\n }\n toString() {\n return this.options[0].value;\n }\n len() {\n return this.options[0].len();\n }\n clone() {\n let ret = new Choice();\n this.options.forEach(ret.appendChild, ret);\n return ret;\n }\n}\nexport class Transform extends Marker {\n constructor() {\n super(...arguments);\n this.regexp = new RegExp('');\n }\n resolve(value) {\n const _this = this;\n let didMatch = false;\n let ret = value.replace(this.regexp, function () {\n didMatch = true;\n return _this._replace(Array.prototype.slice.call(arguments, 0, -2));\n });\n // when the regex didn't match and when the transform has\n // else branches, then run those\n if (!didMatch && this._children.some(child => child instanceof FormatString && Boolean(child.elseValue))) {\n ret = this._replace([]);\n }\n return ret;\n }\n _replace(groups) {\n let ret = '';\n for (const marker of this._children) {\n if (marker instanceof FormatString) {\n let value = groups[marker.index] || '';\n value = marker.resolve(value);\n ret += value;\n }\n else {\n ret += marker.toString();\n }\n }\n return ret;\n }\n toString() {\n return '';\n }\n clone() {\n let ret = new Transform();\n ret.regexp = new RegExp(this.regexp.source, '' + (this.regexp.ignoreCase ? 'i' : '') + (this.regexp.global ? 'g' : ''));\n ret._children = this.children.map(child => child.clone());\n return ret;\n }\n}\nexport class FormatString extends Marker {\n constructor(index, shorthandName, ifValue, elseValue) {\n super();\n this.index = index;\n this.shorthandName = shorthandName;\n this.ifValue = ifValue;\n this.elseValue = elseValue;\n }\n resolve(value) {\n if (this.shorthandName === 'upcase') {\n return !value ? '' : value.toLocaleUpperCase();\n }\n else if (this.shorthandName === 'downcase') {\n return !value ? '' : value.toLocaleLowerCase();\n }\n else if (this.shorthandName === 'capitalize') {\n return !value ? '' : (value[0].toLocaleUpperCase() + value.substr(1));\n }\n else if (this.shorthandName === 'pascalcase') {\n return !value ? '' : this._toPascalCase(value);\n }\n else if (this.shorthandName === 'camelcase') {\n return !value ? '' : this._toCamelCase(value);\n }\n else if (Boolean(value) && typeof this.ifValue === 'string') {\n return this.ifValue;\n }\n else if (!Boolean(value) && typeof this.elseValue === 'string') {\n return this.elseValue;\n }\n else {\n return value || '';\n }\n }\n _toPascalCase(value) {\n const match = value.match(/[a-z0-9]+/gi);\n if (!match) {\n return value;\n }\n return match.map(word => {\n return word.charAt(0).toUpperCase()\n + word.substr(1).toLowerCase();\n })\n .join('');\n }\n _toCamelCase(value) {\n const match = value.match(/[a-z0-9]+/gi);\n if (!match) {\n return value;\n }\n return match.map((word, index) => {\n if (index === 0) {\n return word.toLowerCase();\n }\n else {\n return word.charAt(0).toUpperCase()\n + word.substr(1).toLowerCase();\n }\n })\n .join('');\n }\n clone() {\n let ret = new FormatString(this.index, this.shorthandName, this.ifValue, this.elseValue);\n return ret;\n }\n}\nexport class Variable extends TransformableMarker {\n constructor(name) {\n super();\n this.name = name;\n }\n resolve(resolver) {\n let value = resolver.resolve(this);\n if (this.transform) {\n value = this.transform.resolve(value || '');\n }\n if (value !== undefined) {\n this._children = [new Text(value)];\n return true;\n }\n return false;\n }\n clone() {\n const ret = new Variable(this.name);\n if (this.transform) {\n ret.transform = this.transform.clone();\n }\n ret._children = this.children.map(child => child.clone());\n return ret;\n }\n}\nfunction walk(marker, visitor) {\n const stack = [...marker];\n while (stack.length > 0) {\n const marker = stack.shift();\n const recurse = visitor(marker);\n if (!recurse) {\n break;\n }\n stack.unshift(...marker.children);\n }\n}\nexport class TextmateSnippet extends Marker {\n get placeholderInfo() {\n if (!this._placeholders) {\n // fill in placeholders\n let all = [];\n let last;\n this.walk(function (candidate) {\n if (candidate instanceof Placeholder) {\n all.push(candidate);\n last = !last || last.index < candidate.index ? candidate : last;\n }\n return true;\n });\n this._placeholders = { all, last };\n }\n return this._placeholders;\n }\n get placeholders() {\n const { all } = this.placeholderInfo;\n return all;\n }\n offset(marker) {\n let pos = 0;\n let found = false;\n this.walk(candidate => {\n if (candidate === marker) {\n found = true;\n return false;\n }\n pos += candidate.len();\n return true;\n });\n if (!found) {\n return -1;\n }\n return pos;\n }\n fullLen(marker) {\n let ret = 0;\n walk([marker], marker => {\n ret += marker.len();\n return true;\n });\n return ret;\n }\n enclosingPlaceholders(placeholder) {\n let ret = [];\n let { parent } = placeholder;\n while (parent) {\n if (parent instanceof Placeholder) {\n ret.push(parent);\n }\n parent = parent.parent;\n }\n return ret;\n }\n resolveVariables(resolver) {\n this.walk(candidate => {\n if (candidate instanceof Variable) {\n if (candidate.resolve(resolver)) {\n this._placeholders = undefined;\n }\n }\n return true;\n });\n return this;\n }\n appendChild(child) {\n this._placeholders = undefined;\n return super.appendChild(child);\n }\n replace(child, others) {\n this._placeholders = undefined;\n return super.replace(child, others);\n }\n clone() {\n let ret = new TextmateSnippet();\n this._children = this.children.map(child => child.clone());\n return ret;\n }\n walk(visitor) {\n walk(this.children, visitor);\n }\n}\nexport class SnippetParser {\n constructor() {\n this._scanner = new Scanner();\n this._token = { type: 14 /* EOF */, pos: 0, len: 0 };\n }\n static escape(value) {\n return value.replace(/\\$|}|\\\\/g, '\\\\$&');\n }\n static guessNeedsClipboard(template) {\n return /\\${?CLIPBOARD/.test(template);\n }\n parse(value, insertFinalTabstop, enforceFinalTabstop) {\n this._scanner.text(value);\n this._token = this._scanner.next();\n const snippet = new TextmateSnippet();\n while (this._parse(snippet)) {\n // nothing\n }\n // fill in values for placeholders. the first placeholder of an index\n // that has a value defines the value for all placeholders with that index\n const placeholderDefaultValues = new Map();\n const incompletePlaceholders = [];\n let placeholderCount = 0;\n snippet.walk(marker => {\n if (marker instanceof Placeholder) {\n placeholderCount += 1;\n if (marker.isFinalTabstop) {\n placeholderDefaultValues.set(0, undefined);\n }\n else if (!placeholderDefaultValues.has(marker.index) && marker.children.length > 0) {\n placeholderDefaultValues.set(marker.index, marker.children);\n }\n else {\n incompletePlaceholders.push(marker);\n }\n }\n return true;\n });\n for (const placeholder of incompletePlaceholders) {\n const defaultValues = placeholderDefaultValues.get(placeholder.index);\n if (defaultValues) {\n const clone = new Placeholder(placeholder.index);\n clone.transform = placeholder.transform;\n for (const child of defaultValues) {\n clone.appendChild(child.clone());\n }\n snippet.replace(placeholder, [clone]);\n }\n }\n if (!enforceFinalTabstop) {\n enforceFinalTabstop = placeholderCount > 0 && insertFinalTabstop;\n }\n if (!placeholderDefaultValues.has(0) && enforceFinalTabstop) {\n // the snippet uses placeholders but has no\n // final tabstop defined -> insert at the end\n snippet.appendChild(new Placeholder(0));\n }\n return snippet;\n }\n _accept(type, value) {\n if (type === undefined || this._token.type === type) {\n let ret = !value ? true : this._scanner.tokenText(this._token);\n this._token = this._scanner.next();\n return ret;\n }\n return false;\n }\n _backTo(token) {\n this._scanner.pos = token.pos + token.len;\n this._token = token;\n return false;\n }\n _until(type) {\n const start = this._token;\n while (this._token.type !== type) {\n if (this._token.type === 14 /* EOF */) {\n return false;\n }\n else if (this._token.type === 5 /* Backslash */) {\n const nextToken = this._scanner.next();\n if (nextToken.type !== 0 /* Dollar */\n && nextToken.type !== 4 /* CurlyClose */\n && nextToken.type !== 5 /* Backslash */) {\n return false;\n }\n }\n this._token = this._scanner.next();\n }\n const value = this._scanner.value.substring(start.pos, this._token.pos).replace(/\\\\(\\$|}|\\\\)/g, '$1');\n this._token = this._scanner.next();\n return value;\n }\n _parse(marker) {\n return this._parseEscaped(marker)\n || this._parseTabstopOrVariableName(marker)\n || this._parseComplexPlaceholder(marker)\n || this._parseComplexVariable(marker)\n || this._parseAnything(marker);\n }\n // \\$, \\\\, \\} -> just text\n _parseEscaped(marker) {\n let value;\n if (value = this._accept(5 /* Backslash */, true)) {\n // saw a backslash, append escaped token or that backslash\n value = this._accept(0 /* Dollar */, true)\n || this._accept(4 /* CurlyClose */, true)\n || this._accept(5 /* Backslash */, true)\n || value;\n marker.appendChild(new Text(value));\n return true;\n }\n return false;\n }\n // $foo -> variable, $1 -> tabstop\n _parseTabstopOrVariableName(parent) {\n let value;\n const token = this._token;\n const match = this._accept(0 /* Dollar */)\n && (value = this._accept(9 /* VariableName */, true) || this._accept(8 /* Int */, true));\n if (!match) {\n return this._backTo(token);\n }\n parent.appendChild(/^\\d+$/.test(value)\n ? new Placeholder(Number(value))\n : new Variable(value));\n return true;\n }\n // ${1:}, ${1} -> placeholder\n _parseComplexPlaceholder(parent) {\n let index;\n const token = this._token;\n const match = this._accept(0 /* Dollar */)\n && this._accept(3 /* CurlyOpen */)\n && (index = this._accept(8 /* Int */, true));\n if (!match) {\n return this._backTo(token);\n }\n const placeholder = new Placeholder(Number(index));\n if (this._accept(1 /* Colon */)) {\n // ${1:}\n while (true) {\n // ...} -> done\n if (this._accept(4 /* CurlyClose */)) {\n parent.appendChild(placeholder);\n return true;\n }\n if (this._parse(placeholder)) {\n continue;\n }\n // fallback\n parent.appendChild(new Text('${' + index + ':'));\n placeholder.children.forEach(parent.appendChild, parent);\n return true;\n }\n }\n else if (placeholder.index > 0 && this._accept(7 /* Pipe */)) {\n // ${1|one,two,three|}\n const choice = new Choice();\n while (true) {\n if (this._parseChoiceElement(choice)) {\n if (this._accept(2 /* Comma */)) {\n // opt, -> more\n continue;\n }\n if (this._accept(7 /* Pipe */)) {\n placeholder.appendChild(choice);\n if (this._accept(4 /* CurlyClose */)) {\n // ..|} -> done\n parent.appendChild(placeholder);\n return true;\n }\n }\n }\n this._backTo(token);\n return false;\n }\n }\n else if (this._accept(6 /* Forwardslash */)) {\n // ${1///}\n if (this._parseTransform(placeholder)) {\n parent.appendChild(placeholder);\n return true;\n }\n this._backTo(token);\n return false;\n }\n else if (this._accept(4 /* CurlyClose */)) {\n // ${1}\n parent.appendChild(placeholder);\n return true;\n }\n else {\n // ${1 <- missing curly or colon\n return this._backTo(token);\n }\n }\n _parseChoiceElement(parent) {\n const token = this._token;\n const values = [];\n while (true) {\n if (this._token.type === 2 /* Comma */ || this._token.type === 7 /* Pipe */) {\n break;\n }\n let value;\n if (value = this._accept(5 /* Backslash */, true)) {\n // \\, \\|, or \\\\\n value = this._accept(2 /* Comma */, true)\n || this._accept(7 /* Pipe */, true)\n || this._accept(5 /* Backslash */, true)\n || value;\n }\n else {\n value = this._accept(undefined, true);\n }\n if (!value) {\n // EOF\n this._backTo(token);\n return false;\n }\n values.push(value);\n }\n if (values.length === 0) {\n this._backTo(token);\n return false;\n }\n parent.appendChild(new Text(values.join('')));\n return true;\n }\n // ${foo:}, ${foo} -> variable\n _parseComplexVariable(parent) {\n let name;\n const token = this._token;\n const match = this._accept(0 /* Dollar */)\n && this._accept(3 /* CurlyOpen */)\n && (name = this._accept(9 /* VariableName */, true));\n if (!match) {\n return this._backTo(token);\n }\n const variable = new Variable(name);\n if (this._accept(1 /* Colon */)) {\n // ${foo:}\n while (true) {\n // ...} -> done\n if (this._accept(4 /* CurlyClose */)) {\n parent.appendChild(variable);\n return true;\n }\n if (this._parse(variable)) {\n continue;\n }\n // fallback\n parent.appendChild(new Text('${' + name + ':'));\n variable.children.forEach(parent.appendChild, parent);\n return true;\n }\n }\n else if (this._accept(6 /* Forwardslash */)) {\n // ${foo///}\n if (this._parseTransform(variable)) {\n parent.appendChild(variable);\n return true;\n }\n this._backTo(token);\n return false;\n }\n else if (this._accept(4 /* CurlyClose */)) {\n // ${foo}\n parent.appendChild(variable);\n return true;\n }\n else {\n // ${foo <- missing curly or colon\n return this._backTo(token);\n }\n }\n _parseTransform(parent) {\n // ...//}\n let transform = new Transform();\n let regexValue = '';\n let regexOptions = '';\n // (1) /regex\n while (true) {\n if (this._accept(6 /* Forwardslash */)) {\n break;\n }\n let escaped;\n if (escaped = this._accept(5 /* Backslash */, true)) {\n escaped = this._accept(6 /* Forwardslash */, true) || escaped;\n regexValue += escaped;\n continue;\n }\n if (this._token.type !== 14 /* EOF */) {\n regexValue += this._accept(undefined, true);\n continue;\n }\n return false;\n }\n // (2) /format\n while (true) {\n if (this._accept(6 /* Forwardslash */)) {\n break;\n }\n let escaped;\n if (escaped = this._accept(5 /* Backslash */, true)) {\n escaped = this._accept(5 /* Backslash */, true) || this._accept(6 /* Forwardslash */, true) || escaped;\n transform.appendChild(new Text(escaped));\n continue;\n }\n if (this._parseFormatString(transform) || this._parseAnything(transform)) {\n continue;\n }\n return false;\n }\n // (3) /option\n while (true) {\n if (this._accept(4 /* CurlyClose */)) {\n break;\n }\n if (this._token.type !== 14 /* EOF */) {\n regexOptions += this._accept(undefined, true);\n continue;\n }\n return false;\n }\n try {\n transform.regexp = new RegExp(regexValue, regexOptions);\n }\n catch (e) {\n // invalid regexp\n return false;\n }\n parent.transform = transform;\n return true;\n }\n _parseFormatString(parent) {\n const token = this._token;\n if (!this._accept(0 /* Dollar */)) {\n return false;\n }\n let complex = false;\n if (this._accept(3 /* CurlyOpen */)) {\n complex = true;\n }\n let index = this._accept(8 /* Int */, true);\n if (!index) {\n this._backTo(token);\n return false;\n }\n else if (!complex) {\n // $1\n parent.appendChild(new FormatString(Number(index)));\n return true;\n }\n else if (this._accept(4 /* CurlyClose */)) {\n // ${1}\n parent.appendChild(new FormatString(Number(index)));\n return true;\n }\n else if (!this._accept(1 /* Colon */)) {\n this._backTo(token);\n return false;\n }\n if (this._accept(6 /* Forwardslash */)) {\n // ${1:/upcase}\n let shorthand = this._accept(9 /* VariableName */, true);\n if (!shorthand || !this._accept(4 /* CurlyClose */)) {\n this._backTo(token);\n return false;\n }\n else {\n parent.appendChild(new FormatString(Number(index), shorthand));\n return true;\n }\n }\n else if (this._accept(11 /* Plus */)) {\n // ${1:+}\n let ifValue = this._until(4 /* CurlyClose */);\n if (ifValue) {\n parent.appendChild(new FormatString(Number(index), undefined, ifValue, undefined));\n return true;\n }\n }\n else if (this._accept(12 /* Dash */)) {\n // ${2:-}\n let elseValue = this._until(4 /* CurlyClose */);\n if (elseValue) {\n parent.appendChild(new FormatString(Number(index), undefined, undefined, elseValue));\n return true;\n }\n }\n else if (this._accept(13 /* QuestionMark */)) {\n // ${2:?:}\n let ifValue = this._until(1 /* Colon */);\n if (ifValue) {\n let elseValue = this._until(4 /* CurlyClose */);\n if (elseValue) {\n parent.appendChild(new FormatString(Number(index), undefined, ifValue, elseValue));\n return true;\n }\n }\n }\n else {\n // ${1:}\n let elseValue = this._until(4 /* CurlyClose */);\n if (elseValue) {\n parent.appendChild(new FormatString(Number(index), undefined, undefined, elseValue));\n return true;\n }\n }\n this._backTo(token);\n return false;\n }\n _parseAnything(marker) {\n if (this._token.type !== 14 /* EOF */) {\n marker.appendChild(new Text(this._scanner.tokenText(this._token)));\n this._accept(undefined);\n return true;\n }\n return false;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { canceled, isPromiseCanceledError, onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { FuzzyScore } from '../../../base/common/filters.js';\nimport { DisposableStore, isDisposable } from '../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\nimport { assertType } from '../../../base/common/types.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport * as modes from '../../common/modes.js';\nimport { ITextModelService } from '../../common/services/resolverService.js';\nimport { SnippetParser } from '../snippet/snippetParser.js';\nimport { localize } from '../../../nls.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nexport const Context = {\n Visible: new RawContextKey('suggestWidgetVisible', false, localize('suggestWidgetVisible', \"Whether suggestion are visible\")),\n DetailsVisible: new RawContextKey('suggestWidgetDetailsVisible', false, localize('suggestWidgetDetailsVisible', \"Whether suggestion details are visible\")),\n MultipleSuggestions: new RawContextKey('suggestWidgetMultipleSuggestions', false, localize('suggestWidgetMultipleSuggestions', \"Whether there are multiple suggestions to pick from\")),\n MakesTextEdit: new RawContextKey('suggestionMakesTextEdit', true, localize('suggestionMakesTextEdit', \"Whether inserting the current suggestion yields in a change or has everything already been typed\")),\n AcceptSuggestionsOnEnter: new RawContextKey('acceptSuggestionOnEnter', true, localize('acceptSuggestionOnEnter', \"Whether suggestions are inserted when pressing Enter\")),\n HasInsertAndReplaceRange: new RawContextKey('suggestionHasInsertAndReplaceRange', false, localize('suggestionHasInsertAndReplaceRange', \"Whether the current suggestion has insert and replace behaviour\")),\n InsertMode: new RawContextKey('suggestionInsertMode', undefined, { type: 'string', description: localize('suggestionInsertMode', \"Whether the default behaviour is to insert or replace\") }),\n CanResolve: new RawContextKey('suggestionCanResolve', false, localize('suggestionCanResolve', \"Whether the current suggestion supports to resolve further details\")),\n};\nexport const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar');\nexport class CompletionItem {\n constructor(position, completion, container, provider) {\n this.position = position;\n this.completion = completion;\n this.container = container;\n this.provider = provider;\n // validation\n this.isInvalid = false;\n // sorting, filtering\n this.score = FuzzyScore.Default;\n this.distance = 0;\n this.textLabel = typeof completion.label === 'string'\n ? completion.label\n : completion.label.label;\n // ensure lower-variants (perf)\n this.labelLow = this.textLabel.toLowerCase();\n // validate label\n this.isInvalid = !this.textLabel;\n this.sortTextLow = completion.sortText && completion.sortText.toLowerCase();\n this.filterTextLow = completion.filterText && completion.filterText.toLowerCase();\n // normalize ranges\n if (Range.isIRange(completion.range)) {\n this.editStart = new Position(completion.range.startLineNumber, completion.range.startColumn);\n this.editInsertEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n this.editReplaceEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n // validate range\n this.isInvalid = this.isInvalid\n || Range.spansMultipleLines(completion.range) || completion.range.startLineNumber !== position.lineNumber;\n }\n else {\n this.editStart = new Position(completion.range.insert.startLineNumber, completion.range.insert.startColumn);\n this.editInsertEnd = new Position(completion.range.insert.endLineNumber, completion.range.insert.endColumn);\n this.editReplaceEnd = new Position(completion.range.replace.endLineNumber, completion.range.replace.endColumn);\n // validate ranges\n this.isInvalid = this.isInvalid\n || Range.spansMultipleLines(completion.range.insert) || Range.spansMultipleLines(completion.range.replace)\n || completion.range.insert.startLineNumber !== position.lineNumber || completion.range.replace.startLineNumber !== position.lineNumber\n || completion.range.insert.startColumn !== completion.range.replace.startColumn;\n }\n // create the suggestion resolver\n if (typeof provider.resolveCompletionItem !== 'function') {\n this._resolveCache = Promise.resolve();\n this._isResolved = true;\n }\n }\n // ---- resolving\n get isResolved() {\n return !!this._isResolved;\n }\n resolve(token) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._resolveCache) {\n const sub = token.onCancellationRequested(() => {\n this._resolveCache = undefined;\n this._isResolved = false;\n });\n this._resolveCache = Promise.resolve(this.provider.resolveCompletionItem(this.completion, token)).then(value => {\n Object.assign(this.completion, value);\n this._isResolved = true;\n sub.dispose();\n }, err => {\n if (isPromiseCanceledError(err)) {\n // the IPC queue will reject the request with the\n // cancellation error -> reset cached\n this._resolveCache = undefined;\n this._isResolved = false;\n }\n });\n }\n return this._resolveCache;\n });\n }\n}\nexport class CompletionOptions {\n constructor(snippetSortOrder = 2 /* Bottom */, kindFilter = new Set(), providerFilter = new Set(), showDeprecated = true) {\n this.snippetSortOrder = snippetSortOrder;\n this.kindFilter = kindFilter;\n this.providerFilter = providerFilter;\n this.showDeprecated = showDeprecated;\n }\n}\nCompletionOptions.default = new CompletionOptions();\nlet _snippetSuggestSupport;\nexport function getSnippetSuggestSupport() {\n return _snippetSuggestSupport;\n}\nexport class CompletionItemModel {\n constructor(items, needsClipboard, durations, disposable) {\n this.items = items;\n this.needsClipboard = needsClipboard;\n this.durations = durations;\n this.disposable = disposable;\n }\n}\nexport function provideSuggestionItems(model, position, options = CompletionOptions.default, context = { triggerKind: 0 /* Invoke */ }, token = CancellationToken.None) {\n return __awaiter(this, void 0, void 0, function* () {\n const sw = new StopWatch(true);\n position = position.clone();\n const word = model.getWordAtPosition(position);\n const defaultReplaceRange = word ? new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn) : Range.fromPositions(position);\n const defaultRange = { replace: defaultReplaceRange, insert: defaultReplaceRange.setEndPosition(position.lineNumber, position.column) };\n const result = [];\n const disposables = new DisposableStore();\n const durations = [];\n let needsClipboard = false;\n const onCompletionList = (provider, container, sw) => {\n var _a, _b, _c;\n if (!container) {\n return;\n }\n for (let suggestion of container.suggestions) {\n if (!options.kindFilter.has(suggestion.kind)) {\n // skip if not showing deprecated suggestions\n if (!options.showDeprecated && ((_a = suggestion === null || suggestion === void 0 ? void 0 : suggestion.tags) === null || _a === void 0 ? void 0 : _a.includes(1 /* Deprecated */))) {\n continue;\n }\n // fill in default range when missing\n if (!suggestion.range) {\n suggestion.range = defaultRange;\n }\n // fill in default sortText when missing\n if (!suggestion.sortText) {\n suggestion.sortText = typeof suggestion.label === 'string' ? suggestion.label : suggestion.label.label;\n }\n if (!needsClipboard && suggestion.insertTextRules && suggestion.insertTextRules & 4 /* InsertAsSnippet */) {\n needsClipboard = SnippetParser.guessNeedsClipboard(suggestion.insertText);\n }\n result.push(new CompletionItem(position, suggestion, container, provider));\n }\n }\n if (isDisposable(container)) {\n disposables.add(container);\n }\n durations.push({\n providerName: (_b = provider._debugDisplayName) !== null && _b !== void 0 ? _b : 'unkown_provider', elapsedProvider: (_c = container.duration) !== null && _c !== void 0 ? _c : -1, elapsedOverall: sw.elapsed()\n });\n };\n // ask for snippets in parallel to asking \"real\" providers. Only do something if configured to\n // do so - no snippet filter, no special-providers-only request\n const snippetCompletions = (() => __awaiter(this, void 0, void 0, function* () {\n if (!_snippetSuggestSupport || options.kindFilter.has(27 /* Snippet */)) {\n return;\n }\n if (options.providerFilter.size > 0 && !options.providerFilter.has(_snippetSuggestSupport)) {\n return;\n }\n const sw = new StopWatch(true);\n const list = yield _snippetSuggestSupport.provideCompletionItems(model, position, context, token);\n onCompletionList(_snippetSuggestSupport, list, sw);\n }))();\n // add suggestions from contributed providers - providers are ordered in groups of\n // equal score and once a group produces a result the process stops\n // get provider groups, always add snippet suggestion provider\n for (let providerGroup of modes.CompletionProviderRegistry.orderedGroups(model)) {\n // for each support in the group ask for suggestions\n let lenBefore = result.length;\n yield Promise.all(providerGroup.map((provider) => __awaiter(this, void 0, void 0, function* () {\n if (options.providerFilter.size > 0 && !options.providerFilter.has(provider)) {\n return;\n }\n try {\n const sw = new StopWatch(true);\n const list = yield provider.provideCompletionItems(model, position, context, token);\n onCompletionList(provider, list, sw);\n }\n catch (err) {\n onUnexpectedExternalError(err);\n }\n })));\n if (lenBefore !== result.length || token.isCancellationRequested) {\n break;\n }\n }\n yield snippetCompletions;\n if (token.isCancellationRequested) {\n disposables.dispose();\n return Promise.reject(canceled());\n }\n return new CompletionItemModel(result.sort(getSuggestionComparator(options.snippetSortOrder)), needsClipboard, { entries: durations, elapsed: sw.elapsed() }, disposables);\n });\n}\nfunction defaultComparator(a, b) {\n // check with 'sortText'\n if (a.sortTextLow && b.sortTextLow) {\n if (a.sortTextLow < b.sortTextLow) {\n return -1;\n }\n else if (a.sortTextLow > b.sortTextLow) {\n return 1;\n }\n }\n // check with 'label'\n if (a.completion.label < b.completion.label) {\n return -1;\n }\n else if (a.completion.label > b.completion.label) {\n return 1;\n }\n // check with 'type'\n return a.completion.kind - b.completion.kind;\n}\nfunction snippetUpComparator(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* Snippet */) {\n return -1;\n }\n else if (b.completion.kind === 27 /* Snippet */) {\n return 1;\n }\n }\n return defaultComparator(a, b);\n}\nfunction snippetDownComparator(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* Snippet */) {\n return 1;\n }\n else if (b.completion.kind === 27 /* Snippet */) {\n return -1;\n }\n }\n return defaultComparator(a, b);\n}\nconst _snippetComparators = new Map();\n_snippetComparators.set(0 /* Top */, snippetUpComparator);\n_snippetComparators.set(2 /* Bottom */, snippetDownComparator);\n_snippetComparators.set(1 /* Inline */, defaultComparator);\nexport function getSuggestionComparator(snippetConfig) {\n return _snippetComparators.get(snippetConfig);\n}\nCommandsRegistry.registerCommand('_executeCompletionItemProvider', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {\n const [uri, position, triggerCharacter, maxItemsToResolve] = args;\n assertType(URI.isUri(uri));\n assertType(Position.isIPosition(position));\n assertType(typeof triggerCharacter === 'string' || !triggerCharacter);\n assertType(typeof maxItemsToResolve === 'number' || !maxItemsToResolve);\n const ref = yield accessor.get(ITextModelService).createModelReference(uri);\n try {\n const result = {\n incomplete: false,\n suggestions: []\n };\n const resolving = [];\n const completions = yield provideSuggestionItems(ref.object.textEditorModel, Position.lift(position), undefined, { triggerCharacter, triggerKind: triggerCharacter ? 1 /* TriggerCharacter */ : 0 /* Invoke */ });\n for (const item of completions.items) {\n if (resolving.length < (maxItemsToResolve !== null && maxItemsToResolve !== void 0 ? maxItemsToResolve : 0)) {\n resolving.push(item.resolve(CancellationToken.None));\n }\n result.incomplete = result.incomplete || item.container.incomplete;\n result.suggestions.push(item.completion);\n }\n try {\n yield Promise.all(resolving);\n return result;\n }\n finally {\n setTimeout(() => completions.disposable.dispose(), 100);\n }\n }\n finally {\n ref.dispose();\n }\n}));\nconst _provider = new class {\n constructor() {\n this.onlyOnceSuggestions = [];\n }\n provideCompletionItems() {\n let suggestions = this.onlyOnceSuggestions.slice(0);\n let result = { suggestions };\n this.onlyOnceSuggestions.length = 0;\n return result;\n }\n};\nmodes.CompletionProviderRegistry.register('*', _provider);\nexport function showSimpleSuggestions(editor, suggestions) {\n setTimeout(() => {\n _provider.onlyOnceSuggestions.push(...suggestions);\n editor.getContribution('editor.contrib.suggestController').triggerSuggest(new Set().add(_provider));\n }, 0);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { FindInput } from '../../base/browser/ui/findinput/findInput.js';\nimport { ReplaceInput } from '../../base/browser/ui/findinput/replaceInput.js';\nimport { ContextKeyExpr, IContextKeyService, RawContextKey } from '../contextkey/common/contextkey.js';\nimport { KeybindingsRegistry } from '../keybinding/common/keybindingsRegistry.js';\nimport { Context as SuggestContext } from '../../editor/contrib/suggest/suggest.js';\nexport const HistoryNavigationWidgetContext = 'historyNavigationWidget';\nconst HistoryNavigationForwardsEnablementContext = 'historyNavigationForwardsEnabled';\nconst HistoryNavigationBackwardsEnablementContext = 'historyNavigationBackwardsEnabled';\nfunction bindContextScopedWidget(contextKeyService, widget, contextKey) {\n new RawContextKey(contextKey, widget).bindTo(contextKeyService);\n}\nfunction createWidgetScopedContextKeyService(contextKeyService, widget) {\n return contextKeyService.createScoped(widget.target);\n}\nfunction getContextScopedWidget(contextKeyService, contextKey) {\n return contextKeyService.getContext(document.activeElement).getValue(contextKey);\n}\nexport function createAndBindHistoryNavigationWidgetScopedContextKeyService(contextKeyService, widget) {\n const scopedContextKeyService = createWidgetScopedContextKeyService(contextKeyService, widget);\n bindContextScopedWidget(scopedContextKeyService, widget, HistoryNavigationWidgetContext);\n const historyNavigationForwardsEnablement = new RawContextKey(HistoryNavigationForwardsEnablementContext, true).bindTo(scopedContextKeyService);\n const historyNavigationBackwardsEnablement = new RawContextKey(HistoryNavigationBackwardsEnablementContext, true).bindTo(scopedContextKeyService);\n return {\n scopedContextKeyService,\n historyNavigationForwardsEnablement,\n historyNavigationBackwardsEnablement,\n };\n}\nlet ContextScopedFindInput = class ContextScopedFindInput extends FindInput {\n constructor(container, contextViewProvider, options, contextKeyService, showFindOptions = false) {\n super(container, contextViewProvider, showFindOptions, options);\n this._register(createAndBindHistoryNavigationWidgetScopedContextKeyService(contextKeyService, { target: this.inputBox.element, historyNavigator: this.inputBox }).scopedContextKeyService);\n }\n};\nContextScopedFindInput = __decorate([\n __param(3, IContextKeyService)\n], ContextScopedFindInput);\nexport { ContextScopedFindInput };\nlet ContextScopedReplaceInput = class ContextScopedReplaceInput extends ReplaceInput {\n constructor(container, contextViewProvider, options, contextKeyService, showReplaceOptions = false) {\n super(container, contextViewProvider, showReplaceOptions, options);\n this._register(createAndBindHistoryNavigationWidgetScopedContextKeyService(contextKeyService, { target: this.inputBox.element, historyNavigator: this.inputBox }).scopedContextKeyService);\n }\n};\nContextScopedReplaceInput = __decorate([\n __param(3, IContextKeyService)\n], ContextScopedReplaceInput);\nexport { ContextScopedReplaceInput };\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'history.showPrevious',\n weight: 200 /* WorkbenchContrib */,\n when: ContextKeyExpr.and(ContextKeyExpr.has(HistoryNavigationWidgetContext), ContextKeyExpr.equals(HistoryNavigationBackwardsEnablementContext, true), SuggestContext.Visible.isEqualTo(false)),\n primary: 16 /* UpArrow */,\n secondary: [512 /* Alt */ | 16 /* UpArrow */],\n handler: (accessor) => {\n const widget = getContextScopedWidget(accessor.get(IContextKeyService), HistoryNavigationWidgetContext);\n if (widget) {\n const historyInputBox = widget.historyNavigator;\n historyInputBox.showPreviousValue();\n }\n }\n});\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'history.showNext',\n weight: 200 /* WorkbenchContrib */,\n when: ContextKeyExpr.and(ContextKeyExpr.has(HistoryNavigationWidgetContext), ContextKeyExpr.equals(HistoryNavigationForwardsEnablementContext, true), SuggestContext.Visible.isEqualTo(false)),\n primary: 18 /* DownArrow */,\n secondary: [512 /* Alt */ | 18 /* DownArrow */],\n handler: (accessor) => {\n const widget = getContextScopedWidget(accessor.get(IContextKeyService), HistoryNavigationWidgetContext);\n if (widget) {\n const historyInputBox = widget.historyNavigator;\n historyInputBox.showNextValue();\n }\n }\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function showHistoryKeybindingHint(keybindingService) {\n var _a, _b;\n return ((_a = keybindingService.lookupKeybinding('history.showPrevious')) === null || _a === void 0 ? void 0 : _a.getElectronAccelerator()) === 'Up' && ((_b = keybindingService.lookupKeybinding('history.showNext')) === null || _b === void 0 ? void 0 : _b.getElectronAccelerator()) === 'Down';\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as dom from '../../../base/browser/dom.js';\nimport { alert as alertFn } from '../../../base/browser/ui/aria/aria.js';\nimport { Checkbox } from '../../../base/browser/ui/checkbox/checkbox.js';\nimport { Sash } from '../../../base/browser/ui/sash/sash.js';\nimport { Widget } from '../../../base/browser/ui/widget.js';\nimport { Delayer } from '../../../base/common/async.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport * as strings from '../../../base/common/strings.js';\nimport './findWidget.css';\nimport { Range } from '../../common/core/range.js';\nimport { CONTEXT_FIND_INPUT_FOCUSED, CONTEXT_REPLACE_INPUT_FOCUSED, FIND_IDS, MATCHES_LIMIT } from './findModel.js';\nimport * as nls from '../../../nls.js';\nimport { ContextScopedFindInput, ContextScopedReplaceInput } from '../../../platform/browser/contextScopedHistoryWidget.js';\nimport { showHistoryKeybindingHint } from '../../../platform/browser/historyWidgetKeybindingHint.js';\nimport { contrastBorder, editorFindMatch, editorFindMatchBorder, editorFindMatchHighlight, editorFindMatchHighlightBorder, editorFindRangeHighlight, editorFindRangeHighlightBorder, editorWidgetBackground, editorWidgetBorder, editorWidgetForeground, editorWidgetResizeBorder, errorForeground, focusBorder, inputActiveOptionBackground, inputActiveOptionBorder, inputActiveOptionForeground, inputBackground, inputBorder, inputForeground, inputValidationErrorBackground, inputValidationErrorBorder, inputValidationErrorForeground, inputValidationInfoBackground, inputValidationInfoBorder, inputValidationInfoForeground, inputValidationWarningBackground, inputValidationWarningBorder, inputValidationWarningForeground, toolbarHoverBackground, widgetShadow } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerIcon, widgetClose } from '../../../platform/theme/common/iconRegistry.js';\nimport { registerThemingParticipant, ThemeIcon } from '../../../platform/theme/common/themeService.js';\nconst findSelectionIcon = registerIcon('find-selection', Codicon.selection, nls.localize('findSelectionIcon', 'Icon for \\'Find in Selection\\' in the editor find widget.'));\nconst findCollapsedIcon = registerIcon('find-collapsed', Codicon.chevronRight, nls.localize('findCollapsedIcon', 'Icon to indicate that the editor find widget is collapsed.'));\nconst findExpandedIcon = registerIcon('find-expanded', Codicon.chevronDown, nls.localize('findExpandedIcon', 'Icon to indicate that the editor find widget is expanded.'));\nexport const findReplaceIcon = registerIcon('find-replace', Codicon.replace, nls.localize('findReplaceIcon', 'Icon for \\'Replace\\' in the editor find widget.'));\nexport const findReplaceAllIcon = registerIcon('find-replace-all', Codicon.replaceAll, nls.localize('findReplaceAllIcon', 'Icon for \\'Replace All\\' in the editor find widget.'));\nexport const findPreviousMatchIcon = registerIcon('find-previous-match', Codicon.arrowUp, nls.localize('findPreviousMatchIcon', 'Icon for \\'Find Previous\\' in the editor find widget.'));\nexport const findNextMatchIcon = registerIcon('find-next-match', Codicon.arrowDown, nls.localize('findNextMatchIcon', 'Icon for \\'Find Next\\' in the editor find widget.'));\nconst NLS_FIND_INPUT_LABEL = nls.localize('label.find', \"Find\");\nconst NLS_FIND_INPUT_PLACEHOLDER = nls.localize('placeholder.find', \"Find\");\nconst NLS_PREVIOUS_MATCH_BTN_LABEL = nls.localize('label.previousMatchButton', \"Previous Match\");\nconst NLS_NEXT_MATCH_BTN_LABEL = nls.localize('label.nextMatchButton', \"Next Match\");\nconst NLS_TOGGLE_SELECTION_FIND_TITLE = nls.localize('label.toggleSelectionFind', \"Find in Selection\");\nconst NLS_CLOSE_BTN_LABEL = nls.localize('label.closeButton', \"Close\");\nconst NLS_REPLACE_INPUT_LABEL = nls.localize('label.replace', \"Replace\");\nconst NLS_REPLACE_INPUT_PLACEHOLDER = nls.localize('placeholder.replace', \"Replace\");\nconst NLS_REPLACE_BTN_LABEL = nls.localize('label.replaceButton', \"Replace\");\nconst NLS_REPLACE_ALL_BTN_LABEL = nls.localize('label.replaceAllButton', \"Replace All\");\nconst NLS_TOGGLE_REPLACE_MODE_BTN_LABEL = nls.localize('label.toggleReplaceButton', \"Toggle Replace\");\nconst NLS_MATCHES_COUNT_LIMIT_TITLE = nls.localize('title.matchesCountLimit', \"Only the first {0} results are highlighted, but all find operations work on the entire text.\", MATCHES_LIMIT);\nexport const NLS_MATCHES_LOCATION = nls.localize('label.matchesLocation', \"{0} of {1}\");\nexport const NLS_NO_RESULTS = nls.localize('label.noResults', \"No results\");\nconst FIND_WIDGET_INITIAL_WIDTH = 419;\nconst PART_WIDTH = 275;\nconst FIND_INPUT_AREA_WIDTH = PART_WIDTH - 54;\nlet MAX_MATCHES_COUNT_WIDTH = 69;\n// let FIND_ALL_CONTROLS_WIDTH = 17/** Find Input margin-left */ + (MAX_MATCHES_COUNT_WIDTH + 3 + 1) /** Match Results */ + 23 /** Button */ * 4 + 2/** sash */;\nconst FIND_INPUT_AREA_HEIGHT = 33; // The height of Find Widget when Replace Input is not visible.\nconst ctrlEnterReplaceAllWarningPromptedKey = 'ctrlEnterReplaceAll.windows.donotask';\nconst ctrlKeyMod = (platform.isMacintosh ? 256 /* WinCtrl */ : 2048 /* CtrlCmd */);\nexport class FindWidgetViewZone {\n constructor(afterLineNumber) {\n this.afterLineNumber = afterLineNumber;\n this.heightInPx = FIND_INPUT_AREA_HEIGHT;\n this.suppressMouseDown = false;\n this.domNode = document.createElement('div');\n this.domNode.className = 'dock-find-viewzone';\n }\n}\nfunction stopPropagationForMultiLineUpwards(event, value, textarea) {\n const isMultiline = !!value.match(/\\n/);\n if (textarea && isMultiline && textarea.selectionStart > 0) {\n event.stopPropagation();\n return;\n }\n}\nfunction stopPropagationForMultiLineDownwards(event, value, textarea) {\n const isMultiline = !!value.match(/\\n/);\n if (textarea && isMultiline && textarea.selectionEnd < textarea.value.length) {\n event.stopPropagation();\n return;\n }\n}\nexport class FindWidget extends Widget {\n constructor(codeEditor, controller, state, contextViewProvider, keybindingService, contextKeyService, themeService, storageService, notificationService) {\n super();\n this._cachedHeight = null;\n this._revealTimeouts = [];\n this._codeEditor = codeEditor;\n this._controller = controller;\n this._state = state;\n this._contextViewProvider = contextViewProvider;\n this._keybindingService = keybindingService;\n this._contextKeyService = contextKeyService;\n this._storageService = storageService;\n this._notificationService = notificationService;\n this._ctrlEnterReplaceAllWarningPrompted = !!storageService.getBoolean(ctrlEnterReplaceAllWarningPromptedKey, 0 /* GLOBAL */);\n this._isVisible = false;\n this._isReplaceVisible = false;\n this._ignoreChangeEvent = false;\n this._updateHistoryDelayer = new Delayer(500);\n this._register(toDisposable(() => this._updateHistoryDelayer.cancel()));\n this._register(this._state.onFindReplaceStateChange((e) => this._onStateChanged(e)));\n this._buildDomNode();\n this._updateButtons();\n this._tryUpdateWidgetWidth();\n this._findInput.inputBox.layout();\n this._register(this._codeEditor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(80 /* readOnly */)) {\n if (this._codeEditor.getOption(80 /* readOnly */)) {\n // Hide replace part if editor becomes read only\n this._state.change({ isReplaceRevealed: false }, false);\n }\n this._updateButtons();\n }\n if (e.hasChanged(129 /* layoutInfo */)) {\n this._tryUpdateWidgetWidth();\n }\n if (e.hasChanged(2 /* accessibilitySupport */)) {\n this.updateAccessibilitySupport();\n }\n if (e.hasChanged(35 /* find */)) {\n const addExtraSpaceOnTop = this._codeEditor.getOption(35 /* find */).addExtraSpaceOnTop;\n if (addExtraSpaceOnTop && !this._viewZone) {\n this._viewZone = new FindWidgetViewZone(0);\n this._showViewZone();\n }\n if (!addExtraSpaceOnTop && this._viewZone) {\n this._removeViewZone();\n }\n }\n }));\n this.updateAccessibilitySupport();\n this._register(this._codeEditor.onDidChangeCursorSelection(() => {\n if (this._isVisible) {\n this._updateToggleSelectionFindButton();\n }\n }));\n this._register(this._codeEditor.onDidFocusEditorWidget(() => __awaiter(this, void 0, void 0, function* () {\n if (this._isVisible) {\n let globalBufferTerm = yield this._controller.getGlobalBufferTerm();\n if (globalBufferTerm && globalBufferTerm !== this._state.searchString) {\n this._state.change({ searchString: globalBufferTerm }, false);\n this._findInput.select();\n }\n }\n })));\n this._findInputFocused = CONTEXT_FIND_INPUT_FOCUSED.bindTo(contextKeyService);\n this._findFocusTracker = this._register(dom.trackFocus(this._findInput.inputBox.inputElement));\n this._register(this._findFocusTracker.onDidFocus(() => {\n this._findInputFocused.set(true);\n this._updateSearchScope();\n }));\n this._register(this._findFocusTracker.onDidBlur(() => {\n this._findInputFocused.set(false);\n }));\n this._replaceInputFocused = CONTEXT_REPLACE_INPUT_FOCUSED.bindTo(contextKeyService);\n this._replaceFocusTracker = this._register(dom.trackFocus(this._replaceInput.inputBox.inputElement));\n this._register(this._replaceFocusTracker.onDidFocus(() => {\n this._replaceInputFocused.set(true);\n this._updateSearchScope();\n }));\n this._register(this._replaceFocusTracker.onDidBlur(() => {\n this._replaceInputFocused.set(false);\n }));\n this._codeEditor.addOverlayWidget(this);\n if (this._codeEditor.getOption(35 /* find */).addExtraSpaceOnTop) {\n this._viewZone = new FindWidgetViewZone(0); // Put it before the first line then users can scroll beyond the first line.\n }\n this._applyTheme(themeService.getColorTheme());\n this._register(themeService.onDidColorThemeChange(this._applyTheme.bind(this)));\n this._register(this._codeEditor.onDidChangeModel(() => {\n if (!this._isVisible) {\n return;\n }\n this._viewZoneId = undefined;\n }));\n this._register(this._codeEditor.onDidScrollChange((e) => {\n if (e.scrollTopChanged) {\n this._layoutViewZone();\n return;\n }\n // for other scroll changes, layout the viewzone in next tick to avoid ruining current rendering.\n setTimeout(() => {\n this._layoutViewZone();\n }, 0);\n }));\n }\n // ----- IOverlayWidget API\n getId() {\n return FindWidget.ID;\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n if (this._isVisible) {\n return {\n preference: 0 /* TOP_RIGHT_CORNER */\n };\n }\n return null;\n }\n // ----- React to state changes\n _onStateChanged(e) {\n if (e.searchString) {\n try {\n this._ignoreChangeEvent = true;\n this._findInput.setValue(this._state.searchString);\n }\n finally {\n this._ignoreChangeEvent = false;\n }\n this._updateButtons();\n }\n if (e.replaceString) {\n this._replaceInput.inputBox.value = this._state.replaceString;\n }\n if (e.isRevealed) {\n if (this._state.isRevealed) {\n this._reveal();\n }\n else {\n this._hide(true);\n }\n }\n if (e.isReplaceRevealed) {\n if (this._state.isReplaceRevealed) {\n if (!this._codeEditor.getOption(80 /* readOnly */) && !this._isReplaceVisible) {\n this._isReplaceVisible = true;\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n this._updateButtons();\n this._replaceInput.inputBox.layout();\n }\n }\n else {\n if (this._isReplaceVisible) {\n this._isReplaceVisible = false;\n this._updateButtons();\n }\n }\n }\n if ((e.isRevealed || e.isReplaceRevealed) && (this._state.isRevealed || this._state.isReplaceRevealed)) {\n if (this._tryUpdateHeight()) {\n this._showViewZone();\n }\n }\n if (e.isRegex) {\n this._findInput.setRegex(this._state.isRegex);\n }\n if (e.wholeWord) {\n this._findInput.setWholeWords(this._state.wholeWord);\n }\n if (e.matchCase) {\n this._findInput.setCaseSensitive(this._state.matchCase);\n }\n if (e.preserveCase) {\n this._replaceInput.setPreserveCase(this._state.preserveCase);\n }\n if (e.searchScope) {\n if (this._state.searchScope) {\n this._toggleSelectionFind.checked = true;\n }\n else {\n this._toggleSelectionFind.checked = false;\n }\n this._updateToggleSelectionFindButton();\n }\n if (e.searchString || e.matchesCount || e.matchesPosition) {\n let showRedOutline = (this._state.searchString.length > 0 && this._state.matchesCount === 0);\n this._domNode.classList.toggle('no-results', showRedOutline);\n this._updateMatchesCount();\n this._updateButtons();\n }\n if (e.searchString || e.currentMatch) {\n this._layoutViewZone();\n }\n if (e.updateHistory) {\n this._delayedUpdateHistory();\n }\n if (e.loop) {\n this._updateButtons();\n }\n }\n _delayedUpdateHistory() {\n this._updateHistoryDelayer.trigger(this._updateHistory.bind(this)).then(undefined, onUnexpectedError);\n }\n _updateHistory() {\n if (this._state.searchString) {\n this._findInput.inputBox.addToHistory();\n }\n if (this._state.replaceString) {\n this._replaceInput.inputBox.addToHistory();\n }\n }\n _updateMatchesCount() {\n this._matchesCount.style.minWidth = MAX_MATCHES_COUNT_WIDTH + 'px';\n if (this._state.matchesCount >= MATCHES_LIMIT) {\n this._matchesCount.title = NLS_MATCHES_COUNT_LIMIT_TITLE;\n }\n else {\n this._matchesCount.title = '';\n }\n // remove previous content\n if (this._matchesCount.firstChild) {\n this._matchesCount.removeChild(this._matchesCount.firstChild);\n }\n let label;\n if (this._state.matchesCount > 0) {\n let matchesCount = String(this._state.matchesCount);\n if (this._state.matchesCount >= MATCHES_LIMIT) {\n matchesCount += '+';\n }\n let matchesPosition = String(this._state.matchesPosition);\n if (matchesPosition === '0') {\n matchesPosition = '?';\n }\n label = strings.format(NLS_MATCHES_LOCATION, matchesPosition, matchesCount);\n }\n else {\n label = NLS_NO_RESULTS;\n }\n this._matchesCount.appendChild(document.createTextNode(label));\n alertFn(this._getAriaLabel(label, this._state.currentMatch, this._state.searchString));\n MAX_MATCHES_COUNT_WIDTH = Math.max(MAX_MATCHES_COUNT_WIDTH, this._matchesCount.clientWidth);\n }\n // ----- actions\n _getAriaLabel(label, currentMatch, searchString) {\n if (label === NLS_NO_RESULTS) {\n return searchString === ''\n ? nls.localize('ariaSearchNoResultEmpty', \"{0} found\", label)\n : nls.localize('ariaSearchNoResult', \"{0} found for '{1}'\", label, searchString);\n }\n if (currentMatch) {\n const ariaLabel = nls.localize('ariaSearchNoResultWithLineNum', \"{0} found for '{1}', at {2}\", label, searchString, currentMatch.startLineNumber + ':' + currentMatch.startColumn);\n const model = this._codeEditor.getModel();\n if (model && (currentMatch.startLineNumber <= model.getLineCount()) && (currentMatch.startLineNumber >= 1)) {\n const lineContent = model.getLineContent(currentMatch.startLineNumber);\n return `${lineContent}, ${ariaLabel}`;\n }\n return ariaLabel;\n }\n return nls.localize('ariaSearchNoResultWithLineNumNoCurrentMatch', \"{0} found for '{1}'\", label, searchString);\n }\n /**\n * If 'selection find' is ON we should not disable the button (its function is to cancel 'selection find').\n * If 'selection find' is OFF we enable the button only if there is a selection.\n */\n _updateToggleSelectionFindButton() {\n let selection = this._codeEditor.getSelection();\n let isSelection = selection ? (selection.startLineNumber !== selection.endLineNumber || selection.startColumn !== selection.endColumn) : false;\n let isChecked = this._toggleSelectionFind.checked;\n if (this._isVisible && (isChecked || isSelection)) {\n this._toggleSelectionFind.enable();\n }\n else {\n this._toggleSelectionFind.disable();\n }\n }\n _updateButtons() {\n this._findInput.setEnabled(this._isVisible);\n this._replaceInput.setEnabled(this._isVisible && this._isReplaceVisible);\n this._updateToggleSelectionFindButton();\n this._closeBtn.setEnabled(this._isVisible);\n let findInputIsNonEmpty = (this._state.searchString.length > 0);\n let matchesCount = this._state.matchesCount ? true : false;\n this._prevBtn.setEnabled(this._isVisible && findInputIsNonEmpty && matchesCount && this._state.canNavigateBack());\n this._nextBtn.setEnabled(this._isVisible && findInputIsNonEmpty && matchesCount && this._state.canNavigateForward());\n this._replaceBtn.setEnabled(this._isVisible && this._isReplaceVisible && findInputIsNonEmpty);\n this._replaceAllBtn.setEnabled(this._isVisible && this._isReplaceVisible && findInputIsNonEmpty);\n this._domNode.classList.toggle('replaceToggled', this._isReplaceVisible);\n this._toggleReplaceBtn.setExpanded(this._isReplaceVisible);\n let canReplace = !this._codeEditor.getOption(80 /* readOnly */);\n this._toggleReplaceBtn.setEnabled(this._isVisible && canReplace);\n }\n _reveal() {\n this._revealTimeouts.forEach(e => {\n clearTimeout(e);\n });\n this._revealTimeouts = [];\n if (!this._isVisible) {\n this._isVisible = true;\n const selection = this._codeEditor.getSelection();\n switch (this._codeEditor.getOption(35 /* find */).autoFindInSelection) {\n case 'always':\n this._toggleSelectionFind.checked = true;\n break;\n case 'never':\n this._toggleSelectionFind.checked = false;\n break;\n case 'multiline':\n const isSelectionMultipleLine = !!selection && selection.startLineNumber !== selection.endLineNumber;\n this._toggleSelectionFind.checked = isSelectionMultipleLine;\n break;\n default:\n break;\n }\n this._tryUpdateWidgetWidth();\n this._updateButtons();\n this._revealTimeouts.push(setTimeout(() => {\n this._domNode.classList.add('visible');\n this._domNode.setAttribute('aria-hidden', 'false');\n }, 0));\n // validate query again as it's being dismissed when we hide the find widget.\n this._revealTimeouts.push(setTimeout(() => {\n this._findInput.validate();\n }, 200));\n this._codeEditor.layoutOverlayWidget(this);\n let adjustEditorScrollTop = true;\n if (this._codeEditor.getOption(35 /* find */).seedSearchStringFromSelection && selection) {\n const domNode = this._codeEditor.getDomNode();\n if (domNode) {\n const editorCoords = dom.getDomNodePagePosition(domNode);\n const startCoords = this._codeEditor.getScrolledVisiblePosition(selection.getStartPosition());\n const startLeft = editorCoords.left + (startCoords ? startCoords.left : 0);\n const startTop = startCoords ? startCoords.top : 0;\n if (this._viewZone && startTop < this._viewZone.heightInPx) {\n if (selection.endLineNumber > selection.startLineNumber) {\n adjustEditorScrollTop = false;\n }\n const leftOfFindWidget = dom.getTopLeftOffset(this._domNode).left;\n if (startLeft > leftOfFindWidget) {\n adjustEditorScrollTop = false;\n }\n const endCoords = this._codeEditor.getScrolledVisiblePosition(selection.getEndPosition());\n const endLeft = editorCoords.left + (endCoords ? endCoords.left : 0);\n if (endLeft > leftOfFindWidget) {\n adjustEditorScrollTop = false;\n }\n }\n }\n }\n this._showViewZone(adjustEditorScrollTop);\n }\n }\n _hide(focusTheEditor) {\n this._revealTimeouts.forEach(e => {\n clearTimeout(e);\n });\n this._revealTimeouts = [];\n if (this._isVisible) {\n this._isVisible = false;\n this._updateButtons();\n this._domNode.classList.remove('visible');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._findInput.clearMessage();\n if (focusTheEditor) {\n this._codeEditor.focus();\n }\n this._codeEditor.layoutOverlayWidget(this);\n this._removeViewZone();\n }\n }\n _layoutViewZone(targetScrollTop) {\n const addExtraSpaceOnTop = this._codeEditor.getOption(35 /* find */).addExtraSpaceOnTop;\n if (!addExtraSpaceOnTop) {\n this._removeViewZone();\n return;\n }\n if (!this._isVisible) {\n return;\n }\n const viewZone = this._viewZone;\n if (this._viewZoneId !== undefined || !viewZone) {\n return;\n }\n this._codeEditor.changeViewZones((accessor) => {\n viewZone.heightInPx = this._getHeight();\n this._viewZoneId = accessor.addZone(viewZone);\n // scroll top adjust to make sure the editor doesn't scroll when adding viewzone at the beginning.\n this._codeEditor.setScrollTop(targetScrollTop || this._codeEditor.getScrollTop() + viewZone.heightInPx);\n });\n }\n _showViewZone(adjustScroll = true) {\n if (!this._isVisible) {\n return;\n }\n const addExtraSpaceOnTop = this._codeEditor.getOption(35 /* find */).addExtraSpaceOnTop;\n if (!addExtraSpaceOnTop) {\n return;\n }\n if (this._viewZone === undefined) {\n this._viewZone = new FindWidgetViewZone(0);\n }\n const viewZone = this._viewZone;\n this._codeEditor.changeViewZones((accessor) => {\n if (this._viewZoneId !== undefined) {\n // the view zone already exists, we need to update the height\n const newHeight = this._getHeight();\n if (newHeight === viewZone.heightInPx) {\n return;\n }\n let scrollAdjustment = newHeight - viewZone.heightInPx;\n viewZone.heightInPx = newHeight;\n accessor.layoutZone(this._viewZoneId);\n if (adjustScroll) {\n this._codeEditor.setScrollTop(this._codeEditor.getScrollTop() + scrollAdjustment);\n }\n return;\n }\n else {\n let scrollAdjustment = this._getHeight();\n // if the editor has top padding, factor that into the zone height\n scrollAdjustment -= this._codeEditor.getOption(74 /* padding */).top;\n if (scrollAdjustment <= 0) {\n return;\n }\n viewZone.heightInPx = scrollAdjustment;\n this._viewZoneId = accessor.addZone(viewZone);\n if (adjustScroll) {\n this._codeEditor.setScrollTop(this._codeEditor.getScrollTop() + scrollAdjustment);\n }\n }\n });\n }\n _removeViewZone() {\n this._codeEditor.changeViewZones((accessor) => {\n if (this._viewZoneId !== undefined) {\n accessor.removeZone(this._viewZoneId);\n this._viewZoneId = undefined;\n if (this._viewZone) {\n this._codeEditor.setScrollTop(this._codeEditor.getScrollTop() - this._viewZone.heightInPx);\n this._viewZone = undefined;\n }\n }\n });\n }\n _applyTheme(theme) {\n let inputStyles = {\n inputActiveOptionBorder: theme.getColor(inputActiveOptionBorder),\n inputActiveOptionBackground: theme.getColor(inputActiveOptionBackground),\n inputActiveOptionForeground: theme.getColor(inputActiveOptionForeground),\n inputBackground: theme.getColor(inputBackground),\n inputForeground: theme.getColor(inputForeground),\n inputBorder: theme.getColor(inputBorder),\n inputValidationInfoBackground: theme.getColor(inputValidationInfoBackground),\n inputValidationInfoForeground: theme.getColor(inputValidationInfoForeground),\n inputValidationInfoBorder: theme.getColor(inputValidationInfoBorder),\n inputValidationWarningBackground: theme.getColor(inputValidationWarningBackground),\n inputValidationWarningForeground: theme.getColor(inputValidationWarningForeground),\n inputValidationWarningBorder: theme.getColor(inputValidationWarningBorder),\n inputValidationErrorBackground: theme.getColor(inputValidationErrorBackground),\n inputValidationErrorForeground: theme.getColor(inputValidationErrorForeground),\n inputValidationErrorBorder: theme.getColor(inputValidationErrorBorder),\n };\n this._findInput.style(inputStyles);\n this._replaceInput.style(inputStyles);\n this._toggleSelectionFind.style(inputStyles);\n }\n _tryUpdateWidgetWidth() {\n if (!this._isVisible) {\n return;\n }\n if (!dom.isInDOM(this._domNode)) {\n // the widget is not in the DOM\n return;\n }\n const layoutInfo = this._codeEditor.getLayoutInfo();\n const editorContentWidth = layoutInfo.contentWidth;\n if (editorContentWidth <= 0) {\n // for example, diff view original editor\n this._domNode.classList.add('hiddenEditor');\n return;\n }\n else if (this._domNode.classList.contains('hiddenEditor')) {\n this._domNode.classList.remove('hiddenEditor');\n }\n const editorWidth = layoutInfo.width;\n const minimapWidth = layoutInfo.minimap.minimapWidth;\n let collapsedFindWidget = false;\n let reducedFindWidget = false;\n let narrowFindWidget = false;\n if (this._resized) {\n let widgetWidth = dom.getTotalWidth(this._domNode);\n if (widgetWidth > FIND_WIDGET_INITIAL_WIDTH) {\n // as the widget is resized by users, we may need to change the max width of the widget as the editor width changes.\n this._domNode.style.maxWidth = `${editorWidth - 28 - minimapWidth - 15}px`;\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n return;\n }\n }\n if (FIND_WIDGET_INITIAL_WIDTH + 28 + minimapWidth >= editorWidth) {\n reducedFindWidget = true;\n }\n if (FIND_WIDGET_INITIAL_WIDTH + 28 + minimapWidth - MAX_MATCHES_COUNT_WIDTH >= editorWidth) {\n narrowFindWidget = true;\n }\n if (FIND_WIDGET_INITIAL_WIDTH + 28 + minimapWidth - MAX_MATCHES_COUNT_WIDTH >= editorWidth + 50) {\n collapsedFindWidget = true;\n }\n this._domNode.classList.toggle('collapsed-find-widget', collapsedFindWidget);\n this._domNode.classList.toggle('narrow-find-widget', narrowFindWidget);\n this._domNode.classList.toggle('reduced-find-widget', reducedFindWidget);\n if (!narrowFindWidget && !collapsedFindWidget) {\n // the minimal left offset of findwidget is 15px.\n this._domNode.style.maxWidth = `${editorWidth - 28 - minimapWidth - 15}px`;\n }\n if (this._resized) {\n this._findInput.inputBox.layout();\n let findInputWidth = this._findInput.inputBox.element.clientWidth;\n if (findInputWidth > 0) {\n this._replaceInput.width = findInputWidth;\n }\n }\n else if (this._isReplaceVisible) {\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n }\n }\n _getHeight() {\n let totalheight = 0;\n // find input margin top\n totalheight += 4;\n // find input height\n totalheight += this._findInput.inputBox.height + 2 /** input box border */;\n if (this._isReplaceVisible) {\n // replace input margin\n totalheight += 4;\n totalheight += this._replaceInput.inputBox.height + 2 /** input box border */;\n }\n // margin bottom\n totalheight += 4;\n return totalheight;\n }\n _tryUpdateHeight() {\n const totalHeight = this._getHeight();\n if (this._cachedHeight !== null && this._cachedHeight === totalHeight) {\n return false;\n }\n this._cachedHeight = totalHeight;\n this._domNode.style.height = `${totalHeight}px`;\n return true;\n }\n // ----- Public\n focusFindInput() {\n this._findInput.select();\n // Edge browser requires focus() in addition to select()\n this._findInput.focus();\n }\n focusReplaceInput() {\n this._replaceInput.select();\n // Edge browser requires focus() in addition to select()\n this._replaceInput.focus();\n }\n highlightFindOptions() {\n this._findInput.highlightFindOptions();\n }\n _updateSearchScope() {\n if (!this._codeEditor.hasModel()) {\n return;\n }\n if (this._toggleSelectionFind.checked) {\n let selections = this._codeEditor.getSelections();\n selections.map(selection => {\n if (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) {\n selection = selection.setEndPosition(selection.endLineNumber - 1, this._codeEditor.getModel().getLineMaxColumn(selection.endLineNumber - 1));\n }\n const currentMatch = this._state.currentMatch;\n if (selection.startLineNumber !== selection.endLineNumber) {\n if (!Range.equalsRange(selection, currentMatch)) {\n return selection;\n }\n }\n return null;\n }).filter(element => !!element);\n if (selections.length) {\n this._state.change({ searchScope: selections }, true);\n }\n }\n }\n _onFindInputMouseDown(e) {\n // on linux, middle key does pasting.\n if (e.middleButton) {\n e.stopPropagation();\n }\n }\n _onFindInputKeyDown(e) {\n if (e.equals(ctrlKeyMod | 3 /* Enter */)) {\n if (this._keybindingService.dispatchEvent(e, e.target)) {\n e.preventDefault();\n return;\n }\n else {\n this._findInput.inputBox.insertAtCursor('\\n');\n e.preventDefault();\n return;\n }\n }\n if (e.equals(2 /* Tab */)) {\n if (this._isReplaceVisible) {\n this._replaceInput.focus();\n }\n else {\n this._findInput.focusOnCaseSensitive();\n }\n e.preventDefault();\n return;\n }\n if (e.equals(2048 /* CtrlCmd */ | 18 /* DownArrow */)) {\n this._codeEditor.focus();\n e.preventDefault();\n return;\n }\n if (e.equals(16 /* UpArrow */)) {\n return stopPropagationForMultiLineUpwards(e, this._findInput.getValue(), this._findInput.domNode.querySelector('textarea'));\n }\n if (e.equals(18 /* DownArrow */)) {\n return stopPropagationForMultiLineDownwards(e, this._findInput.getValue(), this._findInput.domNode.querySelector('textarea'));\n }\n }\n _onReplaceInputKeyDown(e) {\n if (e.equals(ctrlKeyMod | 3 /* Enter */)) {\n if (this._keybindingService.dispatchEvent(e, e.target)) {\n e.preventDefault();\n return;\n }\n else {\n if (platform.isWindows && platform.isNative && !this._ctrlEnterReplaceAllWarningPrompted) {\n // this is the first time when users press Ctrl + Enter to replace all\n this._notificationService.info(nls.localize('ctrlEnter.keybindingChanged', 'Ctrl+Enter now inserts line break instead of replacing all. You can modify the keybinding for editor.action.replaceAll to override this behavior.'));\n this._ctrlEnterReplaceAllWarningPrompted = true;\n this._storageService.store(ctrlEnterReplaceAllWarningPromptedKey, true, 0 /* GLOBAL */, 0 /* USER */);\n }\n this._replaceInput.inputBox.insertAtCursor('\\n');\n e.preventDefault();\n return;\n }\n }\n if (e.equals(2 /* Tab */)) {\n this._findInput.focusOnCaseSensitive();\n e.preventDefault();\n return;\n }\n if (e.equals(1024 /* Shift */ | 2 /* Tab */)) {\n this._findInput.focus();\n e.preventDefault();\n return;\n }\n if (e.equals(2048 /* CtrlCmd */ | 18 /* DownArrow */)) {\n this._codeEditor.focus();\n e.preventDefault();\n return;\n }\n if (e.equals(16 /* UpArrow */)) {\n return stopPropagationForMultiLineUpwards(e, this._replaceInput.inputBox.value, this._replaceInput.inputBox.element.querySelector('textarea'));\n }\n if (e.equals(18 /* DownArrow */)) {\n return stopPropagationForMultiLineDownwards(e, this._replaceInput.inputBox.value, this._replaceInput.inputBox.element.querySelector('textarea'));\n }\n }\n // ----- sash\n getVerticalSashLeft(_sash) {\n return 0;\n }\n // ----- initialization\n _keybindingLabelFor(actionId) {\n let kb = this._keybindingService.lookupKeybinding(actionId);\n if (!kb) {\n return '';\n }\n return ` (${kb.getLabel()})`;\n }\n _buildDomNode() {\n const flexibleHeight = true;\n const flexibleWidth = true;\n // Find input\n this._findInput = this._register(new ContextScopedFindInput(null, this._contextViewProvider, {\n width: FIND_INPUT_AREA_WIDTH,\n label: NLS_FIND_INPUT_LABEL,\n placeholder: NLS_FIND_INPUT_PLACEHOLDER,\n appendCaseSensitiveLabel: this._keybindingLabelFor(FIND_IDS.ToggleCaseSensitiveCommand),\n appendWholeWordsLabel: this._keybindingLabelFor(FIND_IDS.ToggleWholeWordCommand),\n appendRegexLabel: this._keybindingLabelFor(FIND_IDS.ToggleRegexCommand),\n validation: (value) => {\n if (value.length === 0 || !this._findInput.getRegex()) {\n return null;\n }\n try {\n // use `g` and `u` which are also used by the TextModel search\n new RegExp(value, 'gu');\n return null;\n }\n catch (e) {\n return { content: e.message };\n }\n },\n flexibleHeight,\n flexibleWidth,\n flexibleMaxHeight: 118,\n showHistoryHint: () => showHistoryKeybindingHint(this._keybindingService)\n }, this._contextKeyService, true));\n this._findInput.setRegex(!!this._state.isRegex);\n this._findInput.setCaseSensitive(!!this._state.matchCase);\n this._findInput.setWholeWords(!!this._state.wholeWord);\n this._register(this._findInput.onKeyDown((e) => this._onFindInputKeyDown(e)));\n this._register(this._findInput.inputBox.onDidChange(() => {\n if (this._ignoreChangeEvent) {\n return;\n }\n this._state.change({ searchString: this._findInput.getValue() }, true);\n }));\n this._register(this._findInput.onDidOptionChange(() => {\n this._state.change({\n isRegex: this._findInput.getRegex(),\n wholeWord: this._findInput.getWholeWords(),\n matchCase: this._findInput.getCaseSensitive()\n }, true);\n }));\n this._register(this._findInput.onCaseSensitiveKeyDown((e) => {\n if (e.equals(1024 /* Shift */ | 2 /* Tab */)) {\n if (this._isReplaceVisible) {\n this._replaceInput.focus();\n e.preventDefault();\n }\n }\n }));\n this._register(this._findInput.onRegexKeyDown((e) => {\n if (e.equals(2 /* Tab */)) {\n if (this._isReplaceVisible) {\n this._replaceInput.focusOnPreserve();\n e.preventDefault();\n }\n }\n }));\n this._register(this._findInput.inputBox.onDidHeightChange((e) => {\n if (this._tryUpdateHeight()) {\n this._showViewZone();\n }\n }));\n if (platform.isLinux) {\n this._register(this._findInput.onMouseDown((e) => this._onFindInputMouseDown(e)));\n }\n this._matchesCount = document.createElement('div');\n this._matchesCount.className = 'matchesCount';\n this._updateMatchesCount();\n // Previous button\n this._prevBtn = this._register(new SimpleButton({\n label: NLS_PREVIOUS_MATCH_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.PreviousMatchFindAction),\n icon: findPreviousMatchIcon,\n onTrigger: () => {\n this._codeEditor.getAction(FIND_IDS.PreviousMatchFindAction).run().then(undefined, onUnexpectedError);\n }\n }));\n // Next button\n this._nextBtn = this._register(new SimpleButton({\n label: NLS_NEXT_MATCH_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.NextMatchFindAction),\n icon: findNextMatchIcon,\n onTrigger: () => {\n this._codeEditor.getAction(FIND_IDS.NextMatchFindAction).run().then(undefined, onUnexpectedError);\n }\n }));\n let findPart = document.createElement('div');\n findPart.className = 'find-part';\n findPart.appendChild(this._findInput.domNode);\n const actionsContainer = document.createElement('div');\n actionsContainer.className = 'find-actions';\n findPart.appendChild(actionsContainer);\n actionsContainer.appendChild(this._matchesCount);\n actionsContainer.appendChild(this._prevBtn.domNode);\n actionsContainer.appendChild(this._nextBtn.domNode);\n // Toggle selection button\n this._toggleSelectionFind = this._register(new Checkbox({\n icon: findSelectionIcon,\n title: NLS_TOGGLE_SELECTION_FIND_TITLE + this._keybindingLabelFor(FIND_IDS.ToggleSearchScopeCommand),\n isChecked: false\n }));\n this._register(this._toggleSelectionFind.onChange(() => {\n if (this._toggleSelectionFind.checked) {\n if (this._codeEditor.hasModel()) {\n let selections = this._codeEditor.getSelections();\n selections.map(selection => {\n if (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) {\n selection = selection.setEndPosition(selection.endLineNumber - 1, this._codeEditor.getModel().getLineMaxColumn(selection.endLineNumber - 1));\n }\n if (!selection.isEmpty()) {\n return selection;\n }\n return null;\n }).filter(element => !!element);\n if (selections.length) {\n this._state.change({ searchScope: selections }, true);\n }\n }\n }\n else {\n this._state.change({ searchScope: null }, true);\n }\n }));\n actionsContainer.appendChild(this._toggleSelectionFind.domNode);\n // Close button\n this._closeBtn = this._register(new SimpleButton({\n label: NLS_CLOSE_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.CloseFindWidgetCommand),\n icon: widgetClose,\n onTrigger: () => {\n this._state.change({ isRevealed: false, searchScope: null }, false);\n },\n onKeyDown: (e) => {\n if (e.equals(2 /* Tab */)) {\n if (this._isReplaceVisible) {\n if (this._replaceBtn.isEnabled()) {\n this._replaceBtn.focus();\n }\n else {\n this._codeEditor.focus();\n }\n e.preventDefault();\n }\n }\n }\n }));\n actionsContainer.appendChild(this._closeBtn.domNode);\n // Replace input\n this._replaceInput = this._register(new ContextScopedReplaceInput(null, undefined, {\n label: NLS_REPLACE_INPUT_LABEL,\n placeholder: NLS_REPLACE_INPUT_PLACEHOLDER,\n appendPreserveCaseLabel: this._keybindingLabelFor(FIND_IDS.TogglePreserveCaseCommand),\n history: [],\n flexibleHeight,\n flexibleWidth,\n flexibleMaxHeight: 118,\n showHistoryHint: () => showHistoryKeybindingHint(this._keybindingService)\n }, this._contextKeyService, true));\n this._replaceInput.setPreserveCase(!!this._state.preserveCase);\n this._register(this._replaceInput.onKeyDown((e) => this._onReplaceInputKeyDown(e)));\n this._register(this._replaceInput.inputBox.onDidChange(() => {\n this._state.change({ replaceString: this._replaceInput.inputBox.value }, false);\n }));\n this._register(this._replaceInput.inputBox.onDidHeightChange((e) => {\n if (this._isReplaceVisible && this._tryUpdateHeight()) {\n this._showViewZone();\n }\n }));\n this._register(this._replaceInput.onDidOptionChange(() => {\n this._state.change({\n preserveCase: this._replaceInput.getPreserveCase()\n }, true);\n }));\n this._register(this._replaceInput.onPreserveCaseKeyDown((e) => {\n if (e.equals(2 /* Tab */)) {\n if (this._prevBtn.isEnabled()) {\n this._prevBtn.focus();\n }\n else if (this._nextBtn.isEnabled()) {\n this._nextBtn.focus();\n }\n else if (this._toggleSelectionFind.enabled) {\n this._toggleSelectionFind.focus();\n }\n else if (this._closeBtn.isEnabled()) {\n this._closeBtn.focus();\n }\n e.preventDefault();\n }\n }));\n // Replace one button\n this._replaceBtn = this._register(new SimpleButton({\n label: NLS_REPLACE_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.ReplaceOneAction),\n icon: findReplaceIcon,\n onTrigger: () => {\n this._controller.replace();\n },\n onKeyDown: (e) => {\n if (e.equals(1024 /* Shift */ | 2 /* Tab */)) {\n this._closeBtn.focus();\n e.preventDefault();\n }\n }\n }));\n // Replace all button\n this._replaceAllBtn = this._register(new SimpleButton({\n label: NLS_REPLACE_ALL_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.ReplaceAllAction),\n icon: findReplaceAllIcon,\n onTrigger: () => {\n this._controller.replaceAll();\n }\n }));\n let replacePart = document.createElement('div');\n replacePart.className = 'replace-part';\n replacePart.appendChild(this._replaceInput.domNode);\n const replaceActionsContainer = document.createElement('div');\n replaceActionsContainer.className = 'replace-actions';\n replacePart.appendChild(replaceActionsContainer);\n replaceActionsContainer.appendChild(this._replaceBtn.domNode);\n replaceActionsContainer.appendChild(this._replaceAllBtn.domNode);\n // Toggle replace button\n this._toggleReplaceBtn = this._register(new SimpleButton({\n label: NLS_TOGGLE_REPLACE_MODE_BTN_LABEL,\n className: 'codicon toggle left',\n onTrigger: () => {\n this._state.change({ isReplaceRevealed: !this._isReplaceVisible }, false);\n if (this._isReplaceVisible) {\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n this._replaceInput.inputBox.layout();\n }\n this._showViewZone();\n }\n }));\n this._toggleReplaceBtn.setExpanded(this._isReplaceVisible);\n // Widget\n this._domNode = document.createElement('div');\n this._domNode.className = 'editor-widget find-widget';\n this._domNode.setAttribute('aria-hidden', 'true');\n // We need to set this explicitly, otherwise on IE11, the width inheritence of flex doesn't work.\n this._domNode.style.width = `${FIND_WIDGET_INITIAL_WIDTH}px`;\n this._domNode.appendChild(this._toggleReplaceBtn.domNode);\n this._domNode.appendChild(findPart);\n this._domNode.appendChild(replacePart);\n this._resizeSash = new Sash(this._domNode, this, { orientation: 0 /* VERTICAL */, size: 2 });\n this._resized = false;\n let originalWidth = FIND_WIDGET_INITIAL_WIDTH;\n this._register(this._resizeSash.onDidStart(() => {\n originalWidth = dom.getTotalWidth(this._domNode);\n }));\n this._register(this._resizeSash.onDidChange((evt) => {\n this._resized = true;\n let width = originalWidth + evt.startX - evt.currentX;\n if (width < FIND_WIDGET_INITIAL_WIDTH) {\n // narrow down the find widget should be handled by CSS.\n return;\n }\n const maxWidth = parseFloat(dom.getComputedStyle(this._domNode).maxWidth) || 0;\n if (width > maxWidth) {\n return;\n }\n this._domNode.style.width = `${width}px`;\n if (this._isReplaceVisible) {\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n }\n this._findInput.inputBox.layout();\n this._tryUpdateHeight();\n }));\n this._register(this._resizeSash.onDidReset(() => {\n // users double click on the sash\n const currentWidth = dom.getTotalWidth(this._domNode);\n if (currentWidth < FIND_WIDGET_INITIAL_WIDTH) {\n // The editor is narrow and the width of the find widget is controlled fully by CSS.\n return;\n }\n let width = FIND_WIDGET_INITIAL_WIDTH;\n if (!this._resized || currentWidth === FIND_WIDGET_INITIAL_WIDTH) {\n // 1. never resized before, double click should maximizes it\n // 2. users resized it already but its width is the same as default\n const layoutInfo = this._codeEditor.getLayoutInfo();\n width = layoutInfo.width - 28 - layoutInfo.minimap.minimapWidth - 15;\n this._resized = true;\n }\n else {\n /**\n * no op, the find widget should be shrinked to its default size.\n */\n }\n this._domNode.style.width = `${width}px`;\n if (this._isReplaceVisible) {\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n }\n this._findInput.inputBox.layout();\n }));\n }\n updateAccessibilitySupport() {\n const value = this._codeEditor.getOption(2 /* accessibilitySupport */);\n this._findInput.setFocusInputOnOptionClick(value !== 2 /* Enabled */);\n }\n}\nFindWidget.ID = 'editor.contrib.findWidget';\nexport class SimpleButton extends Widget {\n constructor(opts) {\n super();\n this._opts = opts;\n let className = 'button';\n if (this._opts.className) {\n className = className + ' ' + this._opts.className;\n }\n if (this._opts.icon) {\n className = className + ' ' + ThemeIcon.asClassName(this._opts.icon);\n }\n this._domNode = document.createElement('div');\n this._domNode.title = this._opts.label;\n this._domNode.tabIndex = 0;\n this._domNode.className = className;\n this._domNode.setAttribute('role', 'button');\n this._domNode.setAttribute('aria-label', this._opts.label);\n this.onclick(this._domNode, (e) => {\n this._opts.onTrigger();\n e.preventDefault();\n });\n this.onkeydown(this._domNode, (e) => {\n if (e.equals(10 /* Space */) || e.equals(3 /* Enter */)) {\n this._opts.onTrigger();\n e.preventDefault();\n return;\n }\n if (this._opts.onKeyDown) {\n this._opts.onKeyDown(e);\n }\n });\n }\n get domNode() {\n return this._domNode;\n }\n isEnabled() {\n return (this._domNode.tabIndex >= 0);\n }\n focus() {\n this._domNode.focus();\n }\n setEnabled(enabled) {\n this._domNode.classList.toggle('disabled', !enabled);\n this._domNode.setAttribute('aria-disabled', String(!enabled));\n this._domNode.tabIndex = enabled ? 0 : -1;\n }\n setExpanded(expanded) {\n this._domNode.setAttribute('aria-expanded', String(!!expanded));\n if (expanded) {\n this._domNode.classList.remove(...ThemeIcon.asClassNameArray(findCollapsedIcon));\n this._domNode.classList.add(...ThemeIcon.asClassNameArray(findExpandedIcon));\n }\n else {\n this._domNode.classList.remove(...ThemeIcon.asClassNameArray(findExpandedIcon));\n this._domNode.classList.add(...ThemeIcon.asClassNameArray(findCollapsedIcon));\n }\n }\n}\n// theming\nregisterThemingParticipant((theme, collector) => {\n const addBackgroundColorRule = (selector, color) => {\n if (color) {\n collector.addRule(`.monaco-editor ${selector} { background-color: ${color}; }`);\n }\n };\n addBackgroundColorRule('.findMatch', theme.getColor(editorFindMatchHighlight));\n addBackgroundColorRule('.currentFindMatch', theme.getColor(editorFindMatch));\n addBackgroundColorRule('.findScope', theme.getColor(editorFindRangeHighlight));\n const widgetBackground = theme.getColor(editorWidgetBackground);\n addBackgroundColorRule('.find-widget', widgetBackground);\n const widgetShadowColor = theme.getColor(widgetShadow);\n if (widgetShadowColor) {\n collector.addRule(`.monaco-editor .find-widget { box-shadow: 0 0 8px 2px ${widgetShadowColor}; }`);\n }\n const findMatchHighlightBorder = theme.getColor(editorFindMatchHighlightBorder);\n if (findMatchHighlightBorder) {\n collector.addRule(`.monaco-editor .findMatch { border: 1px ${theme.type === 'hc' ? 'dotted' : 'solid'} ${findMatchHighlightBorder}; box-sizing: border-box; }`);\n }\n const findMatchBorder = theme.getColor(editorFindMatchBorder);\n if (findMatchBorder) {\n collector.addRule(`.monaco-editor .currentFindMatch { border: 2px solid ${findMatchBorder}; padding: 1px; box-sizing: border-box; }`);\n }\n const findRangeHighlightBorder = theme.getColor(editorFindRangeHighlightBorder);\n if (findRangeHighlightBorder) {\n collector.addRule(`.monaco-editor .findScope { border: 1px ${theme.type === 'hc' ? 'dashed' : 'solid'} ${findRangeHighlightBorder}; }`);\n }\n const hcBorder = theme.getColor(contrastBorder);\n if (hcBorder) {\n collector.addRule(`.monaco-editor .find-widget { border: 1px solid ${hcBorder}; }`);\n }\n const foreground = theme.getColor(editorWidgetForeground);\n if (foreground) {\n collector.addRule(`.monaco-editor .find-widget { color: ${foreground}; }`);\n }\n const error = theme.getColor(errorForeground);\n if (error) {\n collector.addRule(`.monaco-editor .find-widget.no-results .matchesCount { color: ${error}; }`);\n }\n const resizeBorderBackground = theme.getColor(editorWidgetResizeBorder);\n if (resizeBorderBackground) {\n collector.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${resizeBorderBackground}; }`);\n }\n else {\n const border = theme.getColor(editorWidgetBorder);\n if (border) {\n collector.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${border}; }`);\n }\n }\n // Action bars\n const toolbarHoverBackgroundColor = theme.getColor(toolbarHoverBackground);\n if (toolbarHoverBackgroundColor) {\n collector.addRule(`\n\t\t.monaco-editor .find-widget .button:not(.disabled):hover,\n\t\t.monaco-editor .find-widget .codicon-find-selection:hover {\n\t\t\tbackground-color: ${toolbarHoverBackgroundColor} !important;\n\t\t}\n\t`);\n }\n // This rule is used to override the outline color for synthetic-focus find input.\n const focusOutline = theme.getColor(focusBorder);\n if (focusOutline) {\n collector.addRule(`.monaco-editor .find-widget .monaco-inputbox.synthetic-focus { outline-color: ${focusOutline}; }`);\n }\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Delayer } from '../../../base/common/async.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { EditorAction, EditorCommand, MultiEditorAction, registerEditorAction, registerEditorCommand, registerEditorContribution, registerMultiEditorAction } from '../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { CONTEXT_FIND_INPUT_FOCUSED, CONTEXT_FIND_WIDGET_VISIBLE, CONTEXT_REPLACE_INPUT_FOCUSED, FindModelBoundToEditorModel, FIND_IDS, ToggleCaseSensitiveKeybinding, TogglePreserveCaseKeybinding, ToggleRegexKeybinding, ToggleSearchScopeKeybinding, ToggleWholeWordKeybinding } from './findModel.js';\nimport { FindOptionsWidget } from './findOptionsWidget.js';\nimport { FindReplaceState } from './findState.js';\nimport { FindWidget } from './findWidget.js';\nimport * as nls from '../../../nls.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\nimport { ContextKeyExpr, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IContextViewService } from '../../../platform/contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IStorageService } from '../../../platform/storage/common/storage.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nconst SEARCH_STRING_MAX_LENGTH = 524288;\nexport function getSelectionSearchString(editor, seedSearchStringFromSelection = 'single', seedSearchStringFromNonEmptySelection = false) {\n if (!editor.hasModel()) {\n return null;\n }\n const selection = editor.getSelection();\n // if selection spans multiple lines, default search string to empty\n if ((seedSearchStringFromSelection === 'single' && selection.startLineNumber === selection.endLineNumber)\n || seedSearchStringFromSelection === 'multiple') {\n if (selection.isEmpty()) {\n const wordAtPosition = editor.getConfiguredWordAtPosition(selection.getStartPosition());\n if (wordAtPosition && (false === seedSearchStringFromNonEmptySelection)) {\n return wordAtPosition.word;\n }\n }\n else {\n if (editor.getModel().getValueLengthInRange(selection) < SEARCH_STRING_MAX_LENGTH) {\n return editor.getModel().getValueInRange(selection);\n }\n }\n }\n return null;\n}\nlet CommonFindController = class CommonFindController extends Disposable {\n constructor(editor, contextKeyService, storageService, clipboardService) {\n super();\n this._editor = editor;\n this._findWidgetVisible = CONTEXT_FIND_WIDGET_VISIBLE.bindTo(contextKeyService);\n this._contextKeyService = contextKeyService;\n this._storageService = storageService;\n this._clipboardService = clipboardService;\n this._updateHistoryDelayer = new Delayer(500);\n this._state = this._register(new FindReplaceState());\n this.loadQueryState();\n this._register(this._state.onFindReplaceStateChange((e) => this._onStateChanged(e)));\n this._model = null;\n this._register(this._editor.onDidChangeModel(() => {\n let shouldRestartFind = (this._editor.getModel() && this._state.isRevealed);\n this.disposeModel();\n this._state.change({\n searchScope: null,\n matchCase: this._storageService.getBoolean('editor.matchCase', 1 /* WORKSPACE */, false),\n wholeWord: this._storageService.getBoolean('editor.wholeWord', 1 /* WORKSPACE */, false),\n isRegex: this._storageService.getBoolean('editor.isRegex', 1 /* WORKSPACE */, false),\n preserveCase: this._storageService.getBoolean('editor.preserveCase', 1 /* WORKSPACE */, false)\n }, false);\n if (shouldRestartFind) {\n this._start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: 'none',\n seedSearchStringFromNonEmptySelection: false,\n seedSearchStringFromGlobalClipboard: false,\n shouldFocus: 0 /* NoFocusChange */,\n shouldAnimate: false,\n updateSearchScope: false,\n loop: this._editor.getOption(35 /* find */).loop\n });\n }\n }));\n }\n get editor() {\n return this._editor;\n }\n static get(editor) {\n return editor.getContribution(CommonFindController.ID);\n }\n dispose() {\n this.disposeModel();\n super.dispose();\n }\n disposeModel() {\n if (this._model) {\n this._model.dispose();\n this._model = null;\n }\n }\n _onStateChanged(e) {\n this.saveQueryState(e);\n if (e.isRevealed) {\n if (this._state.isRevealed) {\n this._findWidgetVisible.set(true);\n }\n else {\n this._findWidgetVisible.reset();\n this.disposeModel();\n }\n }\n if (e.searchString) {\n this.setGlobalBufferTerm(this._state.searchString);\n }\n }\n saveQueryState(e) {\n if (e.isRegex) {\n this._storageService.store('editor.isRegex', this._state.actualIsRegex, 1 /* WORKSPACE */, 0 /* USER */);\n }\n if (e.wholeWord) {\n this._storageService.store('editor.wholeWord', this._state.actualWholeWord, 1 /* WORKSPACE */, 0 /* USER */);\n }\n if (e.matchCase) {\n this._storageService.store('editor.matchCase', this._state.actualMatchCase, 1 /* WORKSPACE */, 0 /* USER */);\n }\n if (e.preserveCase) {\n this._storageService.store('editor.preserveCase', this._state.actualPreserveCase, 1 /* WORKSPACE */, 0 /* USER */);\n }\n }\n loadQueryState() {\n this._state.change({\n matchCase: this._storageService.getBoolean('editor.matchCase', 1 /* WORKSPACE */, this._state.matchCase),\n wholeWord: this._storageService.getBoolean('editor.wholeWord', 1 /* WORKSPACE */, this._state.wholeWord),\n isRegex: this._storageService.getBoolean('editor.isRegex', 1 /* WORKSPACE */, this._state.isRegex),\n preserveCase: this._storageService.getBoolean('editor.preserveCase', 1 /* WORKSPACE */, this._state.preserveCase)\n }, false);\n }\n isFindInputFocused() {\n return !!CONTEXT_FIND_INPUT_FOCUSED.getValue(this._contextKeyService);\n }\n getState() {\n return this._state;\n }\n closeFindWidget() {\n this._state.change({\n isRevealed: false,\n searchScope: null\n }, false);\n this._editor.focus();\n }\n toggleCaseSensitive() {\n this._state.change({ matchCase: !this._state.matchCase }, false);\n if (!this._state.isRevealed) {\n this.highlightFindOptions();\n }\n }\n toggleWholeWords() {\n this._state.change({ wholeWord: !this._state.wholeWord }, false);\n if (!this._state.isRevealed) {\n this.highlightFindOptions();\n }\n }\n toggleRegex() {\n this._state.change({ isRegex: !this._state.isRegex }, false);\n if (!this._state.isRevealed) {\n this.highlightFindOptions();\n }\n }\n togglePreserveCase() {\n this._state.change({ preserveCase: !this._state.preserveCase }, false);\n if (!this._state.isRevealed) {\n this.highlightFindOptions();\n }\n }\n toggleSearchScope() {\n if (this._state.searchScope) {\n this._state.change({ searchScope: null }, true);\n }\n else {\n if (this._editor.hasModel()) {\n let selections = this._editor.getSelections();\n selections.map(selection => {\n if (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) {\n selection = selection.setEndPosition(selection.endLineNumber - 1, this._editor.getModel().getLineMaxColumn(selection.endLineNumber - 1));\n }\n if (!selection.isEmpty()) {\n return selection;\n }\n return null;\n }).filter(element => !!element);\n if (selections.length) {\n this._state.change({ searchScope: selections }, true);\n }\n }\n }\n }\n setSearchString(searchString) {\n if (this._state.isRegex) {\n searchString = strings.escapeRegExpCharacters(searchString);\n }\n this._state.change({ searchString: searchString }, false);\n }\n highlightFindOptions(ignoreWhenVisible = false) {\n // overwritten in subclass\n }\n _start(opts) {\n return __awaiter(this, void 0, void 0, function* () {\n this.disposeModel();\n if (!this._editor.hasModel()) {\n // cannot do anything with an editor that doesn't have a model...\n return;\n }\n let stateChanges = {\n isRevealed: true\n };\n if (opts.seedSearchStringFromSelection === 'single') {\n let selectionSearchString = getSelectionSearchString(this._editor, opts.seedSearchStringFromSelection, opts.seedSearchStringFromNonEmptySelection);\n if (selectionSearchString) {\n if (this._state.isRegex) {\n stateChanges.searchString = strings.escapeRegExpCharacters(selectionSearchString);\n }\n else {\n stateChanges.searchString = selectionSearchString;\n }\n }\n }\n else if (opts.seedSearchStringFromSelection === 'multiple' && !opts.updateSearchScope) {\n let selectionSearchString = getSelectionSearchString(this._editor, opts.seedSearchStringFromSelection);\n if (selectionSearchString) {\n stateChanges.searchString = selectionSearchString;\n }\n }\n if (!stateChanges.searchString && opts.seedSearchStringFromGlobalClipboard) {\n let selectionSearchString = yield this.getGlobalBufferTerm();\n if (!this._editor.hasModel()) {\n // the editor has lost its model in the meantime\n return;\n }\n if (selectionSearchString) {\n stateChanges.searchString = selectionSearchString;\n }\n }\n // Overwrite isReplaceRevealed\n if (opts.forceRevealReplace) {\n stateChanges.isReplaceRevealed = true;\n }\n else if (!this._findWidgetVisible.get()) {\n stateChanges.isReplaceRevealed = false;\n }\n if (opts.updateSearchScope) {\n let currentSelections = this._editor.getSelections();\n if (currentSelections.some(selection => !selection.isEmpty())) {\n stateChanges.searchScope = currentSelections;\n }\n }\n stateChanges.loop = opts.loop;\n this._state.change(stateChanges, false);\n if (!this._model) {\n this._model = new FindModelBoundToEditorModel(this._editor, this._state);\n }\n });\n }\n start(opts) {\n return this._start(opts);\n }\n moveToNextMatch() {\n if (this._model) {\n this._model.moveToNextMatch();\n return true;\n }\n return false;\n }\n moveToPrevMatch() {\n if (this._model) {\n this._model.moveToPrevMatch();\n return true;\n }\n return false;\n }\n replace() {\n if (this._model) {\n this._model.replace();\n return true;\n }\n return false;\n }\n replaceAll() {\n if (this._model) {\n this._model.replaceAll();\n return true;\n }\n return false;\n }\n selectAllMatches() {\n if (this._model) {\n this._model.selectAllMatches();\n this._editor.focus();\n return true;\n }\n return false;\n }\n getGlobalBufferTerm() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._editor.getOption(35 /* find */).globalFindClipboard\n && this._editor.hasModel()\n && !this._editor.getModel().isTooLargeForSyncing()) {\n return this._clipboardService.readFindText();\n }\n return '';\n });\n }\n setGlobalBufferTerm(text) {\n if (this._editor.getOption(35 /* find */).globalFindClipboard\n && this._editor.hasModel()\n && !this._editor.getModel().isTooLargeForSyncing()) {\n // intentionally not awaited\n this._clipboardService.writeFindText(text);\n }\n }\n};\nCommonFindController.ID = 'editor.contrib.findController';\nCommonFindController = __decorate([\n __param(1, IContextKeyService),\n __param(2, IStorageService),\n __param(3, IClipboardService)\n], CommonFindController);\nexport { CommonFindController };\nlet FindController = class FindController extends CommonFindController {\n constructor(editor, _contextViewService, _contextKeyService, _keybindingService, _themeService, _notificationService, _storageService, clipboardService) {\n super(editor, _contextKeyService, _storageService, clipboardService);\n this._contextViewService = _contextViewService;\n this._keybindingService = _keybindingService;\n this._themeService = _themeService;\n this._notificationService = _notificationService;\n this._widget = null;\n this._findOptionsWidget = null;\n }\n _start(opts) {\n const _super = Object.create(null, {\n _start: { get: () => super._start }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._widget) {\n this._createFindWidget();\n }\n const selection = this._editor.getSelection();\n let updateSearchScope = false;\n switch (this._editor.getOption(35 /* find */).autoFindInSelection) {\n case 'always':\n updateSearchScope = true;\n break;\n case 'never':\n updateSearchScope = false;\n break;\n case 'multiline':\n const isSelectionMultipleLine = !!selection && selection.startLineNumber !== selection.endLineNumber;\n updateSearchScope = isSelectionMultipleLine;\n break;\n default:\n break;\n }\n opts.updateSearchScope = updateSearchScope;\n yield _super._start.call(this, opts);\n if (this._widget) {\n if (opts.shouldFocus === 2 /* FocusReplaceInput */) {\n this._widget.focusReplaceInput();\n }\n else if (opts.shouldFocus === 1 /* FocusFindInput */) {\n this._widget.focusFindInput();\n }\n }\n });\n }\n highlightFindOptions(ignoreWhenVisible = false) {\n if (!this._widget) {\n this._createFindWidget();\n }\n if (this._state.isRevealed && !ignoreWhenVisible) {\n this._widget.highlightFindOptions();\n }\n else {\n this._findOptionsWidget.highlightFindOptions();\n }\n }\n _createFindWidget() {\n this._widget = this._register(new FindWidget(this._editor, this, this._state, this._contextViewService, this._keybindingService, this._contextKeyService, this._themeService, this._storageService, this._notificationService));\n this._findOptionsWidget = this._register(new FindOptionsWidget(this._editor, this._state, this._keybindingService, this._themeService));\n }\n};\nFindController = __decorate([\n __param(1, IContextViewService),\n __param(2, IContextKeyService),\n __param(3, IKeybindingService),\n __param(4, IThemeService),\n __param(5, INotificationService),\n __param(6, IStorageService),\n __param(7, IClipboardService)\n], FindController);\nexport { FindController };\nexport const StartFindAction = registerMultiEditorAction(new MultiEditorAction({\n id: FIND_IDS.StartFindAction,\n label: nls.localize('startFindAction', \"Find\"),\n alias: 'Find',\n precondition: ContextKeyExpr.or(EditorContextKeys.focus, ContextKeyExpr.has('editorIsOpen')),\n kbOpts: {\n kbExpr: null,\n primary: 2048 /* CtrlCmd */ | 36 /* KeyF */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarEditMenu,\n group: '3_find',\n title: nls.localize({ key: 'miFind', comment: ['&& denotes a mnemonic'] }, \"&&Find\"),\n order: 1\n }\n}));\nStartFindAction.addImplementation(0, (accessor, editor, args) => {\n const controller = CommonFindController.get(editor);\n if (!controller) {\n return false;\n }\n return controller.start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: editor.getOption(35 /* find */).seedSearchStringFromSelection !== 'never' ? 'single' : 'none',\n seedSearchStringFromNonEmptySelection: editor.getOption(35 /* find */).seedSearchStringFromSelection === 'selection',\n seedSearchStringFromGlobalClipboard: editor.getOption(35 /* find */).globalFindClipboard,\n shouldFocus: 1 /* FocusFindInput */,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(35 /* find */).loop\n });\n});\nexport class StartFindWithSelectionAction extends EditorAction {\n constructor() {\n super({\n id: FIND_IDS.StartFindWithSelection,\n label: nls.localize('startFindWithSelectionAction', \"Find With Selection\"),\n alias: 'Find With Selection',\n precondition: undefined,\n kbOpts: {\n kbExpr: null,\n primary: 0,\n mac: {\n primary: 2048 /* CtrlCmd */ | 35 /* KeyE */,\n },\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n let controller = CommonFindController.get(editor);\n if (controller) {\n yield controller.start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: 'multiple',\n seedSearchStringFromNonEmptySelection: false,\n seedSearchStringFromGlobalClipboard: false,\n shouldFocus: 0 /* NoFocusChange */,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(35 /* find */).loop\n });\n controller.setGlobalBufferTerm(controller.getState().searchString);\n }\n });\n }\n}\nexport class MatchFindAction extends EditorAction {\n run(accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n let controller = CommonFindController.get(editor);\n if (controller && !this._run(controller)) {\n yield controller.start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: (controller.getState().searchString.length === 0) && editor.getOption(35 /* find */).seedSearchStringFromSelection !== 'never' ? 'single' : 'none',\n seedSearchStringFromNonEmptySelection: editor.getOption(35 /* find */).seedSearchStringFromSelection === 'selection',\n seedSearchStringFromGlobalClipboard: true,\n shouldFocus: 0 /* NoFocusChange */,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(35 /* find */).loop\n });\n this._run(controller);\n }\n });\n }\n}\nexport class NextMatchFindAction extends MatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.NextMatchFindAction,\n label: nls.localize('findNextMatchAction', \"Find Next\"),\n alias: 'Find Next',\n precondition: undefined,\n kbOpts: [{\n kbExpr: EditorContextKeys.focus,\n primary: 61 /* F3 */,\n mac: { primary: 2048 /* CtrlCmd */ | 37 /* KeyG */, secondary: [61 /* F3 */] },\n weight: 100 /* EditorContrib */\n }, {\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, CONTEXT_FIND_INPUT_FOCUSED),\n primary: 3 /* Enter */,\n weight: 100 /* EditorContrib */\n }]\n });\n }\n _run(controller) {\n const result = controller.moveToNextMatch();\n if (result) {\n controller.editor.pushUndoStop();\n return true;\n }\n return false;\n }\n}\nexport class PreviousMatchFindAction extends MatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.PreviousMatchFindAction,\n label: nls.localize('findPreviousMatchAction', \"Find Previous\"),\n alias: 'Find Previous',\n precondition: undefined,\n kbOpts: [{\n kbExpr: EditorContextKeys.focus,\n primary: 1024 /* Shift */ | 61 /* F3 */,\n mac: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 37 /* KeyG */, secondary: [1024 /* Shift */ | 61 /* F3 */] },\n weight: 100 /* EditorContrib */\n }, {\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, CONTEXT_FIND_INPUT_FOCUSED),\n primary: 1024 /* Shift */ | 3 /* Enter */,\n weight: 100 /* EditorContrib */\n }\n ]\n });\n }\n _run(controller) {\n return controller.moveToPrevMatch();\n }\n}\nexport class SelectionMatchFindAction extends EditorAction {\n run(accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n let controller = CommonFindController.get(editor);\n if (!controller) {\n return;\n }\n const seedSearchStringFromNonEmptySelection = editor.getOption(35 /* find */).seedSearchStringFromSelection === 'selection';\n let selectionSearchString = null;\n if (editor.getOption(35 /* find */).seedSearchStringFromSelection !== 'never') {\n selectionSearchString = getSelectionSearchString(editor, 'single', seedSearchStringFromNonEmptySelection);\n }\n if (selectionSearchString) {\n controller.setSearchString(selectionSearchString);\n }\n if (!this._run(controller)) {\n yield controller.start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: editor.getOption(35 /* find */).seedSearchStringFromSelection !== 'never' ? 'single' : 'none',\n seedSearchStringFromNonEmptySelection: seedSearchStringFromNonEmptySelection,\n seedSearchStringFromGlobalClipboard: false,\n shouldFocus: 0 /* NoFocusChange */,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(35 /* find */).loop\n });\n this._run(controller);\n }\n });\n }\n}\nexport class NextSelectionMatchFindAction extends SelectionMatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.NextSelectionMatchFindAction,\n label: nls.localize('nextSelectionMatchFindAction', \"Find Next Selection\"),\n alias: 'Find Next Selection',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 61 /* F3 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n _run(controller) {\n return controller.moveToNextMatch();\n }\n}\nexport class PreviousSelectionMatchFindAction extends SelectionMatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.PreviousSelectionMatchFindAction,\n label: nls.localize('previousSelectionMatchFindAction', \"Find Previous Selection\"),\n alias: 'Find Previous Selection',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 61 /* F3 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n _run(controller) {\n return controller.moveToPrevMatch();\n }\n}\nexport const StartFindReplaceAction = registerMultiEditorAction(new MultiEditorAction({\n id: FIND_IDS.StartFindReplaceAction,\n label: nls.localize('startReplace', \"Replace\"),\n alias: 'Replace',\n precondition: ContextKeyExpr.or(EditorContextKeys.focus, ContextKeyExpr.has('editorIsOpen')),\n kbOpts: {\n kbExpr: null,\n primary: 2048 /* CtrlCmd */ | 38 /* KeyH */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 36 /* KeyF */ },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarEditMenu,\n group: '3_find',\n title: nls.localize({ key: 'miReplace', comment: ['&& denotes a mnemonic'] }, \"&&Replace\"),\n order: 2\n }\n}));\nStartFindReplaceAction.addImplementation(0, (accessor, editor, args) => {\n if (!editor.hasModel() || editor.getOption(80 /* readOnly */)) {\n return false;\n }\n const controller = CommonFindController.get(editor);\n if (!controller) {\n return false;\n }\n const currentSelection = editor.getSelection();\n const findInputFocused = controller.isFindInputFocused();\n // we only seed search string from selection when the current selection is single line and not empty,\n // + the find input is not focused\n const seedSearchStringFromSelection = !currentSelection.isEmpty()\n && currentSelection.startLineNumber === currentSelection.endLineNumber\n && (editor.getOption(35 /* find */).seedSearchStringFromSelection !== 'never')\n && !findInputFocused;\n /*\n * if the existing search string in find widget is empty and we don't seed search string from selection, it means the Find Input is still empty, so we should focus the Find Input instead of Replace Input.\n\n * findInputFocused true -> seedSearchStringFromSelection false, FocusReplaceInput\n * findInputFocused false, seedSearchStringFromSelection true FocusReplaceInput\n * findInputFocused false seedSearchStringFromSelection false FocusFindInput\n */\n const shouldFocus = (findInputFocused || seedSearchStringFromSelection) ?\n 2 /* FocusReplaceInput */ : 1 /* FocusFindInput */;\n return controller.start({\n forceRevealReplace: true,\n seedSearchStringFromSelection: seedSearchStringFromSelection ? 'single' : 'none',\n seedSearchStringFromNonEmptySelection: editor.getOption(35 /* find */).seedSearchStringFromSelection === 'selection',\n seedSearchStringFromGlobalClipboard: editor.getOption(35 /* find */).seedSearchStringFromSelection !== 'never',\n shouldFocus: shouldFocus,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(35 /* find */).loop\n });\n});\nregisterEditorContribution(CommonFindController.ID, FindController);\nregisterEditorAction(StartFindWithSelectionAction);\nregisterEditorAction(NextMatchFindAction);\nregisterEditorAction(PreviousMatchFindAction);\nregisterEditorAction(NextSelectionMatchFindAction);\nregisterEditorAction(PreviousSelectionMatchFindAction);\nconst FindCommand = EditorCommand.bindToContribution(CommonFindController.get);\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.CloseFindWidgetCommand,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.closeFindWidget(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, ContextKeyExpr.not('isComposing')),\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ToggleCaseSensitiveCommand,\n precondition: undefined,\n handler: x => x.toggleCaseSensitive(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: ToggleCaseSensitiveKeybinding.primary,\n mac: ToggleCaseSensitiveKeybinding.mac,\n win: ToggleCaseSensitiveKeybinding.win,\n linux: ToggleCaseSensitiveKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ToggleWholeWordCommand,\n precondition: undefined,\n handler: x => x.toggleWholeWords(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: ToggleWholeWordKeybinding.primary,\n mac: ToggleWholeWordKeybinding.mac,\n win: ToggleWholeWordKeybinding.win,\n linux: ToggleWholeWordKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ToggleRegexCommand,\n precondition: undefined,\n handler: x => x.toggleRegex(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: ToggleRegexKeybinding.primary,\n mac: ToggleRegexKeybinding.mac,\n win: ToggleRegexKeybinding.win,\n linux: ToggleRegexKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ToggleSearchScopeCommand,\n precondition: undefined,\n handler: x => x.toggleSearchScope(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: ToggleSearchScopeKeybinding.primary,\n mac: ToggleSearchScopeKeybinding.mac,\n win: ToggleSearchScopeKeybinding.win,\n linux: ToggleSearchScopeKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.TogglePreserveCaseCommand,\n precondition: undefined,\n handler: x => x.togglePreserveCase(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: TogglePreserveCaseKeybinding.primary,\n mac: TogglePreserveCaseKeybinding.mac,\n win: TogglePreserveCaseKeybinding.win,\n linux: TogglePreserveCaseKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ReplaceOneAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.replace(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 22 /* Digit1 */\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ReplaceOneAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.replace(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, CONTEXT_REPLACE_INPUT_FOCUSED),\n primary: 3 /* Enter */\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ReplaceAllAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.replaceAll(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 3 /* Enter */\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ReplaceAllAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.replaceAll(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, CONTEXT_REPLACE_INPUT_FOCUSED),\n primary: undefined,\n mac: {\n primary: 2048 /* CtrlCmd */ | 3 /* Enter */,\n }\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.SelectAllMatchesAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.selectAllMatches(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: 512 /* Alt */ | 3 /* Enter */\n }\n}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport * as DomUtils from './dom.js';\nimport * as arrays from '../common/arrays.js';\nimport { memoize } from '../common/decorators.js';\nimport { Disposable } from '../common/lifecycle.js';\nexport var EventType;\n(function (EventType) {\n EventType.Tap = '-monaco-gesturetap';\n EventType.Change = '-monaco-gesturechange';\n EventType.Start = '-monaco-gesturestart';\n EventType.End = '-monaco-gesturesend';\n EventType.Contextmenu = '-monaco-gesturecontextmenu';\n})(EventType || (EventType = {}));\nexport class Gesture extends Disposable {\n constructor() {\n super();\n this.dispatched = false;\n this.activeTouches = {};\n this.handle = null;\n this.targets = [];\n this.ignoreTargets = [];\n this._lastSetTapCountTime = 0;\n this._register(DomUtils.addDisposableListener(document, 'touchstart', (e) => this.onTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(document, 'touchend', (e) => this.onTouchEnd(e)));\n this._register(DomUtils.addDisposableListener(document, 'touchmove', (e) => this.onTouchMove(e), { passive: false }));\n }\n static addTarget(element) {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture.INSTANCE) {\n Gesture.INSTANCE = new Gesture();\n }\n Gesture.INSTANCE.targets.push(element);\n return {\n dispose: () => {\n Gesture.INSTANCE.targets = Gesture.INSTANCE.targets.filter(t => t !== element);\n }\n };\n }\n static ignoreTarget(element) {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture.INSTANCE) {\n Gesture.INSTANCE = new Gesture();\n }\n Gesture.INSTANCE.ignoreTargets.push(element);\n return {\n dispose: () => {\n Gesture.INSTANCE.ignoreTargets = Gesture.INSTANCE.ignoreTargets.filter(t => t !== element);\n }\n };\n }\n static isTouchDevice() {\n // `'ontouchstart' in window` always evaluates to true with typescript's modern typings. This causes `window` to be\n // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n dispose() {\n if (this.handle) {\n this.handle.dispose();\n this.handle = null;\n }\n super.dispose();\n }\n onTouchStart(e) {\n let timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n if (this.handle) {\n this.handle.dispose();\n this.handle = null;\n }\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n let touch = e.targetTouches.item(i);\n this.activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n let evt = this.newGestureEvent(EventType.Start, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this.dispatchEvent(evt);\n }\n if (this.dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this.dispatched = false;\n }\n }\n onTouchEnd(e) {\n let timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n let activeTouchCount = Object.keys(this.activeTouches).length;\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n let touch = e.changedTouches.item(i);\n if (!this.activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n let data = this.activeTouches[touch.identifier], holdTime = Date.now() - data.initialTimeStamp;\n if (holdTime < Gesture.HOLD_DELAY\n && Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\n && Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\n let evt = this.newGestureEvent(EventType.Tap, data.initialTarget);\n evt.pageX = arrays.tail(data.rollingPageX);\n evt.pageY = arrays.tail(data.rollingPageY);\n this.dispatchEvent(evt);\n }\n else if (holdTime >= Gesture.HOLD_DELAY\n && Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\n && Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\n let evt = this.newGestureEvent(EventType.Contextmenu, data.initialTarget);\n evt.pageX = arrays.tail(data.rollingPageX);\n evt.pageY = arrays.tail(data.rollingPageY);\n this.dispatchEvent(evt);\n }\n else if (activeTouchCount === 1) {\n let finalX = arrays.tail(data.rollingPageX);\n let finalY = arrays.tail(data.rollingPageY);\n let deltaT = arrays.tail(data.rollingTimestamps) - data.rollingTimestamps[0];\n let deltaX = finalX - data.rollingPageX[0];\n let deltaY = finalY - data.rollingPageY[0];\n // We need to get all the dispatch targets on the start of the inertia event\n const dispatchTo = this.targets.filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this.inertia(dispatchTo, timestamp, // time now\n Math.abs(deltaX) / deltaT, // speed\n deltaX > 0 ? 1 : -1, // x direction\n finalX, // x now\n Math.abs(deltaY) / deltaT, // y speed\n deltaY > 0 ? 1 : -1, // y direction\n finalY // y now\n );\n }\n this.dispatchEvent(this.newGestureEvent(EventType.End, data.initialTarget));\n // forget about this touch\n delete this.activeTouches[touch.identifier];\n }\n if (this.dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this.dispatched = false;\n }\n }\n newGestureEvent(type, initialTarget) {\n let event = document.createEvent('CustomEvent');\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n dispatchEvent(event) {\n if (event.type === EventType.Tap) {\n const currentTime = (new Date()).getTime();\n let setTapCount = 0;\n if (currentTime - this._lastSetTapCountTime > Gesture.CLEAR_TAP_COUNT_TIME) {\n setTapCount = 1;\n }\n else {\n setTapCount = 2;\n }\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n }\n else if (event.type === EventType.Change || event.type === EventType.Contextmenu) {\n // tap is canceled by scrolling or context menu\n this._lastSetTapCountTime = 0;\n }\n for (let i = 0; i < this.ignoreTargets.length; i++) {\n if (event.initialTarget instanceof Node && this.ignoreTargets[i].contains(event.initialTarget)) {\n return;\n }\n }\n this.targets.forEach(target => {\n if (event.initialTarget instanceof Node && target.contains(event.initialTarget)) {\n target.dispatchEvent(event);\n this.dispatched = true;\n }\n });\n }\n inertia(dispatchTo, t1, vX, dirX, x, vY, dirY, y) {\n this.handle = DomUtils.scheduleAtNextAnimationFrame(() => {\n let now = Date.now();\n // velocity: old speed + accel_over_time\n let deltaT = now - t1, delta_pos_x = 0, delta_pos_y = 0, stopped = true;\n vX += Gesture.SCROLL_FRICTION * deltaT;\n vY += Gesture.SCROLL_FRICTION * deltaT;\n if (vX > 0) {\n stopped = false;\n delta_pos_x = dirX * vX * deltaT;\n }\n if (vY > 0) {\n stopped = false;\n delta_pos_y = dirY * vY * deltaT;\n }\n // dispatch translation event\n let evt = this.newGestureEvent(EventType.Change);\n evt.translationX = delta_pos_x;\n evt.translationY = delta_pos_y;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n if (!stopped) {\n this.inertia(dispatchTo, now, vX, dirX, x + delta_pos_x, vY, dirY, y + delta_pos_y);\n }\n });\n }\n onTouchMove(e) {\n let timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n let touch = e.changedTouches.item(i);\n if (!this.activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n let data = this.activeTouches[touch.identifier];\n let evt = this.newGestureEvent(EventType.Change, data.initialTarget);\n evt.translationX = touch.pageX - arrays.tail(data.rollingPageX);\n evt.translationY = touch.pageY - arrays.tail(data.rollingPageY);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this.dispatchEvent(evt);\n // only keep a few data points, to average the final speed\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n if (this.dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this.dispatched = false;\n }\n }\n}\nGesture.SCROLL_FRICTION = -0.005;\nGesture.HOLD_DELAY = 700;\nGesture.CLEAR_TAP_COUNT_TIME = 400; // ms\n__decorate([\n memoize\n], Gesture, \"isTouchDevice\", null);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { once } from './functional.js';\nimport { Iterable } from './iterator.js';\n/**\n * Enables logging of potentially leaked disposables.\n *\n * A disposable is considered leaked if it is not disposed or not registered as the child of\n * another disposable. This tracking is very simple an only works for classes that either\n * extend Disposable or use a DisposableStore. This means there are a lot of false positives.\n */\nconst TRACK_DISPOSABLES = false;\nlet disposableTracker = null;\nexport function setDisposableTracker(tracker) {\n disposableTracker = tracker;\n}\nif (TRACK_DISPOSABLES) {\n const __is_disposable_tracked__ = '__is_disposable_tracked__';\n setDisposableTracker(new class {\n trackDisposable(x) {\n const stack = new Error('Potentially leaked disposable').stack;\n setTimeout(() => {\n if (!x[__is_disposable_tracked__]) {\n console.log(stack);\n }\n }, 3000);\n }\n setParent(child, parent) {\n if (child && child !== Disposable.None) {\n try {\n child[__is_disposable_tracked__] = true;\n }\n catch (_a) {\n // noop\n }\n }\n }\n markAsDisposed(disposable) {\n if (disposable && disposable !== Disposable.None) {\n try {\n disposable[__is_disposable_tracked__] = true;\n }\n catch (_a) {\n // noop\n }\n }\n }\n markAsSingleton(disposable) { }\n });\n}\nfunction trackDisposable(x) {\n disposableTracker === null || disposableTracker === void 0 ? void 0 : disposableTracker.trackDisposable(x);\n return x;\n}\nfunction markAsDisposed(disposable) {\n disposableTracker === null || disposableTracker === void 0 ? void 0 : disposableTracker.markAsDisposed(disposable);\n}\nfunction setParentOfDisposable(child, parent) {\n disposableTracker === null || disposableTracker === void 0 ? void 0 : disposableTracker.setParent(child, parent);\n}\nfunction setParentOfDisposables(children, parent) {\n if (!disposableTracker) {\n return;\n }\n for (const child of children) {\n disposableTracker.setParent(child, parent);\n }\n}\n/**\n * Indicates that the given object is a singleton which does not need to be disposed.\n*/\nexport function markAsSingleton(singleton) {\n disposableTracker === null || disposableTracker === void 0 ? void 0 : disposableTracker.markAsSingleton(singleton);\n return singleton;\n}\nexport class MultiDisposeError extends Error {\n constructor(errors) {\n super(`Encountered errors while disposing of store. Errors: [${errors.join(', ')}]`);\n this.errors = errors;\n }\n}\nexport function isDisposable(thing) {\n return typeof thing.dispose === 'function' && thing.dispose.length === 0;\n}\nexport function dispose(arg) {\n if (Iterable.is(arg)) {\n let errors = [];\n for (const d of arg) {\n if (d) {\n try {\n d.dispose();\n }\n catch (e) {\n errors.push(e);\n }\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n else if (errors.length > 1) {\n throw new MultiDisposeError(errors);\n }\n return Array.isArray(arg) ? [] : arg;\n }\n else if (arg) {\n arg.dispose();\n return arg;\n }\n}\nexport function combinedDisposable(...disposables) {\n const parent = toDisposable(() => dispose(disposables));\n setParentOfDisposables(disposables, parent);\n return parent;\n}\nexport function toDisposable(fn) {\n const self = trackDisposable({\n dispose: once(() => {\n markAsDisposed(self);\n fn();\n })\n });\n return self;\n}\nexport class DisposableStore {\n constructor() {\n this._toDispose = new Set();\n this._isDisposed = false;\n trackDisposable(this);\n }\n /**\n * Dispose of all registered disposables and mark this object as disposed.\n *\n * Any future disposables added to this object will be disposed of on `add`.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n markAsDisposed(this);\n this._isDisposed = true;\n this.clear();\n }\n /**\n * Dispose of all registered disposables but do not mark this object as disposed.\n */\n clear() {\n try {\n dispose(this._toDispose.values());\n }\n finally {\n this._toDispose.clear();\n }\n }\n add(o) {\n if (!o) {\n return o;\n }\n if (o === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n setParentOfDisposable(o, this);\n if (this._isDisposed) {\n if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n console.warn(new Error('Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!').stack);\n }\n }\n else {\n this._toDispose.add(o);\n }\n return o;\n }\n}\nDisposableStore.DISABLE_DISPOSED_WARNING = false;\nexport class Disposable {\n constructor() {\n this._store = new DisposableStore();\n trackDisposable(this);\n setParentOfDisposable(this._store, this);\n }\n dispose() {\n markAsDisposed(this);\n this._store.dispose();\n }\n _register(o) {\n if (o === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n return this._store.add(o);\n }\n}\nDisposable.None = Object.freeze({ dispose() { } });\n/**\n * Manages the lifecycle of a disposable value that may be changed.\n *\n * This ensures that when the disposable value is changed, the previously held disposable is disposed of. You can\n * also register a `MutableDisposable` on a `Disposable` to ensure it is automatically cleaned up.\n */\nexport class MutableDisposable {\n constructor() {\n this._isDisposed = false;\n trackDisposable(this);\n }\n get value() {\n return this._isDisposed ? undefined : this._value;\n }\n set value(value) {\n var _a;\n if (this._isDisposed || value === this._value) {\n return;\n }\n (_a = this._value) === null || _a === void 0 ? void 0 : _a.dispose();\n if (value) {\n setParentOfDisposable(value, this);\n }\n this._value = value;\n }\n clear() {\n this.value = undefined;\n }\n dispose() {\n var _a;\n this._isDisposed = true;\n markAsDisposed(this);\n (_a = this._value) === null || _a === void 0 ? void 0 : _a.dispose();\n this._value = undefined;\n }\n /**\n * Clears the value, but does not dispose it.\n * The old value is returned.\n */\n clearAndLeak() {\n const oldValue = this._value;\n this._value = undefined;\n if (oldValue) {\n setParentOfDisposable(oldValue, null);\n }\n return oldValue;\n }\n}\nexport class ImmortalReference {\n constructor(object) {\n this.object = object;\n }\n dispose() { }\n}\n","import '../../editor/editor.api.js';\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter, languages } from './fillers/monaco-editor-core.js';\nvar LanguageServiceDefaultsImpl = /** @class */ (function () {\n function LanguageServiceDefaultsImpl(languageId, diagnosticsOptions, modeConfiguration) {\n this._onDidChange = new Emitter();\n this._languageId = languageId;\n this.setDiagnosticsOptions(diagnosticsOptions);\n this.setModeConfiguration(modeConfiguration);\n }\n Object.defineProperty(LanguageServiceDefaultsImpl.prototype, \"onDidChange\", {\n get: function () {\n return this._onDidChange.event;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LanguageServiceDefaultsImpl.prototype, \"languageId\", {\n get: function () {\n return this._languageId;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LanguageServiceDefaultsImpl.prototype, \"modeConfiguration\", {\n get: function () {\n return this._modeConfiguration;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LanguageServiceDefaultsImpl.prototype, \"diagnosticsOptions\", {\n get: function () {\n return this._diagnosticsOptions;\n },\n enumerable: false,\n configurable: true\n });\n LanguageServiceDefaultsImpl.prototype.setDiagnosticsOptions = function (options) {\n this._diagnosticsOptions = options || Object.create(null);\n this._onDidChange.fire(this);\n };\n LanguageServiceDefaultsImpl.prototype.setModeConfiguration = function (modeConfiguration) {\n this._modeConfiguration = modeConfiguration || Object.create(null);\n this._onDidChange.fire(this);\n };\n return LanguageServiceDefaultsImpl;\n}());\nvar diagnosticDefault = {\n validate: true,\n allowComments: true,\n schemas: [],\n enableSchemaRequest: false,\n schemaRequest: 'warning',\n schemaValidation: 'warning',\n comments: 'error',\n trailingCommas: 'error'\n};\nvar modeConfigurationDefault = {\n documentFormattingEdits: true,\n documentRangeFormattingEdits: true,\n completionItems: true,\n hovers: true,\n documentSymbols: true,\n tokens: true,\n colors: true,\n foldingRanges: true,\n diagnostics: true,\n selectionRanges: true\n};\nexport var jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault, modeConfigurationDefault);\n// export to the global based API\nlanguages.json = { jsonDefaults: jsonDefaults };\n// --- Registration to monaco editor ---\nfunction getMode() {\n return import('./jsonMode.js');\n}\nlanguages.register({\n id: 'json',\n extensions: ['.json', '.bowerrc', '.jshintrc', '.jscsrc', '.eslintrc', '.babelrc', '.har'],\n aliases: ['JSON', 'json'],\n mimetypes: ['application/json']\n});\nlanguages.onLanguage('json', function () {\n getMode().then(function (mode) { return mode.setupMode(jsonDefaults); });\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isArray, isObject, isUndefinedOrNull } from './types.js';\nexport function deepClone(obj) {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n if (obj instanceof RegExp) {\n // See https://github.com/microsoft/TypeScript/issues/10990\n return obj;\n }\n const result = Array.isArray(obj) ? [] : {};\n Object.keys(obj).forEach((key) => {\n if (obj[key] && typeof obj[key] === 'object') {\n result[key] = deepClone(obj[key]);\n }\n else {\n result[key] = obj[key];\n }\n });\n return result;\n}\nexport function deepFreeze(obj) {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n const stack = [obj];\n while (stack.length > 0) {\n const obj = stack.shift();\n Object.freeze(obj);\n for (const key in obj) {\n if (_hasOwnProperty.call(obj, key)) {\n const prop = obj[key];\n if (typeof prop === 'object' && !Object.isFrozen(prop)) {\n stack.push(prop);\n }\n }\n }\n }\n return obj;\n}\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function cloneAndChange(obj, changer) {\n return _cloneAndChange(obj, changer, new Set());\n}\nfunction _cloneAndChange(obj, changer, seen) {\n if (isUndefinedOrNull(obj)) {\n return obj;\n }\n const changed = changer(obj);\n if (typeof changed !== 'undefined') {\n return changed;\n }\n if (isArray(obj)) {\n const r1 = [];\n for (const e of obj) {\n r1.push(_cloneAndChange(e, changer, seen));\n }\n return r1;\n }\n if (isObject(obj)) {\n if (seen.has(obj)) {\n throw new Error('Cannot clone recursive data-structure');\n }\n seen.add(obj);\n const r2 = {};\n for (let i2 in obj) {\n if (_hasOwnProperty.call(obj, i2)) {\n r2[i2] = _cloneAndChange(obj[i2], changer, seen);\n }\n }\n seen.delete(obj);\n return r2;\n }\n return obj;\n}\n/**\n * Copies all properties of source into destination. The optional parameter \"overwrite\" allows to control\n * if existing properties on the destination should be overwritten or not. Defaults to true (overwrite).\n */\nexport function mixin(destination, source, overwrite = true) {\n if (!isObject(destination)) {\n return source;\n }\n if (isObject(source)) {\n Object.keys(source).forEach(key => {\n if (key in destination) {\n if (overwrite) {\n if (isObject(destination[key]) && isObject(source[key])) {\n mixin(destination[key], source[key], overwrite);\n }\n else {\n destination[key] = source[key];\n }\n }\n }\n else {\n destination[key] = source[key];\n }\n });\n }\n return destination;\n}\nexport function equals(one, other) {\n if (one === other) {\n return true;\n }\n if (one === null || one === undefined || other === null || other === undefined) {\n return false;\n }\n if (typeof one !== typeof other) {\n return false;\n }\n if (typeof one !== 'object') {\n return false;\n }\n if ((Array.isArray(one)) !== (Array.isArray(other))) {\n return false;\n }\n let i;\n let key;\n if (Array.isArray(one)) {\n if (one.length !== other.length) {\n return false;\n }\n for (i = 0; i < one.length; i++) {\n if (!equals(one[i], other[i])) {\n return false;\n }\n }\n }\n else {\n const oneKeys = [];\n for (key in one) {\n oneKeys.push(key);\n }\n oneKeys.sort();\n const otherKeys = [];\n for (key in other) {\n otherKeys.push(key);\n }\n otherKeys.sort();\n if (!equals(oneKeys, otherKeys)) {\n return false;\n }\n for (i = 0; i < oneKeys.length; i++) {\n if (!equals(one[oneKeys[i]], other[oneKeys[i]])) {\n return false;\n }\n }\n }\n return true;\n}\nexport function getOrDefault(obj, fn, defaultValue) {\n const result = fn(obj);\n return typeof result === 'undefined' ? defaultValue : result;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class SyncDescriptor {\n constructor(ctor, staticArguments = [], supportsDelayedInstantiation = false) {\n this.ctor = ctor;\n this.staticArguments = staticArguments;\n this.supportsDelayedInstantiation = supportsDelayedInstantiation;\n }\n}\n","import BaseSeverity from '../../../base/common/severity.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport var Severity = BaseSeverity;\nexport const INotificationService = createDecorator('notificationService');\nexport class NoOpNotification {\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../nls.js';\nimport { URI } from '../../base/common/uri.js';\nimport { ICodeEditorService } from './services/codeEditorService.js';\nimport { Position } from '../common/core/position.js';\nimport { IModelService } from '../common/services/modelService.js';\nimport { ITextModelService } from '../common/services/resolverService.js';\nimport { MenuId, MenuRegistry } from '../../platform/actions/common/actions.js';\nimport { CommandsRegistry } from '../../platform/commands/common/commands.js';\nimport { ContextKeyExpr, IContextKeyService } from '../../platform/contextkey/common/contextkey.js';\nimport { KeybindingsRegistry } from '../../platform/keybinding/common/keybindingsRegistry.js';\nimport { Registry } from '../../platform/registry/common/platform.js';\nimport { ITelemetryService } from '../../platform/telemetry/common/telemetry.js';\nimport { withNullAsUndefined, assertType } from '../../base/common/types.js';\nimport { ILogService } from '../../platform/log/common/log.js';\nexport class Command {\n constructor(opts) {\n this.id = opts.id;\n this.precondition = opts.precondition;\n this._kbOpts = opts.kbOpts;\n this._menuOpts = opts.menuOpts;\n this._description = opts.description;\n }\n register() {\n if (Array.isArray(this._menuOpts)) {\n this._menuOpts.forEach(this._registerMenuItem, this);\n }\n else if (this._menuOpts) {\n this._registerMenuItem(this._menuOpts);\n }\n if (this._kbOpts) {\n const kbOptsArr = Array.isArray(this._kbOpts) ? this._kbOpts : [this._kbOpts];\n for (const kbOpts of kbOptsArr) {\n let kbWhen = kbOpts.kbExpr;\n if (this.precondition) {\n if (kbWhen) {\n kbWhen = ContextKeyExpr.and(kbWhen, this.precondition);\n }\n else {\n kbWhen = this.precondition;\n }\n }\n const desc = {\n id: this.id,\n weight: kbOpts.weight,\n args: kbOpts.args,\n when: kbWhen,\n primary: kbOpts.primary,\n secondary: kbOpts.secondary,\n win: kbOpts.win,\n linux: kbOpts.linux,\n mac: kbOpts.mac,\n };\n KeybindingsRegistry.registerKeybindingRule(desc);\n }\n }\n CommandsRegistry.registerCommand({\n id: this.id,\n handler: (accessor, args) => this.runCommand(accessor, args),\n description: this._description\n });\n }\n _registerMenuItem(item) {\n MenuRegistry.appendMenuItem(item.menuId, {\n group: item.group,\n command: {\n id: this.id,\n title: item.title,\n icon: item.icon,\n precondition: this.precondition\n },\n when: item.when,\n order: item.order\n });\n }\n}\nexport class MultiCommand extends Command {\n constructor() {\n super(...arguments);\n this._implementations = [];\n }\n /**\n * A higher priority gets to be looked at first\n */\n addImplementation(priority, name, implementation) {\n this._implementations.push({ priority, name, implementation });\n this._implementations.sort((a, b) => b.priority - a.priority);\n return {\n dispose: () => {\n for (let i = 0; i < this._implementations.length; i++) {\n if (this._implementations[i].implementation === implementation) {\n this._implementations.splice(i, 1);\n return;\n }\n }\n }\n };\n }\n runCommand(accessor, args) {\n const logService = accessor.get(ILogService);\n logService.trace(`Executing Command '${this.id}' which has ${this._implementations.length} bound.`);\n for (const impl of this._implementations) {\n const result = impl.implementation(accessor, args);\n if (result) {\n logService.trace(`Command '${this.id}' was handled by '${impl.name}'.`);\n if (typeof result === 'boolean') {\n return;\n }\n return result;\n }\n }\n logService.trace(`The Command '${this.id}' was not handled by any implementation.`);\n }\n}\n//#endregion\n/**\n * A command that delegates to another command's implementation.\n *\n * This lets different commands be registered but share the same implementation\n */\nexport class ProxyCommand extends Command {\n constructor(command, opts) {\n super(opts);\n this.command = command;\n }\n runCommand(accessor, args) {\n return this.command.runCommand(accessor, args);\n }\n}\nexport class EditorCommand extends Command {\n /**\n * Create a command class that is bound to a certain editor contribution.\n */\n static bindToContribution(controllerGetter) {\n return class EditorControllerCommandImpl extends EditorCommand {\n constructor(opts) {\n super(opts);\n this._callback = opts.handler;\n }\n runEditorCommand(accessor, editor, args) {\n const controller = controllerGetter(editor);\n if (controller) {\n this._callback(controllerGetter(editor), args);\n }\n }\n };\n }\n runCommand(accessor, args) {\n const codeEditorService = accessor.get(ICodeEditorService);\n // Find the editor with text focus or active\n const editor = codeEditorService.getFocusedCodeEditor() || codeEditorService.getActiveCodeEditor();\n if (!editor) {\n // well, at least we tried...\n return;\n }\n return editor.invokeWithinContext((editorAccessor) => {\n const kbService = editorAccessor.get(IContextKeyService);\n if (!kbService.contextMatchesRules(withNullAsUndefined(this.precondition))) {\n // precondition does not hold\n return;\n }\n return this.runEditorCommand(editorAccessor, editor, args);\n });\n }\n}\nexport class EditorAction extends EditorCommand {\n constructor(opts) {\n super(EditorAction.convertOptions(opts));\n this.label = opts.label;\n this.alias = opts.alias;\n }\n static convertOptions(opts) {\n let menuOpts;\n if (Array.isArray(opts.menuOpts)) {\n menuOpts = opts.menuOpts;\n }\n else if (opts.menuOpts) {\n menuOpts = [opts.menuOpts];\n }\n else {\n menuOpts = [];\n }\n function withDefaults(item) {\n if (!item.menuId) {\n item.menuId = MenuId.EditorContext;\n }\n if (!item.title) {\n item.title = opts.label;\n }\n item.when = ContextKeyExpr.and(opts.precondition, item.when);\n return item;\n }\n if (Array.isArray(opts.contextMenuOpts)) {\n menuOpts.push(...opts.contextMenuOpts.map(withDefaults));\n }\n else if (opts.contextMenuOpts) {\n menuOpts.push(withDefaults(opts.contextMenuOpts));\n }\n opts.menuOpts = menuOpts;\n return opts;\n }\n runEditorCommand(accessor, editor, args) {\n this.reportTelemetry(accessor, editor);\n return this.run(accessor, editor, args || {});\n }\n reportTelemetry(accessor, editor) {\n accessor.get(ITelemetryService).publicLog2('editorActionInvoked', { name: this.label, id: this.id });\n }\n}\nexport class MultiEditorAction extends EditorAction {\n constructor() {\n super(...arguments);\n this._implementations = [];\n }\n /**\n * A higher priority gets to be looked at first\n */\n addImplementation(priority, implementation) {\n this._implementations.push([priority, implementation]);\n this._implementations.sort((a, b) => b[0] - a[0]);\n return {\n dispose: () => {\n for (let i = 0; i < this._implementations.length; i++) {\n if (this._implementations[i][1] === implementation) {\n this._implementations.splice(i, 1);\n return;\n }\n }\n }\n };\n }\n run(accessor, editor, args) {\n for (const impl of this._implementations) {\n const result = impl[1](accessor, editor, args);\n if (result) {\n if (typeof result === 'boolean') {\n return;\n }\n return result;\n }\n }\n }\n}\n//#endregion\n// --- Registration of commands and actions\nexport function registerModelAndPositionCommand(id, handler) {\n CommandsRegistry.registerCommand(id, function (accessor, ...args) {\n const [resource, position] = args;\n assertType(URI.isUri(resource));\n assertType(Position.isIPosition(position));\n const model = accessor.get(IModelService).getModel(resource);\n if (model) {\n const editorPosition = Position.lift(position);\n return handler(model, editorPosition, ...args.slice(2));\n }\n return accessor.get(ITextModelService).createModelReference(resource).then(reference => {\n return new Promise((resolve, reject) => {\n try {\n const result = handler(reference.object.textEditorModel, Position.lift(position), args.slice(2));\n resolve(result);\n }\n catch (err) {\n reject(err);\n }\n }).finally(() => {\n reference.dispose();\n });\n });\n });\n}\nexport function registerModelCommand(id, handler) {\n CommandsRegistry.registerCommand(id, function (accessor, ...args) {\n const [resource] = args;\n assertType(URI.isUri(resource));\n const model = accessor.get(IModelService).getModel(resource);\n if (model) {\n return handler(model, ...args.slice(1));\n }\n return accessor.get(ITextModelService).createModelReference(resource).then(reference => {\n return new Promise((resolve, reject) => {\n try {\n const result = handler(reference.object.textEditorModel, args.slice(1));\n resolve(result);\n }\n catch (err) {\n reject(err);\n }\n }).finally(() => {\n reference.dispose();\n });\n });\n });\n}\nexport function registerEditorCommand(editorCommand) {\n EditorContributionRegistry.INSTANCE.registerEditorCommand(editorCommand);\n return editorCommand;\n}\nexport function registerEditorAction(ctor) {\n const action = new ctor();\n EditorContributionRegistry.INSTANCE.registerEditorAction(action);\n return action;\n}\nexport function registerMultiEditorAction(action) {\n EditorContributionRegistry.INSTANCE.registerEditorAction(action);\n return action;\n}\nexport function registerInstantiatedEditorAction(editorAction) {\n EditorContributionRegistry.INSTANCE.registerEditorAction(editorAction);\n}\nexport function registerEditorContribution(id, ctor) {\n EditorContributionRegistry.INSTANCE.registerEditorContribution(id, ctor);\n}\nexport var EditorExtensionsRegistry;\n(function (EditorExtensionsRegistry) {\n function getEditorCommand(commandId) {\n return EditorContributionRegistry.INSTANCE.getEditorCommand(commandId);\n }\n EditorExtensionsRegistry.getEditorCommand = getEditorCommand;\n function getEditorActions() {\n return EditorContributionRegistry.INSTANCE.getEditorActions();\n }\n EditorExtensionsRegistry.getEditorActions = getEditorActions;\n function getEditorContributions() {\n return EditorContributionRegistry.INSTANCE.getEditorContributions();\n }\n EditorExtensionsRegistry.getEditorContributions = getEditorContributions;\n function getSomeEditorContributions(ids) {\n return EditorContributionRegistry.INSTANCE.getEditorContributions().filter(c => ids.indexOf(c.id) >= 0);\n }\n EditorExtensionsRegistry.getSomeEditorContributions = getSomeEditorContributions;\n function getDiffEditorContributions() {\n return EditorContributionRegistry.INSTANCE.getDiffEditorContributions();\n }\n EditorExtensionsRegistry.getDiffEditorContributions = getDiffEditorContributions;\n})(EditorExtensionsRegistry || (EditorExtensionsRegistry = {}));\n// Editor extension points\nconst Extensions = {\n EditorCommonContributions: 'editor.contributions'\n};\nclass EditorContributionRegistry {\n constructor() {\n this.editorContributions = [];\n this.diffEditorContributions = [];\n this.editorActions = [];\n this.editorCommands = Object.create(null);\n }\n registerEditorContribution(id, ctor) {\n this.editorContributions.push({ id, ctor: ctor });\n }\n getEditorContributions() {\n return this.editorContributions.slice(0);\n }\n getDiffEditorContributions() {\n return this.diffEditorContributions.slice(0);\n }\n registerEditorAction(action) {\n action.register();\n this.editorActions.push(action);\n }\n getEditorActions() {\n return this.editorActions.slice(0);\n }\n registerEditorCommand(editorCommand) {\n editorCommand.register();\n this.editorCommands[editorCommand.id] = editorCommand;\n }\n getEditorCommand(commandId) {\n return (this.editorCommands[commandId] || null);\n }\n}\nEditorContributionRegistry.INSTANCE = new EditorContributionRegistry();\nRegistry.add(Extensions.EditorCommonContributions, EditorContributionRegistry.INSTANCE);\nfunction registerCommand(command) {\n command.register();\n return command;\n}\nexport const UndoCommand = registerCommand(new MultiCommand({\n id: 'undo',\n precondition: undefined,\n kbOpts: {\n weight: 0 /* EditorCore */,\n primary: 2048 /* CtrlCmd */ | 56 /* KeyZ */\n },\n menuOpts: [{\n menuId: MenuId.MenubarEditMenu,\n group: '1_do',\n title: nls.localize({ key: 'miUndo', comment: ['&& denotes a mnemonic'] }, \"&&Undo\"),\n order: 1\n }, {\n menuId: MenuId.CommandPalette,\n group: '',\n title: nls.localize('undo', \"Undo\"),\n order: 1\n }]\n}));\nregisterCommand(new ProxyCommand(UndoCommand, { id: 'default:undo', precondition: undefined }));\nexport const RedoCommand = registerCommand(new MultiCommand({\n id: 'redo',\n precondition: undefined,\n kbOpts: {\n weight: 0 /* EditorCore */,\n primary: 2048 /* CtrlCmd */ | 55 /* KeyY */,\n secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 56 /* KeyZ */],\n mac: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 56 /* KeyZ */ }\n },\n menuOpts: [{\n menuId: MenuId.MenubarEditMenu,\n group: '1_do',\n title: nls.localize({ key: 'miRedo', comment: ['&& denotes a mnemonic'] }, \"&&Redo\"),\n order: 2\n }, {\n menuId: MenuId.CommandPalette,\n group: '',\n title: nls.localize('redo', \"Redo\"),\n order: 1\n }]\n}));\nregisterCommand(new ProxyCommand(RedoCommand, { id: 'default:redo', precondition: undefined }));\nexport const SelectAllCommand = registerCommand(new MultiCommand({\n id: 'editor.action.selectAll',\n precondition: undefined,\n kbOpts: {\n weight: 0 /* EditorCore */,\n kbExpr: null,\n primary: 2048 /* CtrlCmd */ | 31 /* KeyA */\n },\n menuOpts: [{\n menuId: MenuId.MenubarSelectionMenu,\n group: '1_basic',\n title: nls.localize({ key: 'miSelectAll', comment: ['&& denotes a mnemonic'] }, \"&&Select All\"),\n order: 1\n }, {\n menuId: MenuId.CommandPalette,\n group: '',\n title: nls.localize('selectAll', \"Select All\"),\n order: 1\n }]\n}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass SpacesDiffResult {\n constructor() {\n this.spacesDiff = 0;\n this.looksLikeAlignment = false;\n }\n}\n/**\n * Compute the diff in spaces between two line's indentation.\n */\nfunction spacesDiff(a, aLength, b, bLength, result) {\n result.spacesDiff = 0;\n result.looksLikeAlignment = false;\n // This can go both ways (e.g.):\n // - a: \"\\t\"\n // - b: \"\\t \"\n // => This should count 1 tab and 4 spaces\n let i;\n for (i = 0; i < aLength && i < bLength; i++) {\n let aCharCode = a.charCodeAt(i);\n let bCharCode = b.charCodeAt(i);\n if (aCharCode !== bCharCode) {\n break;\n }\n }\n let aSpacesCnt = 0, aTabsCount = 0;\n for (let j = i; j < aLength; j++) {\n let aCharCode = a.charCodeAt(j);\n if (aCharCode === 32 /* Space */) {\n aSpacesCnt++;\n }\n else {\n aTabsCount++;\n }\n }\n let bSpacesCnt = 0, bTabsCount = 0;\n for (let j = i; j < bLength; j++) {\n let bCharCode = b.charCodeAt(j);\n if (bCharCode === 32 /* Space */) {\n bSpacesCnt++;\n }\n else {\n bTabsCount++;\n }\n }\n if (aSpacesCnt > 0 && aTabsCount > 0) {\n return;\n }\n if (bSpacesCnt > 0 && bTabsCount > 0) {\n return;\n }\n let tabsDiff = Math.abs(aTabsCount - bTabsCount);\n let spacesDiff = Math.abs(aSpacesCnt - bSpacesCnt);\n if (tabsDiff === 0) {\n // check if the indentation difference might be caused by alignment reasons\n // sometime folks like to align their code, but this should not be used as a hint\n result.spacesDiff = spacesDiff;\n if (spacesDiff > 0 && 0 <= bSpacesCnt - 1 && bSpacesCnt - 1 < a.length && bSpacesCnt < b.length) {\n if (b.charCodeAt(bSpacesCnt) !== 32 /* Space */ && a.charCodeAt(bSpacesCnt - 1) === 32 /* Space */) {\n if (a.charCodeAt(a.length - 1) === 44 /* Comma */) {\n // This looks like an alignment desire: e.g.\n // const a = b + c,\n // d = b - c;\n result.looksLikeAlignment = true;\n }\n }\n }\n return;\n }\n if (spacesDiff % tabsDiff === 0) {\n result.spacesDiff = spacesDiff / tabsDiff;\n return;\n }\n}\nexport function guessIndentation(source, defaultTabSize, defaultInsertSpaces) {\n // Look at most at the first 10k lines\n const linesCount = Math.min(source.getLineCount(), 10000);\n let linesIndentedWithTabsCount = 0; // number of lines that contain at least one tab in indentation\n let linesIndentedWithSpacesCount = 0; // number of lines that contain only spaces in indentation\n let previousLineText = ''; // content of latest line that contained non-whitespace chars\n let previousLineIndentation = 0; // index at which latest line contained the first non-whitespace char\n const ALLOWED_TAB_SIZE_GUESSES = [2, 4, 6, 8, 3, 5, 7]; // prefer even guesses for `tabSize`, limit to [2, 8].\n const MAX_ALLOWED_TAB_SIZE_GUESS = 8; // max(ALLOWED_TAB_SIZE_GUESSES) = 8\n let spacesDiffCount = [0, 0, 0, 0, 0, 0, 0, 0, 0]; // `tabSize` scores\n let tmp = new SpacesDiffResult();\n for (let lineNumber = 1; lineNumber <= linesCount; lineNumber++) {\n let currentLineLength = source.getLineLength(lineNumber);\n let currentLineText = source.getLineContent(lineNumber);\n // if the text buffer is chunk based, so long lines are cons-string, v8 will flattern the string when we check charCode.\n // checking charCode on chunks directly is cheaper.\n const useCurrentLineText = (currentLineLength <= 65536);\n let currentLineHasContent = false; // does `currentLineText` contain non-whitespace chars\n let currentLineIndentation = 0; // index at which `currentLineText` contains the first non-whitespace char\n let currentLineSpacesCount = 0; // count of spaces found in `currentLineText` indentation\n let currentLineTabsCount = 0; // count of tabs found in `currentLineText` indentation\n for (let j = 0, lenJ = currentLineLength; j < lenJ; j++) {\n let charCode = (useCurrentLineText ? currentLineText.charCodeAt(j) : source.getLineCharCode(lineNumber, j));\n if (charCode === 9 /* Tab */) {\n currentLineTabsCount++;\n }\n else if (charCode === 32 /* Space */) {\n currentLineSpacesCount++;\n }\n else {\n // Hit non whitespace character on this line\n currentLineHasContent = true;\n currentLineIndentation = j;\n break;\n }\n }\n // Ignore empty or only whitespace lines\n if (!currentLineHasContent) {\n continue;\n }\n if (currentLineTabsCount > 0) {\n linesIndentedWithTabsCount++;\n }\n else if (currentLineSpacesCount > 1) {\n linesIndentedWithSpacesCount++;\n }\n spacesDiff(previousLineText, previousLineIndentation, currentLineText, currentLineIndentation, tmp);\n if (tmp.looksLikeAlignment) {\n // if defaultInsertSpaces === true && the spaces count == tabSize, we may want to count it as valid indentation\n //\n // - item1\n // - item2\n //\n // otherwise skip this line entirely\n //\n // const a = 1,\n // b = 2;\n if (!(defaultInsertSpaces && defaultTabSize === tmp.spacesDiff)) {\n continue;\n }\n }\n let currentSpacesDiff = tmp.spacesDiff;\n if (currentSpacesDiff <= MAX_ALLOWED_TAB_SIZE_GUESS) {\n spacesDiffCount[currentSpacesDiff]++;\n }\n previousLineText = currentLineText;\n previousLineIndentation = currentLineIndentation;\n }\n let insertSpaces = defaultInsertSpaces;\n if (linesIndentedWithTabsCount !== linesIndentedWithSpacesCount) {\n insertSpaces = (linesIndentedWithTabsCount < linesIndentedWithSpacesCount);\n }\n let tabSize = defaultTabSize;\n // Guess tabSize only if inserting spaces...\n if (insertSpaces) {\n let tabSizeScore = (insertSpaces ? 0 : 0.1 * linesCount);\n // console.log(\"score threshold: \" + tabSizeScore);\n ALLOWED_TAB_SIZE_GUESSES.forEach((possibleTabSize) => {\n let possibleTabSizeScore = spacesDiffCount[possibleTabSize];\n if (possibleTabSizeScore > tabSizeScore) {\n tabSizeScore = possibleTabSizeScore;\n tabSize = possibleTabSize;\n }\n });\n // Let a tabSize of 2 win even if it is not the maximum\n // (only in case 4 was guessed)\n if (tabSize === 4 && spacesDiffCount[4] > 0 && spacesDiffCount[2] > 0 && spacesDiffCount[2] >= spacesDiffCount[4] / 2) {\n tabSize = 2;\n }\n }\n // console.log('--------------------------');\n // console.log('linesIndentedWithTabsCount: ' + linesIndentedWithTabsCount + ', linesIndentedWithSpacesCount: ' + linesIndentedWithSpacesCount);\n // console.log('spacesDiffCount: ' + spacesDiffCount);\n // console.log('tabSize: ' + tabSize + ', tabSizeScore: ' + tabSizeScore);\n return {\n insertSpaces: insertSpaces,\n tabSize: tabSize\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function getNodeColor(node) {\n return ((node.metadata & 1 /* ColorMask */) >>> 0 /* ColorOffset */);\n}\nfunction setNodeColor(node, color) {\n node.metadata = ((node.metadata & 254 /* ColorMaskInverse */) | (color << 0 /* ColorOffset */));\n}\nfunction getNodeIsVisited(node) {\n return ((node.metadata & 2 /* IsVisitedMask */) >>> 1 /* IsVisitedOffset */) === 1;\n}\nfunction setNodeIsVisited(node, value) {\n node.metadata = ((node.metadata & 253 /* IsVisitedMaskInverse */) | ((value ? 1 : 0) << 1 /* IsVisitedOffset */));\n}\nfunction getNodeIsForValidation(node) {\n return ((node.metadata & 4 /* IsForValidationMask */) >>> 2 /* IsForValidationOffset */) === 1;\n}\nfunction setNodeIsForValidation(node, value) {\n node.metadata = ((node.metadata & 251 /* IsForValidationMaskInverse */) | ((value ? 1 : 0) << 2 /* IsForValidationOffset */));\n}\nfunction getNodeStickiness(node) {\n return ((node.metadata & 24 /* StickinessMask */) >>> 3 /* StickinessOffset */);\n}\nfunction _setNodeStickiness(node, stickiness) {\n node.metadata = ((node.metadata & 231 /* StickinessMaskInverse */) | (stickiness << 3 /* StickinessOffset */));\n}\nfunction getCollapseOnReplaceEdit(node) {\n return ((node.metadata & 32 /* CollapseOnReplaceEditMask */) >>> 5 /* CollapseOnReplaceEditOffset */) === 1;\n}\nfunction setCollapseOnReplaceEdit(node, value) {\n node.metadata = ((node.metadata & 223 /* CollapseOnReplaceEditMaskInverse */) | ((value ? 1 : 0) << 5 /* CollapseOnReplaceEditOffset */));\n}\nexport class IntervalNode {\n constructor(id, start, end) {\n this.metadata = 0;\n this.parent = this;\n this.left = this;\n this.right = this;\n setNodeColor(this, 1 /* Red */);\n this.start = start;\n this.end = end;\n // FORCE_OVERFLOWING_TEST: this.delta = start;\n this.delta = 0;\n this.maxEnd = end;\n this.id = id;\n this.ownerId = 0;\n this.options = null;\n setNodeIsForValidation(this, false);\n _setNodeStickiness(this, 1 /* NeverGrowsWhenTypingAtEdges */);\n setCollapseOnReplaceEdit(this, false);\n this.cachedVersionId = 0;\n this.cachedAbsoluteStart = start;\n this.cachedAbsoluteEnd = end;\n this.range = null;\n setNodeIsVisited(this, false);\n }\n reset(versionId, start, end, range) {\n this.start = start;\n this.end = end;\n this.maxEnd = end;\n this.cachedVersionId = versionId;\n this.cachedAbsoluteStart = start;\n this.cachedAbsoluteEnd = end;\n this.range = range;\n }\n setOptions(options) {\n this.options = options;\n let className = this.options.className;\n setNodeIsForValidation(this, (className === \"squiggly-error\" /* EditorErrorDecoration */\n || className === \"squiggly-warning\" /* EditorWarningDecoration */\n || className === \"squiggly-info\" /* EditorInfoDecoration */));\n _setNodeStickiness(this, this.options.stickiness);\n setCollapseOnReplaceEdit(this, this.options.collapseOnReplaceEdit);\n }\n setCachedOffsets(absoluteStart, absoluteEnd, cachedVersionId) {\n if (this.cachedVersionId !== cachedVersionId) {\n this.range = null;\n }\n this.cachedVersionId = cachedVersionId;\n this.cachedAbsoluteStart = absoluteStart;\n this.cachedAbsoluteEnd = absoluteEnd;\n }\n detach() {\n this.parent = null;\n this.left = null;\n this.right = null;\n }\n}\nexport const SENTINEL = new IntervalNode(null, 0, 0);\nSENTINEL.parent = SENTINEL;\nSENTINEL.left = SENTINEL;\nSENTINEL.right = SENTINEL;\nsetNodeColor(SENTINEL, 0 /* Black */);\nexport class IntervalTree {\n constructor() {\n this.root = SENTINEL;\n this.requestNormalizeDelta = false;\n }\n intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId) {\n if (this.root === SENTINEL) {\n return [];\n }\n return intervalSearch(this, start, end, filterOwnerId, filterOutValidation, cachedVersionId);\n }\n search(filterOwnerId, filterOutValidation, cachedVersionId) {\n if (this.root === SENTINEL) {\n return [];\n }\n return search(this, filterOwnerId, filterOutValidation, cachedVersionId);\n }\n /**\n * Will not set `cachedAbsoluteStart` nor `cachedAbsoluteEnd` on the returned nodes!\n */\n collectNodesFromOwner(ownerId) {\n return collectNodesFromOwner(this, ownerId);\n }\n /**\n * Will not set `cachedAbsoluteStart` nor `cachedAbsoluteEnd` on the returned nodes!\n */\n collectNodesPostOrder() {\n return collectNodesPostOrder(this);\n }\n insert(node) {\n rbTreeInsert(this, node);\n this._normalizeDeltaIfNecessary();\n }\n delete(node) {\n rbTreeDelete(this, node);\n this._normalizeDeltaIfNecessary();\n }\n resolveNode(node, cachedVersionId) {\n const initialNode = node;\n let delta = 0;\n while (node !== this.root) {\n if (node === node.parent.right) {\n delta += node.parent.delta;\n }\n node = node.parent;\n }\n const nodeStart = initialNode.start + delta;\n const nodeEnd = initialNode.end + delta;\n initialNode.setCachedOffsets(nodeStart, nodeEnd, cachedVersionId);\n }\n acceptReplace(offset, length, textLength, forceMoveMarkers) {\n // Our strategy is to remove all directly impacted nodes, and then add them back to the tree.\n // (1) collect all nodes that are intersecting this edit as nodes of interest\n const nodesOfInterest = searchForEditing(this, offset, offset + length);\n // (2) remove all nodes that are intersecting this edit\n for (let i = 0, len = nodesOfInterest.length; i < len; i++) {\n const node = nodesOfInterest[i];\n rbTreeDelete(this, node);\n }\n this._normalizeDeltaIfNecessary();\n // (3) edit all tree nodes except the nodes of interest\n noOverlapReplace(this, offset, offset + length, textLength);\n this._normalizeDeltaIfNecessary();\n // (4) edit the nodes of interest and insert them back in the tree\n for (let i = 0, len = nodesOfInterest.length; i < len; i++) {\n const node = nodesOfInterest[i];\n node.start = node.cachedAbsoluteStart;\n node.end = node.cachedAbsoluteEnd;\n nodeAcceptEdit(node, offset, (offset + length), textLength, forceMoveMarkers);\n node.maxEnd = node.end;\n rbTreeInsert(this, node);\n }\n this._normalizeDeltaIfNecessary();\n }\n _normalizeDeltaIfNecessary() {\n if (!this.requestNormalizeDelta) {\n return;\n }\n this.requestNormalizeDelta = false;\n normalizeDelta(this);\n }\n}\n//#region Delta Normalization\nfunction normalizeDelta(T) {\n let node = T.root;\n let delta = 0;\n while (node !== SENTINEL) {\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\n // go left\n node = node.left;\n continue;\n }\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n // handle current node\n node.start = delta + node.start;\n node.end = delta + node.end;\n node.delta = 0;\n recomputeMaxEnd(node);\n setNodeIsVisited(node, true);\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n node = node.parent;\n }\n setNodeIsVisited(T.root, false);\n}\nfunction adjustMarkerBeforeColumn(markerOffset, markerStickToPreviousCharacter, checkOffset, moveSemantics) {\n if (markerOffset < checkOffset) {\n return true;\n }\n if (markerOffset > checkOffset) {\n return false;\n }\n if (moveSemantics === 1 /* ForceMove */) {\n return false;\n }\n if (moveSemantics === 2 /* ForceStay */) {\n return true;\n }\n return markerStickToPreviousCharacter;\n}\n/**\n * This is a lot more complicated than strictly necessary to maintain the same behaviour\n * as when decorations were implemented using two markers.\n */\nexport function nodeAcceptEdit(node, start, end, textLength, forceMoveMarkers) {\n const nodeStickiness = getNodeStickiness(node);\n const startStickToPreviousCharacter = (nodeStickiness === 0 /* AlwaysGrowsWhenTypingAtEdges */\n || nodeStickiness === 2 /* GrowsOnlyWhenTypingBefore */);\n const endStickToPreviousCharacter = (nodeStickiness === 1 /* NeverGrowsWhenTypingAtEdges */\n || nodeStickiness === 2 /* GrowsOnlyWhenTypingBefore */);\n const deletingCnt = (end - start);\n const insertingCnt = textLength;\n const commonLength = Math.min(deletingCnt, insertingCnt);\n const nodeStart = node.start;\n let startDone = false;\n const nodeEnd = node.end;\n let endDone = false;\n if (start <= nodeStart && nodeEnd <= end && getCollapseOnReplaceEdit(node)) {\n // This edit encompasses the entire decoration range\n // and the decoration has asked to become collapsed\n node.start = start;\n startDone = true;\n node.end = start;\n endDone = true;\n }\n {\n const moveSemantics = forceMoveMarkers ? 1 /* ForceMove */ : (deletingCnt > 0 ? 2 /* ForceStay */ : 0 /* MarkerDefined */);\n if (!startDone && adjustMarkerBeforeColumn(nodeStart, startStickToPreviousCharacter, start, moveSemantics)) {\n startDone = true;\n }\n if (!endDone && adjustMarkerBeforeColumn(nodeEnd, endStickToPreviousCharacter, start, moveSemantics)) {\n endDone = true;\n }\n }\n if (commonLength > 0 && !forceMoveMarkers) {\n const moveSemantics = (deletingCnt > insertingCnt ? 2 /* ForceStay */ : 0 /* MarkerDefined */);\n if (!startDone && adjustMarkerBeforeColumn(nodeStart, startStickToPreviousCharacter, start + commonLength, moveSemantics)) {\n startDone = true;\n }\n if (!endDone && adjustMarkerBeforeColumn(nodeEnd, endStickToPreviousCharacter, start + commonLength, moveSemantics)) {\n endDone = true;\n }\n }\n {\n const moveSemantics = forceMoveMarkers ? 1 /* ForceMove */ : 0 /* MarkerDefined */;\n if (!startDone && adjustMarkerBeforeColumn(nodeStart, startStickToPreviousCharacter, end, moveSemantics)) {\n node.start = start + insertingCnt;\n startDone = true;\n }\n if (!endDone && adjustMarkerBeforeColumn(nodeEnd, endStickToPreviousCharacter, end, moveSemantics)) {\n node.end = start + insertingCnt;\n endDone = true;\n }\n }\n // Finish\n const deltaColumn = (insertingCnt - deletingCnt);\n if (!startDone) {\n node.start = Math.max(0, nodeStart + deltaColumn);\n }\n if (!endDone) {\n node.end = Math.max(0, nodeEnd + deltaColumn);\n }\n if (node.start > node.end) {\n node.end = node.start;\n }\n}\nfunction searchForEditing(T, start, end) {\n // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree\n // Now, it is known that two intervals A and B overlap only when both\n // A.low <= B.high and A.high >= B.low. When searching the trees for\n // nodes overlapping with a given interval, you can immediately skip:\n // a) all nodes to the right of nodes whose low value is past the end of the given interval.\n // b) all nodes that have their maximum 'high' value below the start of the given interval.\n let node = T.root;\n let delta = 0;\n let nodeMaxEnd = 0;\n let nodeStart = 0;\n let nodeEnd = 0;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n node = node.parent;\n continue;\n }\n if (!getNodeIsVisited(node.left)) {\n // first time seeing this node\n nodeMaxEnd = delta + node.maxEnd;\n if (nodeMaxEnd < start) {\n // cover case b) from above\n // there is no need to search this node or its children\n setNodeIsVisited(node, true);\n continue;\n }\n if (node.left !== SENTINEL) {\n // go left\n node = node.left;\n continue;\n }\n }\n // handle current node\n nodeStart = delta + node.start;\n if (nodeStart > end) {\n // cover case a) from above\n // there is no need to search this node or its right subtree\n setNodeIsVisited(node, true);\n continue;\n }\n nodeEnd = delta + node.end;\n if (nodeEnd >= start) {\n node.setCachedOffsets(nodeStart, nodeEnd, 0);\n result[resultLen++] = node;\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\nfunction noOverlapReplace(T, start, end, textLength) {\n // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree\n // Now, it is known that two intervals A and B overlap only when both\n // A.low <= B.high and A.high >= B.low. When searching the trees for\n // nodes overlapping with a given interval, you can immediately skip:\n // a) all nodes to the right of nodes whose low value is past the end of the given interval.\n // b) all nodes that have their maximum 'high' value below the start of the given interval.\n let node = T.root;\n let delta = 0;\n let nodeMaxEnd = 0;\n let nodeStart = 0;\n const editDelta = (textLength - (end - start));\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n recomputeMaxEnd(node);\n node = node.parent;\n continue;\n }\n if (!getNodeIsVisited(node.left)) {\n // first time seeing this node\n nodeMaxEnd = delta + node.maxEnd;\n if (nodeMaxEnd < start) {\n // cover case b) from above\n // there is no need to search this node or its children\n setNodeIsVisited(node, true);\n continue;\n }\n if (node.left !== SENTINEL) {\n // go left\n node = node.left;\n continue;\n }\n }\n // handle current node\n nodeStart = delta + node.start;\n if (nodeStart > end) {\n node.start += editDelta;\n node.end += editDelta;\n node.delta += editDelta;\n if (node.delta < -1073741824 /* MIN_SAFE_DELTA */ || node.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n // cover case a) from above\n // there is no need to search this node or its right subtree\n setNodeIsVisited(node, true);\n continue;\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n}\n//#endregion\n//#region Searching\nfunction collectNodesFromOwner(T, ownerId) {\n let node = T.root;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n node = node.parent;\n continue;\n }\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\n // go left\n node = node.left;\n continue;\n }\n // handle current node\n if (node.ownerId === ownerId) {\n result[resultLen++] = node;\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\nfunction collectNodesPostOrder(T) {\n let node = T.root;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n node = node.parent;\n continue;\n }\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\n // go left\n node = node.left;\n continue;\n }\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n node = node.right;\n continue;\n }\n // handle current node\n result[resultLen++] = node;\n setNodeIsVisited(node, true);\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\nfunction search(T, filterOwnerId, filterOutValidation, cachedVersionId) {\n let node = T.root;\n let delta = 0;\n let nodeStart = 0;\n let nodeEnd = 0;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n node = node.parent;\n continue;\n }\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\n // go left\n node = node.left;\n continue;\n }\n // handle current node\n nodeStart = delta + node.start;\n nodeEnd = delta + node.end;\n node.setCachedOffsets(nodeStart, nodeEnd, cachedVersionId);\n let include = true;\n if (filterOwnerId && node.ownerId && node.ownerId !== filterOwnerId) {\n include = false;\n }\n if (filterOutValidation && getNodeIsForValidation(node)) {\n include = false;\n }\n if (include) {\n result[resultLen++] = node;\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\nfunction intervalSearch(T, intervalStart, intervalEnd, filterOwnerId, filterOutValidation, cachedVersionId) {\n // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree\n // Now, it is known that two intervals A and B overlap only when both\n // A.low <= B.high and A.high >= B.low. When searching the trees for\n // nodes overlapping with a given interval, you can immediately skip:\n // a) all nodes to the right of nodes whose low value is past the end of the given interval.\n // b) all nodes that have their maximum 'high' value below the start of the given interval.\n let node = T.root;\n let delta = 0;\n let nodeMaxEnd = 0;\n let nodeStart = 0;\n let nodeEnd = 0;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n node = node.parent;\n continue;\n }\n if (!getNodeIsVisited(node.left)) {\n // first time seeing this node\n nodeMaxEnd = delta + node.maxEnd;\n if (nodeMaxEnd < intervalStart) {\n // cover case b) from above\n // there is no need to search this node or its children\n setNodeIsVisited(node, true);\n continue;\n }\n if (node.left !== SENTINEL) {\n // go left\n node = node.left;\n continue;\n }\n }\n // handle current node\n nodeStart = delta + node.start;\n if (nodeStart > intervalEnd) {\n // cover case a) from above\n // there is no need to search this node or its right subtree\n setNodeIsVisited(node, true);\n continue;\n }\n nodeEnd = delta + node.end;\n if (nodeEnd >= intervalStart) {\n // There is overlap\n node.setCachedOffsets(nodeStart, nodeEnd, cachedVersionId);\n let include = true;\n if (filterOwnerId && node.ownerId && node.ownerId !== filterOwnerId) {\n include = false;\n }\n if (filterOutValidation && getNodeIsForValidation(node)) {\n include = false;\n }\n if (include) {\n result[resultLen++] = node;\n }\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\n//#endregion\n//#region Insertion\nfunction rbTreeInsert(T, newNode) {\n if (T.root === SENTINEL) {\n newNode.parent = SENTINEL;\n newNode.left = SENTINEL;\n newNode.right = SENTINEL;\n setNodeColor(newNode, 0 /* Black */);\n T.root = newNode;\n return T.root;\n }\n treeInsert(T, newNode);\n recomputeMaxEndWalkToRoot(newNode.parent);\n // repair tree\n let x = newNode;\n while (x !== T.root && getNodeColor(x.parent) === 1 /* Red */) {\n if (x.parent === x.parent.parent.left) {\n const y = x.parent.parent.right;\n if (getNodeColor(y) === 1 /* Red */) {\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(y, 0 /* Black */);\n setNodeColor(x.parent.parent, 1 /* Red */);\n x = x.parent.parent;\n }\n else {\n if (x === x.parent.right) {\n x = x.parent;\n leftRotate(T, x);\n }\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(x.parent.parent, 1 /* Red */);\n rightRotate(T, x.parent.parent);\n }\n }\n else {\n const y = x.parent.parent.left;\n if (getNodeColor(y) === 1 /* Red */) {\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(y, 0 /* Black */);\n setNodeColor(x.parent.parent, 1 /* Red */);\n x = x.parent.parent;\n }\n else {\n if (x === x.parent.left) {\n x = x.parent;\n rightRotate(T, x);\n }\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(x.parent.parent, 1 /* Red */);\n leftRotate(T, x.parent.parent);\n }\n }\n }\n setNodeColor(T.root, 0 /* Black */);\n return newNode;\n}\nfunction treeInsert(T, z) {\n let delta = 0;\n let x = T.root;\n const zAbsoluteStart = z.start;\n const zAbsoluteEnd = z.end;\n while (true) {\n const cmp = intervalCompare(zAbsoluteStart, zAbsoluteEnd, x.start + delta, x.end + delta);\n if (cmp < 0) {\n // this node should be inserted to the left\n // => it is not affected by the node's delta\n if (x.left === SENTINEL) {\n z.start -= delta;\n z.end -= delta;\n z.maxEnd -= delta;\n x.left = z;\n break;\n }\n else {\n x = x.left;\n }\n }\n else {\n // this node should be inserted to the right\n // => it is not affected by the node's delta\n if (x.right === SENTINEL) {\n z.start -= (delta + x.delta);\n z.end -= (delta + x.delta);\n z.maxEnd -= (delta + x.delta);\n x.right = z;\n break;\n }\n else {\n delta += x.delta;\n x = x.right;\n }\n }\n }\n z.parent = x;\n z.left = SENTINEL;\n z.right = SENTINEL;\n setNodeColor(z, 1 /* Red */);\n}\n//#endregion\n//#region Deletion\nfunction rbTreeDelete(T, z) {\n let x;\n let y;\n // RB-DELETE except we don't swap z and y in case c)\n // i.e. we always delete what's pointed at by z.\n if (z.left === SENTINEL) {\n x = z.right;\n y = z;\n // x's delta is no longer influenced by z's delta\n x.delta += z.delta;\n if (x.delta < -1073741824 /* MIN_SAFE_DELTA */ || x.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n x.start += z.delta;\n x.end += z.delta;\n }\n else if (z.right === SENTINEL) {\n x = z.left;\n y = z;\n }\n else {\n y = leftest(z.right);\n x = y.right;\n // y's delta is no longer influenced by z's delta,\n // but we don't want to walk the entire right-hand-side subtree of x.\n // we therefore maintain z's delta in y, and adjust only x\n x.start += y.delta;\n x.end += y.delta;\n x.delta += y.delta;\n if (x.delta < -1073741824 /* MIN_SAFE_DELTA */ || x.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n y.start += z.delta;\n y.end += z.delta;\n y.delta = z.delta;\n if (y.delta < -1073741824 /* MIN_SAFE_DELTA */ || y.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n }\n if (y === T.root) {\n T.root = x;\n setNodeColor(x, 0 /* Black */);\n z.detach();\n resetSentinel();\n recomputeMaxEnd(x);\n T.root.parent = SENTINEL;\n return;\n }\n let yWasRed = (getNodeColor(y) === 1 /* Red */);\n if (y === y.parent.left) {\n y.parent.left = x;\n }\n else {\n y.parent.right = x;\n }\n if (y === z) {\n x.parent = y.parent;\n }\n else {\n if (y.parent === z) {\n x.parent = y;\n }\n else {\n x.parent = y.parent;\n }\n y.left = z.left;\n y.right = z.right;\n y.parent = z.parent;\n setNodeColor(y, getNodeColor(z));\n if (z === T.root) {\n T.root = y;\n }\n else {\n if (z === z.parent.left) {\n z.parent.left = y;\n }\n else {\n z.parent.right = y;\n }\n }\n if (y.left !== SENTINEL) {\n y.left.parent = y;\n }\n if (y.right !== SENTINEL) {\n y.right.parent = y;\n }\n }\n z.detach();\n if (yWasRed) {\n recomputeMaxEndWalkToRoot(x.parent);\n if (y !== z) {\n recomputeMaxEndWalkToRoot(y);\n recomputeMaxEndWalkToRoot(y.parent);\n }\n resetSentinel();\n return;\n }\n recomputeMaxEndWalkToRoot(x);\n recomputeMaxEndWalkToRoot(x.parent);\n if (y !== z) {\n recomputeMaxEndWalkToRoot(y);\n recomputeMaxEndWalkToRoot(y.parent);\n }\n // RB-DELETE-FIXUP\n let w;\n while (x !== T.root && getNodeColor(x) === 0 /* Black */) {\n if (x === x.parent.left) {\n w = x.parent.right;\n if (getNodeColor(w) === 1 /* Red */) {\n setNodeColor(w, 0 /* Black */);\n setNodeColor(x.parent, 1 /* Red */);\n leftRotate(T, x.parent);\n w = x.parent.right;\n }\n if (getNodeColor(w.left) === 0 /* Black */ && getNodeColor(w.right) === 0 /* Black */) {\n setNodeColor(w, 1 /* Red */);\n x = x.parent;\n }\n else {\n if (getNodeColor(w.right) === 0 /* Black */) {\n setNodeColor(w.left, 0 /* Black */);\n setNodeColor(w, 1 /* Red */);\n rightRotate(T, w);\n w = x.parent.right;\n }\n setNodeColor(w, getNodeColor(x.parent));\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(w.right, 0 /* Black */);\n leftRotate(T, x.parent);\n x = T.root;\n }\n }\n else {\n w = x.parent.left;\n if (getNodeColor(w) === 1 /* Red */) {\n setNodeColor(w, 0 /* Black */);\n setNodeColor(x.parent, 1 /* Red */);\n rightRotate(T, x.parent);\n w = x.parent.left;\n }\n if (getNodeColor(w.left) === 0 /* Black */ && getNodeColor(w.right) === 0 /* Black */) {\n setNodeColor(w, 1 /* Red */);\n x = x.parent;\n }\n else {\n if (getNodeColor(w.left) === 0 /* Black */) {\n setNodeColor(w.right, 0 /* Black */);\n setNodeColor(w, 1 /* Red */);\n leftRotate(T, w);\n w = x.parent.left;\n }\n setNodeColor(w, getNodeColor(x.parent));\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(w.left, 0 /* Black */);\n rightRotate(T, x.parent);\n x = T.root;\n }\n }\n }\n setNodeColor(x, 0 /* Black */);\n resetSentinel();\n}\nfunction leftest(node) {\n while (node.left !== SENTINEL) {\n node = node.left;\n }\n return node;\n}\nfunction resetSentinel() {\n SENTINEL.parent = SENTINEL;\n SENTINEL.delta = 0; // optional\n SENTINEL.start = 0; // optional\n SENTINEL.end = 0; // optional\n}\n//#endregion\n//#region Rotations\nfunction leftRotate(T, x) {\n const y = x.right; // set y.\n y.delta += x.delta; // y's delta is no longer influenced by x's delta\n if (y.delta < -1073741824 /* MIN_SAFE_DELTA */ || y.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n y.start += x.delta;\n y.end += x.delta;\n x.right = y.left; // turn y's left subtree into x's right subtree.\n if (y.left !== SENTINEL) {\n y.left.parent = x;\n }\n y.parent = x.parent; // link x's parent to y.\n if (x.parent === SENTINEL) {\n T.root = y;\n }\n else if (x === x.parent.left) {\n x.parent.left = y;\n }\n else {\n x.parent.right = y;\n }\n y.left = x; // put x on y's left.\n x.parent = y;\n recomputeMaxEnd(x);\n recomputeMaxEnd(y);\n}\nfunction rightRotate(T, y) {\n const x = y.left;\n y.delta -= x.delta;\n if (y.delta < -1073741824 /* MIN_SAFE_DELTA */ || y.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n y.start -= x.delta;\n y.end -= x.delta;\n y.left = x.right;\n if (x.right !== SENTINEL) {\n x.right.parent = y;\n }\n x.parent = y.parent;\n if (y.parent === SENTINEL) {\n T.root = x;\n }\n else if (y === y.parent.right) {\n y.parent.right = x;\n }\n else {\n y.parent.left = x;\n }\n x.right = y;\n y.parent = x;\n recomputeMaxEnd(y);\n recomputeMaxEnd(x);\n}\n//#endregion\n//#region max end computation\nfunction computeMaxEnd(node) {\n let maxEnd = node.end;\n if (node.left !== SENTINEL) {\n const leftMaxEnd = node.left.maxEnd;\n if (leftMaxEnd > maxEnd) {\n maxEnd = leftMaxEnd;\n }\n }\n if (node.right !== SENTINEL) {\n const rightMaxEnd = node.right.maxEnd + node.delta;\n if (rightMaxEnd > maxEnd) {\n maxEnd = rightMaxEnd;\n }\n }\n return maxEnd;\n}\nexport function recomputeMaxEnd(node) {\n node.maxEnd = computeMaxEnd(node);\n}\nfunction recomputeMaxEndWalkToRoot(node) {\n while (node !== SENTINEL) {\n const maxEnd = computeMaxEnd(node);\n if (node.maxEnd === maxEnd) {\n // no need to go further\n return;\n }\n node.maxEnd = maxEnd;\n node = node.parent;\n }\n}\n//#endregion\n//#region utils\nexport function intervalCompare(aStart, aEnd, bStart, bEnd) {\n if (aStart === bStart) {\n return aEnd - bEnd;\n }\n return aStart - bStart;\n}\n//#endregion\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class TreeNode {\n constructor(piece, color) {\n this.piece = piece;\n this.color = color;\n this.size_left = 0;\n this.lf_left = 0;\n this.parent = this;\n this.left = this;\n this.right = this;\n }\n next() {\n if (this.right !== SENTINEL) {\n return leftest(this.right);\n }\n let node = this;\n while (node.parent !== SENTINEL) {\n if (node.parent.left === node) {\n break;\n }\n node = node.parent;\n }\n if (node.parent === SENTINEL) {\n return SENTINEL;\n }\n else {\n return node.parent;\n }\n }\n prev() {\n if (this.left !== SENTINEL) {\n return righttest(this.left);\n }\n let node = this;\n while (node.parent !== SENTINEL) {\n if (node.parent.right === node) {\n break;\n }\n node = node.parent;\n }\n if (node.parent === SENTINEL) {\n return SENTINEL;\n }\n else {\n return node.parent;\n }\n }\n detach() {\n this.parent = null;\n this.left = null;\n this.right = null;\n }\n}\nexport const SENTINEL = new TreeNode(null, 0 /* Black */);\nSENTINEL.parent = SENTINEL;\nSENTINEL.left = SENTINEL;\nSENTINEL.right = SENTINEL;\nSENTINEL.color = 0 /* Black */;\nexport function leftest(node) {\n while (node.left !== SENTINEL) {\n node = node.left;\n }\n return node;\n}\nexport function righttest(node) {\n while (node.right !== SENTINEL) {\n node = node.right;\n }\n return node;\n}\nexport function calculateSize(node) {\n if (node === SENTINEL) {\n return 0;\n }\n return node.size_left + node.piece.length + calculateSize(node.right);\n}\nexport function calculateLF(node) {\n if (node === SENTINEL) {\n return 0;\n }\n return node.lf_left + node.piece.lineFeedCnt + calculateLF(node.right);\n}\nexport function resetSentinel() {\n SENTINEL.parent = SENTINEL;\n}\nexport function leftRotate(tree, x) {\n let y = x.right;\n // fix size_left\n y.size_left += x.size_left + (x.piece ? x.piece.length : 0);\n y.lf_left += x.lf_left + (x.piece ? x.piece.lineFeedCnt : 0);\n x.right = y.left;\n if (y.left !== SENTINEL) {\n y.left.parent = x;\n }\n y.parent = x.parent;\n if (x.parent === SENTINEL) {\n tree.root = y;\n }\n else if (x.parent.left === x) {\n x.parent.left = y;\n }\n else {\n x.parent.right = y;\n }\n y.left = x;\n x.parent = y;\n}\nexport function rightRotate(tree, y) {\n let x = y.left;\n y.left = x.right;\n if (x.right !== SENTINEL) {\n x.right.parent = y;\n }\n x.parent = y.parent;\n // fix size_left\n y.size_left -= x.size_left + (x.piece ? x.piece.length : 0);\n y.lf_left -= x.lf_left + (x.piece ? x.piece.lineFeedCnt : 0);\n if (y.parent === SENTINEL) {\n tree.root = x;\n }\n else if (y === y.parent.right) {\n y.parent.right = x;\n }\n else {\n y.parent.left = x;\n }\n x.right = y;\n y.parent = x;\n}\nexport function rbDelete(tree, z) {\n let x;\n let y;\n if (z.left === SENTINEL) {\n y = z;\n x = y.right;\n }\n else if (z.right === SENTINEL) {\n y = z;\n x = y.left;\n }\n else {\n y = leftest(z.right);\n x = y.right;\n }\n if (y === tree.root) {\n tree.root = x;\n // if x is null, we are removing the only node\n x.color = 0 /* Black */;\n z.detach();\n resetSentinel();\n tree.root.parent = SENTINEL;\n return;\n }\n let yWasRed = (y.color === 1 /* Red */);\n if (y === y.parent.left) {\n y.parent.left = x;\n }\n else {\n y.parent.right = x;\n }\n if (y === z) {\n x.parent = y.parent;\n recomputeTreeMetadata(tree, x);\n }\n else {\n if (y.parent === z) {\n x.parent = y;\n }\n else {\n x.parent = y.parent;\n }\n // as we make changes to x's hierarchy, update size_left of subtree first\n recomputeTreeMetadata(tree, x);\n y.left = z.left;\n y.right = z.right;\n y.parent = z.parent;\n y.color = z.color;\n if (z === tree.root) {\n tree.root = y;\n }\n else {\n if (z === z.parent.left) {\n z.parent.left = y;\n }\n else {\n z.parent.right = y;\n }\n }\n if (y.left !== SENTINEL) {\n y.left.parent = y;\n }\n if (y.right !== SENTINEL) {\n y.right.parent = y;\n }\n // update metadata\n // we replace z with y, so in this sub tree, the length change is z.item.length\n y.size_left = z.size_left;\n y.lf_left = z.lf_left;\n recomputeTreeMetadata(tree, y);\n }\n z.detach();\n if (x.parent.left === x) {\n let newSizeLeft = calculateSize(x);\n let newLFLeft = calculateLF(x);\n if (newSizeLeft !== x.parent.size_left || newLFLeft !== x.parent.lf_left) {\n let delta = newSizeLeft - x.parent.size_left;\n let lf_delta = newLFLeft - x.parent.lf_left;\n x.parent.size_left = newSizeLeft;\n x.parent.lf_left = newLFLeft;\n updateTreeMetadata(tree, x.parent, delta, lf_delta);\n }\n }\n recomputeTreeMetadata(tree, x.parent);\n if (yWasRed) {\n resetSentinel();\n return;\n }\n // RB-DELETE-FIXUP\n let w;\n while (x !== tree.root && x.color === 0 /* Black */) {\n if (x === x.parent.left) {\n w = x.parent.right;\n if (w.color === 1 /* Red */) {\n w.color = 0 /* Black */;\n x.parent.color = 1 /* Red */;\n leftRotate(tree, x.parent);\n w = x.parent.right;\n }\n if (w.left.color === 0 /* Black */ && w.right.color === 0 /* Black */) {\n w.color = 1 /* Red */;\n x = x.parent;\n }\n else {\n if (w.right.color === 0 /* Black */) {\n w.left.color = 0 /* Black */;\n w.color = 1 /* Red */;\n rightRotate(tree, w);\n w = x.parent.right;\n }\n w.color = x.parent.color;\n x.parent.color = 0 /* Black */;\n w.right.color = 0 /* Black */;\n leftRotate(tree, x.parent);\n x = tree.root;\n }\n }\n else {\n w = x.parent.left;\n if (w.color === 1 /* Red */) {\n w.color = 0 /* Black */;\n x.parent.color = 1 /* Red */;\n rightRotate(tree, x.parent);\n w = x.parent.left;\n }\n if (w.left.color === 0 /* Black */ && w.right.color === 0 /* Black */) {\n w.color = 1 /* Red */;\n x = x.parent;\n }\n else {\n if (w.left.color === 0 /* Black */) {\n w.right.color = 0 /* Black */;\n w.color = 1 /* Red */;\n leftRotate(tree, w);\n w = x.parent.left;\n }\n w.color = x.parent.color;\n x.parent.color = 0 /* Black */;\n w.left.color = 0 /* Black */;\n rightRotate(tree, x.parent);\n x = tree.root;\n }\n }\n }\n x.color = 0 /* Black */;\n resetSentinel();\n}\nexport function fixInsert(tree, x) {\n recomputeTreeMetadata(tree, x);\n while (x !== tree.root && x.parent.color === 1 /* Red */) {\n if (x.parent === x.parent.parent.left) {\n const y = x.parent.parent.right;\n if (y.color === 1 /* Red */) {\n x.parent.color = 0 /* Black */;\n y.color = 0 /* Black */;\n x.parent.parent.color = 1 /* Red */;\n x = x.parent.parent;\n }\n else {\n if (x === x.parent.right) {\n x = x.parent;\n leftRotate(tree, x);\n }\n x.parent.color = 0 /* Black */;\n x.parent.parent.color = 1 /* Red */;\n rightRotate(tree, x.parent.parent);\n }\n }\n else {\n const y = x.parent.parent.left;\n if (y.color === 1 /* Red */) {\n x.parent.color = 0 /* Black */;\n y.color = 0 /* Black */;\n x.parent.parent.color = 1 /* Red */;\n x = x.parent.parent;\n }\n else {\n if (x === x.parent.left) {\n x = x.parent;\n rightRotate(tree, x);\n }\n x.parent.color = 0 /* Black */;\n x.parent.parent.color = 1 /* Red */;\n leftRotate(tree, x.parent.parent);\n }\n }\n }\n tree.root.color = 0 /* Black */;\n}\nexport function updateTreeMetadata(tree, x, delta, lineFeedCntDelta) {\n // node length change or line feed count change\n while (x !== tree.root && x !== SENTINEL) {\n if (x.parent.left === x) {\n x.parent.size_left += delta;\n x.parent.lf_left += lineFeedCntDelta;\n }\n x = x.parent;\n }\n}\nexport function recomputeTreeMetadata(tree, x) {\n let delta = 0;\n let lf_delta = 0;\n if (x === tree.root) {\n return;\n }\n // go upwards till the node whose left subtree is changed.\n while (x !== tree.root && x === x.parent.right) {\n x = x.parent;\n }\n if (x === tree.root) {\n // well, it means we add a node to the end (inorder)\n return;\n }\n // x is the node whose right subtree is changed.\n x = x.parent;\n delta = calculateSize(x.left) - x.size_left;\n lf_delta = calculateLF(x.left) - x.lf_left;\n x.size_left += delta;\n x.lf_left += lf_delta;\n // go upwards till root. O(logN)\n while (x !== tree.root && (delta !== 0 || lf_delta !== 0)) {\n if (x.parent.left === x) {\n x.parent.size_left += delta;\n x.parent.lf_left += lf_delta;\n }\n x = x.parent;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Position } from '../../core/position.js';\nimport { Range } from '../../core/range.js';\nimport { FindMatch } from '../../model.js';\nimport { SENTINEL, TreeNode, fixInsert, leftest, rbDelete, righttest, updateTreeMetadata } from './rbTreeBase.js';\nimport { Searcher, createFindMatch, isValidMatch } from '../textModelSearch.js';\n// const lfRegex = new RegExp(/\\r\\n|\\r|\\n/g);\nexport const AverageBufferSize = 65535;\nexport function createUintArray(arr) {\n let r;\n if (arr[arr.length - 1] < 65536) {\n r = new Uint16Array(arr.length);\n }\n else {\n r = new Uint32Array(arr.length);\n }\n r.set(arr, 0);\n return r;\n}\nexport class LineStarts {\n constructor(lineStarts, cr, lf, crlf, isBasicASCII) {\n this.lineStarts = lineStarts;\n this.cr = cr;\n this.lf = lf;\n this.crlf = crlf;\n this.isBasicASCII = isBasicASCII;\n }\n}\nexport function createLineStartsFast(str, readonly = true) {\n let r = [0], rLength = 1;\n for (let i = 0, len = str.length; i < len; i++) {\n const chr = str.charCodeAt(i);\n if (chr === 13 /* CarriageReturn */) {\n if (i + 1 < len && str.charCodeAt(i + 1) === 10 /* LineFeed */) {\n // \\r\\n... case\n r[rLength++] = i + 2;\n i++; // skip \\n\n }\n else {\n // \\r... case\n r[rLength++] = i + 1;\n }\n }\n else if (chr === 10 /* LineFeed */) {\n r[rLength++] = i + 1;\n }\n }\n if (readonly) {\n return createUintArray(r);\n }\n else {\n return r;\n }\n}\nexport function createLineStarts(r, str) {\n r.length = 0;\n r[0] = 0;\n let rLength = 1;\n let cr = 0, lf = 0, crlf = 0;\n let isBasicASCII = true;\n for (let i = 0, len = str.length; i < len; i++) {\n const chr = str.charCodeAt(i);\n if (chr === 13 /* CarriageReturn */) {\n if (i + 1 < len && str.charCodeAt(i + 1) === 10 /* LineFeed */) {\n // \\r\\n... case\n crlf++;\n r[rLength++] = i + 2;\n i++; // skip \\n\n }\n else {\n cr++;\n // \\r... case\n r[rLength++] = i + 1;\n }\n }\n else if (chr === 10 /* LineFeed */) {\n lf++;\n r[rLength++] = i + 1;\n }\n else {\n if (isBasicASCII) {\n if (chr !== 9 /* Tab */ && (chr < 32 || chr > 126)) {\n isBasicASCII = false;\n }\n }\n }\n }\n const result = new LineStarts(createUintArray(r), cr, lf, crlf, isBasicASCII);\n r.length = 0;\n return result;\n}\nexport class Piece {\n constructor(bufferIndex, start, end, lineFeedCnt, length) {\n this.bufferIndex = bufferIndex;\n this.start = start;\n this.end = end;\n this.lineFeedCnt = lineFeedCnt;\n this.length = length;\n }\n}\nexport class StringBuffer {\n constructor(buffer, lineStarts) {\n this.buffer = buffer;\n this.lineStarts = lineStarts;\n }\n}\n/**\n * Readonly snapshot for piece tree.\n * In a real multiple thread environment, to make snapshot reading always work correctly, we need to\n * 1. Make TreeNode.piece immutable, then reading and writing can run in parallel.\n * 2. TreeNode/Buffers normalization should not happen during snapshot reading.\n */\nclass PieceTreeSnapshot {\n constructor(tree, BOM) {\n this._pieces = [];\n this._tree = tree;\n this._BOM = BOM;\n this._index = 0;\n if (tree.root !== SENTINEL) {\n tree.iterate(tree.root, node => {\n if (node !== SENTINEL) {\n this._pieces.push(node.piece);\n }\n return true;\n });\n }\n }\n read() {\n if (this._pieces.length === 0) {\n if (this._index === 0) {\n this._index++;\n return this._BOM;\n }\n else {\n return null;\n }\n }\n if (this._index > this._pieces.length - 1) {\n return null;\n }\n if (this._index === 0) {\n return this._BOM + this._tree.getPieceContent(this._pieces[this._index++]);\n }\n return this._tree.getPieceContent(this._pieces[this._index++]);\n }\n}\nclass PieceTreeSearchCache {\n constructor(limit) {\n this._limit = limit;\n this._cache = [];\n }\n get(offset) {\n for (let i = this._cache.length - 1; i >= 0; i--) {\n let nodePos = this._cache[i];\n if (nodePos.nodeStartOffset <= offset && nodePos.nodeStartOffset + nodePos.node.piece.length >= offset) {\n return nodePos;\n }\n }\n return null;\n }\n get2(lineNumber) {\n for (let i = this._cache.length - 1; i >= 0; i--) {\n let nodePos = this._cache[i];\n if (nodePos.nodeStartLineNumber && nodePos.nodeStartLineNumber < lineNumber && nodePos.nodeStartLineNumber + nodePos.node.piece.lineFeedCnt >= lineNumber) {\n return nodePos;\n }\n }\n return null;\n }\n set(nodePosition) {\n if (this._cache.length >= this._limit) {\n this._cache.shift();\n }\n this._cache.push(nodePosition);\n }\n validate(offset) {\n let hasInvalidVal = false;\n let tmp = this._cache;\n for (let i = 0; i < tmp.length; i++) {\n let nodePos = tmp[i];\n if (nodePos.node.parent === null || nodePos.nodeStartOffset >= offset) {\n tmp[i] = null;\n hasInvalidVal = true;\n continue;\n }\n }\n if (hasInvalidVal) {\n let newArr = [];\n for (const entry of tmp) {\n if (entry !== null) {\n newArr.push(entry);\n }\n }\n this._cache = newArr;\n }\n }\n}\nexport class PieceTreeBase {\n constructor(chunks, eol, eolNormalized) {\n this.create(chunks, eol, eolNormalized);\n }\n create(chunks, eol, eolNormalized) {\n this._buffers = [\n new StringBuffer('', [0])\n ];\n this._lastChangeBufferPos = { line: 0, column: 0 };\n this.root = SENTINEL;\n this._lineCnt = 1;\n this._length = 0;\n this._EOL = eol;\n this._EOLLength = eol.length;\n this._EOLNormalized = eolNormalized;\n let lastNode = null;\n for (let i = 0, len = chunks.length; i < len; i++) {\n if (chunks[i].buffer.length > 0) {\n if (!chunks[i].lineStarts) {\n chunks[i].lineStarts = createLineStartsFast(chunks[i].buffer);\n }\n let piece = new Piece(i + 1, { line: 0, column: 0 }, { line: chunks[i].lineStarts.length - 1, column: chunks[i].buffer.length - chunks[i].lineStarts[chunks[i].lineStarts.length - 1] }, chunks[i].lineStarts.length - 1, chunks[i].buffer.length);\n this._buffers.push(chunks[i]);\n lastNode = this.rbInsertRight(lastNode, piece);\n }\n }\n this._searchCache = new PieceTreeSearchCache(1);\n this._lastVisitedLine = { lineNumber: 0, value: '' };\n this.computeBufferMetadata();\n }\n normalizeEOL(eol) {\n let averageBufferSize = AverageBufferSize;\n let min = averageBufferSize - Math.floor(averageBufferSize / 3);\n let max = min * 2;\n let tempChunk = '';\n let tempChunkLen = 0;\n let chunks = [];\n this.iterate(this.root, node => {\n let str = this.getNodeContent(node);\n let len = str.length;\n if (tempChunkLen <= min || tempChunkLen + len < max) {\n tempChunk += str;\n tempChunkLen += len;\n return true;\n }\n // flush anyways\n let text = tempChunk.replace(/\\r\\n|\\r|\\n/g, eol);\n chunks.push(new StringBuffer(text, createLineStartsFast(text)));\n tempChunk = str;\n tempChunkLen = len;\n return true;\n });\n if (tempChunkLen > 0) {\n let text = tempChunk.replace(/\\r\\n|\\r|\\n/g, eol);\n chunks.push(new StringBuffer(text, createLineStartsFast(text)));\n }\n this.create(chunks, eol, true);\n }\n // #region Buffer API\n getEOL() {\n return this._EOL;\n }\n setEOL(newEOL) {\n this._EOL = newEOL;\n this._EOLLength = this._EOL.length;\n this.normalizeEOL(newEOL);\n }\n createSnapshot(BOM) {\n return new PieceTreeSnapshot(this, BOM);\n }\n getOffsetAt(lineNumber, column) {\n let leftLen = 0; // inorder\n let x = this.root;\n while (x !== SENTINEL) {\n if (x.left !== SENTINEL && x.lf_left + 1 >= lineNumber) {\n x = x.left;\n }\n else if (x.lf_left + x.piece.lineFeedCnt + 1 >= lineNumber) {\n leftLen += x.size_left;\n // lineNumber >= 2\n let accumualtedValInCurrentIndex = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n return leftLen += accumualtedValInCurrentIndex + column - 1;\n }\n else {\n lineNumber -= x.lf_left + x.piece.lineFeedCnt;\n leftLen += x.size_left + x.piece.length;\n x = x.right;\n }\n }\n return leftLen;\n }\n getPositionAt(offset) {\n offset = Math.floor(offset);\n offset = Math.max(0, offset);\n let x = this.root;\n let lfCnt = 0;\n let originalOffset = offset;\n while (x !== SENTINEL) {\n if (x.size_left !== 0 && x.size_left >= offset) {\n x = x.left;\n }\n else if (x.size_left + x.piece.length >= offset) {\n let out = this.getIndexOf(x, offset - x.size_left);\n lfCnt += x.lf_left + out.index;\n if (out.index === 0) {\n let lineStartOffset = this.getOffsetAt(lfCnt + 1, 1);\n let column = originalOffset - lineStartOffset;\n return new Position(lfCnt + 1, column + 1);\n }\n return new Position(lfCnt + 1, out.remainder + 1);\n }\n else {\n offset -= x.size_left + x.piece.length;\n lfCnt += x.lf_left + x.piece.lineFeedCnt;\n if (x.right === SENTINEL) {\n // last node\n let lineStartOffset = this.getOffsetAt(lfCnt + 1, 1);\n let column = originalOffset - offset - lineStartOffset;\n return new Position(lfCnt + 1, column + 1);\n }\n else {\n x = x.right;\n }\n }\n }\n return new Position(1, 1);\n }\n getValueInRange(range, eol) {\n if (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn) {\n return '';\n }\n let startPosition = this.nodeAt2(range.startLineNumber, range.startColumn);\n let endPosition = this.nodeAt2(range.endLineNumber, range.endColumn);\n let value = this.getValueInRange2(startPosition, endPosition);\n if (eol) {\n if (eol !== this._EOL || !this._EOLNormalized) {\n return value.replace(/\\r\\n|\\r|\\n/g, eol);\n }\n if (eol === this.getEOL() && this._EOLNormalized) {\n if (eol === '\\r\\n') {\n }\n return value;\n }\n return value.replace(/\\r\\n|\\r|\\n/g, eol);\n }\n return value;\n }\n getValueInRange2(startPosition, endPosition) {\n if (startPosition.node === endPosition.node) {\n let node = startPosition.node;\n let buffer = this._buffers[node.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start);\n return buffer.substring(startOffset + startPosition.remainder, startOffset + endPosition.remainder);\n }\n let x = startPosition.node;\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n let ret = buffer.substring(startOffset + startPosition.remainder, startOffset + x.piece.length);\n x = x.next();\n while (x !== SENTINEL) {\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n if (x === endPosition.node) {\n ret += buffer.substring(startOffset, startOffset + endPosition.remainder);\n break;\n }\n else {\n ret += buffer.substr(startOffset, x.piece.length);\n }\n x = x.next();\n }\n return ret;\n }\n getLinesContent() {\n let lines = [];\n let linesLength = 0;\n let currentLine = '';\n let danglingCR = false;\n this.iterate(this.root, node => {\n if (node === SENTINEL) {\n return true;\n }\n const piece = node.piece;\n let pieceLength = piece.length;\n if (pieceLength === 0) {\n return true;\n }\n const buffer = this._buffers[piece.bufferIndex].buffer;\n const lineStarts = this._buffers[piece.bufferIndex].lineStarts;\n const pieceStartLine = piece.start.line;\n const pieceEndLine = piece.end.line;\n let pieceStartOffset = lineStarts[pieceStartLine] + piece.start.column;\n if (danglingCR) {\n if (buffer.charCodeAt(pieceStartOffset) === 10 /* LineFeed */) {\n // pretend the \\n was in the previous piece..\n pieceStartOffset++;\n pieceLength--;\n }\n lines[linesLength++] = currentLine;\n currentLine = '';\n danglingCR = false;\n if (pieceLength === 0) {\n return true;\n }\n }\n if (pieceStartLine === pieceEndLine) {\n // this piece has no new lines\n if (!this._EOLNormalized && buffer.charCodeAt(pieceStartOffset + pieceLength - 1) === 13 /* CarriageReturn */) {\n danglingCR = true;\n currentLine += buffer.substr(pieceStartOffset, pieceLength - 1);\n }\n else {\n currentLine += buffer.substr(pieceStartOffset, pieceLength);\n }\n return true;\n }\n // add the text before the first line start in this piece\n currentLine += (this._EOLNormalized\n ? buffer.substring(pieceStartOffset, Math.max(pieceStartOffset, lineStarts[pieceStartLine + 1] - this._EOLLength))\n : buffer.substring(pieceStartOffset, lineStarts[pieceStartLine + 1]).replace(/(\\r\\n|\\r|\\n)$/, ''));\n lines[linesLength++] = currentLine;\n for (let line = pieceStartLine + 1; line < pieceEndLine; line++) {\n currentLine = (this._EOLNormalized\n ? buffer.substring(lineStarts[line], lineStarts[line + 1] - this._EOLLength)\n : buffer.substring(lineStarts[line], lineStarts[line + 1]).replace(/(\\r\\n|\\r|\\n)$/, ''));\n lines[linesLength++] = currentLine;\n }\n if (!this._EOLNormalized && buffer.charCodeAt(lineStarts[pieceEndLine] + piece.end.column - 1) === 13 /* CarriageReturn */) {\n danglingCR = true;\n if (piece.end.column === 0) {\n // The last line ended with a \\r, let's undo the push, it will be pushed by next iteration\n linesLength--;\n }\n else {\n currentLine = buffer.substr(lineStarts[pieceEndLine], piece.end.column - 1);\n }\n }\n else {\n currentLine = buffer.substr(lineStarts[pieceEndLine], piece.end.column);\n }\n return true;\n });\n if (danglingCR) {\n lines[linesLength++] = currentLine;\n currentLine = '';\n }\n lines[linesLength++] = currentLine;\n return lines;\n }\n getLength() {\n return this._length;\n }\n getLineCount() {\n return this._lineCnt;\n }\n getLineContent(lineNumber) {\n if (this._lastVisitedLine.lineNumber === lineNumber) {\n return this._lastVisitedLine.value;\n }\n this._lastVisitedLine.lineNumber = lineNumber;\n if (lineNumber === this._lineCnt) {\n this._lastVisitedLine.value = this.getLineRawContent(lineNumber);\n }\n else if (this._EOLNormalized) {\n this._lastVisitedLine.value = this.getLineRawContent(lineNumber, this._EOLLength);\n }\n else {\n this._lastVisitedLine.value = this.getLineRawContent(lineNumber).replace(/(\\r\\n|\\r|\\n)$/, '');\n }\n return this._lastVisitedLine.value;\n }\n _getCharCode(nodePos) {\n if (nodePos.remainder === nodePos.node.piece.length) {\n // the char we want to fetch is at the head of next node.\n let matchingNode = nodePos.node.next();\n if (!matchingNode) {\n return 0;\n }\n let buffer = this._buffers[matchingNode.piece.bufferIndex];\n let startOffset = this.offsetInBuffer(matchingNode.piece.bufferIndex, matchingNode.piece.start);\n return buffer.buffer.charCodeAt(startOffset);\n }\n else {\n let buffer = this._buffers[nodePos.node.piece.bufferIndex];\n let startOffset = this.offsetInBuffer(nodePos.node.piece.bufferIndex, nodePos.node.piece.start);\n let targetOffset = startOffset + nodePos.remainder;\n return buffer.buffer.charCodeAt(targetOffset);\n }\n }\n getLineCharCode(lineNumber, index) {\n let nodePos = this.nodeAt2(lineNumber, index + 1);\n return this._getCharCode(nodePos);\n }\n getLineLength(lineNumber) {\n if (lineNumber === this.getLineCount()) {\n let startOffset = this.getOffsetAt(lineNumber, 1);\n return this.getLength() - startOffset;\n }\n return this.getOffsetAt(lineNumber + 1, 1) - this.getOffsetAt(lineNumber, 1) - this._EOLLength;\n }\n findMatchesInNode(node, searcher, startLineNumber, startColumn, startCursor, endCursor, searchData, captureMatches, limitResultCount, resultLen, result) {\n let buffer = this._buffers[node.piece.bufferIndex];\n let startOffsetInBuffer = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start);\n let start = this.offsetInBuffer(node.piece.bufferIndex, startCursor);\n let end = this.offsetInBuffer(node.piece.bufferIndex, endCursor);\n let m;\n // Reset regex to search from the beginning\n let ret = { line: 0, column: 0 };\n let searchText;\n let offsetInBuffer;\n if (searcher._wordSeparators) {\n searchText = buffer.buffer.substring(start, end);\n offsetInBuffer = (offset) => offset + start;\n searcher.reset(0);\n }\n else {\n searchText = buffer.buffer;\n offsetInBuffer = (offset) => offset;\n searcher.reset(start);\n }\n do {\n m = searcher.next(searchText);\n if (m) {\n if (offsetInBuffer(m.index) >= end) {\n return resultLen;\n }\n this.positionInBuffer(node, offsetInBuffer(m.index) - startOffsetInBuffer, ret);\n let lineFeedCnt = this.getLineFeedCnt(node.piece.bufferIndex, startCursor, ret);\n let retStartColumn = ret.line === startCursor.line ? ret.column - startCursor.column + startColumn : ret.column + 1;\n let retEndColumn = retStartColumn + m[0].length;\n result[resultLen++] = createFindMatch(new Range(startLineNumber + lineFeedCnt, retStartColumn, startLineNumber + lineFeedCnt, retEndColumn), m, captureMatches);\n if (offsetInBuffer(m.index) + m[0].length >= end) {\n return resultLen;\n }\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n } while (m);\n return resultLen;\n }\n findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount) {\n const result = [];\n let resultLen = 0;\n const searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n let startPosition = this.nodeAt2(searchRange.startLineNumber, searchRange.startColumn);\n if (startPosition === null) {\n return [];\n }\n let endPosition = this.nodeAt2(searchRange.endLineNumber, searchRange.endColumn);\n if (endPosition === null) {\n return [];\n }\n let start = this.positionInBuffer(startPosition.node, startPosition.remainder);\n let end = this.positionInBuffer(endPosition.node, endPosition.remainder);\n if (startPosition.node === endPosition.node) {\n this.findMatchesInNode(startPosition.node, searcher, searchRange.startLineNumber, searchRange.startColumn, start, end, searchData, captureMatches, limitResultCount, resultLen, result);\n return result;\n }\n let startLineNumber = searchRange.startLineNumber;\n let currentNode = startPosition.node;\n while (currentNode !== endPosition.node) {\n let lineBreakCnt = this.getLineFeedCnt(currentNode.piece.bufferIndex, start, currentNode.piece.end);\n if (lineBreakCnt >= 1) {\n // last line break position\n let lineStarts = this._buffers[currentNode.piece.bufferIndex].lineStarts;\n let startOffsetInBuffer = this.offsetInBuffer(currentNode.piece.bufferIndex, currentNode.piece.start);\n let nextLineStartOffset = lineStarts[start.line + lineBreakCnt];\n let startColumn = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn : 1;\n resultLen = this.findMatchesInNode(currentNode, searcher, startLineNumber, startColumn, start, this.positionInBuffer(currentNode, nextLineStartOffset - startOffsetInBuffer), searchData, captureMatches, limitResultCount, resultLen, result);\n if (resultLen >= limitResultCount) {\n return result;\n }\n startLineNumber += lineBreakCnt;\n }\n let startColumn = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn - 1 : 0;\n // search for the remaining content\n if (startLineNumber === searchRange.endLineNumber) {\n const text = this.getLineContent(startLineNumber).substring(startColumn, searchRange.endColumn - 1);\n resultLen = this._findMatchesInLine(searchData, searcher, text, searchRange.endLineNumber, startColumn, resultLen, result, captureMatches, limitResultCount);\n return result;\n }\n resultLen = this._findMatchesInLine(searchData, searcher, this.getLineContent(startLineNumber).substr(startColumn), startLineNumber, startColumn, resultLen, result, captureMatches, limitResultCount);\n if (resultLen >= limitResultCount) {\n return result;\n }\n startLineNumber++;\n startPosition = this.nodeAt2(startLineNumber, 1);\n currentNode = startPosition.node;\n start = this.positionInBuffer(startPosition.node, startPosition.remainder);\n }\n if (startLineNumber === searchRange.endLineNumber) {\n let startColumn = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn - 1 : 0;\n const text = this.getLineContent(startLineNumber).substring(startColumn, searchRange.endColumn - 1);\n resultLen = this._findMatchesInLine(searchData, searcher, text, searchRange.endLineNumber, startColumn, resultLen, result, captureMatches, limitResultCount);\n return result;\n }\n let startColumn = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn : 1;\n resultLen = this.findMatchesInNode(endPosition.node, searcher, startLineNumber, startColumn, start, end, searchData, captureMatches, limitResultCount, resultLen, result);\n return result;\n }\n _findMatchesInLine(searchData, searcher, text, lineNumber, deltaOffset, resultLen, result, captureMatches, limitResultCount) {\n const wordSeparators = searchData.wordSeparators;\n if (!captureMatches && searchData.simpleSearch) {\n const searchString = searchData.simpleSearch;\n const searchStringLen = searchString.length;\n const textLength = text.length;\n let lastMatchIndex = -searchStringLen;\n while ((lastMatchIndex = text.indexOf(searchString, lastMatchIndex + searchStringLen)) !== -1) {\n if (!wordSeparators || isValidMatch(wordSeparators, text, textLength, lastMatchIndex, searchStringLen)) {\n result[resultLen++] = new FindMatch(new Range(lineNumber, lastMatchIndex + 1 + deltaOffset, lineNumber, lastMatchIndex + 1 + searchStringLen + deltaOffset), null);\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n }\n return resultLen;\n }\n let m;\n // Reset regex to search from the beginning\n searcher.reset(0);\n do {\n m = searcher.next(text);\n if (m) {\n result[resultLen++] = createFindMatch(new Range(lineNumber, m.index + 1 + deltaOffset, lineNumber, m.index + 1 + m[0].length + deltaOffset), m, captureMatches);\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n } while (m);\n return resultLen;\n }\n // #endregion\n // #region Piece Table\n insert(offset, value, eolNormalized = false) {\n this._EOLNormalized = this._EOLNormalized && eolNormalized;\n this._lastVisitedLine.lineNumber = 0;\n this._lastVisitedLine.value = '';\n if (this.root !== SENTINEL) {\n let { node, remainder, nodeStartOffset } = this.nodeAt(offset);\n let piece = node.piece;\n let bufferIndex = piece.bufferIndex;\n let insertPosInBuffer = this.positionInBuffer(node, remainder);\n if (node.piece.bufferIndex === 0 &&\n piece.end.line === this._lastChangeBufferPos.line &&\n piece.end.column === this._lastChangeBufferPos.column &&\n (nodeStartOffset + piece.length === offset) &&\n value.length < AverageBufferSize) {\n // changed buffer\n this.appendToNode(node, value);\n this.computeBufferMetadata();\n return;\n }\n if (nodeStartOffset === offset) {\n this.insertContentToNodeLeft(value, node);\n this._searchCache.validate(offset);\n }\n else if (nodeStartOffset + node.piece.length > offset) {\n // we are inserting into the middle of a node.\n let nodesToDel = [];\n let newRightPiece = new Piece(piece.bufferIndex, insertPosInBuffer, piece.end, this.getLineFeedCnt(piece.bufferIndex, insertPosInBuffer, piece.end), this.offsetInBuffer(bufferIndex, piece.end) - this.offsetInBuffer(bufferIndex, insertPosInBuffer));\n if (this.shouldCheckCRLF() && this.endWithCR(value)) {\n let headOfRight = this.nodeCharCodeAt(node, remainder);\n if (headOfRight === 10 /** \\n */) {\n let newStart = { line: newRightPiece.start.line + 1, column: 0 };\n newRightPiece = new Piece(newRightPiece.bufferIndex, newStart, newRightPiece.end, this.getLineFeedCnt(newRightPiece.bufferIndex, newStart, newRightPiece.end), newRightPiece.length - 1);\n value += '\\n';\n }\n }\n // reuse node for content before insertion point.\n if (this.shouldCheckCRLF() && this.startWithLF(value)) {\n let tailOfLeft = this.nodeCharCodeAt(node, remainder - 1);\n if (tailOfLeft === 13 /** \\r */) {\n let previousPos = this.positionInBuffer(node, remainder - 1);\n this.deleteNodeTail(node, previousPos);\n value = '\\r' + value;\n if (node.piece.length === 0) {\n nodesToDel.push(node);\n }\n }\n else {\n this.deleteNodeTail(node, insertPosInBuffer);\n }\n }\n else {\n this.deleteNodeTail(node, insertPosInBuffer);\n }\n let newPieces = this.createNewPieces(value);\n if (newRightPiece.length > 0) {\n this.rbInsertRight(node, newRightPiece);\n }\n let tmpNode = node;\n for (let k = 0; k < newPieces.length; k++) {\n tmpNode = this.rbInsertRight(tmpNode, newPieces[k]);\n }\n this.deleteNodes(nodesToDel);\n }\n else {\n this.insertContentToNodeRight(value, node);\n }\n }\n else {\n // insert new node\n let pieces = this.createNewPieces(value);\n let node = this.rbInsertLeft(null, pieces[0]);\n for (let k = 1; k < pieces.length; k++) {\n node = this.rbInsertRight(node, pieces[k]);\n }\n }\n // todo, this is too brutal. Total line feed count should be updated the same way as lf_left.\n this.computeBufferMetadata();\n }\n delete(offset, cnt) {\n this._lastVisitedLine.lineNumber = 0;\n this._lastVisitedLine.value = '';\n if (cnt <= 0 || this.root === SENTINEL) {\n return;\n }\n let startPosition = this.nodeAt(offset);\n let endPosition = this.nodeAt(offset + cnt);\n let startNode = startPosition.node;\n let endNode = endPosition.node;\n if (startNode === endNode) {\n let startSplitPosInBuffer = this.positionInBuffer(startNode, startPosition.remainder);\n let endSplitPosInBuffer = this.positionInBuffer(startNode, endPosition.remainder);\n if (startPosition.nodeStartOffset === offset) {\n if (cnt === startNode.piece.length) { // delete node\n let next = startNode.next();\n rbDelete(this, startNode);\n this.validateCRLFWithPrevNode(next);\n this.computeBufferMetadata();\n return;\n }\n this.deleteNodeHead(startNode, endSplitPosInBuffer);\n this._searchCache.validate(offset);\n this.validateCRLFWithPrevNode(startNode);\n this.computeBufferMetadata();\n return;\n }\n if (startPosition.nodeStartOffset + startNode.piece.length === offset + cnt) {\n this.deleteNodeTail(startNode, startSplitPosInBuffer);\n this.validateCRLFWithNextNode(startNode);\n this.computeBufferMetadata();\n return;\n }\n // delete content in the middle, this node will be splitted to nodes\n this.shrinkNode(startNode, startSplitPosInBuffer, endSplitPosInBuffer);\n this.computeBufferMetadata();\n return;\n }\n let nodesToDel = [];\n let startSplitPosInBuffer = this.positionInBuffer(startNode, startPosition.remainder);\n this.deleteNodeTail(startNode, startSplitPosInBuffer);\n this._searchCache.validate(offset);\n if (startNode.piece.length === 0) {\n nodesToDel.push(startNode);\n }\n // update last touched node\n let endSplitPosInBuffer = this.positionInBuffer(endNode, endPosition.remainder);\n this.deleteNodeHead(endNode, endSplitPosInBuffer);\n if (endNode.piece.length === 0) {\n nodesToDel.push(endNode);\n }\n // delete nodes in between\n let secondNode = startNode.next();\n for (let node = secondNode; node !== SENTINEL && node !== endNode; node = node.next()) {\n nodesToDel.push(node);\n }\n let prev = startNode.piece.length === 0 ? startNode.prev() : startNode;\n this.deleteNodes(nodesToDel);\n this.validateCRLFWithNextNode(prev);\n this.computeBufferMetadata();\n }\n insertContentToNodeLeft(value, node) {\n // we are inserting content to the beginning of node\n let nodesToDel = [];\n if (this.shouldCheckCRLF() && this.endWithCR(value) && this.startWithLF(node)) {\n // move `\\n` to new node.\n let piece = node.piece;\n let newStart = { line: piece.start.line + 1, column: 0 };\n let nPiece = new Piece(piece.bufferIndex, newStart, piece.end, this.getLineFeedCnt(piece.bufferIndex, newStart, piece.end), piece.length - 1);\n node.piece = nPiece;\n value += '\\n';\n updateTreeMetadata(this, node, -1, -1);\n if (node.piece.length === 0) {\n nodesToDel.push(node);\n }\n }\n let newPieces = this.createNewPieces(value);\n let newNode = this.rbInsertLeft(node, newPieces[newPieces.length - 1]);\n for (let k = newPieces.length - 2; k >= 0; k--) {\n newNode = this.rbInsertLeft(newNode, newPieces[k]);\n }\n this.validateCRLFWithPrevNode(newNode);\n this.deleteNodes(nodesToDel);\n }\n insertContentToNodeRight(value, node) {\n // we are inserting to the right of this node.\n if (this.adjustCarriageReturnFromNext(value, node)) {\n // move \\n to the new node.\n value += '\\n';\n }\n let newPieces = this.createNewPieces(value);\n let newNode = this.rbInsertRight(node, newPieces[0]);\n let tmpNode = newNode;\n for (let k = 1; k < newPieces.length; k++) {\n tmpNode = this.rbInsertRight(tmpNode, newPieces[k]);\n }\n this.validateCRLFWithPrevNode(newNode);\n }\n positionInBuffer(node, remainder, ret) {\n let piece = node.piece;\n let bufferIndex = node.piece.bufferIndex;\n let lineStarts = this._buffers[bufferIndex].lineStarts;\n let startOffset = lineStarts[piece.start.line] + piece.start.column;\n let offset = startOffset + remainder;\n // binary search offset between startOffset and endOffset\n let low = piece.start.line;\n let high = piece.end.line;\n let mid = 0;\n let midStop = 0;\n let midStart = 0;\n while (low <= high) {\n mid = low + ((high - low) / 2) | 0;\n midStart = lineStarts[mid];\n if (mid === high) {\n break;\n }\n midStop = lineStarts[mid + 1];\n if (offset < midStart) {\n high = mid - 1;\n }\n else if (offset >= midStop) {\n low = mid + 1;\n }\n else {\n break;\n }\n }\n if (ret) {\n ret.line = mid;\n ret.column = offset - midStart;\n return null;\n }\n return {\n line: mid,\n column: offset - midStart\n };\n }\n getLineFeedCnt(bufferIndex, start, end) {\n // we don't need to worry about start: abc\\r|\\n, or abc|\\r, or abc|\\n, or abc|\\r\\n doesn't change the fact that, there is one line break after start.\n // now let's take care of end: abc\\r|\\n, if end is in between \\r and \\n, we need to add line feed count by 1\n if (end.column === 0) {\n return end.line - start.line;\n }\n let lineStarts = this._buffers[bufferIndex].lineStarts;\n if (end.line === lineStarts.length - 1) { // it means, there is no \\n after end, otherwise, there will be one more lineStart.\n return end.line - start.line;\n }\n let nextLineStartOffset = lineStarts[end.line + 1];\n let endOffset = lineStarts[end.line] + end.column;\n if (nextLineStartOffset > endOffset + 1) { // there are more than 1 character after end, which means it can't be \\n\n return end.line - start.line;\n }\n // endOffset + 1 === nextLineStartOffset\n // character at endOffset is \\n, so we check the character before first\n // if character at endOffset is \\r, end.column is 0 and we can't get here.\n let previousCharOffset = endOffset - 1; // end.column > 0 so it's okay.\n let buffer = this._buffers[bufferIndex].buffer;\n if (buffer.charCodeAt(previousCharOffset) === 13) {\n return end.line - start.line + 1;\n }\n else {\n return end.line - start.line;\n }\n }\n offsetInBuffer(bufferIndex, cursor) {\n let lineStarts = this._buffers[bufferIndex].lineStarts;\n return lineStarts[cursor.line] + cursor.column;\n }\n deleteNodes(nodes) {\n for (let i = 0; i < nodes.length; i++) {\n rbDelete(this, nodes[i]);\n }\n }\n createNewPieces(text) {\n if (text.length > AverageBufferSize) {\n // the content is large, operations like substring, charCode becomes slow\n // so here we split it into smaller chunks, just like what we did for CR/LF normalization\n let newPieces = [];\n while (text.length > AverageBufferSize) {\n const lastChar = text.charCodeAt(AverageBufferSize - 1);\n let splitText;\n if (lastChar === 13 /* CarriageReturn */ || (lastChar >= 0xD800 && lastChar <= 0xDBFF)) {\n // last character is \\r or a high surrogate => keep it back\n splitText = text.substring(0, AverageBufferSize - 1);\n text = text.substring(AverageBufferSize - 1);\n }\n else {\n splitText = text.substring(0, AverageBufferSize);\n text = text.substring(AverageBufferSize);\n }\n let lineStarts = createLineStartsFast(splitText);\n newPieces.push(new Piece(this._buffers.length, /* buffer index */ { line: 0, column: 0 }, { line: lineStarts.length - 1, column: splitText.length - lineStarts[lineStarts.length - 1] }, lineStarts.length - 1, splitText.length));\n this._buffers.push(new StringBuffer(splitText, lineStarts));\n }\n let lineStarts = createLineStartsFast(text);\n newPieces.push(new Piece(this._buffers.length, /* buffer index */ { line: 0, column: 0 }, { line: lineStarts.length - 1, column: text.length - lineStarts[lineStarts.length - 1] }, lineStarts.length - 1, text.length));\n this._buffers.push(new StringBuffer(text, lineStarts));\n return newPieces;\n }\n let startOffset = this._buffers[0].buffer.length;\n const lineStarts = createLineStartsFast(text, false);\n let start = this._lastChangeBufferPos;\n if (this._buffers[0].lineStarts[this._buffers[0].lineStarts.length - 1] === startOffset\n && startOffset !== 0\n && this.startWithLF(text)\n && this.endWithCR(this._buffers[0].buffer) // todo, we can check this._lastChangeBufferPos's column as it's the last one\n ) {\n this._lastChangeBufferPos = { line: this._lastChangeBufferPos.line, column: this._lastChangeBufferPos.column + 1 };\n start = this._lastChangeBufferPos;\n for (let i = 0; i < lineStarts.length; i++) {\n lineStarts[i] += startOffset + 1;\n }\n this._buffers[0].lineStarts = this._buffers[0].lineStarts.concat(lineStarts.slice(1));\n this._buffers[0].buffer += '_' + text;\n startOffset += 1;\n }\n else {\n if (startOffset !== 0) {\n for (let i = 0; i < lineStarts.length; i++) {\n lineStarts[i] += startOffset;\n }\n }\n this._buffers[0].lineStarts = this._buffers[0].lineStarts.concat(lineStarts.slice(1));\n this._buffers[0].buffer += text;\n }\n const endOffset = this._buffers[0].buffer.length;\n let endIndex = this._buffers[0].lineStarts.length - 1;\n let endColumn = endOffset - this._buffers[0].lineStarts[endIndex];\n let endPos = { line: endIndex, column: endColumn };\n let newPiece = new Piece(0, /** todo@peng */ start, endPos, this.getLineFeedCnt(0, start, endPos), endOffset - startOffset);\n this._lastChangeBufferPos = endPos;\n return [newPiece];\n }\n getLineRawContent(lineNumber, endOffset = 0) {\n let x = this.root;\n let ret = '';\n let cache = this._searchCache.get2(lineNumber);\n if (cache) {\n x = cache.node;\n let prevAccumulatedValue = this.getAccumulatedValue(x, lineNumber - cache.nodeStartLineNumber - 1);\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n if (cache.nodeStartLineNumber + x.piece.lineFeedCnt === lineNumber) {\n ret = buffer.substring(startOffset + prevAccumulatedValue, startOffset + x.piece.length);\n }\n else {\n let accumulatedValue = this.getAccumulatedValue(x, lineNumber - cache.nodeStartLineNumber);\n return buffer.substring(startOffset + prevAccumulatedValue, startOffset + accumulatedValue - endOffset);\n }\n }\n else {\n let nodeStartOffset = 0;\n const originalLineNumber = lineNumber;\n while (x !== SENTINEL) {\n if (x.left !== SENTINEL && x.lf_left >= lineNumber - 1) {\n x = x.left;\n }\n else if (x.lf_left + x.piece.lineFeedCnt > lineNumber - 1) {\n let prevAccumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n let accumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 1);\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n nodeStartOffset += x.size_left;\n this._searchCache.set({\n node: x,\n nodeStartOffset,\n nodeStartLineNumber: originalLineNumber - (lineNumber - 1 - x.lf_left)\n });\n return buffer.substring(startOffset + prevAccumulatedValue, startOffset + accumulatedValue - endOffset);\n }\n else if (x.lf_left + x.piece.lineFeedCnt === lineNumber - 1) {\n let prevAccumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n ret = buffer.substring(startOffset + prevAccumulatedValue, startOffset + x.piece.length);\n break;\n }\n else {\n lineNumber -= x.lf_left + x.piece.lineFeedCnt;\n nodeStartOffset += x.size_left + x.piece.length;\n x = x.right;\n }\n }\n }\n // search in order, to find the node contains end column\n x = x.next();\n while (x !== SENTINEL) {\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n if (x.piece.lineFeedCnt > 0) {\n let accumulatedValue = this.getAccumulatedValue(x, 0);\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n ret += buffer.substring(startOffset, startOffset + accumulatedValue - endOffset);\n return ret;\n }\n else {\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n ret += buffer.substr(startOffset, x.piece.length);\n }\n x = x.next();\n }\n return ret;\n }\n computeBufferMetadata() {\n let x = this.root;\n let lfCnt = 1;\n let len = 0;\n while (x !== SENTINEL) {\n lfCnt += x.lf_left + x.piece.lineFeedCnt;\n len += x.size_left + x.piece.length;\n x = x.right;\n }\n this._lineCnt = lfCnt;\n this._length = len;\n this._searchCache.validate(this._length);\n }\n // #region node operations\n getIndexOf(node, accumulatedValue) {\n let piece = node.piece;\n let pos = this.positionInBuffer(node, accumulatedValue);\n let lineCnt = pos.line - piece.start.line;\n if (this.offsetInBuffer(piece.bufferIndex, piece.end) - this.offsetInBuffer(piece.bufferIndex, piece.start) === accumulatedValue) {\n // we are checking the end of this node, so a CRLF check is necessary.\n let realLineCnt = this.getLineFeedCnt(node.piece.bufferIndex, piece.start, pos);\n if (realLineCnt !== lineCnt) {\n // aha yes, CRLF\n return { index: realLineCnt, remainder: 0 };\n }\n }\n return { index: lineCnt, remainder: pos.column };\n }\n getAccumulatedValue(node, index) {\n if (index < 0) {\n return 0;\n }\n let piece = node.piece;\n let lineStarts = this._buffers[piece.bufferIndex].lineStarts;\n let expectedLineStartIndex = piece.start.line + index + 1;\n if (expectedLineStartIndex > piece.end.line) {\n return lineStarts[piece.end.line] + piece.end.column - lineStarts[piece.start.line] - piece.start.column;\n }\n else {\n return lineStarts[expectedLineStartIndex] - lineStarts[piece.start.line] - piece.start.column;\n }\n }\n deleteNodeTail(node, pos) {\n const piece = node.piece;\n const originalLFCnt = piece.lineFeedCnt;\n const originalEndOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\n const newEnd = pos;\n const newEndOffset = this.offsetInBuffer(piece.bufferIndex, newEnd);\n const newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, piece.start, newEnd);\n const lf_delta = newLineFeedCnt - originalLFCnt;\n const size_delta = newEndOffset - originalEndOffset;\n const newLength = piece.length + size_delta;\n node.piece = new Piece(piece.bufferIndex, piece.start, newEnd, newLineFeedCnt, newLength);\n updateTreeMetadata(this, node, size_delta, lf_delta);\n }\n deleteNodeHead(node, pos) {\n const piece = node.piece;\n const originalLFCnt = piece.lineFeedCnt;\n const originalStartOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\n const newStart = pos;\n const newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, newStart, piece.end);\n const newStartOffset = this.offsetInBuffer(piece.bufferIndex, newStart);\n const lf_delta = newLineFeedCnt - originalLFCnt;\n const size_delta = originalStartOffset - newStartOffset;\n const newLength = piece.length + size_delta;\n node.piece = new Piece(piece.bufferIndex, newStart, piece.end, newLineFeedCnt, newLength);\n updateTreeMetadata(this, node, size_delta, lf_delta);\n }\n shrinkNode(node, start, end) {\n const piece = node.piece;\n const originalStartPos = piece.start;\n const originalEndPos = piece.end;\n // old piece, originalStartPos, start\n const oldLength = piece.length;\n const oldLFCnt = piece.lineFeedCnt;\n const newEnd = start;\n const newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, piece.start, newEnd);\n const newLength = this.offsetInBuffer(piece.bufferIndex, start) - this.offsetInBuffer(piece.bufferIndex, originalStartPos);\n node.piece = new Piece(piece.bufferIndex, piece.start, newEnd, newLineFeedCnt, newLength);\n updateTreeMetadata(this, node, newLength - oldLength, newLineFeedCnt - oldLFCnt);\n // new right piece, end, originalEndPos\n let newPiece = new Piece(piece.bufferIndex, end, originalEndPos, this.getLineFeedCnt(piece.bufferIndex, end, originalEndPos), this.offsetInBuffer(piece.bufferIndex, originalEndPos) - this.offsetInBuffer(piece.bufferIndex, end));\n let newNode = this.rbInsertRight(node, newPiece);\n this.validateCRLFWithPrevNode(newNode);\n }\n appendToNode(node, value) {\n if (this.adjustCarriageReturnFromNext(value, node)) {\n value += '\\n';\n }\n const hitCRLF = this.shouldCheckCRLF() && this.startWithLF(value) && this.endWithCR(node);\n const startOffset = this._buffers[0].buffer.length;\n this._buffers[0].buffer += value;\n const lineStarts = createLineStartsFast(value, false);\n for (let i = 0; i < lineStarts.length; i++) {\n lineStarts[i] += startOffset;\n }\n if (hitCRLF) {\n let prevStartOffset = this._buffers[0].lineStarts[this._buffers[0].lineStarts.length - 2];\n this._buffers[0].lineStarts.pop();\n // _lastChangeBufferPos is already wrong\n this._lastChangeBufferPos = { line: this._lastChangeBufferPos.line - 1, column: startOffset - prevStartOffset };\n }\n this._buffers[0].lineStarts = this._buffers[0].lineStarts.concat(lineStarts.slice(1));\n const endIndex = this._buffers[0].lineStarts.length - 1;\n const endColumn = this._buffers[0].buffer.length - this._buffers[0].lineStarts[endIndex];\n const newEnd = { line: endIndex, column: endColumn };\n const newLength = node.piece.length + value.length;\n const oldLineFeedCnt = node.piece.lineFeedCnt;\n const newLineFeedCnt = this.getLineFeedCnt(0, node.piece.start, newEnd);\n const lf_delta = newLineFeedCnt - oldLineFeedCnt;\n node.piece = new Piece(node.piece.bufferIndex, node.piece.start, newEnd, newLineFeedCnt, newLength);\n this._lastChangeBufferPos = newEnd;\n updateTreeMetadata(this, node, value.length, lf_delta);\n }\n nodeAt(offset) {\n let x = this.root;\n let cache = this._searchCache.get(offset);\n if (cache) {\n return {\n node: cache.node,\n nodeStartOffset: cache.nodeStartOffset,\n remainder: offset - cache.nodeStartOffset\n };\n }\n let nodeStartOffset = 0;\n while (x !== SENTINEL) {\n if (x.size_left > offset) {\n x = x.left;\n }\n else if (x.size_left + x.piece.length >= offset) {\n nodeStartOffset += x.size_left;\n let ret = {\n node: x,\n remainder: offset - x.size_left,\n nodeStartOffset\n };\n this._searchCache.set(ret);\n return ret;\n }\n else {\n offset -= x.size_left + x.piece.length;\n nodeStartOffset += x.size_left + x.piece.length;\n x = x.right;\n }\n }\n return null;\n }\n nodeAt2(lineNumber, column) {\n let x = this.root;\n let nodeStartOffset = 0;\n while (x !== SENTINEL) {\n if (x.left !== SENTINEL && x.lf_left >= lineNumber - 1) {\n x = x.left;\n }\n else if (x.lf_left + x.piece.lineFeedCnt > lineNumber - 1) {\n let prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n let accumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 1);\n nodeStartOffset += x.size_left;\n return {\n node: x,\n remainder: Math.min(prevAccumualtedValue + column - 1, accumulatedValue),\n nodeStartOffset\n };\n }\n else if (x.lf_left + x.piece.lineFeedCnt === lineNumber - 1) {\n let prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n if (prevAccumualtedValue + column - 1 <= x.piece.length) {\n return {\n node: x,\n remainder: prevAccumualtedValue + column - 1,\n nodeStartOffset\n };\n }\n else {\n column -= x.piece.length - prevAccumualtedValue;\n break;\n }\n }\n else {\n lineNumber -= x.lf_left + x.piece.lineFeedCnt;\n nodeStartOffset += x.size_left + x.piece.length;\n x = x.right;\n }\n }\n // search in order, to find the node contains position.column\n x = x.next();\n while (x !== SENTINEL) {\n if (x.piece.lineFeedCnt > 0) {\n let accumulatedValue = this.getAccumulatedValue(x, 0);\n let nodeStartOffset = this.offsetOfNode(x);\n return {\n node: x,\n remainder: Math.min(column - 1, accumulatedValue),\n nodeStartOffset\n };\n }\n else {\n if (x.piece.length >= column - 1) {\n let nodeStartOffset = this.offsetOfNode(x);\n return {\n node: x,\n remainder: column - 1,\n nodeStartOffset\n };\n }\n else {\n column -= x.piece.length;\n }\n }\n x = x.next();\n }\n return null;\n }\n nodeCharCodeAt(node, offset) {\n if (node.piece.lineFeedCnt < 1) {\n return -1;\n }\n let buffer = this._buffers[node.piece.bufferIndex];\n let newOffset = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start) + offset;\n return buffer.buffer.charCodeAt(newOffset);\n }\n offsetOfNode(node) {\n if (!node) {\n return 0;\n }\n let pos = node.size_left;\n while (node !== this.root) {\n if (node.parent.right === node) {\n pos += node.parent.size_left + node.parent.piece.length;\n }\n node = node.parent;\n }\n return pos;\n }\n // #endregion\n // #region CRLF\n shouldCheckCRLF() {\n return !(this._EOLNormalized && this._EOL === '\\n');\n }\n startWithLF(val) {\n if (typeof val === 'string') {\n return val.charCodeAt(0) === 10;\n }\n if (val === SENTINEL || val.piece.lineFeedCnt === 0) {\n return false;\n }\n let piece = val.piece;\n let lineStarts = this._buffers[piece.bufferIndex].lineStarts;\n let line = piece.start.line;\n let startOffset = lineStarts[line] + piece.start.column;\n if (line === lineStarts.length - 1) {\n // last line, so there is no line feed at the end of this line\n return false;\n }\n let nextLineOffset = lineStarts[line + 1];\n if (nextLineOffset > startOffset + 1) {\n return false;\n }\n return this._buffers[piece.bufferIndex].buffer.charCodeAt(startOffset) === 10;\n }\n endWithCR(val) {\n if (typeof val === 'string') {\n return val.charCodeAt(val.length - 1) === 13;\n }\n if (val === SENTINEL || val.piece.lineFeedCnt === 0) {\n return false;\n }\n return this.nodeCharCodeAt(val, val.piece.length - 1) === 13;\n }\n validateCRLFWithPrevNode(nextNode) {\n if (this.shouldCheckCRLF() && this.startWithLF(nextNode)) {\n let node = nextNode.prev();\n if (this.endWithCR(node)) {\n this.fixCRLF(node, nextNode);\n }\n }\n }\n validateCRLFWithNextNode(node) {\n if (this.shouldCheckCRLF() && this.endWithCR(node)) {\n let nextNode = node.next();\n if (this.startWithLF(nextNode)) {\n this.fixCRLF(node, nextNode);\n }\n }\n }\n fixCRLF(prev, next) {\n let nodesToDel = [];\n // update node\n let lineStarts = this._buffers[prev.piece.bufferIndex].lineStarts;\n let newEnd;\n if (prev.piece.end.column === 0) {\n // it means, last line ends with \\r, not \\r\\n\n newEnd = { line: prev.piece.end.line - 1, column: lineStarts[prev.piece.end.line] - lineStarts[prev.piece.end.line - 1] - 1 };\n }\n else {\n // \\r\\n\n newEnd = { line: prev.piece.end.line, column: prev.piece.end.column - 1 };\n }\n const prevNewLength = prev.piece.length - 1;\n const prevNewLFCnt = prev.piece.lineFeedCnt - 1;\n prev.piece = new Piece(prev.piece.bufferIndex, prev.piece.start, newEnd, prevNewLFCnt, prevNewLength);\n updateTreeMetadata(this, prev, -1, -1);\n if (prev.piece.length === 0) {\n nodesToDel.push(prev);\n }\n // update nextNode\n let newStart = { line: next.piece.start.line + 1, column: 0 };\n const newLength = next.piece.length - 1;\n const newLineFeedCnt = this.getLineFeedCnt(next.piece.bufferIndex, newStart, next.piece.end);\n next.piece = new Piece(next.piece.bufferIndex, newStart, next.piece.end, newLineFeedCnt, newLength);\n updateTreeMetadata(this, next, -1, -1);\n if (next.piece.length === 0) {\n nodesToDel.push(next);\n }\n // create new piece which contains \\r\\n\n let pieces = this.createNewPieces('\\r\\n');\n this.rbInsertRight(prev, pieces[0]);\n // delete empty nodes\n for (let i = 0; i < nodesToDel.length; i++) {\n rbDelete(this, nodesToDel[i]);\n }\n }\n adjustCarriageReturnFromNext(value, node) {\n if (this.shouldCheckCRLF() && this.endWithCR(value)) {\n let nextNode = node.next();\n if (this.startWithLF(nextNode)) {\n // move `\\n` forward\n value += '\\n';\n if (nextNode.piece.length === 1) {\n rbDelete(this, nextNode);\n }\n else {\n const piece = nextNode.piece;\n const newStart = { line: piece.start.line + 1, column: 0 };\n const newLength = piece.length - 1;\n const newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, newStart, piece.end);\n nextNode.piece = new Piece(piece.bufferIndex, newStart, piece.end, newLineFeedCnt, newLength);\n updateTreeMetadata(this, nextNode, -1, -1);\n }\n return true;\n }\n }\n return false;\n }\n // #endregion\n // #endregion\n // #region Tree operations\n iterate(node, callback) {\n if (node === SENTINEL) {\n return callback(SENTINEL);\n }\n let leftRet = this.iterate(node.left, callback);\n if (!leftRet) {\n return leftRet;\n }\n return callback(node) && this.iterate(node.right, callback);\n }\n getNodeContent(node) {\n if (node === SENTINEL) {\n return '';\n }\n let buffer = this._buffers[node.piece.bufferIndex];\n let currentContent;\n let piece = node.piece;\n let startOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\n let endOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\n currentContent = buffer.buffer.substring(startOffset, endOffset);\n return currentContent;\n }\n getPieceContent(piece) {\n let buffer = this._buffers[piece.bufferIndex];\n let startOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\n let endOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\n let currentContent = buffer.buffer.substring(startOffset, endOffset);\n return currentContent;\n }\n /**\n * node node\n * / \\ / \\\n * a b <---- a b\n * /\n * z\n */\n rbInsertRight(node, p) {\n let z = new TreeNode(p, 1 /* Red */);\n z.left = SENTINEL;\n z.right = SENTINEL;\n z.parent = SENTINEL;\n z.size_left = 0;\n z.lf_left = 0;\n let x = this.root;\n if (x === SENTINEL) {\n this.root = z;\n z.color = 0 /* Black */;\n }\n else if (node.right === SENTINEL) {\n node.right = z;\n z.parent = node;\n }\n else {\n let nextNode = leftest(node.right);\n nextNode.left = z;\n z.parent = nextNode;\n }\n fixInsert(this, z);\n return z;\n }\n /**\n * node node\n * / \\ / \\\n * a b ----> a b\n * \\\n * z\n */\n rbInsertLeft(node, p) {\n let z = new TreeNode(p, 1 /* Red */);\n z.left = SENTINEL;\n z.right = SENTINEL;\n z.parent = SENTINEL;\n z.size_left = 0;\n z.lf_left = 0;\n if (this.root === SENTINEL) {\n this.root = z;\n z.color = 0 /* Black */;\n }\n else if (node.left === SENTINEL) {\n node.left = z;\n z.parent = node;\n }\n else {\n let prevNode = righttest(node.left); // a\n prevNode.right = z;\n z.parent = prevNode;\n }\n fixInsert(this, z);\n return z;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../../base/common/event.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { Range } from '../../core/range.js';\nimport { ApplyEditsResult } from '../../model.js';\nimport { PieceTreeBase } from './pieceTreeBase.js';\nimport { countEOL } from '../tokensStore.js';\nimport { TextChange } from '../textChange.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nexport class PieceTreeTextBuffer extends Disposable {\n constructor(chunks, BOM, eol, containsRTL, containsUnusualLineTerminators, isBasicASCII, eolNormalized) {\n super();\n this._onDidChangeContent = this._register(new Emitter());\n this._BOM = BOM;\n this._mightContainNonBasicASCII = !isBasicASCII;\n this._mightContainRTL = containsRTL;\n this._mightContainUnusualLineTerminators = containsUnusualLineTerminators;\n this._pieceTree = new PieceTreeBase(chunks, eol, eolNormalized);\n }\n mightContainRTL() {\n return this._mightContainRTL;\n }\n mightContainUnusualLineTerminators() {\n return this._mightContainUnusualLineTerminators;\n }\n resetMightContainUnusualLineTerminators() {\n this._mightContainUnusualLineTerminators = false;\n }\n mightContainNonBasicASCII() {\n return this._mightContainNonBasicASCII;\n }\n getBOM() {\n return this._BOM;\n }\n getEOL() {\n return this._pieceTree.getEOL();\n }\n createSnapshot(preserveBOM) {\n return this._pieceTree.createSnapshot(preserveBOM ? this._BOM : '');\n }\n getOffsetAt(lineNumber, column) {\n return this._pieceTree.getOffsetAt(lineNumber, column);\n }\n getPositionAt(offset) {\n return this._pieceTree.getPositionAt(offset);\n }\n getRangeAt(start, length) {\n let end = start + length;\n const startPosition = this.getPositionAt(start);\n const endPosition = this.getPositionAt(end);\n return new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column);\n }\n getValueInRange(range, eol = 0 /* TextDefined */) {\n if (range.isEmpty()) {\n return '';\n }\n const lineEnding = this._getEndOfLine(eol);\n return this._pieceTree.getValueInRange(range, lineEnding);\n }\n getValueLengthInRange(range, eol = 0 /* TextDefined */) {\n if (range.isEmpty()) {\n return 0;\n }\n if (range.startLineNumber === range.endLineNumber) {\n return (range.endColumn - range.startColumn);\n }\n let startOffset = this.getOffsetAt(range.startLineNumber, range.startColumn);\n let endOffset = this.getOffsetAt(range.endLineNumber, range.endColumn);\n return endOffset - startOffset;\n }\n getCharacterCountInRange(range, eol = 0 /* TextDefined */) {\n if (this._mightContainNonBasicASCII) {\n // we must count by iterating\n let result = 0;\n const fromLineNumber = range.startLineNumber;\n const toLineNumber = range.endLineNumber;\n for (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n const lineContent = this.getLineContent(lineNumber);\n const fromOffset = (lineNumber === fromLineNumber ? range.startColumn - 1 : 0);\n const toOffset = (lineNumber === toLineNumber ? range.endColumn - 1 : lineContent.length);\n for (let offset = fromOffset; offset < toOffset; offset++) {\n if (strings.isHighSurrogate(lineContent.charCodeAt(offset))) {\n result = result + 1;\n offset = offset + 1;\n }\n else {\n result = result + 1;\n }\n }\n }\n result += this._getEndOfLine(eol).length * (toLineNumber - fromLineNumber);\n return result;\n }\n return this.getValueLengthInRange(range, eol);\n }\n getLength() {\n return this._pieceTree.getLength();\n }\n getLineCount() {\n return this._pieceTree.getLineCount();\n }\n getLinesContent() {\n return this._pieceTree.getLinesContent();\n }\n getLineContent(lineNumber) {\n return this._pieceTree.getLineContent(lineNumber);\n }\n getLineCharCode(lineNumber, index) {\n return this._pieceTree.getLineCharCode(lineNumber, index);\n }\n getLineLength(lineNumber) {\n return this._pieceTree.getLineLength(lineNumber);\n }\n getLineFirstNonWhitespaceColumn(lineNumber) {\n const result = strings.firstNonWhitespaceIndex(this.getLineContent(lineNumber));\n if (result === -1) {\n return 0;\n }\n return result + 1;\n }\n getLineLastNonWhitespaceColumn(lineNumber) {\n const result = strings.lastNonWhitespaceIndex(this.getLineContent(lineNumber));\n if (result === -1) {\n return 0;\n }\n return result + 2;\n }\n _getEndOfLine(eol) {\n switch (eol) {\n case 1 /* LF */:\n return '\\n';\n case 2 /* CRLF */:\n return '\\r\\n';\n case 0 /* TextDefined */:\n return this.getEOL();\n default:\n throw new Error('Unknown EOL preference');\n }\n }\n setEOL(newEOL) {\n this._pieceTree.setEOL(newEOL);\n }\n applyEdits(rawOperations, recordTrimAutoWhitespace, computeUndoEdits) {\n let mightContainRTL = this._mightContainRTL;\n let mightContainUnusualLineTerminators = this._mightContainUnusualLineTerminators;\n let mightContainNonBasicASCII = this._mightContainNonBasicASCII;\n let canReduceOperations = true;\n let operations = [];\n for (let i = 0; i < rawOperations.length; i++) {\n let op = rawOperations[i];\n if (canReduceOperations && op._isTracked) {\n canReduceOperations = false;\n }\n let validatedRange = op.range;\n if (op.text) {\n let textMightContainNonBasicASCII = true;\n if (!mightContainNonBasicASCII) {\n textMightContainNonBasicASCII = !strings.isBasicASCII(op.text);\n mightContainNonBasicASCII = textMightContainNonBasicASCII;\n }\n if (!mightContainRTL && textMightContainNonBasicASCII) {\n // check if the new inserted text contains RTL\n mightContainRTL = strings.containsRTL(op.text);\n }\n if (!mightContainUnusualLineTerminators && textMightContainNonBasicASCII) {\n // check if the new inserted text contains unusual line terminators\n mightContainUnusualLineTerminators = strings.containsUnusualLineTerminators(op.text);\n }\n }\n let validText = '';\n let eolCount = 0;\n let firstLineLength = 0;\n let lastLineLength = 0;\n if (op.text) {\n let strEOL;\n [eolCount, firstLineLength, lastLineLength, strEOL] = countEOL(op.text);\n const bufferEOL = this.getEOL();\n const expectedStrEOL = (bufferEOL === '\\r\\n' ? 2 /* CRLF */ : 1 /* LF */);\n if (strEOL === 0 /* Unknown */ || strEOL === expectedStrEOL) {\n validText = op.text;\n }\n else {\n validText = op.text.replace(/\\r\\n|\\r|\\n/g, bufferEOL);\n }\n }\n operations[i] = {\n sortIndex: i,\n identifier: op.identifier || null,\n range: validatedRange,\n rangeOffset: this.getOffsetAt(validatedRange.startLineNumber, validatedRange.startColumn),\n rangeLength: this.getValueLengthInRange(validatedRange),\n text: validText,\n eolCount: eolCount,\n firstLineLength: firstLineLength,\n lastLineLength: lastLineLength,\n forceMoveMarkers: Boolean(op.forceMoveMarkers),\n isAutoWhitespaceEdit: op.isAutoWhitespaceEdit || false\n };\n }\n // Sort operations ascending\n operations.sort(PieceTreeTextBuffer._sortOpsAscending);\n let hasTouchingRanges = false;\n for (let i = 0, count = operations.length - 1; i < count; i++) {\n let rangeEnd = operations[i].range.getEndPosition();\n let nextRangeStart = operations[i + 1].range.getStartPosition();\n if (nextRangeStart.isBeforeOrEqual(rangeEnd)) {\n if (nextRangeStart.isBefore(rangeEnd)) {\n // overlapping ranges\n throw new Error('Overlapping ranges are not allowed!');\n }\n hasTouchingRanges = true;\n }\n }\n if (canReduceOperations) {\n operations = this._reduceOperations(operations);\n }\n // Delta encode operations\n let reverseRanges = (computeUndoEdits || recordTrimAutoWhitespace ? PieceTreeTextBuffer._getInverseEditRanges(operations) : []);\n let newTrimAutoWhitespaceCandidates = [];\n if (recordTrimAutoWhitespace) {\n for (let i = 0; i < operations.length; i++) {\n let op = operations[i];\n let reverseRange = reverseRanges[i];\n if (op.isAutoWhitespaceEdit && op.range.isEmpty()) {\n // Record already the future line numbers that might be auto whitespace removal candidates on next edit\n for (let lineNumber = reverseRange.startLineNumber; lineNumber <= reverseRange.endLineNumber; lineNumber++) {\n let currentLineContent = '';\n if (lineNumber === reverseRange.startLineNumber) {\n currentLineContent = this.getLineContent(op.range.startLineNumber);\n if (strings.firstNonWhitespaceIndex(currentLineContent) !== -1) {\n continue;\n }\n }\n newTrimAutoWhitespaceCandidates.push({ lineNumber: lineNumber, oldContent: currentLineContent });\n }\n }\n }\n }\n let reverseOperations = null;\n if (computeUndoEdits) {\n let reverseRangeDeltaOffset = 0;\n reverseOperations = [];\n for (let i = 0; i < operations.length; i++) {\n const op = operations[i];\n const reverseRange = reverseRanges[i];\n const bufferText = this.getValueInRange(op.range);\n const reverseRangeOffset = op.rangeOffset + reverseRangeDeltaOffset;\n reverseRangeDeltaOffset += (op.text.length - bufferText.length);\n reverseOperations[i] = {\n sortIndex: op.sortIndex,\n identifier: op.identifier,\n range: reverseRange,\n text: bufferText,\n textChange: new TextChange(op.rangeOffset, bufferText, reverseRangeOffset, op.text)\n };\n }\n // Can only sort reverse operations when the order is not significant\n if (!hasTouchingRanges) {\n reverseOperations.sort((a, b) => a.sortIndex - b.sortIndex);\n }\n }\n this._mightContainRTL = mightContainRTL;\n this._mightContainUnusualLineTerminators = mightContainUnusualLineTerminators;\n this._mightContainNonBasicASCII = mightContainNonBasicASCII;\n const contentChanges = this._doApplyEdits(operations);\n let trimAutoWhitespaceLineNumbers = null;\n if (recordTrimAutoWhitespace && newTrimAutoWhitespaceCandidates.length > 0) {\n // sort line numbers auto whitespace removal candidates for next edit descending\n newTrimAutoWhitespaceCandidates.sort((a, b) => b.lineNumber - a.lineNumber);\n trimAutoWhitespaceLineNumbers = [];\n for (let i = 0, len = newTrimAutoWhitespaceCandidates.length; i < len; i++) {\n let lineNumber = newTrimAutoWhitespaceCandidates[i].lineNumber;\n if (i > 0 && newTrimAutoWhitespaceCandidates[i - 1].lineNumber === lineNumber) {\n // Do not have the same line number twice\n continue;\n }\n let prevContent = newTrimAutoWhitespaceCandidates[i].oldContent;\n let lineContent = this.getLineContent(lineNumber);\n if (lineContent.length === 0 || lineContent === prevContent || strings.firstNonWhitespaceIndex(lineContent) !== -1) {\n continue;\n }\n trimAutoWhitespaceLineNumbers.push(lineNumber);\n }\n }\n this._onDidChangeContent.fire();\n return new ApplyEditsResult(reverseOperations, contentChanges, trimAutoWhitespaceLineNumbers);\n }\n /**\n * Transform operations such that they represent the same logic edit,\n * but that they also do not cause OOM crashes.\n */\n _reduceOperations(operations) {\n if (operations.length < 1000) {\n // We know from empirical testing that a thousand edits work fine regardless of their shape.\n return operations;\n }\n // At one point, due to how events are emitted and how each operation is handled,\n // some operations can trigger a high amount of temporary string allocations,\n // that will immediately get edited again.\n // e.g. a formatter inserting ridiculous ammounts of \\n on a model with a single line\n // Therefore, the strategy is to collapse all the operations into a huge single edit operation\n return [this._toSingleEditOperation(operations)];\n }\n _toSingleEditOperation(operations) {\n let forceMoveMarkers = false;\n const firstEditRange = operations[0].range;\n const lastEditRange = operations[operations.length - 1].range;\n const entireEditRange = new Range(firstEditRange.startLineNumber, firstEditRange.startColumn, lastEditRange.endLineNumber, lastEditRange.endColumn);\n let lastEndLineNumber = firstEditRange.startLineNumber;\n let lastEndColumn = firstEditRange.startColumn;\n const result = [];\n for (let i = 0, len = operations.length; i < len; i++) {\n const operation = operations[i];\n const range = operation.range;\n forceMoveMarkers = forceMoveMarkers || operation.forceMoveMarkers;\n // (1) -- Push old text\n result.push(this.getValueInRange(new Range(lastEndLineNumber, lastEndColumn, range.startLineNumber, range.startColumn)));\n // (2) -- Push new text\n if (operation.text.length > 0) {\n result.push(operation.text);\n }\n lastEndLineNumber = range.endLineNumber;\n lastEndColumn = range.endColumn;\n }\n const text = result.join('');\n const [eolCount, firstLineLength, lastLineLength] = countEOL(text);\n return {\n sortIndex: 0,\n identifier: operations[0].identifier,\n range: entireEditRange,\n rangeOffset: this.getOffsetAt(entireEditRange.startLineNumber, entireEditRange.startColumn),\n rangeLength: this.getValueLengthInRange(entireEditRange, 0 /* TextDefined */),\n text: text,\n eolCount: eolCount,\n firstLineLength: firstLineLength,\n lastLineLength: lastLineLength,\n forceMoveMarkers: forceMoveMarkers,\n isAutoWhitespaceEdit: false\n };\n }\n _doApplyEdits(operations) {\n operations.sort(PieceTreeTextBuffer._sortOpsDescending);\n let contentChanges = [];\n // operations are from bottom to top\n for (let i = 0; i < operations.length; i++) {\n let op = operations[i];\n const startLineNumber = op.range.startLineNumber;\n const startColumn = op.range.startColumn;\n const endLineNumber = op.range.endLineNumber;\n const endColumn = op.range.endColumn;\n if (startLineNumber === endLineNumber && startColumn === endColumn && op.text.length === 0) {\n // no-op\n continue;\n }\n if (op.text) {\n // replacement\n this._pieceTree.delete(op.rangeOffset, op.rangeLength);\n this._pieceTree.insert(op.rangeOffset, op.text, true);\n }\n else {\n // deletion\n this._pieceTree.delete(op.rangeOffset, op.rangeLength);\n }\n const contentChangeRange = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n contentChanges.push({\n range: contentChangeRange,\n rangeLength: op.rangeLength,\n text: op.text,\n rangeOffset: op.rangeOffset,\n forceMoveMarkers: op.forceMoveMarkers\n });\n }\n return contentChanges;\n }\n findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount) {\n return this._pieceTree.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);\n }\n /**\n * Assumes `operations` are validated and sorted ascending\n */\n static _getInverseEditRanges(operations) {\n let result = [];\n let prevOpEndLineNumber = 0;\n let prevOpEndColumn = 0;\n let prevOp = null;\n for (let i = 0, len = operations.length; i < len; i++) {\n let op = operations[i];\n let startLineNumber;\n let startColumn;\n if (prevOp) {\n if (prevOp.range.endLineNumber === op.range.startLineNumber) {\n startLineNumber = prevOpEndLineNumber;\n startColumn = prevOpEndColumn + (op.range.startColumn - prevOp.range.endColumn);\n }\n else {\n startLineNumber = prevOpEndLineNumber + (op.range.startLineNumber - prevOp.range.endLineNumber);\n startColumn = op.range.startColumn;\n }\n }\n else {\n startLineNumber = op.range.startLineNumber;\n startColumn = op.range.startColumn;\n }\n let resultRange;\n if (op.text.length > 0) {\n // the operation inserts something\n const lineCount = op.eolCount + 1;\n if (lineCount === 1) {\n // single line insert\n resultRange = new Range(startLineNumber, startColumn, startLineNumber, startColumn + op.firstLineLength);\n }\n else {\n // multi line insert\n resultRange = new Range(startLineNumber, startColumn, startLineNumber + lineCount - 1, op.lastLineLength + 1);\n }\n }\n else {\n // There is nothing to insert\n resultRange = new Range(startLineNumber, startColumn, startLineNumber, startColumn);\n }\n prevOpEndLineNumber = resultRange.endLineNumber;\n prevOpEndColumn = resultRange.endColumn;\n result.push(resultRange);\n prevOp = op;\n }\n return result;\n }\n static _sortOpsAscending(a, b) {\n let r = Range.compareRangesUsingEnds(a.range, b.range);\n if (r === 0) {\n return a.sortIndex - b.sortIndex;\n }\n return r;\n }\n static _sortOpsDescending(a, b) {\n let r = Range.compareRangesUsingEnds(a.range, b.range);\n if (r === 0) {\n return b.sortIndex - a.sortIndex;\n }\n return -r;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../../base/common/strings.js';\nimport { StringBuffer, createLineStarts, createLineStartsFast } from './pieceTreeBase.js';\nimport { PieceTreeTextBuffer } from './pieceTreeTextBuffer.js';\nexport class PieceTreeTextBufferFactory {\n constructor(_chunks, _bom, _cr, _lf, _crlf, _containsRTL, _containsUnusualLineTerminators, _isBasicASCII, _normalizeEOL) {\n this._chunks = _chunks;\n this._bom = _bom;\n this._cr = _cr;\n this._lf = _lf;\n this._crlf = _crlf;\n this._containsRTL = _containsRTL;\n this._containsUnusualLineTerminators = _containsUnusualLineTerminators;\n this._isBasicASCII = _isBasicASCII;\n this._normalizeEOL = _normalizeEOL;\n }\n _getEOL(defaultEOL) {\n const totalEOLCount = this._cr + this._lf + this._crlf;\n const totalCRCount = this._cr + this._crlf;\n if (totalEOLCount === 0) {\n // This is an empty file or a file with precisely one line\n return (defaultEOL === 1 /* LF */ ? '\\n' : '\\r\\n');\n }\n if (totalCRCount > totalEOLCount / 2) {\n // More than half of the file contains \\r\\n ending lines\n return '\\r\\n';\n }\n // At least one line more ends in \\n\n return '\\n';\n }\n create(defaultEOL) {\n const eol = this._getEOL(defaultEOL);\n let chunks = this._chunks;\n if (this._normalizeEOL &&\n ((eol === '\\r\\n' && (this._cr > 0 || this._lf > 0))\n || (eol === '\\n' && (this._cr > 0 || this._crlf > 0)))) {\n // Normalize pieces\n for (let i = 0, len = chunks.length; i < len; i++) {\n let str = chunks[i].buffer.replace(/\\r\\n|\\r|\\n/g, eol);\n let newLineStart = createLineStartsFast(str);\n chunks[i] = new StringBuffer(str, newLineStart);\n }\n }\n const textBuffer = new PieceTreeTextBuffer(chunks, this._bom, eol, this._containsRTL, this._containsUnusualLineTerminators, this._isBasicASCII, this._normalizeEOL);\n return { textBuffer: textBuffer, disposable: textBuffer };\n }\n}\nexport class PieceTreeTextBufferBuilder {\n constructor() {\n this.chunks = [];\n this.BOM = '';\n this._hasPreviousChar = false;\n this._previousChar = 0;\n this._tmpLineStarts = [];\n this.cr = 0;\n this.lf = 0;\n this.crlf = 0;\n this.containsRTL = false;\n this.containsUnusualLineTerminators = false;\n this.isBasicASCII = true;\n }\n acceptChunk(chunk) {\n if (chunk.length === 0) {\n return;\n }\n if (this.chunks.length === 0) {\n if (strings.startsWithUTF8BOM(chunk)) {\n this.BOM = strings.UTF8_BOM_CHARACTER;\n chunk = chunk.substr(1);\n }\n }\n const lastChar = chunk.charCodeAt(chunk.length - 1);\n if (lastChar === 13 /* CarriageReturn */ || (lastChar >= 0xD800 && lastChar <= 0xDBFF)) {\n // last character is \\r or a high surrogate => keep it back\n this._acceptChunk1(chunk.substr(0, chunk.length - 1), false);\n this._hasPreviousChar = true;\n this._previousChar = lastChar;\n }\n else {\n this._acceptChunk1(chunk, false);\n this._hasPreviousChar = false;\n this._previousChar = lastChar;\n }\n }\n _acceptChunk1(chunk, allowEmptyStrings) {\n if (!allowEmptyStrings && chunk.length === 0) {\n // Nothing to do\n return;\n }\n if (this._hasPreviousChar) {\n this._acceptChunk2(String.fromCharCode(this._previousChar) + chunk);\n }\n else {\n this._acceptChunk2(chunk);\n }\n }\n _acceptChunk2(chunk) {\n const lineStarts = createLineStarts(this._tmpLineStarts, chunk);\n this.chunks.push(new StringBuffer(chunk, lineStarts.lineStarts));\n this.cr += lineStarts.cr;\n this.lf += lineStarts.lf;\n this.crlf += lineStarts.crlf;\n if (this.isBasicASCII) {\n this.isBasicASCII = lineStarts.isBasicASCII;\n }\n if (!this.isBasicASCII && !this.containsRTL) {\n // No need to check if it is basic ASCII\n this.containsRTL = strings.containsRTL(chunk);\n }\n if (!this.isBasicASCII && !this.containsUnusualLineTerminators) {\n // No need to check if it is basic ASCII\n this.containsUnusualLineTerminators = strings.containsUnusualLineTerminators(chunk);\n }\n }\n finish(normalizeEOL = true) {\n this._finish();\n return new PieceTreeTextBufferFactory(this.chunks, this.BOM, this.cr, this.lf, this.crlf, this.containsRTL, this.containsUnusualLineTerminators, this.isBasicASCII, normalizeEOL);\n }\n _finish() {\n if (this.chunks.length === 0) {\n this._acceptChunk1('', true);\n }\n if (this._hasPreviousChar) {\n this._hasPreviousChar = false;\n // recreate last chunk\n let lastChunk = this.chunks[this.chunks.length - 1];\n lastChunk.buffer += String.fromCharCode(this._previousChar);\n let newLineStarts = createLineStartsFast(lastChunk.buffer);\n lastChunk.lineStarts = newLineStarts;\n if (this._previousChar === 13 /* CarriageReturn */) {\n this.cr++;\n }\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as arrays from '../../../base/common/arrays.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { LineTokens } from '../core/lineTokens.js';\nimport { Position } from '../core/position.js';\nimport { TokenizationRegistry } from '../modes.js';\nimport { nullTokenize2 } from '../modes/nullMode.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\nimport { MultilineTokensBuilder, countEOL } from './tokensStore.js';\nimport * as platform from '../../../base/common/platform.js';\nexport class TokenizationStateStore {\n constructor() {\n this._beginState = [];\n this._valid = [];\n this._len = 0;\n this._invalidLineStartIndex = 0;\n }\n _reset(initialState) {\n this._beginState = [];\n this._valid = [];\n this._len = 0;\n this._invalidLineStartIndex = 0;\n if (initialState) {\n this._setBeginState(0, initialState);\n }\n }\n flush(initialState) {\n this._reset(initialState);\n }\n get invalidLineStartIndex() {\n return this._invalidLineStartIndex;\n }\n _invalidateLine(lineIndex) {\n if (lineIndex < this._len) {\n this._valid[lineIndex] = false;\n }\n if (lineIndex < this._invalidLineStartIndex) {\n this._invalidLineStartIndex = lineIndex;\n }\n }\n _isValid(lineIndex) {\n if (lineIndex < this._len) {\n return this._valid[lineIndex];\n }\n return false;\n }\n getBeginState(lineIndex) {\n if (lineIndex < this._len) {\n return this._beginState[lineIndex];\n }\n return null;\n }\n _ensureLine(lineIndex) {\n while (lineIndex >= this._len) {\n this._beginState[this._len] = null;\n this._valid[this._len] = false;\n this._len++;\n }\n }\n _deleteLines(start, deleteCount) {\n if (deleteCount === 0) {\n return;\n }\n if (start + deleteCount > this._len) {\n deleteCount = this._len - start;\n }\n this._beginState.splice(start, deleteCount);\n this._valid.splice(start, deleteCount);\n this._len -= deleteCount;\n }\n _insertLines(insertIndex, insertCount) {\n if (insertCount === 0) {\n return;\n }\n const beginState = [];\n const valid = [];\n for (let i = 0; i < insertCount; i++) {\n beginState[i] = null;\n valid[i] = false;\n }\n this._beginState = arrays.arrayInsert(this._beginState, insertIndex, beginState);\n this._valid = arrays.arrayInsert(this._valid, insertIndex, valid);\n this._len += insertCount;\n }\n _setValid(lineIndex, valid) {\n this._ensureLine(lineIndex);\n this._valid[lineIndex] = valid;\n }\n _setBeginState(lineIndex, beginState) {\n this._ensureLine(lineIndex);\n this._beginState[lineIndex] = beginState;\n }\n setEndState(linesLength, lineIndex, endState) {\n this._setValid(lineIndex, true);\n this._invalidLineStartIndex = lineIndex + 1;\n // Check if this was the last line\n if (lineIndex === linesLength - 1) {\n return;\n }\n // Check if the end state has changed\n const previousEndState = this.getBeginState(lineIndex + 1);\n if (previousEndState === null || !endState.equals(previousEndState)) {\n this._setBeginState(lineIndex + 1, endState);\n this._invalidateLine(lineIndex + 1);\n return;\n }\n // Perhaps we can skip tokenizing some lines...\n let i = lineIndex + 1;\n while (i < linesLength) {\n if (!this._isValid(i)) {\n break;\n }\n i++;\n }\n this._invalidLineStartIndex = i;\n }\n setFakeTokens(lineIndex) {\n this._setValid(lineIndex, false);\n }\n //#region Editing\n applyEdits(range, eolCount) {\n const deletingLinesCnt = range.endLineNumber - range.startLineNumber;\n const insertingLinesCnt = eolCount;\n const editingLinesCnt = Math.min(deletingLinesCnt, insertingLinesCnt);\n for (let j = editingLinesCnt; j >= 0; j--) {\n this._invalidateLine(range.startLineNumber + j - 1);\n }\n this._acceptDeleteRange(range);\n this._acceptInsertText(new Position(range.startLineNumber, range.startColumn), eolCount);\n }\n _acceptDeleteRange(range) {\n const firstLineIndex = range.startLineNumber - 1;\n if (firstLineIndex >= this._len) {\n return;\n }\n this._deleteLines(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n }\n _acceptInsertText(position, eolCount) {\n const lineIndex = position.lineNumber - 1;\n if (lineIndex >= this._len) {\n return;\n }\n this._insertLines(position.lineNumber, eolCount);\n }\n}\nexport class TextModelTokenization extends Disposable {\n constructor(_textModel, _languageIdCodec) {\n super();\n this._textModel = _textModel;\n this._languageIdCodec = _languageIdCodec;\n this._isDisposed = false;\n this._tokenizationStateStore = new TokenizationStateStore();\n this._tokenizationSupport = null;\n this._register(TokenizationRegistry.onDidChange((e) => {\n const languageId = this._textModel.getLanguageId();\n if (e.changedLanguages.indexOf(languageId) === -1) {\n return;\n }\n this._resetTokenizationState();\n this._textModel.clearTokens();\n }));\n this._register(this._textModel.onDidChangeContentFast((e) => {\n if (e.isFlush) {\n this._resetTokenizationState();\n return;\n }\n for (let i = 0, len = e.changes.length; i < len; i++) {\n const change = e.changes[i];\n const [eolCount] = countEOL(change.text);\n this._tokenizationStateStore.applyEdits(change.range, eolCount);\n }\n this._beginBackgroundTokenization();\n }));\n this._register(this._textModel.onDidChangeAttached(() => {\n this._beginBackgroundTokenization();\n }));\n this._register(this._textModel.onDidChangeLanguage(() => {\n this._resetTokenizationState();\n this._textModel.clearTokens();\n }));\n this._resetTokenizationState();\n }\n dispose() {\n this._isDisposed = true;\n super.dispose();\n }\n _resetTokenizationState() {\n const [tokenizationSupport, initialState] = initializeTokenization(this._textModel);\n this._tokenizationSupport = tokenizationSupport;\n this._tokenizationStateStore.flush(initialState);\n this._beginBackgroundTokenization();\n }\n _beginBackgroundTokenization() {\n if (this._textModel.isAttachedToEditor() && this._hasLinesToTokenize()) {\n platform.setImmediate(() => {\n if (this._isDisposed) {\n // disposed in the meantime\n return;\n }\n this._revalidateTokensNow();\n });\n }\n }\n _revalidateTokensNow() {\n const textModelLastLineNumber = this._textModel.getLineCount();\n const MAX_ALLOWED_TIME = 1;\n const builder = new MultilineTokensBuilder();\n const sw = StopWatch.create(false);\n let tokenizedLineNumber = -1;\n while (this._hasLinesToTokenize()) {\n if (sw.elapsed() > MAX_ALLOWED_TIME) {\n // Stop if MAX_ALLOWED_TIME is reached\n break;\n }\n tokenizedLineNumber = this._tokenizeOneInvalidLine(builder);\n if (tokenizedLineNumber >= textModelLastLineNumber) {\n break;\n }\n }\n this._beginBackgroundTokenization();\n this._textModel.setTokens(builder.tokens, !this._hasLinesToTokenize());\n }\n tokenizeViewport(startLineNumber, endLineNumber) {\n const builder = new MultilineTokensBuilder();\n this._tokenizeViewport(builder, startLineNumber, endLineNumber);\n this._textModel.setTokens(builder.tokens, !this._hasLinesToTokenize());\n }\n reset() {\n this._resetTokenizationState();\n this._textModel.clearTokens();\n }\n forceTokenization(lineNumber) {\n const builder = new MultilineTokensBuilder();\n this._updateTokensUntilLine(builder, lineNumber);\n this._textModel.setTokens(builder.tokens, !this._hasLinesToTokenize());\n }\n isCheapToTokenize(lineNumber) {\n if (!this._tokenizationSupport) {\n return true;\n }\n const firstInvalidLineNumber = this._tokenizationStateStore.invalidLineStartIndex + 1;\n if (lineNumber > firstInvalidLineNumber) {\n return false;\n }\n if (lineNumber < firstInvalidLineNumber) {\n return true;\n }\n if (this._textModel.getLineLength(lineNumber) < 2048 /* CHEAP_TOKENIZATION_LENGTH_LIMIT */) {\n return true;\n }\n return false;\n }\n _hasLinesToTokenize() {\n if (!this._tokenizationSupport) {\n return false;\n }\n return (this._tokenizationStateStore.invalidLineStartIndex < this._textModel.getLineCount());\n }\n _tokenizeOneInvalidLine(builder) {\n if (!this._hasLinesToTokenize()) {\n return this._textModel.getLineCount() + 1;\n }\n const lineNumber = this._tokenizationStateStore.invalidLineStartIndex + 1;\n this._updateTokensUntilLine(builder, lineNumber);\n return lineNumber;\n }\n _updateTokensUntilLine(builder, lineNumber) {\n if (!this._tokenizationSupport) {\n return;\n }\n const languageId = this._textModel.getLanguageId();\n const linesLength = this._textModel.getLineCount();\n const endLineIndex = lineNumber - 1;\n // Validate all states up to and including endLineIndex\n for (let lineIndex = this._tokenizationStateStore.invalidLineStartIndex; lineIndex <= endLineIndex; lineIndex++) {\n const text = this._textModel.getLineContent(lineIndex + 1);\n const lineStartState = this._tokenizationStateStore.getBeginState(lineIndex);\n const r = safeTokenize(this._languageIdCodec, languageId, this._tokenizationSupport, text, true, lineStartState);\n builder.add(lineIndex + 1, r.tokens);\n this._tokenizationStateStore.setEndState(linesLength, lineIndex, r.endState);\n lineIndex = this._tokenizationStateStore.invalidLineStartIndex - 1; // -1 because the outer loop increments it\n }\n }\n _tokenizeViewport(builder, startLineNumber, endLineNumber) {\n if (!this._tokenizationSupport) {\n // nothing to do\n return;\n }\n if (endLineNumber <= this._tokenizationStateStore.invalidLineStartIndex) {\n // nothing to do\n return;\n }\n if (startLineNumber <= this._tokenizationStateStore.invalidLineStartIndex) {\n // tokenization has reached the viewport start...\n this._updateTokensUntilLine(builder, endLineNumber);\n return;\n }\n let nonWhitespaceColumn = this._textModel.getLineFirstNonWhitespaceColumn(startLineNumber);\n const fakeLines = [];\n let initialState = null;\n for (let i = startLineNumber - 1; nonWhitespaceColumn > 1 && i >= 1; i--) {\n const newNonWhitespaceIndex = this._textModel.getLineFirstNonWhitespaceColumn(i);\n if (newNonWhitespaceIndex === 0) {\n continue;\n }\n if (newNonWhitespaceIndex < nonWhitespaceColumn) {\n initialState = this._tokenizationStateStore.getBeginState(i - 1);\n if (initialState) {\n break;\n }\n fakeLines.push(this._textModel.getLineContent(i));\n nonWhitespaceColumn = newNonWhitespaceIndex;\n }\n }\n if (!initialState) {\n initialState = this._tokenizationSupport.getInitialState();\n }\n const languageId = this._textModel.getLanguageId();\n let state = initialState;\n for (let i = fakeLines.length - 1; i >= 0; i--) {\n const r = safeTokenize(this._languageIdCodec, languageId, this._tokenizationSupport, fakeLines[i], false, state);\n state = r.endState;\n }\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const text = this._textModel.getLineContent(lineNumber);\n const r = safeTokenize(this._languageIdCodec, languageId, this._tokenizationSupport, text, true, state);\n builder.add(lineNumber, r.tokens);\n this._tokenizationStateStore.setFakeTokens(lineNumber - 1);\n state = r.endState;\n }\n }\n}\nfunction initializeTokenization(textModel) {\n const languageId = textModel.getLanguageId();\n let tokenizationSupport = (textModel.isTooLargeForTokenization()\n ? null\n : TokenizationRegistry.get(languageId));\n let initialState = null;\n if (tokenizationSupport) {\n try {\n initialState = tokenizationSupport.getInitialState();\n }\n catch (e) {\n onUnexpectedError(e);\n tokenizationSupport = null;\n }\n }\n return [tokenizationSupport, initialState];\n}\nfunction safeTokenize(languageIdCodec, languageId, tokenizationSupport, text, hasEOL, state) {\n let r = null;\n if (tokenizationSupport) {\n try {\n r = tokenizationSupport.tokenize2(text, hasEOL, state.clone(), 0);\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n if (!r) {\n r = nullTokenize2(languageIdCodec.encodeLanguageId(languageId), text, state, 0);\n }\n LineTokens.convertToEndOffset(r.tokens, text.length);\n return r;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class BracketInfo {\n constructor(range, \n /** 0-based level */\n nestingLevel, isInvalid) {\n this.range = range;\n this.nestingLevel = nestingLevel;\n this.isInvalid = isInvalid;\n }\n}\nexport class BracketPairInfo {\n constructor(range, openingBracketRange, closingBracketRange, \n /**\n * 0-based\n */\n nestingLevel) {\n this.range = range;\n this.openingBracketRange = openingBracketRange;\n this.closingBracketRange = closingBracketRange;\n this.nestingLevel = nestingLevel;\n }\n}\nexport class BracketPairWithMinIndentationInfo extends BracketPairInfo {\n constructor(range, openingBracketRange, closingBracketRange, \n /**\n * 0-based\n */\n nestingLevel, \n /**\n * -1 if not requested, otherwise the size of the minimum indentation in the bracket pair in terms of visible columns.\n */\n minVisibleColumnIndentation) {\n super(range, openingBracketRange, closingBracketRange, nestingLevel);\n this.minVisibleColumnIndentation = minVisibleColumnIndentation;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { splitLines } from '../../../../../base/common/strings.js';\nimport { Range } from '../../../core/range.js';\n/**\n * Represents a non-negative length in terms of line and column count.\n * Prefer using {@link Length} for performance reasons.\n*/\nexport class LengthObj {\n constructor(lineCount, columnCount) {\n this.lineCount = lineCount;\n this.columnCount = columnCount;\n }\n toString() {\n return `${this.lineCount},${this.columnCount}`;\n }\n}\n/**\n * The end must be greater than or equal to the start.\n*/\nexport function lengthDiff(startLineCount, startColumnCount, endLineCount, endColumnCount) {\n return (startLineCount !== endLineCount)\n ? toLength(endLineCount - startLineCount, endColumnCount)\n : toLength(0, endColumnCount - startColumnCount);\n}\nexport const lengthZero = 0;\nexport function lengthIsZero(length) {\n return length === 0;\n}\n/*\n * We have 52 bits available in a JS number.\n * We use the upper 26 bits to store the line and the lower 26 bits to store the column.\n *\n * Set boolean to `true` when debugging, so that debugging is easier.\n */\nconst factor = /* is debug: */ false ? 100000 : Math.pow(2, 26);\nexport function toLength(lineCount, columnCount) {\n // llllllllllllllllllllllllllcccccccccccccccccccccccccc (52 bits)\n // line count (26 bits) column count (26 bits)\n // If there is no overflow (all values/sums below 2^26 = 67108864),\n // we have `toLength(lns1, cols1) + toLength(lns2, cols2) = toLength(lns1 + lns2, cols1 + cols2)`.\n return (lineCount * factor + columnCount);\n}\nexport function lengthToObj(length) {\n const l = length;\n const lineCount = Math.floor(l / factor);\n const columnCount = l - lineCount * factor;\n return new LengthObj(lineCount, columnCount);\n}\nexport function lengthGetLineCount(length) {\n return Math.floor(length / factor);\n}\n/**\n * Returns the amount of columns of the given length, assuming that it does not span any line.\n*/\nexport function lengthGetColumnCountIfZeroLineCount(length) {\n return length;\n}\nexport function lengthAdd(l1, l2) {\n return ((l2 < factor)\n ? (l1 + l2) // l2 is the amount of columns (zero line count). Keep the column count from l1.\n : (l1 - (l1 % factor) + l2)); // l1 - (l1 % factor) equals toLength(l1.lineCount, 0)\n}\n/**\n * Returns a non negative length `result` such that `lengthAdd(length1, result) = length2`, or zero if such length does not exist.\n */\nexport function lengthDiffNonNegative(length1, length2) {\n const l1 = length1;\n const l2 = length2;\n const diff = l2 - l1;\n if (diff <= 0) {\n // line-count of length1 is higher than line-count of length2\n // or they are equal and column-count of length1 is higher than column-count of length2\n return lengthZero;\n }\n const lineCount1 = Math.floor(l1 / factor);\n const lineCount2 = Math.floor(l2 / factor);\n const colCount2 = l2 - lineCount2 * factor;\n if (lineCount1 === lineCount2) {\n const colCount1 = l1 - lineCount1 * factor;\n return toLength(0, colCount2 - colCount1);\n }\n else {\n return toLength(lineCount2 - lineCount1, colCount2);\n }\n}\nexport function lengthLessThan(length1, length2) {\n // First, compare line counts, then column counts.\n return length1 < length2;\n}\nexport function lengthLessThanEqual(length1, length2) {\n return length1 <= length2;\n}\nexport function lengthGreaterThanEqual(length1, length2) {\n return length1 >= length2;\n}\nexport function positionToLength(position) {\n return toLength(position.lineNumber - 1, position.column - 1);\n}\nexport function lengthsToRange(lengthStart, lengthEnd) {\n const l = lengthStart;\n const lineCount = Math.floor(l / factor);\n const colCount = l - lineCount * factor;\n const l2 = lengthEnd;\n const lineCount2 = Math.floor(l2 / factor);\n const colCount2 = l2 - lineCount2 * factor;\n return new Range(lineCount + 1, colCount + 1, lineCount2 + 1, colCount2 + 1);\n}\nexport function lengthOfString(str) {\n const lines = splitLines(str);\n return toLength(lines.length - 1, lines[lines.length - 1].length);\n}\n/**\n * Computes a numeric hash of the given length.\n*/\nexport function lengthHash(length) {\n return length;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { lengthAdd, lengthDiffNonNegative, lengthLessThanEqual, lengthToObj, toLength } from './length.js';\nexport class TextEditInfo {\n constructor(startOffset, endOffset, newLength) {\n this.startOffset = startOffset;\n this.endOffset = endOffset;\n this.newLength = newLength;\n }\n}\nexport class BeforeEditPositionMapper {\n /**\n * @param edits Must be sorted by offset in ascending order.\n */\n constructor(edits, documentLength) {\n this.documentLength = documentLength;\n this.nextEditIdx = 0;\n this.deltaOldToNewLineCount = 0;\n this.deltaOldToNewColumnCount = 0;\n this.deltaLineIdxInOld = -1;\n this.edits = edits.map(edit => TextEditInfoCache.from(edit));\n }\n /**\n * @param offset Must be equal to or greater than the last offset this method has been called with.\n */\n getOffsetBeforeChange(offset) {\n this.adjustNextEdit(offset);\n return this.translateCurToOld(offset);\n }\n /**\n * @param offset Must be equal to or greater than the last offset this method has been called with.\n */\n getDistanceToNextChange(offset) {\n this.adjustNextEdit(offset);\n const nextEdit = this.edits[this.nextEditIdx];\n const nextChangeOffset = nextEdit ? this.translateOldToCur(nextEdit.offsetObj) : this.documentLength;\n return lengthDiffNonNegative(offset, nextChangeOffset);\n }\n translateOldToCur(oldOffsetObj) {\n if (oldOffsetObj.lineCount === this.deltaLineIdxInOld) {\n return toLength(oldOffsetObj.lineCount + this.deltaOldToNewLineCount, oldOffsetObj.columnCount + this.deltaOldToNewColumnCount);\n }\n else {\n return toLength(oldOffsetObj.lineCount + this.deltaOldToNewLineCount, oldOffsetObj.columnCount);\n }\n }\n translateCurToOld(newOffset) {\n const offsetObj = lengthToObj(newOffset);\n if (offsetObj.lineCount - this.deltaOldToNewLineCount === this.deltaLineIdxInOld) {\n return toLength(offsetObj.lineCount - this.deltaOldToNewLineCount, offsetObj.columnCount - this.deltaOldToNewColumnCount);\n }\n else {\n return toLength(offsetObj.lineCount - this.deltaOldToNewLineCount, offsetObj.columnCount);\n }\n }\n adjustNextEdit(offset) {\n while (this.nextEditIdx < this.edits.length) {\n const nextEdit = this.edits[this.nextEditIdx];\n // After applying the edit, what is its end offset (considering all previous edits)?\n const nextEditEndOffsetInCur = this.translateOldToCur(nextEdit.endOffsetAfterObj);\n if (lengthLessThanEqual(nextEditEndOffsetInCur, offset)) {\n // We are after the edit, skip it\n this.nextEditIdx++;\n const nextEditEndOffsetInCurObj = lengthToObj(nextEditEndOffsetInCur);\n // Before applying the edit, what is its end offset (considering all previous edits)?\n const nextEditEndOffsetBeforeInCurObj = lengthToObj(this.translateOldToCur(nextEdit.endOffsetBeforeObj));\n const lineDelta = nextEditEndOffsetInCurObj.lineCount - nextEditEndOffsetBeforeInCurObj.lineCount;\n this.deltaOldToNewLineCount += lineDelta;\n const previousColumnDelta = this.deltaLineIdxInOld === nextEdit.endOffsetBeforeObj.lineCount ? this.deltaOldToNewColumnCount : 0;\n const columnDelta = nextEditEndOffsetInCurObj.columnCount - nextEditEndOffsetBeforeInCurObj.columnCount;\n this.deltaOldToNewColumnCount = previousColumnDelta + columnDelta;\n this.deltaLineIdxInOld = nextEdit.endOffsetBeforeObj.lineCount;\n }\n else {\n // We are in or before the edit.\n break;\n }\n }\n }\n}\nclass TextEditInfoCache {\n constructor(startOffset, endOffset, textLength) {\n this.endOffsetBeforeObj = lengthToObj(endOffset);\n this.endOffsetAfterObj = lengthToObj(lengthAdd(startOffset, textLength));\n this.offsetObj = lengthToObj(startOffset);\n }\n static from(edit) {\n return new TextEditInfoCache(edit.startOffset, edit.endOffset, edit.newLength);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nconst emptyArr = new Array();\n/**\n * Represents an immutable set that works best for a small number of elements (less than 32).\n * It uses bits to encode element membership efficiently.\n*/\nexport class SmallImmutableSet {\n constructor(items, additionalItems) {\n this.items = items;\n this.additionalItems = additionalItems;\n }\n static create(items, additionalItems) {\n if (items <= 128 && additionalItems.length === 0) {\n // We create a cache of 128=2^7 elements to cover all sets with up to 7 (dense) elements.\n let cached = SmallImmutableSet.cache[items];\n if (!cached) {\n cached = new SmallImmutableSet(items, additionalItems);\n SmallImmutableSet.cache[items] = cached;\n }\n return cached;\n }\n return new SmallImmutableSet(items, additionalItems);\n }\n static getEmpty() {\n return this.empty;\n }\n add(value, keyProvider) {\n const key = keyProvider.getKey(value);\n let idx = key >> 5; // divided by 32\n if (idx === 0) {\n // fast path\n const newItem = (1 << key) | this.items;\n if (newItem === this.items) {\n return this;\n }\n return SmallImmutableSet.create(newItem, this.additionalItems);\n }\n idx--;\n const newItems = this.additionalItems.slice(0);\n while (newItems.length < idx) {\n newItems.push(0);\n }\n newItems[idx] |= 1 << (key & 31);\n return SmallImmutableSet.create(this.items, newItems);\n }\n merge(other) {\n const merged = this.items | other.items;\n if (this.additionalItems === emptyArr && other.additionalItems === emptyArr) {\n // fast path\n if (merged === this.items) {\n return this;\n }\n if (merged === other.items) {\n return other;\n }\n return SmallImmutableSet.create(merged, emptyArr);\n }\n // This can be optimized, but it's not a common case\n const newItems = new Array();\n for (let i = 0; i < Math.max(this.additionalItems.length, other.additionalItems.length); i++) {\n const item1 = this.additionalItems[i] || 0;\n const item2 = other.additionalItems[i] || 0;\n newItems.push(item1 | item2);\n }\n return SmallImmutableSet.create(merged, newItems);\n }\n intersects(other) {\n if ((this.items & other.items) !== 0) {\n return true;\n }\n for (let i = 0; i < Math.min(this.additionalItems.length, other.additionalItems.length); i++) {\n if ((this.additionalItems[i] & other.additionalItems[i]) !== 0) {\n return true;\n }\n }\n return false;\n }\n}\nSmallImmutableSet.cache = new Array(129);\nSmallImmutableSet.empty = SmallImmutableSet.create(0, emptyArr);\nexport const identityKeyProvider = {\n getKey(value) {\n return value;\n }\n};\n/**\n * Assigns values a unique incrementing key.\n*/\nexport class DenseKeyProvider {\n constructor() {\n this.items = new Map();\n }\n getKey(value) {\n let existing = this.items.get(value);\n if (existing === undefined) {\n existing = this.items.size;\n this.items.set(value, existing);\n }\n return existing;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { CursorColumns } from '../../../controller/cursorColumns.js';\nimport { lengthAdd, lengthGetLineCount, lengthHash, lengthToObj, lengthZero } from './length.js';\nimport { SmallImmutableSet } from './smallImmutableSet.js';\n/**\n * The base implementation for all AST nodes.\n*/\nclass BaseAstNode {\n constructor(length) {\n this._length = length;\n }\n /**\n * The length of the entire node, which should equal the sum of lengths of all children.\n */\n get length() {\n return this._length;\n }\n}\n/**\n * Represents a bracket pair including its child (e.g. `{ ... }`).\n * Might be unclosed.\n * Immutable, if all children are immutable.\n*/\nexport class PairAstNode extends BaseAstNode {\n constructor(length, openingBracket, child, closingBracket, missingOpeningBracketIds) {\n super(length);\n this.openingBracket = openingBracket;\n this.child = child;\n this.closingBracket = closingBracket;\n this.missingOpeningBracketIds = missingOpeningBracketIds;\n }\n static create(openingBracket, child, closingBracket) {\n let length = openingBracket.length;\n if (child) {\n length = lengthAdd(length, child.length);\n }\n if (closingBracket) {\n length = lengthAdd(length, closingBracket.length);\n }\n return new PairAstNode(length, openingBracket, child, closingBracket, child ? child.missingOpeningBracketIds : SmallImmutableSet.getEmpty());\n }\n get kind() {\n return 2 /* Pair */;\n }\n get listHeight() {\n return 0;\n }\n get childrenLength() {\n return 3;\n }\n getChild(idx) {\n switch (idx) {\n case 0: return this.openingBracket;\n case 1: return this.child;\n case 2: return this.closingBracket;\n }\n throw new Error('Invalid child index');\n }\n /**\n * Avoid using this property, it allocates an array!\n */\n get children() {\n const result = new Array();\n result.push(this.openingBracket);\n if (this.child) {\n result.push(this.child);\n }\n if (this.closingBracket) {\n result.push(this.closingBracket);\n }\n return result;\n }\n canBeReused(openBracketIds) {\n if (this.closingBracket === null) {\n // Unclosed pair ast nodes only\n // end at the end of the document\n // or when a parent node is closed.\n // This could be improved:\n // Only return false if some next token is neither \"undefined\" nor a bracket that closes a parent.\n return false;\n }\n if (openBracketIds.intersects(this.missingOpeningBracketIds)) {\n return false;\n }\n return true;\n }\n deepClone() {\n return new PairAstNode(this.length, this.openingBracket.deepClone(), this.child && this.child.deepClone(), this.closingBracket && this.closingBracket.deepClone(), this.missingOpeningBracketIds);\n }\n computeMinIndentation(offset, textModel) {\n return this.child ? this.child.computeMinIndentation(lengthAdd(offset, this.openingBracket.length), textModel) : Number.MAX_SAFE_INTEGER;\n }\n}\nexport class ListAstNode extends BaseAstNode {\n /**\n * Use ListAstNode.create.\n */\n constructor(length, listHeight, _missingOpeningBracketIds) {\n super(length);\n this.listHeight = listHeight;\n this._missingOpeningBracketIds = _missingOpeningBracketIds;\n this.cachedMinIndentation = -1;\n }\n /**\n * This method uses more memory-efficient list nodes that can only store 2 or 3 children.\n */\n static create23(item1, item2, item3, immutable = false) {\n let length = item1.length;\n let missingBracketIds = item1.missingOpeningBracketIds;\n if (item1.listHeight !== item2.listHeight) {\n throw new Error('Invalid list heights');\n }\n length = lengthAdd(length, item2.length);\n missingBracketIds = missingBracketIds.merge(item2.missingOpeningBracketIds);\n if (item3) {\n if (item1.listHeight !== item3.listHeight) {\n throw new Error('Invalid list heights');\n }\n length = lengthAdd(length, item3.length);\n missingBracketIds = missingBracketIds.merge(item3.missingOpeningBracketIds);\n }\n return immutable\n ? new Immutable23ListAstNode(length, item1.listHeight + 1, item1, item2, item3, missingBracketIds)\n : new TwoThreeListAstNode(length, item1.listHeight + 1, item1, item2, item3, missingBracketIds);\n }\n static getEmpty() {\n return new ImmutableArrayListAstNode(lengthZero, 0, [], SmallImmutableSet.getEmpty());\n }\n get kind() {\n return 4 /* List */;\n }\n get missingOpeningBracketIds() {\n return this._missingOpeningBracketIds;\n }\n throwIfImmutable() {\n // NOOP\n }\n makeLastElementMutable() {\n this.throwIfImmutable();\n const childCount = this.childrenLength;\n if (childCount === 0) {\n return undefined;\n }\n const lastChild = this.getChild(childCount - 1);\n const mutable = lastChild.kind === 4 /* List */ ? lastChild.toMutable() : lastChild;\n if (lastChild !== mutable) {\n this.setChild(childCount - 1, mutable);\n }\n return mutable;\n }\n makeFirstElementMutable() {\n this.throwIfImmutable();\n const childCount = this.childrenLength;\n if (childCount === 0) {\n return undefined;\n }\n const firstChild = this.getChild(0);\n const mutable = firstChild.kind === 4 /* List */ ? firstChild.toMutable() : firstChild;\n if (firstChild !== mutable) {\n this.setChild(0, mutable);\n }\n return mutable;\n }\n canBeReused(openBracketIds) {\n if (openBracketIds.intersects(this.missingOpeningBracketIds)) {\n return false;\n }\n let lastChild = this;\n let lastLength;\n while (lastChild.kind === 4 /* List */ && (lastLength = lastChild.childrenLength) > 0) {\n lastChild = lastChild.getChild(lastLength - 1);\n }\n return lastChild.canBeReused(openBracketIds);\n }\n handleChildrenChanged() {\n this.throwIfImmutable();\n const count = this.childrenLength;\n let length = this.getChild(0).length;\n let unopenedBrackets = this.getChild(0).missingOpeningBracketIds;\n for (let i = 1; i < count; i++) {\n const child = this.getChild(i);\n length = lengthAdd(length, child.length);\n unopenedBrackets = unopenedBrackets.merge(child.missingOpeningBracketIds);\n }\n this._length = length;\n this._missingOpeningBracketIds = unopenedBrackets;\n this.cachedMinIndentation = -1;\n }\n computeMinIndentation(offset, textModel) {\n if (this.cachedMinIndentation !== -1) {\n return this.cachedMinIndentation;\n }\n let minIndentation = Number.MAX_SAFE_INTEGER;\n let childOffset = offset;\n for (let i = 0; i < this.childrenLength; i++) {\n const child = this.getChild(i);\n if (child) {\n minIndentation = Math.min(minIndentation, child.computeMinIndentation(childOffset, textModel));\n childOffset = lengthAdd(childOffset, child.length);\n }\n }\n this.cachedMinIndentation = minIndentation;\n return minIndentation;\n }\n}\nclass TwoThreeListAstNode extends ListAstNode {\n constructor(length, listHeight, _item1, _item2, _item3, missingOpeningBracketIds) {\n super(length, listHeight, missingOpeningBracketIds);\n this._item1 = _item1;\n this._item2 = _item2;\n this._item3 = _item3;\n }\n get childrenLength() {\n return this._item3 !== null ? 3 : 2;\n }\n getChild(idx) {\n switch (idx) {\n case 0: return this._item1;\n case 1: return this._item2;\n case 2: return this._item3;\n }\n throw new Error('Invalid child index');\n }\n setChild(idx, node) {\n switch (idx) {\n case 0:\n this._item1 = node;\n return;\n case 1:\n this._item2 = node;\n return;\n case 2:\n this._item3 = node;\n return;\n }\n throw new Error('Invalid child index');\n }\n get children() {\n return this._item3 ? [this._item1, this._item2, this._item3] : [this._item1, this._item2];\n }\n get item1() {\n return this._item1;\n }\n get item2() {\n return this._item2;\n }\n get item3() {\n return this._item3;\n }\n deepClone() {\n return new TwoThreeListAstNode(this.length, this.listHeight, this._item1.deepClone(), this._item2.deepClone(), this._item3 ? this._item3.deepClone() : null, this.missingOpeningBracketIds);\n }\n appendChildOfSameHeight(node) {\n if (this._item3) {\n throw new Error('Cannot append to a full (2,3) tree node');\n }\n this.throwIfImmutable();\n this._item3 = node;\n this.handleChildrenChanged();\n }\n unappendChild() {\n if (!this._item3) {\n throw new Error('Cannot remove from a non-full (2,3) tree node');\n }\n this.throwIfImmutable();\n const result = this._item3;\n this._item3 = null;\n this.handleChildrenChanged();\n return result;\n }\n prependChildOfSameHeight(node) {\n if (this._item3) {\n throw new Error('Cannot prepend to a full (2,3) tree node');\n }\n this.throwIfImmutable();\n this._item3 = this._item2;\n this._item2 = this._item1;\n this._item1 = node;\n this.handleChildrenChanged();\n }\n unprependChild() {\n if (!this._item3) {\n throw new Error('Cannot remove from a non-full (2,3) tree node');\n }\n this.throwIfImmutable();\n const result = this._item1;\n this._item1 = this._item2;\n this._item2 = this._item3;\n this._item3 = null;\n this.handleChildrenChanged();\n return result;\n }\n toMutable() {\n return this;\n }\n}\n/**\n * Immutable, if all children are immutable.\n*/\nclass Immutable23ListAstNode extends TwoThreeListAstNode {\n toMutable() {\n return new TwoThreeListAstNode(this.length, this.listHeight, this.item1, this.item2, this.item3, this.missingOpeningBracketIds);\n }\n throwIfImmutable() {\n throw new Error('this instance is immutable');\n }\n}\n/**\n * For debugging.\n*/\nclass ArrayListAstNode extends ListAstNode {\n constructor(length, listHeight, _children, missingOpeningBracketIds) {\n super(length, listHeight, missingOpeningBracketIds);\n this._children = _children;\n }\n get childrenLength() {\n return this._children.length;\n }\n getChild(idx) {\n return this._children[idx];\n }\n setChild(idx, child) {\n this._children[idx] = child;\n }\n get children() {\n return this._children;\n }\n deepClone() {\n const children = new Array(this._children.length);\n for (let i = 0; i < this._children.length; i++) {\n children[i] = this._children[i].deepClone();\n }\n return new ArrayListAstNode(this.length, this.listHeight, children, this.missingOpeningBracketIds);\n }\n appendChildOfSameHeight(node) {\n this.throwIfImmutable();\n this._children.push(node);\n this.handleChildrenChanged();\n }\n unappendChild() {\n this.throwIfImmutable();\n const item = this._children.pop();\n this.handleChildrenChanged();\n return item;\n }\n prependChildOfSameHeight(node) {\n this.throwIfImmutable();\n this._children.unshift(node);\n this.handleChildrenChanged();\n }\n unprependChild() {\n this.throwIfImmutable();\n const item = this._children.shift();\n this.handleChildrenChanged();\n return item;\n }\n toMutable() {\n return this;\n }\n}\n/**\n * Immutable, if all children are immutable.\n*/\nclass ImmutableArrayListAstNode extends ArrayListAstNode {\n toMutable() {\n return new ArrayListAstNode(this.length, this.listHeight, [...this.children], this.missingOpeningBracketIds);\n }\n throwIfImmutable() {\n throw new Error('this instance is immutable');\n }\n}\nconst emptyArray = [];\nclass ImmutableLeafAstNode extends BaseAstNode {\n get listHeight() {\n return 0;\n }\n get childrenLength() {\n return 0;\n }\n getChild(idx) {\n return null;\n }\n get children() {\n return emptyArray;\n }\n deepClone() {\n return this;\n }\n}\nexport class TextAstNode extends ImmutableLeafAstNode {\n get kind() {\n return 0 /* Text */;\n }\n get missingOpeningBracketIds() {\n return SmallImmutableSet.getEmpty();\n }\n canBeReused(_openedBracketIds) {\n return true;\n }\n computeMinIndentation(offset, textModel) {\n const start = lengthToObj(offset);\n // Text ast nodes don't have partial indentation (ensured by the tokenizer).\n // Thus, if this text node does not start at column 0, the first line cannot have any indentation at all.\n const startLineNumber = (start.columnCount === 0 ? start.lineCount : start.lineCount + 1) + 1;\n const endLineNumber = lengthGetLineCount(lengthAdd(offset, this.length)) + 1;\n let result = Number.MAX_SAFE_INTEGER;\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const firstNonWsColumn = textModel.getLineFirstNonWhitespaceColumn(lineNumber);\n const lineContent = textModel.getLineContent(lineNumber);\n if (firstNonWsColumn === 0) {\n continue;\n }\n const visibleColumn = CursorColumns.visibleColumnFromColumn(lineContent, firstNonWsColumn, textModel.getOptions().tabSize);\n result = Math.min(result, visibleColumn);\n }\n return result;\n }\n}\nexport class BracketAstNode extends ImmutableLeafAstNode {\n constructor(length) {\n super(length);\n }\n static create(length) {\n const lengthKey = lengthHash(length);\n const cached = BracketAstNode.cacheByLength.get(lengthKey);\n if (cached) {\n return cached;\n }\n const node = new BracketAstNode(length);\n BracketAstNode.cacheByLength.set(lengthKey, node);\n return node;\n }\n get kind() {\n return 1 /* Bracket */;\n }\n get missingOpeningBracketIds() {\n return SmallImmutableSet.getEmpty();\n }\n canBeReused(_openedBracketIds) {\n // These nodes could be reused,\n // but not in a general way.\n // Their parent may be reused.\n return false;\n }\n computeMinIndentation(offset, textModel) {\n return Number.MAX_SAFE_INTEGER;\n }\n}\nBracketAstNode.cacheByLength = new Map();\nexport class InvalidBracketAstNode extends ImmutableLeafAstNode {\n constructor(closingBrackets, length) {\n super(length);\n this.missingOpeningBracketIds = closingBrackets;\n }\n get kind() {\n return 3 /* UnexpectedClosingBracket */;\n }\n canBeReused(openedBracketIds) {\n return !openedBracketIds.intersects(this.missingOpeningBracketIds);\n }\n computeMinIndentation(offset, textModel) {\n return Number.MAX_SAFE_INTEGER;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { NotSupportedError } from '../../../../../base/common/errors.js';\nimport { SmallImmutableSet } from './smallImmutableSet.js';\nimport { TokenMetadata } from '../../../modes.js';\nimport { TextAstNode } from './ast.js';\nimport { lengthGetColumnCountIfZeroLineCount, lengthAdd, lengthDiff, lengthToObj, lengthZero, toLength } from './length.js';\nexport class Token {\n constructor(length, kind, \n /**\n * If this token is an opening bracket, this is the id of the opening bracket.\n * If this token is a closing bracket, this is the id of the first opening bracket that is closed by this bracket.\n * Otherwise, it is -1.\n */\n bracketId, \n /**\n * If this token is an opening bracket, this just contains `bracketId`.\n * If this token is a closing bracket, this lists all opening bracket ids, that it closes.\n * Otherwise, it is empty.\n */\n bracketIds, astNode) {\n this.length = length;\n this.kind = kind;\n this.bracketId = bracketId;\n this.bracketIds = bracketIds;\n this.astNode = astNode;\n }\n}\nexport class TextBufferTokenizer {\n constructor(textModel, bracketTokens) {\n this.textModel = textModel;\n this.bracketTokens = bracketTokens;\n this.reader = new NonPeekableTextBufferTokenizer(this.textModel, this.bracketTokens);\n this._offset = lengthZero;\n this.didPeek = false;\n this.peeked = null;\n this.textBufferLineCount = textModel.getLineCount();\n this.textBufferLastLineLength = textModel.getLineLength(this.textBufferLineCount);\n }\n get offset() {\n return this._offset;\n }\n get length() {\n return toLength(this.textBufferLineCount, this.textBufferLastLineLength);\n }\n skip(length) {\n this.didPeek = false;\n this._offset = lengthAdd(this._offset, length);\n const obj = lengthToObj(this._offset);\n this.reader.setPosition(obj.lineCount, obj.columnCount);\n }\n read() {\n let token;\n if (this.peeked) {\n this.didPeek = false;\n token = this.peeked;\n }\n else {\n token = this.reader.read();\n }\n if (token) {\n this._offset = lengthAdd(this._offset, token.length);\n }\n return token;\n }\n peek() {\n if (!this.didPeek) {\n this.peeked = this.reader.read();\n this.didPeek = true;\n }\n return this.peeked;\n }\n}\n/**\n * Does not support peek.\n*/\nclass NonPeekableTextBufferTokenizer {\n constructor(textModel, bracketTokens) {\n this.textModel = textModel;\n this.bracketTokens = bracketTokens;\n this.lineIdx = 0;\n this.line = null;\n this.lineCharOffset = 0;\n this.lineTokens = null;\n this.lineTokenOffset = 0;\n /** Must be a zero line token. The end of the document cannot be peeked. */\n this.peekedToken = null;\n this.textBufferLineCount = textModel.getLineCount();\n this.textBufferLastLineLength = textModel.getLineLength(this.textBufferLineCount);\n }\n setPosition(lineIdx, column) {\n // We must not jump into a token!\n if (lineIdx === this.lineIdx) {\n this.lineCharOffset = column;\n this.lineTokenOffset = this.lineCharOffset === 0 ? 0 : this.lineTokens.findTokenIndexAtOffset(this.lineCharOffset);\n }\n else {\n this.lineIdx = lineIdx;\n this.lineCharOffset = column;\n this.line = null;\n }\n this.peekedToken = null;\n }\n read() {\n if (this.peekedToken) {\n const token = this.peekedToken;\n this.peekedToken = null;\n this.lineCharOffset += lengthGetColumnCountIfZeroLineCount(token.length);\n return token;\n }\n if (this.lineIdx > this.textBufferLineCount - 1 || (this.lineIdx === this.textBufferLineCount - 1 && this.lineCharOffset >= this.textBufferLastLineLength)) {\n // We are after the end\n return null;\n }\n if (this.line === null) {\n this.lineTokens = this.textModel.getLineTokens(this.lineIdx + 1);\n this.line = this.lineTokens.getLineContent();\n this.lineTokenOffset = this.lineCharOffset === 0 ? 0 : this.lineTokens.findTokenIndexAtOffset(this.lineCharOffset);\n }\n const startLineIdx = this.lineIdx;\n const startLineCharOffset = this.lineCharOffset;\n // limits the length of text tokens.\n // If text tokens get too long, incremental updates will be slow\n let lengthHeuristic = 0;\n while (true) {\n const lineTokens = this.lineTokens;\n const tokenCount = lineTokens.getCount();\n let peekedBracketToken = null;\n if (this.lineTokenOffset < tokenCount) {\n const tokenMetadata = lineTokens.getMetadata(this.lineTokenOffset);\n while (this.lineTokenOffset + 1 < tokenCount && tokenMetadata === lineTokens.getMetadata(this.lineTokenOffset + 1)) {\n // Skip tokens that are identical.\n // Sometimes, (bracket) identifiers are split up into multiple tokens.\n this.lineTokenOffset++;\n }\n const isOther = TokenMetadata.getTokenType(tokenMetadata) === 0 /* Other */;\n const endOffset = lineTokens.getEndOffset(this.lineTokenOffset);\n // Is there a bracket token next? Only consume text.\n if (isOther && endOffset !== this.lineCharOffset) {\n const languageId = lineTokens.getLanguageId(this.lineTokenOffset);\n const text = this.line.substring(this.lineCharOffset, endOffset);\n const brackets = this.bracketTokens.getSingleLanguageBracketTokens(languageId);\n const regexp = brackets.regExpGlobal;\n if (regexp) {\n regexp.lastIndex = 0;\n const match = regexp.exec(text);\n if (match) {\n peekedBracketToken = brackets.getToken(match[0]);\n if (peekedBracketToken) {\n // Consume leading text of the token\n this.lineCharOffset += match.index;\n }\n }\n }\n }\n lengthHeuristic += endOffset - this.lineCharOffset;\n if (peekedBracketToken) {\n // Don't skip the entire token, as a single token could contain multiple brackets.\n if (startLineIdx !== this.lineIdx || startLineCharOffset !== this.lineCharOffset) {\n // There is text before the bracket\n this.peekedToken = peekedBracketToken;\n break;\n }\n else {\n // Consume the peeked token\n this.lineCharOffset += lengthGetColumnCountIfZeroLineCount(peekedBracketToken.length);\n return peekedBracketToken;\n }\n }\n else {\n // Skip the entire token, as the token contains no brackets at all.\n this.lineTokenOffset++;\n this.lineCharOffset = endOffset;\n }\n }\n else {\n if (this.lineIdx === this.textBufferLineCount - 1) {\n break;\n }\n this.lineIdx++;\n this.lineTokens = this.textModel.getLineTokens(this.lineIdx + 1);\n this.lineTokenOffset = 0;\n this.line = this.lineTokens.getLineContent();\n this.lineCharOffset = 0;\n lengthHeuristic += 33; // max 1000/33 = 30 lines\n // This limits the amount of work to recompute min-indentation\n if (lengthHeuristic > 1000) {\n // only break (automatically) at the end of line.\n break;\n }\n }\n if (lengthHeuristic > 1500) {\n // Eventually break regardless of the line length so that\n // very long lines do not cause bad performance.\n // This effective limits max indentation to 500, as\n // indentation is not computed across multiple text nodes.\n break;\n }\n }\n // If a token contains some proper indentation, it also contains \\n{INDENTATION+}(?!{INDENTATION}),\n // unless the line is too long.\n // Thus, the min indentation of the document is the minimum min indentation of every text node.\n const length = lengthDiff(startLineIdx, startLineCharOffset, this.lineIdx, this.lineCharOffset);\n return new Token(length, 0 /* Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(length));\n }\n}\nexport class FastTokenizer {\n constructor(text, brackets) {\n this.text = text;\n this._offset = lengthZero;\n this.idx = 0;\n const regExpStr = brackets.getRegExpStr();\n const regexp = regExpStr ? new RegExp(brackets.getRegExpStr() + '|\\n', 'g') : null;\n const tokens = [];\n let match;\n let curLineCount = 0;\n let lastLineBreakOffset = 0;\n let lastTokenEndOffset = 0;\n let lastTokenEndLine = 0;\n const smallTextTokens0Line = new Array();\n for (let i = 0; i < 60; i++) {\n smallTextTokens0Line.push(new Token(toLength(0, i), 0 /* Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(toLength(0, i))));\n }\n const smallTextTokens1Line = new Array();\n for (let i = 0; i < 60; i++) {\n smallTextTokens1Line.push(new Token(toLength(1, i), 0 /* Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(toLength(1, i))));\n }\n if (regexp) {\n regexp.lastIndex = 0;\n // If a token contains indentation, it also contains \\n{INDENTATION+}(?!{INDENTATION})\n while ((match = regexp.exec(text)) !== null) {\n const curOffset = match.index;\n const value = match[0];\n if (value === '\\n') {\n curLineCount++;\n lastLineBreakOffset = curOffset + 1;\n }\n else {\n if (lastTokenEndOffset !== curOffset) {\n let token;\n if (lastTokenEndLine === curLineCount) {\n const colCount = curOffset - lastTokenEndOffset;\n if (colCount < smallTextTokens0Line.length) {\n token = smallTextTokens0Line[colCount];\n }\n else {\n const length = toLength(0, colCount);\n token = new Token(length, 0 /* Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(length));\n }\n }\n else {\n const lineCount = curLineCount - lastTokenEndLine;\n const colCount = curOffset - lastLineBreakOffset;\n if (lineCount === 1 && colCount < smallTextTokens1Line.length) {\n token = smallTextTokens1Line[colCount];\n }\n else {\n const length = toLength(lineCount, colCount);\n token = new Token(length, 0 /* Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(length));\n }\n }\n tokens.push(token);\n }\n // value is matched by regexp, so the token must exist\n tokens.push(brackets.getToken(value));\n lastTokenEndOffset = curOffset + value.length;\n lastTokenEndLine = curLineCount;\n }\n }\n }\n const offset = text.length;\n if (lastTokenEndOffset !== offset) {\n const length = (lastTokenEndLine === curLineCount)\n ? toLength(0, offset - lastTokenEndOffset)\n : toLength(curLineCount - lastTokenEndLine, offset - lastLineBreakOffset);\n tokens.push(new Token(length, 0 /* Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(length)));\n }\n this.length = toLength(curLineCount, offset - lastLineBreakOffset);\n this.tokens = tokens;\n }\n get offset() {\n return this._offset;\n }\n read() {\n return this.tokens[this.idx++] || null;\n }\n peek() {\n return this.tokens[this.idx] || null;\n }\n skip(length) {\n throw new NotSupportedError();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { escapeRegExpCharacters } from '../../../../../base/common/strings.js';\nimport { BracketAstNode } from './ast.js';\nimport { toLength } from './length.js';\nimport { identityKeyProvider, SmallImmutableSet } from './smallImmutableSet.js';\nimport { Token } from './tokenizer.js';\nexport class BracketTokens {\n constructor(map) {\n this.map = map;\n this.hasRegExp = false;\n this._regExpGlobal = null;\n }\n static createFromLanguage(configuration, denseKeyProvider) {\n function getId(languageId, openingText) {\n return denseKeyProvider.getKey(`${languageId}:::${openingText}`);\n }\n const brackets = configuration.characterPair.getColorizedBrackets();\n const closingBrackets = new Map();\n const openingBrackets = new Set();\n for (const [openingText, closingText] of brackets) {\n openingBrackets.add(openingText);\n let info = closingBrackets.get(closingText);\n const openingTextId = getId(configuration.languageId, openingText);\n if (!info) {\n info = { openingBrackets: SmallImmutableSet.getEmpty(), first: openingTextId };\n closingBrackets.set(closingText, info);\n }\n info.openingBrackets = info.openingBrackets.add(openingTextId, identityKeyProvider);\n }\n const map = new Map();\n for (const [closingText, info] of closingBrackets) {\n const length = toLength(0, closingText.length);\n map.set(closingText, new Token(length, 2 /* ClosingBracket */, info.first, info.openingBrackets, BracketAstNode.create(length)));\n }\n for (const openingText of openingBrackets) {\n const length = toLength(0, openingText.length);\n const openingTextId = getId(configuration.languageId, openingText);\n map.set(openingText, new Token(length, 1 /* OpeningBracket */, openingTextId, SmallImmutableSet.getEmpty().add(openingTextId, identityKeyProvider), BracketAstNode.create(length)));\n }\n return new BracketTokens(map);\n }\n getRegExpStr() {\n if (this.isEmpty) {\n return null;\n }\n else {\n const keys = [...this.map.keys()];\n keys.sort();\n keys.reverse();\n return keys.map(k => prepareBracketForRegExp(k)).join('|');\n }\n }\n /**\n * Returns null if there is no such regexp (because there are no brackets).\n */\n get regExpGlobal() {\n if (!this.hasRegExp) {\n const regExpStr = this.getRegExpStr();\n this._regExpGlobal = regExpStr ? new RegExp(regExpStr, 'g') : null;\n this.hasRegExp = true;\n }\n return this._regExpGlobal;\n }\n getToken(value) {\n return this.map.get(value);\n }\n get isEmpty() {\n return this.map.size === 0;\n }\n}\nfunction prepareBracketForRegExp(str) {\n const escaped = escapeRegExpCharacters(str);\n // This bracket pair uses letters like e.g. \"begin\" - \"end\" (see https://github.com/microsoft/vscode/issues/132162)\n const needsWordBoundaries = (/^[\\w ]+$/.test(str));\n return (needsWordBoundaries ? `\\\\b${escaped}\\\\b` : escaped);\n}\nexport class LanguageAgnosticBracketTokens {\n constructor(denseKeyProvider, getLanguageConfiguration) {\n this.denseKeyProvider = denseKeyProvider;\n this.getLanguageConfiguration = getLanguageConfiguration;\n this.languageIdToBracketTokens = new Map();\n }\n didLanguageChange(languageId) {\n const existing = this.languageIdToBracketTokens.get(languageId);\n if (!existing) {\n return false;\n }\n const newRegExpStr = BracketTokens.createFromLanguage(this.getLanguageConfiguration(languageId), this.denseKeyProvider).getRegExpStr();\n return existing.getRegExpStr() !== newRegExpStr;\n }\n getSingleLanguageBracketTokens(languageId) {\n let singleLanguageBracketTokens = this.languageIdToBracketTokens.get(languageId);\n if (!singleLanguageBracketTokens) {\n singleLanguageBracketTokens = BracketTokens.createFromLanguage(this.getLanguageConfiguration(languageId), this.denseKeyProvider);\n this.languageIdToBracketTokens.set(languageId, singleLanguageBracketTokens);\n }\n return singleLanguageBracketTokens;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ListAstNode } from './ast.js';\n/**\n * Concatenates a list of (2,3) AstNode's into a single (2,3) AstNode.\n * This mutates the items of the input array!\n * If all items have the same height, this method has runtime O(items.length).\n * Otherwise, it has runtime O(items.length * max(log(items.length), items.max(i => i.height))).\n*/\nexport function concat23Trees(items) {\n if (items.length === 0) {\n return null;\n }\n if (items.length === 1) {\n return items[0];\n }\n let i = 0;\n /**\n * Reads nodes of same height and concatenates them to a single node.\n */\n function readNode() {\n if (i >= items.length) {\n return null;\n }\n const start = i;\n const height = items[start].listHeight;\n i++;\n while (i < items.length && items[i].listHeight === height) {\n i++;\n }\n if (i - start >= 2) {\n return concat23TreesOfSameHeight(start === 0 && i === items.length ? items : items.slice(start, i), false);\n }\n else {\n return items[start];\n }\n }\n // The items might not have the same height.\n // We merge all items by using a binary concat operator.\n let first = readNode(); // There must be a first item\n let second = readNode();\n if (!second) {\n return first;\n }\n for (let item = readNode(); item; item = readNode()) {\n // Prefer concatenating smaller trees, as the runtime of concat depends on the tree height.\n if (heightDiff(first, second) <= heightDiff(second, item)) {\n first = concat(first, second);\n second = item;\n }\n else {\n second = concat(second, item);\n }\n }\n const result = concat(first, second);\n return result;\n}\nexport function concat23TreesOfSameHeight(items, createImmutableLists = false) {\n if (items.length === 0) {\n return null;\n }\n if (items.length === 1) {\n return items[0];\n }\n let length = items.length;\n // All trees have same height, just create parent nodes.\n while (length > 3) {\n const newLength = length >> 1;\n for (let i = 0; i < newLength; i++) {\n const j = i << 1;\n items[i] = ListAstNode.create23(items[j], items[j + 1], j + 3 === length ? items[j + 2] : null, createImmutableLists);\n }\n length = newLength;\n }\n return ListAstNode.create23(items[0], items[1], length >= 3 ? items[2] : null, createImmutableLists);\n}\nfunction heightDiff(node1, node2) {\n return Math.abs(node1.listHeight - node2.listHeight);\n}\nfunction concat(node1, node2) {\n if (node1.listHeight === node2.listHeight) {\n return ListAstNode.create23(node1, node2, null, false);\n }\n else if (node1.listHeight > node2.listHeight) {\n // node1 is the tree we want to insert into\n return append(node1, node2);\n }\n else {\n return prepend(node2, node1);\n }\n}\n/**\n * Appends the given node to the end of this (2,3) tree.\n * Returns the new root.\n*/\nfunction append(list, nodeToAppend) {\n list = list.toMutable();\n let curNode = list;\n const parents = new Array();\n let nodeToAppendOfCorrectHeight;\n while (true) {\n // assert nodeToInsert.listHeight <= curNode.listHeight\n if (nodeToAppend.listHeight === curNode.listHeight) {\n nodeToAppendOfCorrectHeight = nodeToAppend;\n break;\n }\n // assert 0 <= nodeToInsert.listHeight < curNode.listHeight\n if (curNode.kind !== 4 /* List */) {\n throw new Error('unexpected');\n }\n parents.push(curNode);\n // assert 2 <= curNode.childrenLength <= 3\n curNode = curNode.makeLastElementMutable();\n }\n // assert nodeToAppendOfCorrectHeight!.listHeight === curNode.listHeight\n for (let i = parents.length - 1; i >= 0; i--) {\n const parent = parents[i];\n if (nodeToAppendOfCorrectHeight) {\n // Can we take the element?\n if (parent.childrenLength >= 3) {\n // assert parent.childrenLength === 3 && parent.listHeight === nodeToAppendOfCorrectHeight.listHeight + 1\n // we need to split to maintain (2,3)-tree property.\n // Send the third element + the new element to the parent.\n nodeToAppendOfCorrectHeight = ListAstNode.create23(parent.unappendChild(), nodeToAppendOfCorrectHeight, null, false);\n }\n else {\n parent.appendChildOfSameHeight(nodeToAppendOfCorrectHeight);\n nodeToAppendOfCorrectHeight = undefined;\n }\n }\n else {\n parent.handleChildrenChanged();\n }\n }\n if (nodeToAppendOfCorrectHeight) {\n return ListAstNode.create23(list, nodeToAppendOfCorrectHeight, null, false);\n }\n else {\n return list;\n }\n}\n/**\n * Prepends the given node to the end of this (2,3) tree.\n * Returns the new root.\n*/\nfunction prepend(list, nodeToAppend) {\n list = list.toMutable();\n let curNode = list;\n const parents = new Array();\n // assert nodeToInsert.listHeight <= curNode.listHeight\n while (nodeToAppend.listHeight !== curNode.listHeight) {\n // assert 0 <= nodeToInsert.listHeight < curNode.listHeight\n if (curNode.kind !== 4 /* List */) {\n throw new Error('unexpected');\n }\n parents.push(curNode);\n // assert 2 <= curNode.childrenFast.length <= 3\n curNode = curNode.makeFirstElementMutable();\n }\n let nodeToPrependOfCorrectHeight = nodeToAppend;\n // assert nodeToAppendOfCorrectHeight!.listHeight === curNode.listHeight\n for (let i = parents.length - 1; i >= 0; i--) {\n const parent = parents[i];\n if (nodeToPrependOfCorrectHeight) {\n // Can we take the element?\n if (parent.childrenLength >= 3) {\n // assert parent.childrenLength === 3 && parent.listHeight === nodeToAppendOfCorrectHeight.listHeight + 1\n // we need to split to maintain (2,3)-tree property.\n // Send the third element + the new element to the parent.\n nodeToPrependOfCorrectHeight = ListAstNode.create23(nodeToPrependOfCorrectHeight, parent.unprependChild(), null, false);\n }\n else {\n parent.prependChildOfSameHeight(nodeToPrependOfCorrectHeight);\n nodeToPrependOfCorrectHeight = undefined;\n }\n }\n else {\n parent.handleChildrenChanged();\n }\n }\n if (nodeToPrependOfCorrectHeight) {\n return ListAstNode.create23(nodeToPrependOfCorrectHeight, list, null, false);\n }\n else {\n return list;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { lengthAdd, lengthZero, lengthLessThan } from './length.js';\n/**\n * Allows to efficiently find a longest child at a given offset in a fixed node.\n * The requested offsets must increase monotonously.\n*/\nexport class NodeReader {\n constructor(node) {\n this.lastOffset = lengthZero;\n this.nextNodes = [node];\n this.offsets = [lengthZero];\n this.idxs = [];\n }\n /**\n * Returns the longest node at `offset` that satisfies the predicate.\n * @param offset must be greater than or equal to the last offset this method has been called with!\n */\n readLongestNodeAt(offset, predicate) {\n if (lengthLessThan(offset, this.lastOffset)) {\n throw new Error('Invalid offset');\n }\n this.lastOffset = offset;\n // Find the longest node of all those that are closest to the current offset.\n while (true) {\n const curNode = lastOrUndefined(this.nextNodes);\n if (!curNode) {\n return undefined;\n }\n const curNodeOffset = lastOrUndefined(this.offsets);\n if (lengthLessThan(offset, curNodeOffset)) {\n // The next best node is not here yet.\n // The reader must advance before a cached node is hit.\n return undefined;\n }\n if (lengthLessThan(curNodeOffset, offset)) {\n // The reader is ahead of the current node.\n if (lengthAdd(curNodeOffset, curNode.length) <= offset) {\n // The reader is after the end of the current node.\n this.nextNodeAfterCurrent();\n }\n else {\n // The reader is somewhere in the current node.\n const nextChildIdx = getNextChildIdx(curNode);\n if (nextChildIdx !== -1) {\n // Go to the first child and repeat.\n this.nextNodes.push(curNode.getChild(nextChildIdx));\n this.offsets.push(curNodeOffset);\n this.idxs.push(nextChildIdx);\n }\n else {\n // We don't have children\n this.nextNodeAfterCurrent();\n }\n }\n }\n else {\n // readerOffsetBeforeChange === curNodeOffset\n if (predicate(curNode)) {\n this.nextNodeAfterCurrent();\n return curNode;\n }\n else {\n const nextChildIdx = getNextChildIdx(curNode);\n // look for shorter node\n if (nextChildIdx === -1) {\n // There is no shorter node.\n this.nextNodeAfterCurrent();\n return undefined;\n }\n else {\n // Descend into first child & repeat.\n this.nextNodes.push(curNode.getChild(nextChildIdx));\n this.offsets.push(curNodeOffset);\n this.idxs.push(nextChildIdx);\n }\n }\n }\n }\n }\n // Navigates to the longest node that continues after the current node.\n nextNodeAfterCurrent() {\n while (true) {\n const currentOffset = lastOrUndefined(this.offsets);\n const currentNode = lastOrUndefined(this.nextNodes);\n this.nextNodes.pop();\n this.offsets.pop();\n if (this.idxs.length === 0) {\n // We just popped the root node, there is no next node.\n break;\n }\n // Parent is not undefined, because idxs is not empty\n const parent = lastOrUndefined(this.nextNodes);\n const nextChildIdx = getNextChildIdx(parent, this.idxs[this.idxs.length - 1]);\n if (nextChildIdx !== -1) {\n this.nextNodes.push(parent.getChild(nextChildIdx));\n this.offsets.push(lengthAdd(currentOffset, currentNode.length));\n this.idxs[this.idxs.length - 1] = nextChildIdx;\n break;\n }\n else {\n this.idxs.pop();\n }\n // We fully consumed the parent.\n // Current node is now parent, so call nextNodeAfterCurrent again\n }\n }\n}\nfunction getNextChildIdx(node, curIdx = -1) {\n while (true) {\n curIdx++;\n if (curIdx >= node.childrenLength) {\n return -1;\n }\n if (node.getChild(curIdx)) {\n return curIdx;\n }\n }\n}\nfunction lastOrUndefined(arr) {\n return arr.length > 0 ? arr[arr.length - 1] : undefined;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { InvalidBracketAstNode, ListAstNode, PairAstNode } from './ast.js';\nimport { BeforeEditPositionMapper } from './beforeEditPositionMapper.js';\nimport { SmallImmutableSet } from './smallImmutableSet.js';\nimport { lengthIsZero, lengthLessThan } from './length.js';\nimport { concat23Trees, concat23TreesOfSameHeight } from './concat23Trees.js';\nimport { NodeReader } from './nodeReader.js';\n/**\n * Non incrementally built ASTs are immutable.\n*/\nexport function parseDocument(tokenizer, edits, oldNode, createImmutableLists) {\n const parser = new Parser(tokenizer, edits, oldNode, createImmutableLists);\n return parser.parseDocument();\n}\n/**\n * Non incrementally built ASTs are immutable.\n*/\nclass Parser {\n constructor(tokenizer, edits, oldNode, createImmutableLists) {\n this.tokenizer = tokenizer;\n this.createImmutableLists = createImmutableLists;\n this._itemsConstructed = 0;\n this._itemsFromCache = 0;\n if (oldNode && createImmutableLists) {\n throw new Error('Not supported');\n }\n this.oldNodeReader = oldNode ? new NodeReader(oldNode) : undefined;\n this.positionMapper = new BeforeEditPositionMapper(edits, tokenizer.length);\n }\n parseDocument() {\n this._itemsConstructed = 0;\n this._itemsFromCache = 0;\n let result = this.parseList(SmallImmutableSet.getEmpty());\n if (!result) {\n result = ListAstNode.getEmpty();\n }\n return result;\n }\n parseList(openedBracketIds) {\n const items = new Array();\n while (true) {\n const token = this.tokenizer.peek();\n if (!token ||\n (token.kind === 2 /* ClosingBracket */ &&\n token.bracketIds.intersects(openedBracketIds))) {\n break;\n }\n const child = this.parseChild(openedBracketIds);\n if (child.kind === 4 /* List */ && child.childrenLength === 0) {\n continue;\n }\n items.push(child);\n }\n // When there is no oldNodeReader, all items are created from scratch and must have the same height.\n const result = this.oldNodeReader ? concat23Trees(items) : concat23TreesOfSameHeight(items, this.createImmutableLists);\n return result;\n }\n parseChild(openedBracketIds) {\n if (this.oldNodeReader) {\n const maxCacheableLength = this.positionMapper.getDistanceToNextChange(this.tokenizer.offset);\n if (!lengthIsZero(maxCacheableLength)) {\n const cachedNode = this.oldNodeReader.readLongestNodeAt(this.positionMapper.getOffsetBeforeChange(this.tokenizer.offset), curNode => {\n if (!lengthLessThan(curNode.length, maxCacheableLength)) {\n // Either the node contains edited text or touches edited text.\n // In the latter case, brackets might have been extended (`end` -> `ending`), so even touching nodes cannot be reused.\n return false;\n }\n const canBeReused = curNode.canBeReused(openedBracketIds);\n return canBeReused;\n });\n if (cachedNode) {\n this._itemsFromCache++;\n this.tokenizer.skip(cachedNode.length);\n return cachedNode;\n }\n }\n }\n this._itemsConstructed++;\n const token = this.tokenizer.read();\n switch (token.kind) {\n case 2 /* ClosingBracket */:\n return new InvalidBracketAstNode(token.bracketIds, token.length);\n case 0 /* Text */:\n return token.astNode;\n case 1 /* OpeningBracket */:\n const set = openedBracketIds.merge(token.bracketIds);\n const child = this.parseList(set);\n const nextToken = this.tokenizer.peek();\n if (nextToken &&\n nextToken.kind === 2 /* ClosingBracket */ &&\n (nextToken.bracketId === token.bracketId || nextToken.bracketIds.intersects(token.bracketIds))) {\n this.tokenizer.read();\n return PairAstNode.create(token.astNode, child, nextToken.astNode);\n }\n else {\n return PairAstNode.create(token.astNode, child, null);\n }\n default:\n throw new Error('unexpected');\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../../base/common/event.js';\nimport { Disposable, DisposableStore, MutableDisposable } from '../../../../base/common/lifecycle.js';\nimport { Range } from '../../core/range.js';\nimport { BracketInfo, BracketPairWithMinIndentationInfo } from './bracketPairs.js';\nimport { TextEditInfo } from './impl/beforeEditPositionMapper.js';\nimport { LanguageAgnosticBracketTokens } from './impl/brackets.js';\nimport { lengthAdd, lengthGreaterThanEqual, lengthLessThanEqual, lengthOfString, lengthsToRange, lengthZero, positionToLength, toLength } from './impl/length.js';\nimport { parseDocument } from './impl/parser.js';\nimport { DenseKeyProvider } from './impl/smallImmutableSet.js';\nimport { FastTokenizer, TextBufferTokenizer } from './impl/tokenizer.js';\nexport class BracketPairs extends Disposable {\n constructor(textModel, languageConfigurationService) {\n super();\n this.textModel = textModel;\n this.languageConfigurationService = languageConfigurationService;\n this.cache = this._register(new MutableDisposable());\n this.onDidChangeEmitter = new Emitter();\n this.onDidChange = this.onDidChangeEmitter.event;\n this.bracketsRequested = false;\n this._register(textModel.onDidChangeOptions(e => {\n this.cache.clear();\n this.updateCache();\n }));\n this._register(textModel.onDidChangeLanguage(e => {\n this.cache.clear();\n this.updateCache();\n }));\n this._register(this.languageConfigurationService.onDidChange(e => {\n var _a;\n if (!e.languageId || ((_a = this.cache.value) === null || _a === void 0 ? void 0 : _a.object.didLanguageChange(e.languageId))) {\n this.cache.clear();\n this.updateCache();\n }\n }));\n }\n get isDocumentSupported() {\n const maxSupportedDocumentLength = /* max lines */ 50000 * /* average column count */ 100;\n return this.textModel.getValueLength() <= maxSupportedDocumentLength;\n }\n updateCache() {\n if (this.bracketsRequested && this.isDocumentSupported) {\n if (!this.cache.value) {\n const store = new DisposableStore();\n this.cache.value = createDisposableRef(store.add(new ActiveBracketPairsImpl(this.textModel, (languageId) => {\n return this.languageConfigurationService.getLanguageConfiguration(languageId);\n })), store);\n store.add(this.cache.value.object.onDidChange(e => this.onDidChangeEmitter.fire(e)));\n this.onDidChangeEmitter.fire();\n }\n }\n else {\n this.cache.clear();\n this.onDidChangeEmitter.fire();\n }\n }\n handleContentChanged(change) {\n var _a;\n (_a = this.cache.value) === null || _a === void 0 ? void 0 : _a.object.handleContentChanged(change);\n }\n /**\n * Returns all bracket pairs that intersect the given range.\n * The result is sorted by the start position.\n */\n getBracketPairsInRange(range) {\n var _a;\n this.bracketsRequested = true;\n this.updateCache();\n return ((_a = this.cache.value) === null || _a === void 0 ? void 0 : _a.object.getBracketPairsInRange(range, false)) || [];\n }\n getBracketPairsInRangeWithMinIndentation(range) {\n var _a;\n this.bracketsRequested = true;\n this.updateCache();\n return ((_a = this.cache.value) === null || _a === void 0 ? void 0 : _a.object.getBracketPairsInRange(range, true)) || [];\n }\n getBracketsInRange(range) {\n var _a;\n this.bracketsRequested = true;\n this.updateCache();\n return ((_a = this.cache.value) === null || _a === void 0 ? void 0 : _a.object.getBracketsInRange(range)) || [];\n }\n}\nfunction createDisposableRef(object, disposable) {\n return {\n object,\n dispose: () => disposable === null || disposable === void 0 ? void 0 : disposable.dispose(),\n };\n}\nclass ActiveBracketPairsImpl extends Disposable {\n constructor(textModel, getLanguageConfiguration) {\n super();\n this.textModel = textModel;\n this.getLanguageConfiguration = getLanguageConfiguration;\n this.didChangeEmitter = new Emitter();\n this.denseKeyProvider = new DenseKeyProvider();\n this.brackets = new LanguageAgnosticBracketTokens(this.denseKeyProvider, this.getLanguageConfiguration);\n this.onDidChange = this.didChangeEmitter.event;\n this._register(textModel.onBackgroundTokenizationStateChanged(() => {\n if (textModel.backgroundTokenizationState === 2 /* Completed */) {\n const wasUndefined = this.initialAstWithoutTokens === undefined;\n // Clear the initial tree as we can use the tree with token information now.\n this.initialAstWithoutTokens = undefined;\n if (!wasUndefined) {\n this.didChangeEmitter.fire();\n }\n }\n }));\n this._register(textModel.onDidChangeTokens(({ ranges }) => {\n const edits = ranges.map(r => new TextEditInfo(toLength(r.fromLineNumber - 1, 0), toLength(r.toLineNumber, 0), toLength(r.toLineNumber - r.fromLineNumber + 1, 0)));\n this.astWithTokens = this.parseDocumentFromTextBuffer(edits, this.astWithTokens, false);\n if (!this.initialAstWithoutTokens) {\n this.didChangeEmitter.fire();\n }\n }));\n if (textModel.backgroundTokenizationState === 0 /* Uninitialized */) {\n // There are no token information yet\n const brackets = this.brackets.getSingleLanguageBracketTokens(this.textModel.getLanguageId());\n const tokenizer = new FastTokenizer(this.textModel.getValue(), brackets);\n this.initialAstWithoutTokens = parseDocument(tokenizer, [], undefined, true);\n this.astWithTokens = this.initialAstWithoutTokens;\n }\n else if (textModel.backgroundTokenizationState === 2 /* Completed */) {\n // Skip the initial ast, as there is no flickering.\n // Directly create the tree with token information.\n this.initialAstWithoutTokens = undefined;\n this.astWithTokens = this.parseDocumentFromTextBuffer([], undefined, false);\n }\n else if (textModel.backgroundTokenizationState === 1 /* InProgress */) {\n this.initialAstWithoutTokens = this.parseDocumentFromTextBuffer([], undefined, true);\n this.astWithTokens = this.initialAstWithoutTokens;\n }\n }\n didLanguageChange(languageId) {\n return this.brackets.didLanguageChange(languageId);\n }\n handleContentChanged(change) {\n const edits = change.changes.map(c => {\n const range = Range.lift(c.range);\n return new TextEditInfo(positionToLength(range.getStartPosition()), positionToLength(range.getEndPosition()), lengthOfString(c.text));\n }).reverse();\n this.astWithTokens = this.parseDocumentFromTextBuffer(edits, this.astWithTokens, false);\n if (this.initialAstWithoutTokens) {\n this.initialAstWithoutTokens = this.parseDocumentFromTextBuffer(edits, this.initialAstWithoutTokens, false);\n }\n }\n /**\n * @pure (only if isPure = true)\n */\n parseDocumentFromTextBuffer(edits, previousAst, immutable) {\n // Is much faster if `isPure = false`.\n const isPure = false;\n const previousAstClone = isPure ? previousAst === null || previousAst === void 0 ? void 0 : previousAst.deepClone() : previousAst;\n const tokenizer = new TextBufferTokenizer(this.textModel, this.brackets);\n const result = parseDocument(tokenizer, edits, previousAstClone, immutable);\n return result;\n }\n getBracketsInRange(range) {\n const startOffset = toLength(range.startLineNumber - 1, range.startColumn - 1);\n const endOffset = toLength(range.endLineNumber - 1, range.endColumn - 1);\n const result = new Array();\n const node = this.initialAstWithoutTokens || this.astWithTokens;\n collectBrackets(node, lengthZero, node.length, startOffset, endOffset, result);\n return result;\n }\n getBracketPairsInRange(range, includeMinIndentation) {\n const result = new Array();\n const startLength = positionToLength(range.getStartPosition());\n const endLength = positionToLength(range.getEndPosition());\n const node = this.initialAstWithoutTokens || this.astWithTokens;\n const context = new CollectBracketPairsContext(result, includeMinIndentation, this.textModel);\n collectBracketPairs(node, lengthZero, node.length, startLength, endLength, context);\n return result;\n }\n}\nfunction collectBrackets(node, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, result, level = 0) {\n if (node.kind === 1 /* Bracket */) {\n const range = lengthsToRange(nodeOffsetStart, nodeOffsetEnd);\n result.push(new BracketInfo(range, level - 1, false));\n }\n else if (node.kind === 3 /* UnexpectedClosingBracket */) {\n const range = lengthsToRange(nodeOffsetStart, nodeOffsetEnd);\n result.push(new BracketInfo(range, level - 1, true));\n }\n else if (node.kind === 4 /* List */) {\n for (const child of node.children) {\n nodeOffsetEnd = lengthAdd(nodeOffsetStart, child.length);\n if (lengthLessThanEqual(nodeOffsetStart, endOffset) && lengthGreaterThanEqual(nodeOffsetEnd, startOffset)) {\n collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, result, level);\n }\n nodeOffsetStart = nodeOffsetEnd;\n }\n }\n else if (node.kind === 2 /* Pair */) {\n // Don't use node.children here to improve performance\n level++;\n {\n const child = node.openingBracket;\n nodeOffsetEnd = lengthAdd(nodeOffsetStart, child.length);\n if (lengthLessThanEqual(nodeOffsetStart, endOffset) && lengthGreaterThanEqual(nodeOffsetEnd, startOffset)) {\n collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, result, level);\n }\n nodeOffsetStart = nodeOffsetEnd;\n }\n if (node.child) {\n const child = node.child;\n nodeOffsetEnd = lengthAdd(nodeOffsetStart, child.length);\n if (lengthLessThanEqual(nodeOffsetStart, endOffset) && lengthGreaterThanEqual(nodeOffsetEnd, startOffset)) {\n collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, result, level);\n }\n nodeOffsetStart = nodeOffsetEnd;\n }\n if (node.closingBracket) {\n const child = node.closingBracket;\n nodeOffsetEnd = lengthAdd(nodeOffsetStart, child.length);\n if (lengthLessThanEqual(nodeOffsetStart, endOffset) && lengthGreaterThanEqual(nodeOffsetEnd, startOffset)) {\n collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, result, level);\n }\n nodeOffsetStart = nodeOffsetEnd;\n }\n }\n}\nclass CollectBracketPairsContext {\n constructor(result, includeMinIndentation, textModel) {\n this.result = result;\n this.includeMinIndentation = includeMinIndentation;\n this.textModel = textModel;\n }\n}\nfunction collectBracketPairs(node, nodeOffset, nodeOffsetEnd, startOffset, endOffset, context, level = 0) {\n var _a;\n if (node.kind === 2 /* Pair */) {\n const openingBracketEnd = lengthAdd(nodeOffset, node.openingBracket.length);\n let minIndentation = -1;\n if (context.includeMinIndentation) {\n minIndentation = node.computeMinIndentation(nodeOffset, context.textModel);\n }\n context.result.push(new BracketPairWithMinIndentationInfo(lengthsToRange(nodeOffset, nodeOffsetEnd), lengthsToRange(nodeOffset, openingBracketEnd), node.closingBracket\n ? lengthsToRange(lengthAdd(openingBracketEnd, ((_a = node.child) === null || _a === void 0 ? void 0 : _a.length) || lengthZero), nodeOffsetEnd)\n : undefined, level, minIndentation));\n level++;\n }\n let curOffset = nodeOffset;\n for (const child of node.children) {\n const childOffset = curOffset;\n curOffset = lengthAdd(curOffset, child.length);\n if (lengthLessThanEqual(childOffset, endOffset) && lengthLessThanEqual(startOffset, curOffset)) {\n collectBracketPairs(child, childOffset, curOffset, startOffset, endOffset, context, level);\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../../base/common/event.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport { Range } from '../../core/range.js';\nimport { editorBracketHighlightingForeground1, editorBracketHighlightingForeground2, editorBracketHighlightingForeground3, editorBracketHighlightingForeground4, editorBracketHighlightingForeground5, editorBracketHighlightingForeground6, editorBracketHighlightingUnexpectedBracketForeground } from '../../view/editorColorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nexport class ColorizedBracketPairsDecorationProvider extends Disposable {\n constructor(textModel) {\n super();\n this.textModel = textModel;\n this.colorProvider = new ColorProvider();\n this.onDidChangeEmitter = new Emitter();\n this.onDidChange = this.onDidChangeEmitter.event;\n this.colorizationOptions = textModel.getOptions().bracketPairColorizationOptions;\n this._register(textModel.onDidChangeOptions(e => {\n this.colorizationOptions = textModel.getOptions().bracketPairColorizationOptions;\n }));\n this._register(textModel.bracketPairs.onDidChange(e => {\n this.onDidChangeEmitter.fire();\n }));\n }\n getDecorationsInRange(range, ownerId, filterOutValidation) {\n if (ownerId === undefined) {\n return [];\n }\n if (!this.colorizationOptions.enabled) {\n return [];\n }\n const result = new Array();\n const bracketsInRange = this.textModel.bracketPairs.getBracketsInRange(range);\n for (const bracket of bracketsInRange) {\n result.push({\n id: `bracket${bracket.range.toString()}-${bracket.nestingLevel}`,\n options: { description: 'BracketPairColorization', inlineClassName: this.colorProvider.getInlineClassName(bracket) },\n ownerId: 0,\n range: bracket.range\n });\n }\n return result;\n }\n getAllDecorations(ownerId, filterOutValidation) {\n if (ownerId === undefined) {\n return [];\n }\n if (!this.colorizationOptions.enabled) {\n return [];\n }\n return this.getDecorationsInRange(new Range(1, 1, this.textModel.getLineCount(), 1), ownerId, filterOutValidation);\n }\n}\nclass ColorProvider {\n constructor() {\n this.unexpectedClosingBracketClassName = 'unexpected-closing-bracket';\n }\n getInlineClassName(bracket) {\n if (bracket.isInvalid) {\n return this.unexpectedClosingBracketClassName;\n }\n return this.getInlineClassNameOfLevel(bracket.nestingLevel);\n }\n getInlineClassNameOfLevel(level) {\n // To support a dynamic amount of colors up to 6 colors,\n // we use a number that is a lcm of all numbers from 1 to 6.\n return `bracket-highlighting-${level % 30}`;\n }\n}\nregisterThemingParticipant((theme, collector) => {\n const colors = [\n editorBracketHighlightingForeground1,\n editorBracketHighlightingForeground2,\n editorBracketHighlightingForeground3,\n editorBracketHighlightingForeground4,\n editorBracketHighlightingForeground5,\n editorBracketHighlightingForeground6\n ];\n const colorProvider = new ColorProvider();\n collector.addRule(`.monaco-editor .${colorProvider.unexpectedClosingBracketClassName} { color: ${theme.getColor(editorBracketHighlightingUnexpectedBracketForeground)}; }`);\n let colorValues = colors\n .map(c => theme.getColor(c))\n .filter((c) => !!c)\n .filter(c => !c.isTransparent());\n for (let level = 0; level < 30; level++) {\n const color = colorValues[level % colorValues.length];\n collector.addRule(`.monaco-editor .${colorProvider.getInlineClassNameOfLevel(level)} { color: ${color}; }`);\n }\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { EDITOR_MODEL_DEFAULTS } from '../config/editorOptions.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport * as model from '../model.js';\nimport { EditStack } from './editStack.js';\nimport { guessIndentation } from './indentationGuesser.js';\nimport { IntervalNode, IntervalTree, recomputeMaxEnd } from './intervalTree.js';\nimport { PieceTreeTextBufferBuilder } from './pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js';\nimport { InternalModelContentChangeEvent, LineInjectedText, ModelInjectedTextChangedEvent, ModelRawContentChangedEvent, ModelRawEOLChanged, ModelRawFlush, ModelRawLineChanged, ModelRawLinesDeleted, ModelRawLinesInserted } from './textModelEvents.js';\nimport { SearchParams, TextModelSearch } from './textModelSearch.js';\nimport { TextModelTokenization } from './textModelTokens.js';\nimport { getWordAtText } from './wordHelper.js';\nimport { ILanguageConfigurationService } from '../modes/languageConfigurationRegistry.js';\nimport { NULL_MODE_ID } from '../modes/nullMode.js';\nimport { ignoreBracketsInToken } from '../modes/supports.js';\nimport { BracketsUtils } from '../modes/supports/richEditBrackets.js';\nimport { TokensStore, countEOL, TokensStore2 } from './tokensStore.js';\nimport { Color } from '../../../base/common/color.js';\nimport { IUndoRedoService } from '../../../platform/undoRedo/common/undoRedo.js';\nimport { PieceTreeTextBuffer } from './pieceTreeTextBuffer/pieceTreeTextBuffer.js';\nimport { ArrayQueue, findLast } from '../../../base/common/arrays.js';\nimport { BracketPairs } from './bracketPairs/bracketPairsImpl.js';\nimport { ColorizedBracketPairsDecorationProvider } from './bracketPairs/colorizedBracketPairsDecorationProvider.js';\nimport { CursorColumns } from '../controller/cursorColumns.js';\nimport { IModeService } from '../services/modeService.js';\nfunction createTextBufferBuilder() {\n return new PieceTreeTextBufferBuilder();\n}\nexport function createTextBufferFactory(text) {\n const builder = createTextBufferBuilder();\n builder.acceptChunk(text);\n return builder.finish();\n}\nexport function createTextBuffer(value, defaultEOL) {\n const factory = (typeof value === 'string' ? createTextBufferFactory(value) : value);\n return factory.create(defaultEOL);\n}\nlet MODEL_ID = 0;\nconst LIMIT_FIND_COUNT = 999;\nexport const LONG_LINE_BOUNDARY = 10000;\nclass TextModelSnapshot {\n constructor(source) {\n this._source = source;\n this._eos = false;\n }\n read() {\n if (this._eos) {\n return null;\n }\n let result = [], resultCnt = 0, resultLength = 0;\n do {\n let tmp = this._source.read();\n if (tmp === null) {\n // end-of-stream\n this._eos = true;\n if (resultCnt === 0) {\n return null;\n }\n else {\n return result.join('');\n }\n }\n if (tmp.length > 0) {\n result[resultCnt++] = tmp;\n resultLength += tmp.length;\n }\n if (resultLength >= 64 * 1024) {\n return result.join('');\n }\n } while (true);\n }\n}\nconst invalidFunc = () => { throw new Error(`Invalid change accessor`); };\nclass BracketSearchCanceled {\n constructor() {\n this._searchCanceledBrand = undefined;\n }\n}\nBracketSearchCanceled.INSTANCE = new BracketSearchCanceled();\nfunction stripBracketSearchCanceled(result) {\n if (result instanceof BracketSearchCanceled) {\n return null;\n }\n return result;\n}\nlet TextModel = class TextModel extends Disposable {\n constructor(source, creationOptions, languageId, associatedResource = null, _undoRedoService, _modeService, _languageConfigurationService) {\n super();\n this._undoRedoService = _undoRedoService;\n this._modeService = _modeService;\n this._languageConfigurationService = _languageConfigurationService;\n //#region Events\n this._onWillDispose = this._register(new Emitter());\n this.onWillDispose = this._onWillDispose.event;\n this._onDidChangeDecorations = this._register(new DidChangeDecorationsEmitter(affectedInjectedTextLines => this.handleBeforeFireDecorationsChangedEvent(affectedInjectedTextLines)));\n this.onDidChangeDecorations = this._onDidChangeDecorations.event;\n this._onDidChangeLanguage = this._register(new Emitter());\n this.onDidChangeLanguage = this._onDidChangeLanguage.event;\n this._onDidChangeLanguageConfiguration = this._register(new Emitter());\n this.onDidChangeLanguageConfiguration = this._onDidChangeLanguageConfiguration.event;\n this._onDidChangeTokens = this._register(new Emitter());\n this.onDidChangeTokens = this._onDidChangeTokens.event;\n this._onDidChangeOptions = this._register(new Emitter());\n this.onDidChangeOptions = this._onDidChangeOptions.event;\n this._onDidChangeAttached = this._register(new Emitter());\n this.onDidChangeAttached = this._onDidChangeAttached.event;\n this._onDidChangeContentOrInjectedText = this._register(new Emitter());\n this.onDidChangeContentOrInjectedText = this._onDidChangeContentOrInjectedText.event;\n this._eventEmitter = this._register(new DidChangeContentEmitter());\n this._backgroundTokenizationState = 0 /* Uninitialized */;\n this._onBackgroundTokenizationStateChanged = this._register(new Emitter());\n this.onBackgroundTokenizationStateChanged = this._onBackgroundTokenizationStateChanged.event;\n this._register(this._eventEmitter.fastEvent((e) => {\n this._onDidChangeContentOrInjectedText.fire(e.rawContentChangedEvent);\n }));\n // Generate a new unique model id\n MODEL_ID++;\n this.id = '$model' + MODEL_ID;\n this.isForSimpleWidget = creationOptions.isForSimpleWidget;\n if (typeof associatedResource === 'undefined' || associatedResource === null) {\n this._associatedResource = URI.parse('inmemory://model/' + MODEL_ID);\n }\n else {\n this._associatedResource = associatedResource;\n }\n this._attachedEditorCount = 0;\n const { textBuffer, disposable } = createTextBuffer(source, creationOptions.defaultEOL);\n this._buffer = textBuffer;\n this._bufferDisposable = disposable;\n this._options = TextModel.resolveOptions(this._buffer, creationOptions);\n const bufferLineCount = this._buffer.getLineCount();\n const bufferTextLength = this._buffer.getValueLengthInRange(new Range(1, 1, bufferLineCount, this._buffer.getLineLength(bufferLineCount) + 1), 0 /* TextDefined */);\n // !!! Make a decision in the ctor and permanently respect this decision !!!\n // If a model is too large at construction time, it will never get tokenized,\n // under no circumstances.\n if (creationOptions.largeFileOptimizations) {\n this._isTooLargeForTokenization = ((bufferTextLength > TextModel.LARGE_FILE_SIZE_THRESHOLD)\n || (bufferLineCount > TextModel.LARGE_FILE_LINE_COUNT_THRESHOLD));\n }\n else {\n this._isTooLargeForTokenization = false;\n }\n this._isTooLargeForSyncing = (bufferTextLength > TextModel.MODEL_SYNC_LIMIT);\n this._versionId = 1;\n this._alternativeVersionId = 1;\n this._initialUndoRedoSnapshot = null;\n this._isDisposed = false;\n this._isDisposing = false;\n this._languageId = languageId || NULL_MODE_ID;\n this._languageRegistryListener = this._languageConfigurationService.onDidChange(e => {\n if (e.affects(this._languageId)) {\n this._onDidChangeLanguageConfiguration.fire({});\n }\n });\n this._instanceId = strings.singleLetterHash(MODEL_ID);\n this._lastDecorationId = 0;\n this._decorations = Object.create(null);\n this._decorationsTree = new DecorationsTrees();\n this._commandManager = new EditStack(this, this._undoRedoService);\n this._isUndoing = false;\n this._isRedoing = false;\n this._trimAutoWhitespaceLines = null;\n this._tokens = new TokensStore(this._modeService.languageIdCodec);\n this._tokens2 = new TokensStore2(this._modeService.languageIdCodec);\n this._tokenization = new TextModelTokenization(this, this._modeService.languageIdCodec);\n this._bracketPairColorizer = this._register(new BracketPairs(this, this._languageConfigurationService));\n this._decorationProvider = this._register(new ColorizedBracketPairsDecorationProvider(this));\n this._register(this._decorationProvider.onDidChange(() => {\n this._onDidChangeDecorations.beginDeferredEmit();\n this._onDidChangeDecorations.fire();\n this._onDidChangeDecorations.endDeferredEmit();\n }));\n }\n static resolveOptions(textBuffer, options) {\n if (options.detectIndentation) {\n const guessedIndentation = guessIndentation(textBuffer, options.tabSize, options.insertSpaces);\n return new model.TextModelResolvedOptions({\n tabSize: guessedIndentation.tabSize,\n indentSize: guessedIndentation.tabSize,\n insertSpaces: guessedIndentation.insertSpaces,\n trimAutoWhitespace: options.trimAutoWhitespace,\n defaultEOL: options.defaultEOL,\n bracketPairColorizationOptions: options.bracketPairColorizationOptions,\n });\n }\n return new model.TextModelResolvedOptions({\n tabSize: options.tabSize,\n indentSize: options.indentSize,\n insertSpaces: options.insertSpaces,\n trimAutoWhitespace: options.trimAutoWhitespace,\n defaultEOL: options.defaultEOL,\n bracketPairColorizationOptions: options.bracketPairColorizationOptions,\n });\n }\n onDidChangeContentFast(listener) {\n return this._eventEmitter.fastEvent((e) => listener(e.contentChangedEvent));\n }\n onDidChangeContent(listener) {\n return this._eventEmitter.slowEvent((e) => listener(e.contentChangedEvent));\n }\n get bracketPairs() { return this._bracketPairColorizer; }\n get backgroundTokenizationState() {\n return this._backgroundTokenizationState;\n }\n handleTokenizationProgress(completed) {\n if (this._backgroundTokenizationState === 2 /* Completed */) {\n // We already did a full tokenization and don't go back to progressing.\n return;\n }\n const newState = completed ? 2 /* Completed */ : 1 /* InProgress */;\n if (this._backgroundTokenizationState !== newState) {\n this._backgroundTokenizationState = newState;\n this._onBackgroundTokenizationStateChanged.fire();\n }\n }\n dispose() {\n this._isDisposing = true;\n this._onWillDispose.fire();\n this._languageRegistryListener.dispose();\n this._tokenization.dispose();\n this._isDisposed = true;\n super.dispose();\n this._bufferDisposable.dispose();\n this._isDisposing = false;\n // Manually release reference to previous text buffer to avoid large leaks\n // in case someone leaks a TextModel reference\n const emptyDisposedTextBuffer = new PieceTreeTextBuffer([], '', '\\n', false, false, true, true);\n emptyDisposedTextBuffer.dispose();\n this._buffer = emptyDisposedTextBuffer;\n }\n _assertNotDisposed() {\n if (this._isDisposed) {\n throw new Error('Model is disposed!');\n }\n }\n _emitContentChangedEvent(rawChange, change) {\n this._bracketPairColorizer.handleContentChanged(change);\n if (this._isDisposing) {\n // Do not confuse listeners by emitting any event after disposing\n return;\n }\n this._eventEmitter.fire(new InternalModelContentChangeEvent(rawChange, change));\n }\n setValue(value) {\n this._assertNotDisposed();\n if (value === null) {\n // There's nothing to do\n return;\n }\n const { textBuffer, disposable } = createTextBuffer(value, this._options.defaultEOL);\n this._setValueFromTextBuffer(textBuffer, disposable);\n }\n _createContentChanged2(range, rangeOffset, rangeLength, text, isUndoing, isRedoing, isFlush) {\n return {\n changes: [{\n range: range,\n rangeOffset: rangeOffset,\n rangeLength: rangeLength,\n text: text,\n }],\n eol: this._buffer.getEOL(),\n versionId: this.getVersionId(),\n isUndoing: isUndoing,\n isRedoing: isRedoing,\n isFlush: isFlush\n };\n }\n _setValueFromTextBuffer(textBuffer, textBufferDisposable) {\n this._assertNotDisposed();\n const oldFullModelRange = this.getFullModelRange();\n const oldModelValueLength = this.getValueLengthInRange(oldFullModelRange);\n const endLineNumber = this.getLineCount();\n const endColumn = this.getLineMaxColumn(endLineNumber);\n this._buffer = textBuffer;\n this._bufferDisposable.dispose();\n this._bufferDisposable = textBufferDisposable;\n this._increaseVersionId();\n // Flush all tokens\n this._tokens.flush();\n this._tokens2.flush();\n // Destroy all my decorations\n this._decorations = Object.create(null);\n this._decorationsTree = new DecorationsTrees();\n // Destroy my edit history and settings\n this._commandManager.clear();\n this._trimAutoWhitespaceLines = null;\n this._emitContentChangedEvent(new ModelRawContentChangedEvent([\n new ModelRawFlush()\n ], this._versionId, false, false), this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, true));\n }\n setEOL(eol) {\n this._assertNotDisposed();\n const newEOL = (eol === 1 /* CRLF */ ? '\\r\\n' : '\\n');\n if (this._buffer.getEOL() === newEOL) {\n // Nothing to do\n return;\n }\n const oldFullModelRange = this.getFullModelRange();\n const oldModelValueLength = this.getValueLengthInRange(oldFullModelRange);\n const endLineNumber = this.getLineCount();\n const endColumn = this.getLineMaxColumn(endLineNumber);\n this._onBeforeEOLChange();\n this._buffer.setEOL(newEOL);\n this._increaseVersionId();\n this._onAfterEOLChange();\n this._emitContentChangedEvent(new ModelRawContentChangedEvent([\n new ModelRawEOLChanged()\n ], this._versionId, false, false), this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, false));\n }\n _onBeforeEOLChange() {\n // Ensure all decorations get their `range` set.\n this._decorationsTree.ensureAllNodesHaveRanges(this);\n }\n _onAfterEOLChange() {\n // Transform back `range` to offsets\n const versionId = this.getVersionId();\n const allDecorations = this._decorationsTree.collectNodesPostOrder();\n for (let i = 0, len = allDecorations.length; i < len; i++) {\n const node = allDecorations[i];\n const range = node.range; // the range is defined due to `_onBeforeEOLChange`\n const delta = node.cachedAbsoluteStart - node.start;\n const startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\n const endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\n node.cachedAbsoluteStart = startOffset;\n node.cachedAbsoluteEnd = endOffset;\n node.cachedVersionId = versionId;\n node.start = startOffset - delta;\n node.end = endOffset - delta;\n recomputeMaxEnd(node);\n }\n }\n onBeforeAttached() {\n this._attachedEditorCount++;\n if (this._attachedEditorCount === 1) {\n this._onDidChangeAttached.fire(undefined);\n }\n }\n onBeforeDetached() {\n this._attachedEditorCount--;\n if (this._attachedEditorCount === 0) {\n this._onDidChangeAttached.fire(undefined);\n }\n }\n isAttachedToEditor() {\n return this._attachedEditorCount > 0;\n }\n getAttachedEditorCount() {\n return this._attachedEditorCount;\n }\n isTooLargeForSyncing() {\n return this._isTooLargeForSyncing;\n }\n isTooLargeForTokenization() {\n return this._isTooLargeForTokenization;\n }\n isDisposed() {\n return this._isDisposed;\n }\n isDominatedByLongLines() {\n this._assertNotDisposed();\n if (this.isTooLargeForTokenization()) {\n // Cannot word wrap huge files anyways, so it doesn't really matter\n return false;\n }\n let smallLineCharCount = 0;\n let longLineCharCount = 0;\n const lineCount = this._buffer.getLineCount();\n for (let lineNumber = 1; lineNumber <= lineCount; lineNumber++) {\n const lineLength = this._buffer.getLineLength(lineNumber);\n if (lineLength >= LONG_LINE_BOUNDARY) {\n longLineCharCount += lineLength;\n }\n else {\n smallLineCharCount += lineLength;\n }\n }\n return (longLineCharCount > smallLineCharCount);\n }\n get uri() {\n return this._associatedResource;\n }\n //#region Options\n getOptions() {\n this._assertNotDisposed();\n return this._options;\n }\n getFormattingOptions() {\n return {\n tabSize: this._options.indentSize,\n insertSpaces: this._options.insertSpaces\n };\n }\n updateOptions(_newOpts) {\n this._assertNotDisposed();\n let tabSize = (typeof _newOpts.tabSize !== 'undefined') ? _newOpts.tabSize : this._options.tabSize;\n let indentSize = (typeof _newOpts.indentSize !== 'undefined') ? _newOpts.indentSize : this._options.indentSize;\n let insertSpaces = (typeof _newOpts.insertSpaces !== 'undefined') ? _newOpts.insertSpaces : this._options.insertSpaces;\n let trimAutoWhitespace = (typeof _newOpts.trimAutoWhitespace !== 'undefined') ? _newOpts.trimAutoWhitespace : this._options.trimAutoWhitespace;\n let bracketPairColorizationOptions = (typeof _newOpts.bracketColorizationOptions !== 'undefined') ? _newOpts.bracketColorizationOptions : this._options.bracketPairColorizationOptions;\n let newOpts = new model.TextModelResolvedOptions({\n tabSize: tabSize,\n indentSize: indentSize,\n insertSpaces: insertSpaces,\n defaultEOL: this._options.defaultEOL,\n trimAutoWhitespace: trimAutoWhitespace,\n bracketPairColorizationOptions,\n });\n if (this._options.equals(newOpts)) {\n return;\n }\n let e = this._options.createChangeEvent(newOpts);\n this._options = newOpts;\n this._onDidChangeOptions.fire(e);\n }\n detectIndentation(defaultInsertSpaces, defaultTabSize) {\n this._assertNotDisposed();\n let guessedIndentation = guessIndentation(this._buffer, defaultTabSize, defaultInsertSpaces);\n this.updateOptions({\n insertSpaces: guessedIndentation.insertSpaces,\n tabSize: guessedIndentation.tabSize,\n indentSize: guessedIndentation.tabSize, // TODO@Alex: guess indentSize independent of tabSize\n });\n }\n static _normalizeIndentationFromWhitespace(str, indentSize, insertSpaces) {\n let spacesCnt = 0;\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) === '\\t') {\n spacesCnt += indentSize;\n }\n else {\n spacesCnt++;\n }\n }\n let result = '';\n if (!insertSpaces) {\n let tabsCnt = Math.floor(spacesCnt / indentSize);\n spacesCnt = spacesCnt % indentSize;\n for (let i = 0; i < tabsCnt; i++) {\n result += '\\t';\n }\n }\n for (let i = 0; i < spacesCnt; i++) {\n result += ' ';\n }\n return result;\n }\n static normalizeIndentation(str, indentSize, insertSpaces) {\n let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(str);\n if (firstNonWhitespaceIndex === -1) {\n firstNonWhitespaceIndex = str.length;\n }\n return TextModel._normalizeIndentationFromWhitespace(str.substring(0, firstNonWhitespaceIndex), indentSize, insertSpaces) + str.substring(firstNonWhitespaceIndex);\n }\n normalizeIndentation(str) {\n this._assertNotDisposed();\n return TextModel.normalizeIndentation(str, this._options.indentSize, this._options.insertSpaces);\n }\n //#endregion\n //#region Reading\n getVersionId() {\n this._assertNotDisposed();\n return this._versionId;\n }\n mightContainRTL() {\n return this._buffer.mightContainRTL();\n }\n mightContainUnusualLineTerminators() {\n return this._buffer.mightContainUnusualLineTerminators();\n }\n removeUnusualLineTerminators(selections = null) {\n const matches = this.findMatches(strings.UNUSUAL_LINE_TERMINATORS.source, false, true, false, null, false, 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n this._buffer.resetMightContainUnusualLineTerminators();\n this.pushEditOperations(selections, matches.map(m => ({ range: m.range, text: null })), () => null);\n }\n mightContainNonBasicASCII() {\n return this._buffer.mightContainNonBasicASCII();\n }\n getAlternativeVersionId() {\n this._assertNotDisposed();\n return this._alternativeVersionId;\n }\n getInitialUndoRedoSnapshot() {\n this._assertNotDisposed();\n return this._initialUndoRedoSnapshot;\n }\n getOffsetAt(rawPosition) {\n this._assertNotDisposed();\n let position = this._validatePosition(rawPosition.lineNumber, rawPosition.column, 0 /* Relaxed */);\n return this._buffer.getOffsetAt(position.lineNumber, position.column);\n }\n getPositionAt(rawOffset) {\n this._assertNotDisposed();\n let offset = (Math.min(this._buffer.getLength(), Math.max(0, rawOffset)));\n return this._buffer.getPositionAt(offset);\n }\n _increaseVersionId() {\n this._versionId = this._versionId + 1;\n this._alternativeVersionId = this._versionId;\n }\n _overwriteVersionId(versionId) {\n this._versionId = versionId;\n }\n _overwriteAlternativeVersionId(newAlternativeVersionId) {\n this._alternativeVersionId = newAlternativeVersionId;\n }\n _overwriteInitialUndoRedoSnapshot(newInitialUndoRedoSnapshot) {\n this._initialUndoRedoSnapshot = newInitialUndoRedoSnapshot;\n }\n getValue(eol, preserveBOM = false) {\n this._assertNotDisposed();\n const fullModelRange = this.getFullModelRange();\n const fullModelValue = this.getValueInRange(fullModelRange, eol);\n if (preserveBOM) {\n return this._buffer.getBOM() + fullModelValue;\n }\n return fullModelValue;\n }\n createSnapshot(preserveBOM = false) {\n return new TextModelSnapshot(this._buffer.createSnapshot(preserveBOM));\n }\n getValueLength(eol, preserveBOM = false) {\n this._assertNotDisposed();\n const fullModelRange = this.getFullModelRange();\n const fullModelValue = this.getValueLengthInRange(fullModelRange, eol);\n if (preserveBOM) {\n return this._buffer.getBOM().length + fullModelValue;\n }\n return fullModelValue;\n }\n getValueInRange(rawRange, eol = 0 /* TextDefined */) {\n this._assertNotDisposed();\n return this._buffer.getValueInRange(this.validateRange(rawRange), eol);\n }\n getValueLengthInRange(rawRange, eol = 0 /* TextDefined */) {\n this._assertNotDisposed();\n return this._buffer.getValueLengthInRange(this.validateRange(rawRange), eol);\n }\n getCharacterCountInRange(rawRange, eol = 0 /* TextDefined */) {\n this._assertNotDisposed();\n return this._buffer.getCharacterCountInRange(this.validateRange(rawRange), eol);\n }\n getLineCount() {\n this._assertNotDisposed();\n return this._buffer.getLineCount();\n }\n getLineContent(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineContent(lineNumber);\n }\n getLineLength(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineLength(lineNumber);\n }\n getLinesContent() {\n this._assertNotDisposed();\n return this._buffer.getLinesContent();\n }\n getEOL() {\n this._assertNotDisposed();\n return this._buffer.getEOL();\n }\n getEndOfLineSequence() {\n this._assertNotDisposed();\n return (this._buffer.getEOL() === '\\n'\n ? 0 /* LF */\n : 1 /* CRLF */);\n }\n getLineMinColumn(lineNumber) {\n this._assertNotDisposed();\n return 1;\n }\n getLineMaxColumn(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineLength(lineNumber) + 1;\n }\n getLineFirstNonWhitespaceColumn(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineFirstNonWhitespaceColumn(lineNumber);\n }\n getLineLastNonWhitespaceColumn(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineLastNonWhitespaceColumn(lineNumber);\n }\n /**\n * Validates `range` is within buffer bounds, but allows it to sit in between surrogate pairs, etc.\n * Will try to not allocate if possible.\n */\n _validateRangeRelaxedNoAllocations(range) {\n const linesCount = this._buffer.getLineCount();\n const initialStartLineNumber = range.startLineNumber;\n const initialStartColumn = range.startColumn;\n let startLineNumber = Math.floor((typeof initialStartLineNumber === 'number' && !isNaN(initialStartLineNumber)) ? initialStartLineNumber : 1);\n let startColumn = Math.floor((typeof initialStartColumn === 'number' && !isNaN(initialStartColumn)) ? initialStartColumn : 1);\n if (startLineNumber < 1) {\n startLineNumber = 1;\n startColumn = 1;\n }\n else if (startLineNumber > linesCount) {\n startLineNumber = linesCount;\n startColumn = this.getLineMaxColumn(startLineNumber);\n }\n else {\n if (startColumn <= 1) {\n startColumn = 1;\n }\n else {\n const maxColumn = this.getLineMaxColumn(startLineNumber);\n if (startColumn >= maxColumn) {\n startColumn = maxColumn;\n }\n }\n }\n const initialEndLineNumber = range.endLineNumber;\n const initialEndColumn = range.endColumn;\n let endLineNumber = Math.floor((typeof initialEndLineNumber === 'number' && !isNaN(initialEndLineNumber)) ? initialEndLineNumber : 1);\n let endColumn = Math.floor((typeof initialEndColumn === 'number' && !isNaN(initialEndColumn)) ? initialEndColumn : 1);\n if (endLineNumber < 1) {\n endLineNumber = 1;\n endColumn = 1;\n }\n else if (endLineNumber > linesCount) {\n endLineNumber = linesCount;\n endColumn = this.getLineMaxColumn(endLineNumber);\n }\n else {\n if (endColumn <= 1) {\n endColumn = 1;\n }\n else {\n const maxColumn = this.getLineMaxColumn(endLineNumber);\n if (endColumn >= maxColumn) {\n endColumn = maxColumn;\n }\n }\n }\n if (initialStartLineNumber === startLineNumber\n && initialStartColumn === startColumn\n && initialEndLineNumber === endLineNumber\n && initialEndColumn === endColumn\n && range instanceof Range\n && !(range instanceof Selection)) {\n return range;\n }\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n _isValidPosition(lineNumber, column, validationType) {\n if (typeof lineNumber !== 'number' || typeof column !== 'number') {\n return false;\n }\n if (isNaN(lineNumber) || isNaN(column)) {\n return false;\n }\n if (lineNumber < 1 || column < 1) {\n return false;\n }\n if ((lineNumber | 0) !== lineNumber || (column | 0) !== column) {\n return false;\n }\n const lineCount = this._buffer.getLineCount();\n if (lineNumber > lineCount) {\n return false;\n }\n if (column === 1) {\n return true;\n }\n const maxColumn = this.getLineMaxColumn(lineNumber);\n if (column > maxColumn) {\n return false;\n }\n if (validationType === 1 /* SurrogatePairs */) {\n // !!At this point, column > 1\n const charCodeBefore = this._buffer.getLineCharCode(lineNumber, column - 2);\n if (strings.isHighSurrogate(charCodeBefore)) {\n return false;\n }\n }\n return true;\n }\n _validatePosition(_lineNumber, _column, validationType) {\n const lineNumber = Math.floor((typeof _lineNumber === 'number' && !isNaN(_lineNumber)) ? _lineNumber : 1);\n const column = Math.floor((typeof _column === 'number' && !isNaN(_column)) ? _column : 1);\n const lineCount = this._buffer.getLineCount();\n if (lineNumber < 1) {\n return new Position(1, 1);\n }\n if (lineNumber > lineCount) {\n return new Position(lineCount, this.getLineMaxColumn(lineCount));\n }\n if (column <= 1) {\n return new Position(lineNumber, 1);\n }\n const maxColumn = this.getLineMaxColumn(lineNumber);\n if (column >= maxColumn) {\n return new Position(lineNumber, maxColumn);\n }\n if (validationType === 1 /* SurrogatePairs */) {\n // If the position would end up in the middle of a high-low surrogate pair,\n // we move it to before the pair\n // !!At this point, column > 1\n const charCodeBefore = this._buffer.getLineCharCode(lineNumber, column - 2);\n if (strings.isHighSurrogate(charCodeBefore)) {\n return new Position(lineNumber, column - 1);\n }\n }\n return new Position(lineNumber, column);\n }\n validatePosition(position) {\n const validationType = 1 /* SurrogatePairs */;\n this._assertNotDisposed();\n // Avoid object allocation and cover most likely case\n if (position instanceof Position) {\n if (this._isValidPosition(position.lineNumber, position.column, validationType)) {\n return position;\n }\n }\n return this._validatePosition(position.lineNumber, position.column, validationType);\n }\n _isValidRange(range, validationType) {\n const startLineNumber = range.startLineNumber;\n const startColumn = range.startColumn;\n const endLineNumber = range.endLineNumber;\n const endColumn = range.endColumn;\n if (!this._isValidPosition(startLineNumber, startColumn, 0 /* Relaxed */)) {\n return false;\n }\n if (!this._isValidPosition(endLineNumber, endColumn, 0 /* Relaxed */)) {\n return false;\n }\n if (validationType === 1 /* SurrogatePairs */) {\n const charCodeBeforeStart = (startColumn > 1 ? this._buffer.getLineCharCode(startLineNumber, startColumn - 2) : 0);\n const charCodeBeforeEnd = (endColumn > 1 && endColumn <= this._buffer.getLineLength(endLineNumber) ? this._buffer.getLineCharCode(endLineNumber, endColumn - 2) : 0);\n const startInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeStart);\n const endInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeEnd);\n if (!startInsideSurrogatePair && !endInsideSurrogatePair) {\n return true;\n }\n return false;\n }\n return true;\n }\n validateRange(_range) {\n const validationType = 1 /* SurrogatePairs */;\n this._assertNotDisposed();\n // Avoid object allocation and cover most likely case\n if ((_range instanceof Range) && !(_range instanceof Selection)) {\n if (this._isValidRange(_range, validationType)) {\n return _range;\n }\n }\n const start = this._validatePosition(_range.startLineNumber, _range.startColumn, 0 /* Relaxed */);\n const end = this._validatePosition(_range.endLineNumber, _range.endColumn, 0 /* Relaxed */);\n const startLineNumber = start.lineNumber;\n const startColumn = start.column;\n const endLineNumber = end.lineNumber;\n const endColumn = end.column;\n if (validationType === 1 /* SurrogatePairs */) {\n const charCodeBeforeStart = (startColumn > 1 ? this._buffer.getLineCharCode(startLineNumber, startColumn - 2) : 0);\n const charCodeBeforeEnd = (endColumn > 1 && endColumn <= this._buffer.getLineLength(endLineNumber) ? this._buffer.getLineCharCode(endLineNumber, endColumn - 2) : 0);\n const startInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeStart);\n const endInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeEnd);\n if (!startInsideSurrogatePair && !endInsideSurrogatePair) {\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n if (startLineNumber === endLineNumber && startColumn === endColumn) {\n // do not expand a collapsed range, simply move it to a valid location\n return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn - 1);\n }\n if (startInsideSurrogatePair && endInsideSurrogatePair) {\n // expand range at both ends\n return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn + 1);\n }\n if (startInsideSurrogatePair) {\n // only expand range at the start\n return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn);\n }\n // only expand range at the end\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn + 1);\n }\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n modifyPosition(rawPosition, offset) {\n this._assertNotDisposed();\n let candidate = this.getOffsetAt(rawPosition) + offset;\n return this.getPositionAt(Math.min(this._buffer.getLength(), Math.max(0, candidate)));\n }\n getFullModelRange() {\n this._assertNotDisposed();\n const lineCount = this.getLineCount();\n return new Range(1, 1, lineCount, this.getLineMaxColumn(lineCount));\n }\n findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount) {\n return this._buffer.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);\n }\n findMatches(searchString, rawSearchScope, isRegex, matchCase, wordSeparators, captureMatches, limitResultCount = LIMIT_FIND_COUNT) {\n this._assertNotDisposed();\n let searchRanges = null;\n if (rawSearchScope !== null) {\n if (!Array.isArray(rawSearchScope)) {\n rawSearchScope = [rawSearchScope];\n }\n if (rawSearchScope.every((searchScope) => Range.isIRange(searchScope))) {\n searchRanges = rawSearchScope.map((searchScope) => this.validateRange(searchScope));\n }\n }\n if (searchRanges === null) {\n searchRanges = [this.getFullModelRange()];\n }\n searchRanges = searchRanges.sort((d1, d2) => d1.startLineNumber - d2.startLineNumber || d1.startColumn - d2.startColumn);\n const uniqueSearchRanges = [];\n uniqueSearchRanges.push(searchRanges.reduce((prev, curr) => {\n if (Range.areIntersecting(prev, curr)) {\n return prev.plusRange(curr);\n }\n uniqueSearchRanges.push(prev);\n return curr;\n }));\n let matchMapper;\n if (!isRegex && searchString.indexOf('\\n') < 0) {\n // not regex, not multi line\n const searchParams = new SearchParams(searchString, isRegex, matchCase, wordSeparators);\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return [];\n }\n matchMapper = (searchRange) => this.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);\n }\n else {\n matchMapper = (searchRange) => TextModelSearch.findMatches(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchRange, captureMatches, limitResultCount);\n }\n return uniqueSearchRanges.map(matchMapper).reduce((arr, matches) => arr.concat(matches), []);\n }\n findNextMatch(searchString, rawSearchStart, isRegex, matchCase, wordSeparators, captureMatches) {\n this._assertNotDisposed();\n const searchStart = this.validatePosition(rawSearchStart);\n if (!isRegex && searchString.indexOf('\\n') < 0) {\n const searchParams = new SearchParams(searchString, isRegex, matchCase, wordSeparators);\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return null;\n }\n const lineCount = this.getLineCount();\n let searchRange = new Range(searchStart.lineNumber, searchStart.column, lineCount, this.getLineMaxColumn(lineCount));\n let ret = this.findMatchesLineByLine(searchRange, searchData, captureMatches, 1);\n TextModelSearch.findNextMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\n if (ret.length > 0) {\n return ret[0];\n }\n searchRange = new Range(1, 1, searchStart.lineNumber, this.getLineMaxColumn(searchStart.lineNumber));\n ret = this.findMatchesLineByLine(searchRange, searchData, captureMatches, 1);\n if (ret.length > 0) {\n return ret[0];\n }\n return null;\n }\n return TextModelSearch.findNextMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\n }\n findPreviousMatch(searchString, rawSearchStart, isRegex, matchCase, wordSeparators, captureMatches) {\n this._assertNotDisposed();\n const searchStart = this.validatePosition(rawSearchStart);\n return TextModelSearch.findPreviousMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\n }\n //#endregion\n //#region Editing\n pushStackElement() {\n this._commandManager.pushStackElement();\n }\n popStackElement() {\n this._commandManager.popStackElement();\n }\n pushEOL(eol) {\n const currentEOL = (this.getEOL() === '\\n' ? 0 /* LF */ : 1 /* CRLF */);\n if (currentEOL === eol) {\n return;\n }\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n this._eventEmitter.beginDeferredEmit();\n if (this._initialUndoRedoSnapshot === null) {\n this._initialUndoRedoSnapshot = this._undoRedoService.createSnapshot(this.uri);\n }\n this._commandManager.pushEOL(eol);\n }\n finally {\n this._eventEmitter.endDeferredEmit();\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _validateEditOperation(rawOperation) {\n if (rawOperation instanceof model.ValidAnnotatedEditOperation) {\n return rawOperation;\n }\n return new model.ValidAnnotatedEditOperation(rawOperation.identifier || null, this.validateRange(rawOperation.range), rawOperation.text, rawOperation.forceMoveMarkers || false, rawOperation.isAutoWhitespaceEdit || false, rawOperation._isTracked || false);\n }\n _validateEditOperations(rawOperations) {\n const result = [];\n for (let i = 0, len = rawOperations.length; i < len; i++) {\n result[i] = this._validateEditOperation(rawOperations[i]);\n }\n return result;\n }\n pushEditOperations(beforeCursorState, editOperations, cursorStateComputer) {\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n this._eventEmitter.beginDeferredEmit();\n return this._pushEditOperations(beforeCursorState, this._validateEditOperations(editOperations), cursorStateComputer);\n }\n finally {\n this._eventEmitter.endDeferredEmit();\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _pushEditOperations(beforeCursorState, editOperations, cursorStateComputer) {\n if (this._options.trimAutoWhitespace && this._trimAutoWhitespaceLines) {\n // Go through each saved line number and insert a trim whitespace edit\n // if it is safe to do so (no conflicts with other edits).\n let incomingEdits = editOperations.map((op) => {\n return {\n range: this.validateRange(op.range),\n text: op.text\n };\n });\n // Sometimes, auto-formatters change ranges automatically which can cause undesired auto whitespace trimming near the cursor\n // We'll use the following heuristic: if the edits occur near the cursor, then it's ok to trim auto whitespace\n let editsAreNearCursors = true;\n if (beforeCursorState) {\n for (let i = 0, len = beforeCursorState.length; i < len; i++) {\n let sel = beforeCursorState[i];\n let foundEditNearSel = false;\n for (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\n let editRange = incomingEdits[j].range;\n let selIsAbove = editRange.startLineNumber > sel.endLineNumber;\n let selIsBelow = sel.startLineNumber > editRange.endLineNumber;\n if (!selIsAbove && !selIsBelow) {\n foundEditNearSel = true;\n break;\n }\n }\n if (!foundEditNearSel) {\n editsAreNearCursors = false;\n break;\n }\n }\n }\n if (editsAreNearCursors) {\n for (let i = 0, len = this._trimAutoWhitespaceLines.length; i < len; i++) {\n let trimLineNumber = this._trimAutoWhitespaceLines[i];\n let maxLineColumn = this.getLineMaxColumn(trimLineNumber);\n let allowTrimLine = true;\n for (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\n let editRange = incomingEdits[j].range;\n let editText = incomingEdits[j].text;\n if (trimLineNumber < editRange.startLineNumber || trimLineNumber > editRange.endLineNumber) {\n // `trimLine` is completely outside this edit\n continue;\n }\n // At this point:\n // editRange.startLineNumber <= trimLine <= editRange.endLineNumber\n if (trimLineNumber === editRange.startLineNumber && editRange.startColumn === maxLineColumn\n && editRange.isEmpty() && editText && editText.length > 0 && editText.charAt(0) === '\\n') {\n // This edit inserts a new line (and maybe other text) after `trimLine`\n continue;\n }\n if (trimLineNumber === editRange.startLineNumber && editRange.startColumn === 1\n && editRange.isEmpty() && editText && editText.length > 0 && editText.charAt(editText.length - 1) === '\\n') {\n // This edit inserts a new line (and maybe other text) before `trimLine`\n continue;\n }\n // Looks like we can't trim this line as it would interfere with an incoming edit\n allowTrimLine = false;\n break;\n }\n if (allowTrimLine) {\n const trimRange = new Range(trimLineNumber, 1, trimLineNumber, maxLineColumn);\n editOperations.push(new model.ValidAnnotatedEditOperation(null, trimRange, null, false, false, false));\n }\n }\n }\n this._trimAutoWhitespaceLines = null;\n }\n if (this._initialUndoRedoSnapshot === null) {\n this._initialUndoRedoSnapshot = this._undoRedoService.createSnapshot(this.uri);\n }\n return this._commandManager.pushEditOperation(beforeCursorState, editOperations, cursorStateComputer);\n }\n _applyUndo(changes, eol, resultingAlternativeVersionId, resultingSelection) {\n const edits = changes.map((change) => {\n const rangeStart = this.getPositionAt(change.newPosition);\n const rangeEnd = this.getPositionAt(change.newEnd);\n return {\n range: new Range(rangeStart.lineNumber, rangeStart.column, rangeEnd.lineNumber, rangeEnd.column),\n text: change.oldText\n };\n });\n this._applyUndoRedoEdits(edits, eol, true, false, resultingAlternativeVersionId, resultingSelection);\n }\n _applyRedo(changes, eol, resultingAlternativeVersionId, resultingSelection) {\n const edits = changes.map((change) => {\n const rangeStart = this.getPositionAt(change.oldPosition);\n const rangeEnd = this.getPositionAt(change.oldEnd);\n return {\n range: new Range(rangeStart.lineNumber, rangeStart.column, rangeEnd.lineNumber, rangeEnd.column),\n text: change.newText\n };\n });\n this._applyUndoRedoEdits(edits, eol, false, true, resultingAlternativeVersionId, resultingSelection);\n }\n _applyUndoRedoEdits(edits, eol, isUndoing, isRedoing, resultingAlternativeVersionId, resultingSelection) {\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n this._eventEmitter.beginDeferredEmit();\n this._isUndoing = isUndoing;\n this._isRedoing = isRedoing;\n this.applyEdits(edits, false);\n this.setEOL(eol);\n this._overwriteAlternativeVersionId(resultingAlternativeVersionId);\n }\n finally {\n this._isUndoing = false;\n this._isRedoing = false;\n this._eventEmitter.endDeferredEmit(resultingSelection);\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n applyEdits(rawOperations, computeUndoEdits = false) {\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n this._eventEmitter.beginDeferredEmit();\n const operations = this._validateEditOperations(rawOperations);\n return this._doApplyEdits(operations, computeUndoEdits);\n }\n finally {\n this._eventEmitter.endDeferredEmit();\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _doApplyEdits(rawOperations, computeUndoEdits) {\n const oldLineCount = this._buffer.getLineCount();\n const result = this._buffer.applyEdits(rawOperations, this._options.trimAutoWhitespace, computeUndoEdits);\n const newLineCount = this._buffer.getLineCount();\n const contentChanges = result.changes;\n this._trimAutoWhitespaceLines = result.trimAutoWhitespaceLineNumbers;\n if (contentChanges.length !== 0) {\n // We do a first pass to update tokens and decorations\n // because we want to read decorations in the second pass\n // where we will emit content change events\n // and we want to read the final decorations\n for (let i = 0, len = contentChanges.length; i < len; i++) {\n const change = contentChanges[i];\n const [eolCount, firstLineLength, lastLineLength] = countEOL(change.text);\n this._tokens.acceptEdit(change.range, eolCount, firstLineLength);\n this._tokens2.acceptEdit(change.range, eolCount, firstLineLength, lastLineLength, change.text.length > 0 ? change.text.charCodeAt(0) : 0 /* Null */);\n this._decorationsTree.acceptReplace(change.rangeOffset, change.rangeLength, change.text.length, change.forceMoveMarkers);\n }\n let rawContentChanges = [];\n this._increaseVersionId();\n let lineCount = oldLineCount;\n for (let i = 0, len = contentChanges.length; i < len; i++) {\n const change = contentChanges[i];\n const [eolCount] = countEOL(change.text);\n this._onDidChangeDecorations.fire();\n const startLineNumber = change.range.startLineNumber;\n const endLineNumber = change.range.endLineNumber;\n const deletingLinesCnt = endLineNumber - startLineNumber;\n const insertingLinesCnt = eolCount;\n const editingLinesCnt = Math.min(deletingLinesCnt, insertingLinesCnt);\n const changeLineCountDelta = (insertingLinesCnt - deletingLinesCnt);\n const currentEditStartLineNumber = newLineCount - lineCount - changeLineCountDelta + startLineNumber;\n const firstEditLineNumber = currentEditStartLineNumber;\n const lastInsertedLineNumber = currentEditStartLineNumber + insertingLinesCnt;\n const decorationsWithInjectedTextInEditedRange = this._decorationsTree.getInjectedTextInInterval(this, this.getOffsetAt(new Position(firstEditLineNumber, 1)), this.getOffsetAt(new Position(lastInsertedLineNumber, this.getLineMaxColumn(lastInsertedLineNumber))), 0);\n const injectedTextInEditedRange = LineInjectedText.fromDecorations(decorationsWithInjectedTextInEditedRange);\n const injectedTextInEditedRangeQueue = new ArrayQueue(injectedTextInEditedRange);\n for (let j = editingLinesCnt; j >= 0; j--) {\n const editLineNumber = startLineNumber + j;\n const currentEditLineNumber = currentEditStartLineNumber + j;\n injectedTextInEditedRangeQueue.takeFromEndWhile(r => r.lineNumber > currentEditLineNumber);\n const decorationsInCurrentLine = injectedTextInEditedRangeQueue.takeFromEndWhile(r => r.lineNumber === currentEditLineNumber);\n rawContentChanges.push(new ModelRawLineChanged(editLineNumber, this.getLineContent(currentEditLineNumber), decorationsInCurrentLine));\n }\n if (editingLinesCnt < deletingLinesCnt) {\n // Must delete some lines\n const spliceStartLineNumber = startLineNumber + editingLinesCnt;\n rawContentChanges.push(new ModelRawLinesDeleted(spliceStartLineNumber + 1, endLineNumber));\n }\n if (editingLinesCnt < insertingLinesCnt) {\n const injectedTextInEditedRangeQueue = new ArrayQueue(injectedTextInEditedRange);\n // Must insert some lines\n const spliceLineNumber = startLineNumber + editingLinesCnt;\n const cnt = insertingLinesCnt - editingLinesCnt;\n const fromLineNumber = newLineCount - lineCount - cnt + spliceLineNumber + 1;\n let injectedTexts = [];\n let newLines = [];\n for (let i = 0; i < cnt; i++) {\n let lineNumber = fromLineNumber + i;\n newLines[i] = this.getLineContent(lineNumber);\n injectedTextInEditedRangeQueue.takeWhile(r => r.lineNumber < lineNumber);\n injectedTexts[i] = injectedTextInEditedRangeQueue.takeWhile(r => r.lineNumber === lineNumber);\n }\n rawContentChanges.push(new ModelRawLinesInserted(spliceLineNumber + 1, startLineNumber + insertingLinesCnt, newLines, injectedTexts));\n }\n lineCount += changeLineCountDelta;\n }\n this._emitContentChangedEvent(new ModelRawContentChangedEvent(rawContentChanges, this.getVersionId(), this._isUndoing, this._isRedoing), {\n changes: contentChanges,\n eol: this._buffer.getEOL(),\n versionId: this.getVersionId(),\n isUndoing: this._isUndoing,\n isRedoing: this._isRedoing,\n isFlush: false\n });\n }\n return (result.reverseEdits === null ? undefined : result.reverseEdits);\n }\n undo() {\n return this._undoRedoService.undo(this.uri);\n }\n canUndo() {\n return this._undoRedoService.canUndo(this.uri);\n }\n redo() {\n return this._undoRedoService.redo(this.uri);\n }\n canRedo() {\n return this._undoRedoService.canRedo(this.uri);\n }\n //#endregion\n //#region Decorations\n handleBeforeFireDecorationsChangedEvent(affectedInjectedTextLines) {\n // This is called before the decoration changed event is fired.\n if (affectedInjectedTextLines === null || affectedInjectedTextLines.size === 0) {\n return;\n }\n const affectedLines = [...affectedInjectedTextLines];\n const lineChangeEvents = affectedLines.map(lineNumber => new ModelRawLineChanged(lineNumber, this.getLineContent(lineNumber), this._getInjectedTextInLine(lineNumber)));\n this._onDidChangeContentOrInjectedText.fire(new ModelInjectedTextChangedEvent(lineChangeEvents));\n }\n changeDecorations(callback, ownerId = 0) {\n this._assertNotDisposed();\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n return this._changeDecorations(ownerId, callback);\n }\n finally {\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _changeDecorations(ownerId, callback) {\n let changeAccessor = {\n addDecoration: (range, options) => {\n return this._deltaDecorationsImpl(ownerId, [], [{ range: range, options: options }])[0];\n },\n changeDecoration: (id, newRange) => {\n this._changeDecorationImpl(id, newRange);\n },\n changeDecorationOptions: (id, options) => {\n this._changeDecorationOptionsImpl(id, _normalizeOptions(options));\n },\n removeDecoration: (id) => {\n this._deltaDecorationsImpl(ownerId, [id], []);\n },\n deltaDecorations: (oldDecorations, newDecorations) => {\n if (oldDecorations.length === 0 && newDecorations.length === 0) {\n // nothing to do\n return [];\n }\n return this._deltaDecorationsImpl(ownerId, oldDecorations, newDecorations);\n }\n };\n let result = null;\n try {\n result = callback(changeAccessor);\n }\n catch (e) {\n onUnexpectedError(e);\n }\n // Invalidate change accessor\n changeAccessor.addDecoration = invalidFunc;\n changeAccessor.changeDecoration = invalidFunc;\n changeAccessor.changeDecorationOptions = invalidFunc;\n changeAccessor.removeDecoration = invalidFunc;\n changeAccessor.deltaDecorations = invalidFunc;\n return result;\n }\n deltaDecorations(oldDecorations, newDecorations, ownerId = 0) {\n this._assertNotDisposed();\n if (!oldDecorations) {\n oldDecorations = [];\n }\n if (oldDecorations.length === 0 && newDecorations.length === 0) {\n // nothing to do\n return [];\n }\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n return this._deltaDecorationsImpl(ownerId, oldDecorations, newDecorations);\n }\n finally {\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _getTrackedRange(id) {\n return this.getDecorationRange(id);\n }\n _setTrackedRange(id, newRange, newStickiness) {\n const node = (id ? this._decorations[id] : null);\n if (!node) {\n if (!newRange) {\n // node doesn't exist, the request is to delete => nothing to do\n return null;\n }\n // node doesn't exist, the request is to set => add the tracked range\n return this._deltaDecorationsImpl(0, [], [{ range: newRange, options: TRACKED_RANGE_OPTIONS[newStickiness] }])[0];\n }\n if (!newRange) {\n // node exists, the request is to delete => delete node\n this._decorationsTree.delete(node);\n delete this._decorations[node.id];\n return null;\n }\n // node exists, the request is to set => change the tracked range and its options\n const range = this._validateRangeRelaxedNoAllocations(newRange);\n const startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\n const endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\n this._decorationsTree.delete(node);\n node.reset(this.getVersionId(), startOffset, endOffset, range);\n node.setOptions(TRACKED_RANGE_OPTIONS[newStickiness]);\n this._decorationsTree.insert(node);\n return node.id;\n }\n removeAllDecorationsWithOwnerId(ownerId) {\n if (this._isDisposed) {\n return;\n }\n const nodes = this._decorationsTree.collectNodesFromOwner(ownerId);\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n this._decorationsTree.delete(node);\n delete this._decorations[node.id];\n }\n }\n getDecorationOptions(decorationId) {\n const node = this._decorations[decorationId];\n if (!node) {\n return null;\n }\n return node.options;\n }\n getDecorationRange(decorationId) {\n const node = this._decorations[decorationId];\n if (!node) {\n return null;\n }\n return this._decorationsTree.getNodeRange(this, node);\n }\n getLineDecorations(lineNumber, ownerId = 0, filterOutValidation = false) {\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n return [];\n }\n return this.getLinesDecorations(lineNumber, lineNumber, ownerId, filterOutValidation);\n }\n getLinesDecorations(_startLineNumber, _endLineNumber, ownerId = 0, filterOutValidation = false) {\n let lineCount = this.getLineCount();\n let startLineNumber = Math.min(lineCount, Math.max(1, _startLineNumber));\n let endLineNumber = Math.min(lineCount, Math.max(1, _endLineNumber));\n let endColumn = this.getLineMaxColumn(endLineNumber);\n const range = new Range(startLineNumber, 1, endLineNumber, endColumn);\n const decorations = this._getDecorationsInRange(range, ownerId, filterOutValidation);\n decorations.push(...this._decorationProvider.getDecorationsInRange(range, ownerId, filterOutValidation));\n return decorations;\n }\n getDecorationsInRange(range, ownerId = 0, filterOutValidation = false) {\n let validatedRange = this.validateRange(range);\n const decorations = this._getDecorationsInRange(validatedRange, ownerId, filterOutValidation);\n decorations.push(...this._decorationProvider.getDecorationsInRange(validatedRange, ownerId, filterOutValidation));\n return decorations;\n }\n getOverviewRulerDecorations(ownerId = 0, filterOutValidation = false) {\n return this._decorationsTree.getAll(this, ownerId, filterOutValidation, true);\n }\n getInjectedTextDecorations(ownerId = 0) {\n return this._decorationsTree.getAllInjectedText(this, ownerId);\n }\n _getInjectedTextInLine(lineNumber) {\n const startOffset = this._buffer.getOffsetAt(lineNumber, 1);\n const endOffset = startOffset + this._buffer.getLineLength(lineNumber);\n const result = this._decorationsTree.getInjectedTextInInterval(this, startOffset, endOffset, 0);\n return LineInjectedText.fromDecorations(result).filter(t => t.lineNumber === lineNumber);\n }\n getAllDecorations(ownerId = 0, filterOutValidation = false) {\n let result = this._decorationsTree.getAll(this, ownerId, filterOutValidation, false);\n result = result.concat(this._decorationProvider.getAllDecorations(ownerId, filterOutValidation));\n return result;\n }\n _getDecorationsInRange(filterRange, filterOwnerId, filterOutValidation) {\n const startOffset = this._buffer.getOffsetAt(filterRange.startLineNumber, filterRange.startColumn);\n const endOffset = this._buffer.getOffsetAt(filterRange.endLineNumber, filterRange.endColumn);\n return this._decorationsTree.getAllInInterval(this, startOffset, endOffset, filterOwnerId, filterOutValidation);\n }\n getRangeAt(start, end) {\n return this._buffer.getRangeAt(start, end - start);\n }\n _changeDecorationImpl(decorationId, _range) {\n const node = this._decorations[decorationId];\n if (!node) {\n return;\n }\n if (node.options.after) {\n const oldRange = this.getDecorationRange(decorationId);\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(oldRange.endLineNumber);\n }\n if (node.options.before) {\n const oldRange = this.getDecorationRange(decorationId);\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(oldRange.startLineNumber);\n }\n const range = this._validateRangeRelaxedNoAllocations(_range);\n const startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\n const endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\n this._decorationsTree.delete(node);\n node.reset(this.getVersionId(), startOffset, endOffset, range);\n this._decorationsTree.insert(node);\n this._onDidChangeDecorations.checkAffectedAndFire(node.options);\n if (node.options.after) {\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(range.endLineNumber);\n }\n if (node.options.before) {\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(range.startLineNumber);\n }\n }\n _changeDecorationOptionsImpl(decorationId, options) {\n const node = this._decorations[decorationId];\n if (!node) {\n return;\n }\n const nodeWasInOverviewRuler = (node.options.overviewRuler && node.options.overviewRuler.color ? true : false);\n const nodeIsInOverviewRuler = (options.overviewRuler && options.overviewRuler.color ? true : false);\n this._onDidChangeDecorations.checkAffectedAndFire(node.options);\n this._onDidChangeDecorations.checkAffectedAndFire(options);\n if (node.options.after || options.after) {\n const nodeRange = this._decorationsTree.getNodeRange(this, node);\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(nodeRange.endLineNumber);\n }\n if (node.options.before || options.before) {\n const nodeRange = this._decorationsTree.getNodeRange(this, node);\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(nodeRange.startLineNumber);\n }\n if (nodeWasInOverviewRuler !== nodeIsInOverviewRuler) {\n // Delete + Insert due to an overview ruler status change\n this._decorationsTree.delete(node);\n node.setOptions(options);\n this._decorationsTree.insert(node);\n }\n else {\n node.setOptions(options);\n }\n }\n _deltaDecorationsImpl(ownerId, oldDecorationsIds, newDecorations) {\n const versionId = this.getVersionId();\n const oldDecorationsLen = oldDecorationsIds.length;\n let oldDecorationIndex = 0;\n const newDecorationsLen = newDecorations.length;\n let newDecorationIndex = 0;\n let result = new Array(newDecorationsLen);\n while (oldDecorationIndex < oldDecorationsLen || newDecorationIndex < newDecorationsLen) {\n let node = null;\n if (oldDecorationIndex < oldDecorationsLen) {\n // (1) get ourselves an old node\n do {\n node = this._decorations[oldDecorationsIds[oldDecorationIndex++]];\n } while (!node && oldDecorationIndex < oldDecorationsLen);\n // (2) remove the node from the tree (if it exists)\n if (node) {\n if (node.options.after) {\n const nodeRange = this._decorationsTree.getNodeRange(this, node);\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(nodeRange.endLineNumber);\n }\n if (node.options.before) {\n const nodeRange = this._decorationsTree.getNodeRange(this, node);\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(nodeRange.startLineNumber);\n }\n this._decorationsTree.delete(node);\n this._onDidChangeDecorations.checkAffectedAndFire(node.options);\n }\n }\n if (newDecorationIndex < newDecorationsLen) {\n // (3) create a new node if necessary\n if (!node) {\n const internalDecorationId = (++this._lastDecorationId);\n const decorationId = `${this._instanceId};${internalDecorationId}`;\n node = new IntervalNode(decorationId, 0, 0);\n this._decorations[decorationId] = node;\n }\n // (4) initialize node\n const newDecoration = newDecorations[newDecorationIndex];\n const range = this._validateRangeRelaxedNoAllocations(newDecoration.range);\n const options = _normalizeOptions(newDecoration.options);\n const startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\n const endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\n node.ownerId = ownerId;\n node.reset(versionId, startOffset, endOffset, range);\n node.setOptions(options);\n if (node.options.after) {\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(range.endLineNumber);\n }\n if (node.options.before) {\n this._onDidChangeDecorations.recordLineAffectedByInjectedText(range.startLineNumber);\n }\n this._onDidChangeDecorations.checkAffectedAndFire(options);\n this._decorationsTree.insert(node);\n result[newDecorationIndex] = node.id;\n newDecorationIndex++;\n }\n else {\n if (node) {\n delete this._decorations[node.id];\n }\n }\n }\n return result;\n }\n setTokens(tokens, backgroundTokenizationCompleted = false) {\n if (tokens.length !== 0) {\n let ranges = [];\n for (let i = 0, len = tokens.length; i < len; i++) {\n const element = tokens[i];\n let minChangedLineNumber = 0;\n let maxChangedLineNumber = 0;\n let hasChange = false;\n for (let j = 0, lenJ = element.tokens.length; j < lenJ; j++) {\n const lineNumber = element.startLineNumber + j;\n if (hasChange) {\n this._tokens.setTokens(this._languageId, lineNumber - 1, this._buffer.getLineLength(lineNumber), element.tokens[j], false);\n maxChangedLineNumber = lineNumber;\n }\n else {\n const lineHasChange = this._tokens.setTokens(this._languageId, lineNumber - 1, this._buffer.getLineLength(lineNumber), element.tokens[j], true);\n if (lineHasChange) {\n hasChange = true;\n minChangedLineNumber = lineNumber;\n maxChangedLineNumber = lineNumber;\n }\n }\n }\n if (hasChange) {\n ranges.push({ fromLineNumber: minChangedLineNumber, toLineNumber: maxChangedLineNumber });\n }\n }\n if (ranges.length > 0) {\n this._emitModelTokensChangedEvent({\n tokenizationSupportChanged: false,\n semanticTokensApplied: false,\n ranges: ranges\n });\n }\n }\n this.handleTokenizationProgress(backgroundTokenizationCompleted);\n }\n setSemanticTokens(tokens, isComplete) {\n this._tokens2.set(tokens, isComplete);\n this._emitModelTokensChangedEvent({\n tokenizationSupportChanged: false,\n semanticTokensApplied: tokens !== null,\n ranges: [{ fromLineNumber: 1, toLineNumber: this.getLineCount() }]\n });\n }\n hasCompleteSemanticTokens() {\n return this._tokens2.isComplete();\n }\n hasSomeSemanticTokens() {\n return !this._tokens2.isEmpty();\n }\n setPartialSemanticTokens(range, tokens) {\n if (this.hasCompleteSemanticTokens()) {\n return;\n }\n const changedRange = this._tokens2.setPartial(range, tokens);\n this._emitModelTokensChangedEvent({\n tokenizationSupportChanged: false,\n semanticTokensApplied: true,\n ranges: [{ fromLineNumber: changedRange.startLineNumber, toLineNumber: changedRange.endLineNumber }]\n });\n }\n tokenizeViewport(startLineNumber, endLineNumber) {\n startLineNumber = Math.max(1, startLineNumber);\n endLineNumber = Math.min(this._buffer.getLineCount(), endLineNumber);\n this._tokenization.tokenizeViewport(startLineNumber, endLineNumber);\n }\n clearTokens() {\n this._tokens.flush();\n this._emitModelTokensChangedEvent({\n tokenizationSupportChanged: true,\n semanticTokensApplied: false,\n ranges: [{\n fromLineNumber: 1,\n toLineNumber: this._buffer.getLineCount()\n }]\n });\n }\n _emitModelTokensChangedEvent(e) {\n if (!this._isDisposing) {\n this._onDidChangeTokens.fire(e);\n }\n }\n resetTokenization() {\n this._tokenization.reset();\n }\n forceTokenization(lineNumber) {\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n this._tokenization.forceTokenization(lineNumber);\n }\n isCheapToTokenize(lineNumber) {\n return this._tokenization.isCheapToTokenize(lineNumber);\n }\n tokenizeIfCheap(lineNumber) {\n if (this.isCheapToTokenize(lineNumber)) {\n this.forceTokenization(lineNumber);\n }\n }\n getLineTokens(lineNumber) {\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._getLineTokens(lineNumber);\n }\n _getLineTokens(lineNumber) {\n const lineText = this.getLineContent(lineNumber);\n const syntacticTokens = this._tokens.getTokens(this._languageId, lineNumber - 1, lineText);\n return this._tokens2.addSemanticTokens(lineNumber, syntacticTokens);\n }\n getLanguageId() {\n return this._languageId;\n }\n setMode(languageId) {\n if (this._languageId === languageId) {\n // There's nothing to do\n return;\n }\n let e = {\n oldLanguage: this._languageId,\n newLanguage: languageId\n };\n this._languageId = languageId;\n this._onDidChangeLanguage.fire(e);\n this._onDidChangeLanguageConfiguration.fire({});\n }\n getLanguageIdAtPosition(lineNumber, column) {\n const position = this.validatePosition(new Position(lineNumber, column));\n const lineTokens = this.getLineTokens(position.lineNumber);\n return lineTokens.getLanguageId(lineTokens.findTokenIndexAtOffset(position.column - 1));\n }\n getLanguageConfiguration(languageId) {\n return this._languageConfigurationService.getLanguageConfiguration(languageId);\n }\n // Having tokens allows implementing additional helper methods\n getWordAtPosition(_position) {\n this._assertNotDisposed();\n const position = this.validatePosition(_position);\n const lineContent = this.getLineContent(position.lineNumber);\n const lineTokens = this._getLineTokens(position.lineNumber);\n const tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n // (1). First try checking right biased word\n const [rbStartOffset, rbEndOffset] = TextModel._findLanguageBoundaries(lineTokens, tokenIndex);\n const rightBiasedWord = getWordAtText(position.column, this.getLanguageConfiguration(lineTokens.getLanguageId(tokenIndex)).getWordDefinition(), lineContent.substring(rbStartOffset, rbEndOffset), rbStartOffset);\n // Make sure the result touches the original passed in position\n if (rightBiasedWord && rightBiasedWord.startColumn <= _position.column && _position.column <= rightBiasedWord.endColumn) {\n return rightBiasedWord;\n }\n // (2). Else, if we were at a language boundary, check the left biased word\n if (tokenIndex > 0 && rbStartOffset === position.column - 1) {\n // edge case, where `position` sits between two tokens belonging to two different languages\n const [lbStartOffset, lbEndOffset] = TextModel._findLanguageBoundaries(lineTokens, tokenIndex - 1);\n const leftBiasedWord = getWordAtText(position.column, this.getLanguageConfiguration(lineTokens.getLanguageId(tokenIndex - 1)).getWordDefinition(), lineContent.substring(lbStartOffset, lbEndOffset), lbStartOffset);\n // Make sure the result touches the original passed in position\n if (leftBiasedWord && leftBiasedWord.startColumn <= _position.column && _position.column <= leftBiasedWord.endColumn) {\n return leftBiasedWord;\n }\n }\n return null;\n }\n static _findLanguageBoundaries(lineTokens, tokenIndex) {\n const languageId = lineTokens.getLanguageId(tokenIndex);\n // go left until a different language is hit\n let startOffset = 0;\n for (let i = tokenIndex; i >= 0 && lineTokens.getLanguageId(i) === languageId; i--) {\n startOffset = lineTokens.getStartOffset(i);\n }\n // go right until a different language is hit\n let endOffset = lineTokens.getLineContent().length;\n for (let i = tokenIndex, tokenCount = lineTokens.getCount(); i < tokenCount && lineTokens.getLanguageId(i) === languageId; i++) {\n endOffset = lineTokens.getEndOffset(i);\n }\n return [startOffset, endOffset];\n }\n getWordUntilPosition(position) {\n const wordAtPosition = this.getWordAtPosition(position);\n if (!wordAtPosition) {\n return {\n word: '',\n startColumn: position.column,\n endColumn: position.column\n };\n }\n return {\n word: wordAtPosition.word.substr(0, position.column - wordAtPosition.startColumn),\n startColumn: wordAtPosition.startColumn,\n endColumn: position.column\n };\n }\n findMatchingBracketUp(_bracket, _position) {\n let bracket = _bracket.toLowerCase();\n let position = this.validatePosition(_position);\n let lineTokens = this._getLineTokens(position.lineNumber);\n let languageId = lineTokens.getLanguageId(lineTokens.findTokenIndexAtOffset(position.column - 1));\n let bracketsSupport = this.getLanguageConfiguration(languageId).brackets;\n if (!bracketsSupport) {\n return null;\n }\n let data = bracketsSupport.textIsBracket[bracket];\n if (!data) {\n return null;\n }\n return stripBracketSearchCanceled(this._findMatchingBracketUp(data, position, null));\n }\n matchBracket(position) {\n return this._matchBracket(this.validatePosition(position));\n }\n _establishBracketSearchOffsets(position, lineTokens, modeBrackets, tokenIndex) {\n const tokenCount = lineTokens.getCount();\n const currentLanguageId = lineTokens.getLanguageId(tokenIndex);\n // limit search to not go before `maxBracketLength`\n let searchStartOffset = Math.max(0, position.column - 1 - modeBrackets.maxBracketLength);\n for (let i = tokenIndex - 1; i >= 0; i--) {\n const tokenEndOffset = lineTokens.getEndOffset(i);\n if (tokenEndOffset <= searchStartOffset) {\n break;\n }\n if (ignoreBracketsInToken(lineTokens.getStandardTokenType(i)) || lineTokens.getLanguageId(i) !== currentLanguageId) {\n searchStartOffset = tokenEndOffset;\n break;\n }\n }\n // limit search to not go after `maxBracketLength`\n let searchEndOffset = Math.min(lineTokens.getLineContent().length, position.column - 1 + modeBrackets.maxBracketLength);\n for (let i = tokenIndex + 1; i < tokenCount; i++) {\n const tokenStartOffset = lineTokens.getStartOffset(i);\n if (tokenStartOffset >= searchEndOffset) {\n break;\n }\n if (ignoreBracketsInToken(lineTokens.getStandardTokenType(i)) || lineTokens.getLanguageId(i) !== currentLanguageId) {\n searchEndOffset = tokenStartOffset;\n break;\n }\n }\n return { searchStartOffset, searchEndOffset };\n }\n _matchBracket(position) {\n const lineNumber = position.lineNumber;\n const lineTokens = this._getLineTokens(lineNumber);\n const lineText = this._buffer.getLineContent(lineNumber);\n const tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n if (tokenIndex < 0) {\n return null;\n }\n const currentModeBrackets = this.getLanguageConfiguration(lineTokens.getLanguageId(tokenIndex)).brackets;\n // check that the token is not to be ignored\n if (currentModeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex))) {\n let { searchStartOffset, searchEndOffset } = this._establishBracketSearchOffsets(position, lineTokens, currentModeBrackets, tokenIndex);\n // it might be the case that [currentTokenStart -> currentTokenEnd] contains multiple brackets\n // `bestResult` will contain the most right-side result\n let bestResult = null;\n while (true) {\n const foundBracket = BracketsUtils.findNextBracketInRange(currentModeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (!foundBracket) {\n // there are no more brackets in this text\n break;\n }\n // check that we didn't hit a bracket too far away from position\n if (foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {\n const foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1).toLowerCase();\n const r = this._matchFoundBracket(foundBracket, currentModeBrackets.textIsBracket[foundBracketText], currentModeBrackets.textIsOpenBracket[foundBracketText], null);\n if (r) {\n if (r instanceof BracketSearchCanceled) {\n return null;\n }\n bestResult = r;\n }\n }\n searchStartOffset = foundBracket.endColumn - 1;\n }\n if (bestResult) {\n return bestResult;\n }\n }\n // If position is in between two tokens, try also looking in the previous token\n if (tokenIndex > 0 && lineTokens.getStartOffset(tokenIndex) === position.column - 1) {\n const prevTokenIndex = tokenIndex - 1;\n const prevModeBrackets = this.getLanguageConfiguration(lineTokens.getLanguageId(prevTokenIndex)).brackets;\n // check that previous token is not to be ignored\n if (prevModeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(prevTokenIndex))) {\n let { searchStartOffset, searchEndOffset } = this._establishBracketSearchOffsets(position, lineTokens, prevModeBrackets, prevTokenIndex);\n const foundBracket = BracketsUtils.findPrevBracketInRange(prevModeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n // check that we didn't hit a bracket too far away from position\n if (foundBracket && foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {\n const foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1).toLowerCase();\n const r = this._matchFoundBracket(foundBracket, prevModeBrackets.textIsBracket[foundBracketText], prevModeBrackets.textIsOpenBracket[foundBracketText], null);\n if (r) {\n if (r instanceof BracketSearchCanceled) {\n return null;\n }\n return r;\n }\n }\n }\n }\n return null;\n }\n _matchFoundBracket(foundBracket, data, isOpen, continueSearchPredicate) {\n if (!data) {\n return null;\n }\n const matched = (isOpen\n ? this._findMatchingBracketDown(data, foundBracket.getEndPosition(), continueSearchPredicate)\n : this._findMatchingBracketUp(data, foundBracket.getStartPosition(), continueSearchPredicate));\n if (!matched) {\n return null;\n }\n if (matched instanceof BracketSearchCanceled) {\n return matched;\n }\n return [foundBracket, matched];\n }\n _findMatchingBracketUp(bracket, position, continueSearchPredicate) {\n // console.log('_findMatchingBracketUp: ', 'bracket: ', JSON.stringify(bracket), 'startPosition: ', String(position));\n const languageId = bracket.languageId;\n const reversedBracketRegex = bracket.reversedRegex;\n let count = -1;\n let totalCallCount = 0;\n const searchPrevMatchingBracketInRange = (lineNumber, lineText, searchStartOffset, searchEndOffset) => {\n while (true) {\n if (continueSearchPredicate && (++totalCallCount) % 100 === 0 && !continueSearchPredicate()) {\n return BracketSearchCanceled.INSTANCE;\n }\n const r = BracketsUtils.findPrevBracketInRange(reversedBracketRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (!r) {\n break;\n }\n const hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\n if (bracket.isOpen(hitText)) {\n count++;\n }\n else if (bracket.isClose(hitText)) {\n count--;\n }\n if (count === 0) {\n return r;\n }\n searchEndOffset = r.startColumn - 1;\n }\n return null;\n };\n for (let lineNumber = position.lineNumber; lineNumber >= 1; lineNumber--) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = tokenCount - 1;\n let searchStartOffset = lineText.length;\n let searchEndOffset = lineText.length;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n }\n let prevSearchInToken = true;\n for (; tokenIndex >= 0; tokenIndex--) {\n const searchInToken = (lineTokens.getLanguageId(tokenIndex) === languageId && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchStartOffset\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchPrevMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return r;\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchPrevMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return r;\n }\n }\n }\n return null;\n }\n _findMatchingBracketDown(bracket, position, continueSearchPredicate) {\n // console.log('_findMatchingBracketDown: ', 'bracket: ', JSON.stringify(bracket), 'startPosition: ', String(position));\n const languageId = bracket.languageId;\n const bracketRegex = bracket.forwardRegex;\n let count = 1;\n let totalCallCount = 0;\n const searchNextMatchingBracketInRange = (lineNumber, lineText, searchStartOffset, searchEndOffset) => {\n while (true) {\n if (continueSearchPredicate && (++totalCallCount) % 100 === 0 && !continueSearchPredicate()) {\n return BracketSearchCanceled.INSTANCE;\n }\n const r = BracketsUtils.findNextBracketInRange(bracketRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (!r) {\n break;\n }\n const hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\n if (bracket.isOpen(hitText)) {\n count++;\n }\n else if (bracket.isClose(hitText)) {\n count--;\n }\n if (count === 0) {\n return r;\n }\n searchStartOffset = r.endColumn - 1;\n }\n return null;\n };\n const lineCount = this.getLineCount();\n for (let lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = 0;\n let searchStartOffset = 0;\n let searchEndOffset = 0;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n }\n let prevSearchInToken = true;\n for (; tokenIndex < tokenCount; tokenIndex++) {\n const searchInToken = (lineTokens.getLanguageId(tokenIndex) === languageId && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchEndOffset\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchNextMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return r;\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchNextMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return r;\n }\n }\n }\n return null;\n }\n findPrevBracket(_position) {\n const position = this.validatePosition(_position);\n let languageId = null;\n let modeBrackets = null;\n for (let lineNumber = position.lineNumber; lineNumber >= 1; lineNumber--) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = tokenCount - 1;\n let searchStartOffset = lineText.length;\n let searchEndOffset = lineText.length;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n languageId = tokenLanguageId;\n modeBrackets = this.getLanguageConfiguration(languageId).brackets;\n }\n }\n let prevSearchInToken = true;\n for (; tokenIndex >= 0; tokenIndex--) {\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n // language id change!\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n prevSearchInToken = false;\n }\n languageId = tokenLanguageId;\n modeBrackets = this.getLanguageConfiguration(languageId).brackets;\n }\n const searchInToken = (!!modeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchStartOffset\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n }\n }\n return null;\n }\n findNextBracket(_position) {\n const position = this.validatePosition(_position);\n const lineCount = this.getLineCount();\n let languageId = null;\n let modeBrackets = null;\n for (let lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = 0;\n let searchStartOffset = 0;\n let searchEndOffset = 0;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n languageId = tokenLanguageId;\n modeBrackets = this.getLanguageConfiguration(languageId).brackets;\n }\n }\n let prevSearchInToken = true;\n for (; tokenIndex < tokenCount; tokenIndex++) {\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n // language id change!\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n prevSearchInToken = false;\n }\n languageId = tokenLanguageId;\n modeBrackets = this.getLanguageConfiguration(languageId).brackets;\n }\n const searchInToken = (!!modeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchEndOffset\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n }\n }\n return null;\n }\n findEnclosingBrackets(_position, maxDuration) {\n let continueSearchPredicate;\n if (typeof maxDuration === 'undefined') {\n continueSearchPredicate = null;\n }\n else {\n const startTime = Date.now();\n continueSearchPredicate = () => {\n return (Date.now() - startTime <= maxDuration);\n };\n }\n const position = this.validatePosition(_position);\n const lineCount = this.getLineCount();\n const savedCounts = new Map();\n let counts = [];\n const resetCounts = (languageId, modeBrackets) => {\n if (!savedCounts.has(languageId)) {\n let tmp = [];\n for (let i = 0, len = modeBrackets ? modeBrackets.brackets.length : 0; i < len; i++) {\n tmp[i] = 0;\n }\n savedCounts.set(languageId, tmp);\n }\n counts = savedCounts.get(languageId);\n };\n let totalCallCount = 0;\n const searchInRange = (modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset) => {\n while (true) {\n if (continueSearchPredicate && (++totalCallCount) % 100 === 0 && !continueSearchPredicate()) {\n return BracketSearchCanceled.INSTANCE;\n }\n const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (!r) {\n break;\n }\n const hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\n const bracket = modeBrackets.textIsBracket[hitText];\n if (bracket) {\n if (bracket.isOpen(hitText)) {\n counts[bracket.index]++;\n }\n else if (bracket.isClose(hitText)) {\n counts[bracket.index]--;\n }\n if (counts[bracket.index] === -1) {\n return this._matchFoundBracket(r, bracket, false, continueSearchPredicate);\n }\n }\n searchStartOffset = r.endColumn - 1;\n }\n return null;\n };\n let languageId = null;\n let modeBrackets = null;\n for (let lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = 0;\n let searchStartOffset = 0;\n let searchEndOffset = 0;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n languageId = tokenLanguageId;\n modeBrackets = this.getLanguageConfiguration(languageId).brackets;\n resetCounts(languageId, modeBrackets);\n }\n }\n let prevSearchInToken = true;\n for (; tokenIndex < tokenCount; tokenIndex++) {\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n // language id change!\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchInRange(modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return stripBracketSearchCanceled(r);\n }\n prevSearchInToken = false;\n }\n languageId = tokenLanguageId;\n modeBrackets = this.getLanguageConfiguration(languageId).brackets;\n resetCounts(languageId, modeBrackets);\n }\n const searchInToken = (!!modeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchEndOffset\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchInRange(modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return stripBracketSearchCanceled(r);\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchInRange(modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return stripBracketSearchCanceled(r);\n }\n }\n }\n return null;\n }\n _toFoundBracket(modeBrackets, r) {\n if (!r) {\n return null;\n }\n let text = this.getValueInRange(r);\n text = text.toLowerCase();\n let data = modeBrackets.textIsBracket[text];\n if (!data) {\n return null;\n }\n return {\n range: r,\n open: data.open,\n close: data.close,\n isOpen: modeBrackets.textIsOpenBracket[text]\n };\n }\n /**\n * Returns:\n * - -1 => the line consists of whitespace\n * - otherwise => the indent level is returned value\n */\n static computeIndentLevel(line, tabSize) {\n let indent = 0;\n let i = 0;\n let len = line.length;\n while (i < len) {\n let chCode = line.charCodeAt(i);\n if (chCode === 32 /* Space */) {\n indent++;\n }\n else if (chCode === 9 /* Tab */) {\n indent = indent - indent % tabSize + tabSize;\n }\n else {\n break;\n }\n i++;\n }\n if (i === len) {\n return -1; // line only consists of whitespace\n }\n return indent;\n }\n _computeIndentLevel(lineIndex) {\n return TextModel.computeIndentLevel(this._buffer.getLineContent(lineIndex + 1), this._options.tabSize);\n }\n getActiveIndentGuide(lineNumber, minLineNumber, maxLineNumber) {\n this._assertNotDisposed();\n const lineCount = this.getLineCount();\n if (lineNumber < 1 || lineNumber > lineCount) {\n throw new Error('Illegal value for lineNumber');\n }\n const foldingRules = this.getLanguageConfiguration(this._languageId).foldingRules;\n const offSide = Boolean(foldingRules && foldingRules.offSide);\n let up_aboveContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let up_aboveContentLineIndent = -1;\n let up_belowContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let up_belowContentLineIndent = -1;\n const up_resolveIndents = (lineNumber) => {\n if (up_aboveContentLineIndex !== -1 && (up_aboveContentLineIndex === -2 || up_aboveContentLineIndex > lineNumber - 1)) {\n up_aboveContentLineIndex = -1;\n up_aboveContentLineIndent = -1;\n // must find previous line with content\n for (let lineIndex = lineNumber - 2; lineIndex >= 0; lineIndex--) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n up_aboveContentLineIndex = lineIndex;\n up_aboveContentLineIndent = indent;\n break;\n }\n }\n }\n if (up_belowContentLineIndex === -2) {\n up_belowContentLineIndex = -1;\n up_belowContentLineIndent = -1;\n // must find next line with content\n for (let lineIndex = lineNumber; lineIndex < lineCount; lineIndex++) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n up_belowContentLineIndex = lineIndex;\n up_belowContentLineIndent = indent;\n break;\n }\n }\n }\n };\n let down_aboveContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let down_aboveContentLineIndent = -1;\n let down_belowContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let down_belowContentLineIndent = -1;\n const down_resolveIndents = (lineNumber) => {\n if (down_aboveContentLineIndex === -2) {\n down_aboveContentLineIndex = -1;\n down_aboveContentLineIndent = -1;\n // must find previous line with content\n for (let lineIndex = lineNumber - 2; lineIndex >= 0; lineIndex--) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n down_aboveContentLineIndex = lineIndex;\n down_aboveContentLineIndent = indent;\n break;\n }\n }\n }\n if (down_belowContentLineIndex !== -1 && (down_belowContentLineIndex === -2 || down_belowContentLineIndex < lineNumber - 1)) {\n down_belowContentLineIndex = -1;\n down_belowContentLineIndent = -1;\n // must find next line with content\n for (let lineIndex = lineNumber; lineIndex < lineCount; lineIndex++) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n down_belowContentLineIndex = lineIndex;\n down_belowContentLineIndent = indent;\n break;\n }\n }\n }\n };\n let startLineNumber = 0;\n let goUp = true;\n let endLineNumber = 0;\n let goDown = true;\n let indent = 0;\n let initialIndent = 0;\n for (let distance = 0; goUp || goDown; distance++) {\n const upLineNumber = lineNumber - distance;\n const downLineNumber = lineNumber + distance;\n if (distance > 1 && (upLineNumber < 1 || upLineNumber < minLineNumber)) {\n goUp = false;\n }\n if (distance > 1 && (downLineNumber > lineCount || downLineNumber > maxLineNumber)) {\n goDown = false;\n }\n if (distance > 50000) {\n // stop processing\n goUp = false;\n goDown = false;\n }\n let upLineIndentLevel = -1;\n if (goUp) {\n // compute indent level going up\n const currentIndent = this._computeIndentLevel(upLineNumber - 1);\n if (currentIndent >= 0) {\n // This line has content (besides whitespace)\n // Use the line's indent\n up_belowContentLineIndex = upLineNumber - 1;\n up_belowContentLineIndent = currentIndent;\n upLineIndentLevel = Math.ceil(currentIndent / this._options.indentSize);\n }\n else {\n up_resolveIndents(upLineNumber);\n upLineIndentLevel = this._getIndentLevelForWhitespaceLine(offSide, up_aboveContentLineIndent, up_belowContentLineIndent);\n }\n }\n let downLineIndentLevel = -1;\n if (goDown) {\n // compute indent level going down\n const currentIndent = this._computeIndentLevel(downLineNumber - 1);\n if (currentIndent >= 0) {\n // This line has content (besides whitespace)\n // Use the line's indent\n down_aboveContentLineIndex = downLineNumber - 1;\n down_aboveContentLineIndent = currentIndent;\n downLineIndentLevel = Math.ceil(currentIndent / this._options.indentSize);\n }\n else {\n down_resolveIndents(downLineNumber);\n downLineIndentLevel = this._getIndentLevelForWhitespaceLine(offSide, down_aboveContentLineIndent, down_belowContentLineIndent);\n }\n }\n if (distance === 0) {\n initialIndent = upLineIndentLevel;\n continue;\n }\n if (distance === 1) {\n if (downLineNumber <= lineCount && downLineIndentLevel >= 0 && initialIndent + 1 === downLineIndentLevel) {\n // This is the beginning of a scope, we have special handling here, since we want the\n // child scope indent to be active, not the parent scope\n goUp = false;\n startLineNumber = downLineNumber;\n endLineNumber = downLineNumber;\n indent = downLineIndentLevel;\n continue;\n }\n if (upLineNumber >= 1 && upLineIndentLevel >= 0 && upLineIndentLevel - 1 === initialIndent) {\n // This is the end of a scope, just like above\n goDown = false;\n startLineNumber = upLineNumber;\n endLineNumber = upLineNumber;\n indent = upLineIndentLevel;\n continue;\n }\n startLineNumber = lineNumber;\n endLineNumber = lineNumber;\n indent = initialIndent;\n if (indent === 0) {\n // No need to continue\n return { startLineNumber, endLineNumber, indent };\n }\n }\n if (goUp) {\n if (upLineIndentLevel >= indent) {\n startLineNumber = upLineNumber;\n }\n else {\n goUp = false;\n }\n }\n if (goDown) {\n if (downLineIndentLevel >= indent) {\n endLineNumber = downLineNumber;\n }\n else {\n goDown = false;\n }\n }\n }\n return { startLineNumber, endLineNumber, indent };\n }\n getLinesBracketGuides(startLineNumber, endLineNumber, activePosition, options) {\n var _a, _b, _c, _d, _e;\n const result = [];\n const bracketPairs = this._bracketPairColorizer.getBracketPairsInRangeWithMinIndentation(new Range(startLineNumber, 1, endLineNumber, this.getLineMaxColumn(endLineNumber)));\n let activeBracketPairRange = undefined;\n if (activePosition && bracketPairs.length > 0) {\n const bracketsContainingActivePosition = (startLineNumber <= activePosition.lineNumber && activePosition.lineNumber <= endLineNumber)\n // Does active position intersect with the view port? -> Intersect bracket pairs with activePosition\n ? bracketPairs.filter(bp => bp.range.containsPosition(activePosition))\n : this._bracketPairColorizer.getBracketPairsInRange(Range.fromPositions(activePosition));\n activeBracketPairRange = (_a = findLast(bracketsContainingActivePosition, \n /* Exclude single line bracket pairs for cases such as\n * ```\n * function test() {\n * \t\tif (true) { | }\n * }\n * ```\n */\n (i) => i.range.startLineNumber !== i.range.endLineNumber)) === null || _a === void 0 ? void 0 : _a.range;\n }\n const queue = new ArrayQueue(bracketPairs);\n /** Indexed by nesting level */\n const activeGuides = new Array();\n const nextGuides = new Array();\n const colorProvider = new BracketPairGuidesClassNames();\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n let guides = new Array();\n if (nextGuides.length > 0) {\n guides = guides.concat(nextGuides);\n nextGuides.length = 0;\n }\n result.push(guides);\n // Update activeGuides\n for (const pair of queue.takeWhile(b => b.openingBracketRange.startLineNumber <= lineNumber) || []) {\n if (pair.range.startLineNumber === pair.range.endLineNumber) {\n // ignore single line brackets\n continue;\n }\n const guideVisibleColumn = Math.min(this.getVisibleColumnFromPosition(pair.openingBracketRange.getStartPosition()), this.getVisibleColumnFromPosition((_c = (_b = pair.closingBracketRange) === null || _b === void 0 ? void 0 : _b.getStartPosition()) !== null && _c !== void 0 ? _c : pair.range.getEndPosition()), pair.minVisibleColumnIndentation + 1);\n let renderHorizontalEndLineAtTheBottom = false;\n if (pair.closingBracketRange) {\n const firstNonWsIndex = strings.firstNonWhitespaceIndex(this.getLineContent(pair.closingBracketRange.startLineNumber));\n if (firstNonWsIndex < pair.closingBracketRange.startColumn - 1) {\n renderHorizontalEndLineAtTheBottom = true;\n }\n }\n // TODO: Consider indentation when computing guideVisibleColumn\n const start = pair.openingBracketRange.getStartPosition();\n const end = ((_e = (_d = pair.closingBracketRange) === null || _d === void 0 ? void 0 : _d.getStartPosition()) !== null && _e !== void 0 ? _e : pair.range.getEndPosition());\n if (pair.closingBracketRange === undefined) {\n // Don't show guides for bracket pairs that are not balanced.\n // See #135125.\n activeGuides[pair.nestingLevel] = null;\n }\n else {\n activeGuides[pair.nestingLevel] = {\n nestingLevel: pair.nestingLevel,\n guideVisibleColumn,\n start,\n visibleStartColumn: this.getVisibleColumnFromPosition(start),\n end,\n visibleEndColumn: this.getVisibleColumnFromPosition(end),\n bracketPair: pair,\n renderHorizontalEndLineAtTheBottom\n };\n }\n }\n for (const line of activeGuides) {\n if (!line) {\n continue;\n }\n const isActive = activeBracketPairRange && line.bracketPair.range.equalsRange(activeBracketPairRange);\n const className = colorProvider.getInlineClassNameOfLevel(line.nestingLevel) +\n (options.highlightActive && isActive ? ' ' + colorProvider.activeClassName : '');\n if ((isActive && options.horizontalGuides !== model.HorizontalGuidesState.Disabled)\n || (options.includeInactive && options.horizontalGuides === model.HorizontalGuidesState.Enabled)) {\n if (line.start.lineNumber === lineNumber) {\n if (line.guideVisibleColumn < line.visibleStartColumn) {\n guides.push(new model.IndentGuide(line.guideVisibleColumn, className, new model.IndentGuideHorizontalLine(false, line.start.column)));\n }\n }\n if (line.end.lineNumber === lineNumber + 1) {\n // The next line might have horizontal guides.\n // However, the next line might also have a new bracket pair with the same indentation,\n // so the current bracket pair might get replaced. That's why we push the guide to nextGuides one line ahead.\n if (line.guideVisibleColumn < line.visibleEndColumn) {\n nextGuides.push(new model.IndentGuide(line.guideVisibleColumn, className, new model.IndentGuideHorizontalLine(!line.renderHorizontalEndLineAtTheBottom, line.end.column)));\n }\n }\n }\n }\n let lastVisibleColumnCount = Number.MAX_SAFE_INTEGER;\n // Going backwards, so the last guide potentially replaces others\n for (let i = activeGuides.length - 1; i >= 0; i--) {\n const line = activeGuides[i];\n if (!line) {\n continue;\n }\n const isActive = options.highlightActive && activeBracketPairRange &&\n line.bracketPair.range.equalsRange(activeBracketPairRange);\n const className = colorProvider.getInlineClassNameOfLevel(line.nestingLevel) +\n (isActive ? ' ' + colorProvider.activeClassName : '');\n if (isActive || options.includeInactive) {\n if (line.renderHorizontalEndLineAtTheBottom && line.end.lineNumber === lineNumber + 1) {\n nextGuides.push(new model.IndentGuide(line.guideVisibleColumn, className, null));\n }\n }\n if (line.end.lineNumber <= lineNumber\n || line.start.lineNumber >= lineNumber) {\n continue;\n }\n if (line.guideVisibleColumn >= lastVisibleColumnCount && !isActive) {\n // Don't render a guide on top of an existing guide, unless it is active.\n continue;\n }\n lastVisibleColumnCount = line.guideVisibleColumn;\n if (isActive || options.includeInactive) {\n guides.push(new model.IndentGuide(line.guideVisibleColumn, className, null));\n }\n }\n guides.sort((a, b) => a.visibleColumn - b.visibleColumn);\n }\n return result;\n }\n getVisibleColumnFromPosition(position) {\n return CursorColumns.visibleColumnFromColumn(this.getLineContent(position.lineNumber), position.column, this._options.tabSize) + 1;\n }\n getLinesIndentGuides(startLineNumber, endLineNumber) {\n this._assertNotDisposed();\n const lineCount = this.getLineCount();\n if (startLineNumber < 1 || startLineNumber > lineCount) {\n throw new Error('Illegal value for startLineNumber');\n }\n if (endLineNumber < 1 || endLineNumber > lineCount) {\n throw new Error('Illegal value for endLineNumber');\n }\n const foldingRules = this.getLanguageConfiguration(this._languageId).foldingRules;\n const offSide = Boolean(foldingRules && foldingRules.offSide);\n let result = new Array(endLineNumber - startLineNumber + 1);\n let aboveContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let aboveContentLineIndent = -1;\n let belowContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let belowContentLineIndent = -1;\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n let resultIndex = lineNumber - startLineNumber;\n const currentIndent = this._computeIndentLevel(lineNumber - 1);\n if (currentIndent >= 0) {\n // This line has content (besides whitespace)\n // Use the line's indent\n aboveContentLineIndex = lineNumber - 1;\n aboveContentLineIndent = currentIndent;\n result[resultIndex] = Math.ceil(currentIndent / this._options.indentSize);\n continue;\n }\n if (aboveContentLineIndex === -2) {\n aboveContentLineIndex = -1;\n aboveContentLineIndent = -1;\n // must find previous line with content\n for (let lineIndex = lineNumber - 2; lineIndex >= 0; lineIndex--) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n aboveContentLineIndex = lineIndex;\n aboveContentLineIndent = indent;\n break;\n }\n }\n }\n if (belowContentLineIndex !== -1 && (belowContentLineIndex === -2 || belowContentLineIndex < lineNumber - 1)) {\n belowContentLineIndex = -1;\n belowContentLineIndent = -1;\n // must find next line with content\n for (let lineIndex = lineNumber; lineIndex < lineCount; lineIndex++) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n belowContentLineIndex = lineIndex;\n belowContentLineIndent = indent;\n break;\n }\n }\n }\n result[resultIndex] = this._getIndentLevelForWhitespaceLine(offSide, aboveContentLineIndent, belowContentLineIndent);\n }\n return result;\n }\n _getIndentLevelForWhitespaceLine(offSide, aboveContentLineIndent, belowContentLineIndent) {\n if (aboveContentLineIndent === -1 || belowContentLineIndent === -1) {\n // At the top or bottom of the file\n return 0;\n }\n else if (aboveContentLineIndent < belowContentLineIndent) {\n // we are inside the region above\n return (1 + Math.floor(aboveContentLineIndent / this._options.indentSize));\n }\n else if (aboveContentLineIndent === belowContentLineIndent) {\n // we are in between two regions\n return Math.ceil(belowContentLineIndent / this._options.indentSize);\n }\n else {\n if (offSide) {\n // same level as region below\n return Math.ceil(belowContentLineIndent / this._options.indentSize);\n }\n else {\n // we are inside the region that ends below\n return (1 + Math.floor(belowContentLineIndent / this._options.indentSize));\n }\n }\n }\n //#endregion\n normalizePosition(position, affinity) {\n return position;\n }\n /**\n * Gets the column at which indentation stops at a given line.\n * @internal\n */\n getLineIndentColumn(lineNumber) {\n // Columns start with 1.\n return indentOfLine(this.getLineContent(lineNumber)) + 1;\n }\n};\nTextModel.MODEL_SYNC_LIMIT = 50 * 1024 * 1024; // 50 MB\nTextModel.LARGE_FILE_SIZE_THRESHOLD = 20 * 1024 * 1024; // 20 MB;\nTextModel.LARGE_FILE_LINE_COUNT_THRESHOLD = 300 * 1000; // 300K lines\nTextModel.DEFAULT_CREATION_OPTIONS = {\n isForSimpleWidget: false,\n tabSize: EDITOR_MODEL_DEFAULTS.tabSize,\n indentSize: EDITOR_MODEL_DEFAULTS.indentSize,\n insertSpaces: EDITOR_MODEL_DEFAULTS.insertSpaces,\n detectIndentation: false,\n defaultEOL: 1 /* LF */,\n trimAutoWhitespace: EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,\n largeFileOptimizations: EDITOR_MODEL_DEFAULTS.largeFileOptimizations,\n bracketPairColorizationOptions: EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions,\n};\nTextModel = __decorate([\n __param(4, IUndoRedoService),\n __param(5, IModeService),\n __param(6, ILanguageConfigurationService)\n], TextModel);\nexport { TextModel };\nfunction indentOfLine(line) {\n let indent = 0;\n for (const c of line) {\n if (c === ' ' || c === '\\t') {\n indent++;\n }\n else {\n break;\n }\n }\n return indent;\n}\nexport class BracketPairGuidesClassNames {\n constructor() {\n this.activeClassName = 'indent-active';\n }\n getInlineClassNameOfLevel(level) {\n // To support a dynamic amount of colors up to 6 colors,\n // we use a number that is a lcm of all numbers from 1 to 6.\n return `bracket-indent-guide lvl-${level % 30}`;\n }\n}\n//#region Decorations\nfunction isNodeInOverviewRuler(node) {\n return (node.options.overviewRuler && node.options.overviewRuler.color ? true : false);\n}\nfunction isNodeInjectedText(node) {\n return !!node.options.after || !!node.options.before;\n}\nclass DecorationsTrees {\n constructor() {\n this._decorationsTree0 = new IntervalTree();\n this._decorationsTree1 = new IntervalTree();\n this._injectedTextDecorationsTree = new IntervalTree();\n }\n ensureAllNodesHaveRanges(host) {\n this.getAll(host, 0, false, false);\n }\n _ensureNodesHaveRanges(host, nodes) {\n for (const node of nodes) {\n if (node.range === null) {\n node.range = host.getRangeAt(node.cachedAbsoluteStart, node.cachedAbsoluteEnd);\n }\n }\n return nodes;\n }\n getAllInInterval(host, start, end, filterOwnerId, filterOutValidation) {\n const versionId = host.getVersionId();\n const result = this._intervalSearch(start, end, filterOwnerId, filterOutValidation, versionId);\n return this._ensureNodesHaveRanges(host, result);\n }\n _intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId) {\n const r0 = this._decorationsTree0.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId);\n const r1 = this._decorationsTree1.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId);\n const r2 = this._injectedTextDecorationsTree.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId);\n return r0.concat(r1).concat(r2);\n }\n getInjectedTextInInterval(host, start, end, filterOwnerId) {\n const versionId = host.getVersionId();\n const result = this._injectedTextDecorationsTree.intervalSearch(start, end, filterOwnerId, false, versionId);\n return this._ensureNodesHaveRanges(host, result).filter((i) => i.options.showIfCollapsed || !i.range.isEmpty());\n }\n getAllInjectedText(host, filterOwnerId) {\n const versionId = host.getVersionId();\n const result = this._injectedTextDecorationsTree.search(filterOwnerId, false, versionId);\n return this._ensureNodesHaveRanges(host, result).filter((i) => i.options.showIfCollapsed || !i.range.isEmpty());\n }\n getAll(host, filterOwnerId, filterOutValidation, overviewRulerOnly) {\n const versionId = host.getVersionId();\n const result = this._search(filterOwnerId, filterOutValidation, overviewRulerOnly, versionId);\n return this._ensureNodesHaveRanges(host, result);\n }\n _search(filterOwnerId, filterOutValidation, overviewRulerOnly, cachedVersionId) {\n if (overviewRulerOnly) {\n return this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId);\n }\n else {\n const r0 = this._decorationsTree0.search(filterOwnerId, filterOutValidation, cachedVersionId);\n const r1 = this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId);\n const r2 = this._injectedTextDecorationsTree.search(filterOwnerId, filterOutValidation, cachedVersionId);\n return r0.concat(r1).concat(r2);\n }\n }\n collectNodesFromOwner(ownerId) {\n const r0 = this._decorationsTree0.collectNodesFromOwner(ownerId);\n const r1 = this._decorationsTree1.collectNodesFromOwner(ownerId);\n const r2 = this._injectedTextDecorationsTree.collectNodesFromOwner(ownerId);\n return r0.concat(r1).concat(r2);\n }\n collectNodesPostOrder() {\n const r0 = this._decorationsTree0.collectNodesPostOrder();\n const r1 = this._decorationsTree1.collectNodesPostOrder();\n const r2 = this._injectedTextDecorationsTree.collectNodesPostOrder();\n return r0.concat(r1).concat(r2);\n }\n insert(node) {\n if (isNodeInjectedText(node)) {\n this._injectedTextDecorationsTree.insert(node);\n }\n else if (isNodeInOverviewRuler(node)) {\n this._decorationsTree1.insert(node);\n }\n else {\n this._decorationsTree0.insert(node);\n }\n }\n delete(node) {\n if (isNodeInjectedText(node)) {\n this._injectedTextDecorationsTree.delete(node);\n }\n else if (isNodeInOverviewRuler(node)) {\n this._decorationsTree1.delete(node);\n }\n else {\n this._decorationsTree0.delete(node);\n }\n }\n getNodeRange(host, node) {\n const versionId = host.getVersionId();\n if (node.cachedVersionId !== versionId) {\n this._resolveNode(node, versionId);\n }\n if (node.range === null) {\n node.range = host.getRangeAt(node.cachedAbsoluteStart, node.cachedAbsoluteEnd);\n }\n return node.range;\n }\n _resolveNode(node, cachedVersionId) {\n if (isNodeInjectedText(node)) {\n this._injectedTextDecorationsTree.resolveNode(node, cachedVersionId);\n }\n else if (isNodeInOverviewRuler(node)) {\n this._decorationsTree1.resolveNode(node, cachedVersionId);\n }\n else {\n this._decorationsTree0.resolveNode(node, cachedVersionId);\n }\n }\n acceptReplace(offset, length, textLength, forceMoveMarkers) {\n this._decorationsTree0.acceptReplace(offset, length, textLength, forceMoveMarkers);\n this._decorationsTree1.acceptReplace(offset, length, textLength, forceMoveMarkers);\n this._injectedTextDecorationsTree.acceptReplace(offset, length, textLength, forceMoveMarkers);\n }\n}\nfunction cleanClassName(className) {\n return className.replace(/[^a-z0-9\\-_]/gi, ' ');\n}\nclass DecorationOptions {\n constructor(options) {\n this.color = options.color || '';\n this.darkColor = options.darkColor || '';\n }\n}\nexport class ModelDecorationOverviewRulerOptions extends DecorationOptions {\n constructor(options) {\n super(options);\n this._resolvedColor = null;\n this.position = (typeof options.position === 'number' ? options.position : model.OverviewRulerLane.Center);\n }\n getColor(theme) {\n if (!this._resolvedColor) {\n if (theme.type !== 'light' && this.darkColor) {\n this._resolvedColor = this._resolveColor(this.darkColor, theme);\n }\n else {\n this._resolvedColor = this._resolveColor(this.color, theme);\n }\n }\n return this._resolvedColor;\n }\n invalidateCachedColor() {\n this._resolvedColor = null;\n }\n _resolveColor(color, theme) {\n if (typeof color === 'string') {\n return color;\n }\n let c = color ? theme.getColor(color.id) : null;\n if (!c) {\n return '';\n }\n return c.toString();\n }\n}\nexport class ModelDecorationMinimapOptions extends DecorationOptions {\n constructor(options) {\n super(options);\n this.position = options.position;\n }\n getColor(theme) {\n if (!this._resolvedColor) {\n if (theme.type !== 'light' && this.darkColor) {\n this._resolvedColor = this._resolveColor(this.darkColor, theme);\n }\n else {\n this._resolvedColor = this._resolveColor(this.color, theme);\n }\n }\n return this._resolvedColor;\n }\n invalidateCachedColor() {\n this._resolvedColor = undefined;\n }\n _resolveColor(color, theme) {\n if (typeof color === 'string') {\n return Color.fromHex(color);\n }\n return theme.getColor(color.id);\n }\n}\nexport class ModelDecorationInjectedTextOptions {\n constructor(options) {\n this.content = options.content || '';\n this.inlineClassName = options.inlineClassName || null;\n this.inlineClassNameAffectsLetterSpacing = options.inlineClassNameAffectsLetterSpacing || false;\n }\n static from(options) {\n if (options instanceof ModelDecorationInjectedTextOptions) {\n return options;\n }\n return new ModelDecorationInjectedTextOptions(options);\n }\n}\nexport class ModelDecorationOptions {\n constructor(options) {\n this.description = options.description;\n this.stickiness = options.stickiness || 0 /* AlwaysGrowsWhenTypingAtEdges */;\n this.zIndex = options.zIndex || 0;\n this.className = options.className ? cleanClassName(options.className) : null;\n this.hoverMessage = options.hoverMessage || null;\n this.glyphMarginHoverMessage = options.glyphMarginHoverMessage || null;\n this.isWholeLine = options.isWholeLine || false;\n this.showIfCollapsed = options.showIfCollapsed || false;\n this.collapseOnReplaceEdit = options.collapseOnReplaceEdit || false;\n this.overviewRuler = options.overviewRuler ? new ModelDecorationOverviewRulerOptions(options.overviewRuler) : null;\n this.minimap = options.minimap ? new ModelDecorationMinimapOptions(options.minimap) : null;\n this.glyphMarginClassName = options.glyphMarginClassName ? cleanClassName(options.glyphMarginClassName) : null;\n this.linesDecorationsClassName = options.linesDecorationsClassName ? cleanClassName(options.linesDecorationsClassName) : null;\n this.firstLineDecorationClassName = options.firstLineDecorationClassName ? cleanClassName(options.firstLineDecorationClassName) : null;\n this.marginClassName = options.marginClassName ? cleanClassName(options.marginClassName) : null;\n this.inlineClassName = options.inlineClassName ? cleanClassName(options.inlineClassName) : null;\n this.inlineClassNameAffectsLetterSpacing = options.inlineClassNameAffectsLetterSpacing || false;\n this.beforeContentClassName = options.beforeContentClassName ? cleanClassName(options.beforeContentClassName) : null;\n this.afterContentClassName = options.afterContentClassName ? cleanClassName(options.afterContentClassName) : null;\n this.after = options.after ? ModelDecorationInjectedTextOptions.from(options.after) : null;\n this.before = options.before ? ModelDecorationInjectedTextOptions.from(options.before) : null;\n }\n static register(options) {\n return new ModelDecorationOptions(options);\n }\n static createDynamic(options) {\n return new ModelDecorationOptions(options);\n }\n}\nModelDecorationOptions.EMPTY = ModelDecorationOptions.register({ description: 'empty' });\n/**\n * The order carefully matches the values of the enum.\n */\nconst TRACKED_RANGE_OPTIONS = [\n ModelDecorationOptions.register({ description: 'tracked-range-always-grows-when-typing-at-edges', stickiness: 0 /* AlwaysGrowsWhenTypingAtEdges */ }),\n ModelDecorationOptions.register({ description: 'tracked-range-never-grows-when-typing-at-edges', stickiness: 1 /* NeverGrowsWhenTypingAtEdges */ }),\n ModelDecorationOptions.register({ description: 'tracked-range-grows-only-when-typing-before', stickiness: 2 /* GrowsOnlyWhenTypingBefore */ }),\n ModelDecorationOptions.register({ description: 'tracked-range-grows-only-when-typing-after', stickiness: 3 /* GrowsOnlyWhenTypingAfter */ }),\n];\nfunction _normalizeOptions(options) {\n if (options instanceof ModelDecorationOptions) {\n return options;\n }\n return ModelDecorationOptions.createDynamic(options);\n}\nexport class DidChangeDecorationsEmitter extends Disposable {\n constructor(handleBeforeFire) {\n super();\n this.handleBeforeFire = handleBeforeFire;\n this._actual = this._register(new Emitter());\n this.event = this._actual.event;\n this._affectedInjectedTextLines = null;\n this._deferredCnt = 0;\n this._shouldFire = false;\n this._affectsMinimap = false;\n this._affectsOverviewRuler = false;\n }\n beginDeferredEmit() {\n this._deferredCnt++;\n }\n endDeferredEmit() {\n var _a;\n this._deferredCnt--;\n if (this._deferredCnt === 0) {\n if (this._shouldFire) {\n this.handleBeforeFire(this._affectedInjectedTextLines);\n const event = {\n affectsMinimap: this._affectsMinimap,\n affectsOverviewRuler: this._affectsOverviewRuler\n };\n this._shouldFire = false;\n this._affectsMinimap = false;\n this._affectsOverviewRuler = false;\n this._actual.fire(event);\n }\n (_a = this._affectedInjectedTextLines) === null || _a === void 0 ? void 0 : _a.clear();\n this._affectedInjectedTextLines = null;\n }\n }\n recordLineAffectedByInjectedText(lineNumber) {\n if (!this._affectedInjectedTextLines) {\n this._affectedInjectedTextLines = new Set();\n }\n this._affectedInjectedTextLines.add(lineNumber);\n }\n checkAffectedAndFire(options) {\n if (!this._affectsMinimap) {\n this._affectsMinimap = options.minimap && options.minimap.position ? true : false;\n }\n if (!this._affectsOverviewRuler) {\n this._affectsOverviewRuler = options.overviewRuler && options.overviewRuler.color ? true : false;\n }\n this._shouldFire = true;\n }\n fire() {\n this._affectsMinimap = true;\n this._affectsOverviewRuler = true;\n this._shouldFire = true;\n }\n}\n//#endregion\nexport class DidChangeContentEmitter extends Disposable {\n constructor() {\n super();\n /**\n * Both `fastEvent` and `slowEvent` work the same way and contain the same events, but first we invoke `fastEvent` and then `slowEvent`.\n */\n this._fastEmitter = this._register(new Emitter());\n this.fastEvent = this._fastEmitter.event;\n this._slowEmitter = this._register(new Emitter());\n this.slowEvent = this._slowEmitter.event;\n this._deferredCnt = 0;\n this._deferredEvent = null;\n }\n beginDeferredEmit() {\n this._deferredCnt++;\n }\n endDeferredEmit(resultingSelection = null) {\n this._deferredCnt--;\n if (this._deferredCnt === 0) {\n if (this._deferredEvent !== null) {\n this._deferredEvent.rawContentChangedEvent.resultingSelection = resultingSelection;\n const e = this._deferredEvent;\n this._deferredEvent = null;\n this._fastEmitter.fire(e);\n this._slowEmitter.fire(e);\n }\n }\n }\n fire(e) {\n if (this._deferredCnt > 0) {\n if (this._deferredEvent) {\n this._deferredEvent = this._deferredEvent.merge(e);\n }\n else {\n this._deferredEvent = e;\n }\n return;\n }\n this._fastEmitter.fire(e);\n this._slowEmitter.fire(e);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as platform from './platform.js';\nimport { URI } from './uri.js';\nexport var Schemas;\n(function (Schemas) {\n /**\n * A schema that is used for models that exist in memory\n * only and that have no correspondence on a server or such.\n */\n Schemas.inMemory = 'inmemory';\n /**\n * A schema that is used for setting files\n */\n Schemas.vscode = 'vscode';\n /**\n * A schema that is used for internal private files\n */\n Schemas.internal = 'private';\n /**\n * A walk-through document.\n */\n Schemas.walkThrough = 'walkThrough';\n /**\n * An embedded code snippet.\n */\n Schemas.walkThroughSnippet = 'walkThroughSnippet';\n Schemas.http = 'http';\n Schemas.https = 'https';\n Schemas.file = 'file';\n Schemas.mailto = 'mailto';\n Schemas.untitled = 'untitled';\n Schemas.data = 'data';\n Schemas.command = 'command';\n Schemas.vscodeRemote = 'vscode-remote';\n Schemas.vscodeRemoteResource = 'vscode-remote-resource';\n Schemas.userData = 'vscode-userdata';\n Schemas.vscodeCustomEditor = 'vscode-custom-editor';\n Schemas.vscodeNotebook = 'vscode-notebook';\n Schemas.vscodeNotebookCell = 'vscode-notebook-cell';\n Schemas.vscodeNotebookCellMetadata = 'vscode-notebook-cell-metadata';\n Schemas.vscodeNotebookCellOutput = 'vscode-notebook-cell-output';\n Schemas.vscodeInteractive = 'vscode-interactive';\n Schemas.vscodeInteractiveInput = 'vscode-interactive-input';\n Schemas.vscodeSettings = 'vscode-settings';\n Schemas.vscodeWorkspaceTrust = 'vscode-workspace-trust';\n Schemas.vscodeTerminal = 'vscode-terminal';\n Schemas.webviewPanel = 'webview-panel';\n /**\n * Scheme used for loading the wrapper html and script in webviews.\n */\n Schemas.vscodeWebview = 'vscode-webview';\n /**\n * Scheme used for extension pages\n */\n Schemas.extension = 'extension';\n /**\n * Scheme used as a replacement of `file` scheme to load\n * files with our custom protocol handler (desktop only).\n */\n Schemas.vscodeFileResource = 'vscode-file';\n /**\n * Scheme used for temporary resources\n */\n Schemas.tmp = 'tmp';\n})(Schemas || (Schemas = {}));\nclass RemoteAuthoritiesImpl {\n constructor() {\n this._hosts = Object.create(null);\n this._ports = Object.create(null);\n this._connectionTokens = Object.create(null);\n this._preferredWebSchema = 'http';\n this._delegate = null;\n }\n setPreferredWebSchema(schema) {\n this._preferredWebSchema = schema;\n }\n rewrite(uri) {\n if (this._delegate) {\n return this._delegate(uri);\n }\n const authority = uri.authority;\n let host = this._hosts[authority];\n if (host && host.indexOf(':') !== -1) {\n host = `[${host}]`;\n }\n const port = this._ports[authority];\n const connectionToken = this._connectionTokens[authority];\n let query = `path=${encodeURIComponent(uri.path)}`;\n if (typeof connectionToken === 'string') {\n query += `&tkn=${encodeURIComponent(connectionToken)}`;\n }\n return URI.from({\n scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource,\n authority: `${host}:${port}`,\n path: `/vscode-remote-resource`,\n query\n });\n }\n}\nexport const RemoteAuthorities = new RemoteAuthoritiesImpl();\nclass FileAccessImpl {\n asBrowserUri(uriOrModule, moduleIdToUrl) {\n const uri = this.toUri(uriOrModule, moduleIdToUrl);\n // Handle remote URIs via `RemoteAuthorities`\n if (uri.scheme === Schemas.vscodeRemote) {\n return RemoteAuthorities.rewrite(uri);\n }\n // Convert to `vscode-file` resource..\n if (\n // ...only ever for `file` resources\n uri.scheme === Schemas.file &&\n (\n // ...and we run in native environments\n platform.isNative ||\n // ...or web worker extensions on desktop\n (typeof platform.globals.importScripts === 'function' && platform.globals.origin === `${Schemas.vscodeFileResource}://${FileAccessImpl.FALLBACK_AUTHORITY}`))) {\n return uri.with({\n scheme: Schemas.vscodeFileResource,\n // We need to provide an authority here so that it can serve\n // as origin for network and loading matters in chromium.\n // If the URI is not coming with an authority already, we\n // add our own\n authority: uri.authority || FileAccessImpl.FALLBACK_AUTHORITY,\n query: null,\n fragment: null\n });\n }\n return uri;\n }\n toUri(uriOrModule, moduleIdToUrl) {\n if (URI.isUri(uriOrModule)) {\n return uriOrModule;\n }\n return URI.parse(moduleIdToUrl.toUrl(uriOrModule));\n }\n}\nFileAccessImpl.FALLBACK_AUTHORITY = 'vscode-app';\nexport const FileAccess = new FileAccessImpl();\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.monaco = exports[\"default\"] = void 0;\n\nvar monaco = _interopRequireWildcard(require(\"monaco-editor/esm/vs/editor/editor.api\"));\n\nexports.monaco = monaco;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj[\"default\"] = obj; return newObj; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction noop() {}\n\nvar _default2 = {\n name: 'MonacoEditor',\n props: {\n diffEditor: {\n type: Boolean,\n \"default\": false\n },\n //是否使用diff模式\n width: {\n type: [String, Number],\n \"default\": '100%'\n },\n height: {\n type: [String, Number],\n \"default\": '100%'\n },\n original: String,\n //只有在diff模式下有效\n value: String,\n language: {\n type: String,\n \"default\": 'javascript'\n },\n theme: {\n type: String,\n \"default\": 'vs'\n },\n options: {\n type: Object,\n \"default\": function _default() {\n return {};\n }\n },\n editorMounted: {\n type: Function,\n \"default\": noop\n },\n editorBeforeMount: {\n type: Function,\n \"default\": noop\n }\n },\n watch: {\n options: {\n deep: true,\n handler: function handler(options) {\n this.editor && this.editor.updateOptions(options);\n }\n },\n value: function value() {\n this.editor && this.value !== this._getValue() && this._setValue(this.value);\n },\n language: function language() {\n if (!this.editor) return;\n\n if (this.diffEditor) {\n //diff模式下更新language\n var _this$editor$getModel = this.editor.getModel(),\n original = _this$editor$getModel.original,\n modified = _this$editor$getModel.modified;\n\n monaco.editor.setModelLanguage(original, this.language);\n monaco.editor.setModelLanguage(modified, this.language);\n } else monaco.editor.setModelLanguage(this.editor.getModel(), this.language);\n },\n theme: function theme() {\n this.editor && monaco.editor.setTheme(this.theme);\n },\n style: function style() {\n var _this = this;\n\n this.editor && this.$nextTick(function () {\n _this.editor.layout();\n });\n }\n },\n computed: {\n style: function style() {\n return {\n width: !/^\\d+$/.test(this.width) ? this.width : \"\".concat(this.width, \"px\"),\n height: !/^\\d+$/.test(this.height) ? this.height : \"\".concat(this.height, \"px\")\n };\n }\n },\n mounted: function mounted() {\n this.initMonaco();\n },\n beforeDestroy: function beforeDestroy() {\n this.editor && this.editor.dispose();\n },\n render: function render(h) {\n return h(\"div\", {\n \"class\": \"monaco_editor_container\",\n style: this.style\n });\n },\n methods: {\n initMonaco: function initMonaco() {\n var value = this.value,\n language = this.language,\n theme = this.theme,\n options = this.options;\n Object.assign(options, this._editorBeforeMount()); //编辑器初始化前\n\n this.editor = monaco.editor[this.diffEditor ? 'createDiffEditor' : 'create'](this.$el, _objectSpread({\n value: value,\n language: language,\n theme: theme\n }, options));\n this.diffEditor && this._setModel(this.value, this.original);\n\n this._editorMounted(this.editor); //编辑器初始化后\n\n },\n _getEditor: function _getEditor() {\n if (!this.editor) return null;\n return this.diffEditor ? this.editor.modifiedEditor : this.editor;\n },\n _setModel: function _setModel(value, original) {\n //diff模式下设置model\n var language = this.language;\n var originalModel = monaco.editor.createModel(original, language);\n var modifiedModel = monaco.editor.createModel(value, language);\n this.editor.setModel({\n original: originalModel,\n modified: modifiedModel\n });\n },\n _setValue: function _setValue(value) {\n var editor = this._getEditor();\n\n if (editor) return editor.setValue(value);\n },\n _getValue: function _getValue() {\n var editor = this._getEditor();\n\n if (!editor) return '';\n return editor.getValue();\n },\n _editorBeforeMount: function _editorBeforeMount() {\n var options = this.editorBeforeMount(monaco);\n return options || {};\n },\n _editorMounted: function _editorMounted(editor) {\n var _this2 = this;\n\n this.editorMounted(editor, monaco);\n\n if (this.diffEditor) {\n editor.onDidUpdateDiff(function (event) {\n var value = _this2._getValue();\n\n _this2._emitChange(value, event);\n });\n } else {\n editor.onDidChangeModelContent(function (event) {\n var value = _this2._getValue();\n\n _this2._emitChange(value, event);\n });\n }\n },\n _emitChange: function _emitChange(value, event) {\n this.$emit('change', value, event);\n this.$emit('input', value);\n }\n }\n};\nexports[\"default\"] = _default2;","/*---------------------------------------------------------------------------------------------\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 *--------------------------------------------------------------------------------------------*/\nimport { match as matchGlobPattern } from '../../../base/common/glob.js';\nimport { normalize } from '../../../base/common/path.js';\nexport function score(selector, candidateUri, candidateLanguage, candidateIsSynchronized) {\n if (Array.isArray(selector)) {\n // array -> take max individual value\n let ret = 0;\n for (const filter of selector) {\n const value = score(filter, candidateUri, candidateLanguage, candidateIsSynchronized);\n if (value === 10) {\n return value; // already at the highest\n }\n if (value > ret) {\n ret = value;\n }\n }\n return ret;\n }\n else if (typeof selector === 'string') {\n if (!candidateIsSynchronized) {\n return 0;\n }\n // short-hand notion, desugars to\n // 'fooLang' -> { language: 'fooLang'}\n // '*' -> { language: '*' }\n if (selector === '*') {\n return 5;\n }\n else if (selector === candidateLanguage) {\n return 10;\n }\n else {\n return 0;\n }\n }\n else if (selector) {\n // filter -> select accordingly, use defaults for scheme\n const { language, pattern, scheme, hasAccessToAllModels } = selector; // TODO: microsoft/TypeScript#42768\n if (!candidateIsSynchronized && !hasAccessToAllModels) {\n return 0;\n }\n let ret = 0;\n if (scheme) {\n if (scheme === candidateUri.scheme) {\n ret = 10;\n }\n else if (scheme === '*') {\n ret = 5;\n }\n else {\n return 0;\n }\n }\n if (language) {\n if (language === candidateLanguage) {\n ret = 10;\n }\n else if (language === '*') {\n ret = Math.max(ret, 5);\n }\n else {\n return 0;\n }\n }\n if (pattern) {\n let normalizedPattern;\n if (typeof pattern === 'string') {\n normalizedPattern = pattern;\n }\n else {\n // Since this pattern has a `base` property, we need\n // to normalize this path first before passing it on\n // because we will compare it against `Uri.fsPath`\n // which uses platform specific separators.\n // Refs: https://github.com/microsoft/vscode/issues/99938\n normalizedPattern = Object.assign(Object.assign({}, pattern), { base: normalize(pattern.base) });\n }\n if (normalizedPattern === candidateUri.fsPath || matchGlobPattern(normalizedPattern, candidateUri.fsPath)) {\n ret = 10;\n }\n else {\n return 0;\n }\n }\n return ret;\n }\n else {\n return 0;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { doHash } from '../../../base/common/hash.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport { LRUCache } from '../../../base/common/map.js';\nimport { MovingAverage } from '../../../base/common/numbers.js';\nimport { score } from './languageSelector.js';\nimport { shouldSynchronizeModel } from '../services/modelService.js';\nfunction isExclusive(selector) {\n if (typeof selector === 'string') {\n return false;\n }\n else if (Array.isArray(selector)) {\n return selector.every(isExclusive);\n }\n else {\n return !!selector.exclusive; // TODO: microsoft/TypeScript#42768\n }\n}\nexport class LanguageFeatureRegistry {\n constructor() {\n this._clock = 0;\n this._entries = [];\n this._onDidChange = new Emitter();\n }\n get onDidChange() {\n return this._onDidChange.event;\n }\n register(selector, provider) {\n let entry = {\n selector,\n provider,\n _score: -1,\n _time: this._clock++\n };\n this._entries.push(entry);\n this._lastCandidate = undefined;\n this._onDidChange.fire(this._entries.length);\n return toDisposable(() => {\n if (entry) {\n let idx = this._entries.indexOf(entry);\n if (idx >= 0) {\n this._entries.splice(idx, 1);\n this._lastCandidate = undefined;\n this._onDidChange.fire(this._entries.length);\n entry = undefined;\n }\n }\n });\n }\n has(model) {\n return this.all(model).length > 0;\n }\n all(model) {\n if (!model) {\n return [];\n }\n this._updateScores(model);\n const result = [];\n // from registry\n for (let entry of this._entries) {\n if (entry._score > 0) {\n result.push(entry.provider);\n }\n }\n return result;\n }\n ordered(model) {\n const result = [];\n this._orderedForEach(model, entry => result.push(entry.provider));\n return result;\n }\n orderedGroups(model) {\n const result = [];\n let lastBucket;\n let lastBucketScore;\n this._orderedForEach(model, entry => {\n if (lastBucket && lastBucketScore === entry._score) {\n lastBucket.push(entry.provider);\n }\n else {\n lastBucketScore = entry._score;\n lastBucket = [entry.provider];\n result.push(lastBucket);\n }\n });\n return result;\n }\n _orderedForEach(model, callback) {\n if (!model) {\n return;\n }\n this._updateScores(model);\n for (const entry of this._entries) {\n if (entry._score > 0) {\n callback(entry);\n }\n }\n }\n _updateScores(model) {\n let candidate = {\n uri: model.uri.toString(),\n language: model.getLanguageId()\n };\n if (this._lastCandidate\n && this._lastCandidate.language === candidate.language\n && this._lastCandidate.uri === candidate.uri) {\n // nothing has changed\n return;\n }\n this._lastCandidate = candidate;\n for (let entry of this._entries) {\n entry._score = score(entry.selector, model.uri, model.getLanguageId(), shouldSynchronizeModel(model));\n if (isExclusive(entry.selector) && entry._score > 0) {\n // support for one exclusive selector that overwrites\n // any other selector\n for (let entry of this._entries) {\n entry._score = 0;\n }\n entry._score = 1000;\n break;\n }\n }\n // needs sorting\n this._entries.sort(LanguageFeatureRegistry._compareByScoreAndTime);\n }\n static _compareByScoreAndTime(a, b) {\n if (a._score < b._score) {\n return 1;\n }\n else if (a._score > b._score) {\n return -1;\n }\n else if (a._time < b._time) {\n return 1;\n }\n else if (a._time > b._time) {\n return -1;\n }\n else {\n return 0;\n }\n }\n}\nconst _hashes = new WeakMap();\nlet pool = 0;\nfunction weakHash(obj) {\n let value = _hashes.get(obj);\n if (value === undefined) {\n value = ++pool;\n _hashes.set(obj, value);\n }\n return value;\n}\n/**\n * Keeps moving average per model and set of providers so that requests\n * can be debounce according to the provider performance\n */\nexport class LanguageFeatureRequestDelays {\n constructor(_registry, min, max = Number.MAX_SAFE_INTEGER) {\n this._registry = _registry;\n this.min = min;\n this.max = max;\n this._cache = new LRUCache(50, 0.7);\n }\n _key(model) {\n return model.id + this._registry.all(model).reduce((hashVal, obj) => doHash(weakHash(obj), hashVal), 0);\n }\n _clamp(value) {\n if (value === undefined) {\n return this.min;\n }\n else {\n return Math.min(this.max, Math.max(this.min, Math.floor(value * 1.3)));\n }\n }\n get(model) {\n const key = this._key(model);\n const avg = this._cache.get(key);\n return this._clamp(avg === null || avg === void 0 ? void 0 : avg.value);\n }\n update(model, value) {\n const key = this._key(model);\n let avg = this._cache.get(key);\n if (!avg) {\n avg = new MovingAverage();\n this._cache.set(key, avg);\n }\n avg.update(value);\n return this.get(model);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nexport class TokenizationRegistryImpl {\n constructor() {\n this._map = new Map();\n this._promises = new Map();\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._colorMap = null;\n }\n fire(languages) {\n this._onDidChange.fire({\n changedLanguages: languages,\n changedColorMap: false\n });\n }\n register(language, support) {\n this._map.set(language, support);\n this.fire([language]);\n return toDisposable(() => {\n if (this._map.get(language) !== support) {\n return;\n }\n this._map.delete(language);\n this.fire([language]);\n });\n }\n registerPromise(language, supportPromise) {\n let registration = null;\n let isDisposed = false;\n this._promises.set(language, supportPromise.then(support => {\n this._promises.delete(language);\n if (isDisposed || !support) {\n return;\n }\n registration = this.register(language, support);\n }));\n return toDisposable(() => {\n isDisposed = true;\n if (registration) {\n registration.dispose();\n }\n });\n }\n getPromise(language) {\n const support = this.get(language);\n if (support) {\n return Promise.resolve(support);\n }\n const promise = this._promises.get(language);\n if (promise) {\n return promise.then(_ => this.get(language));\n }\n return null;\n }\n get(language) {\n return (this._map.get(language) || null);\n }\n setColorMap(colorMap) {\n this._colorMap = colorMap;\n this._onDidChange.fire({\n changedLanguages: Array.from(this._map.keys()),\n changedColorMap: true\n });\n }\n getColorMap() {\n return this._colorMap;\n }\n getDefaultBackground() {\n if (this._colorMap && this._colorMap.length > 2 /* DefaultBackground */) {\n return this._colorMap[2 /* DefaultBackground */];\n }\n return null;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { URI } from '../../base/common/uri.js';\nimport { Range } from './core/range.js';\nimport { LanguageFeatureRegistry } from './modes/languageFeatureRegistry.js';\nimport { TokenizationRegistryImpl } from './modes/tokenizationRegistry.js';\nimport { iconRegistry, Codicon } from '../../base/common/codicons.js';\n/**\n * @internal\n */\nexport class TokenMetadata {\n static getLanguageId(metadata) {\n return (metadata & 255 /* LANGUAGEID_MASK */) >>> 0 /* LANGUAGEID_OFFSET */;\n }\n static getTokenType(metadata) {\n return (metadata & 1792 /* TOKEN_TYPE_MASK */) >>> 8 /* TOKEN_TYPE_OFFSET */;\n }\n static getFontStyle(metadata) {\n return (metadata & 14336 /* FONT_STYLE_MASK */) >>> 11 /* FONT_STYLE_OFFSET */;\n }\n static getForeground(metadata) {\n return (metadata & 8372224 /* FOREGROUND_MASK */) >>> 14 /* FOREGROUND_OFFSET */;\n }\n static getBackground(metadata) {\n return (metadata & 4286578688 /* BACKGROUND_MASK */) >>> 23 /* BACKGROUND_OFFSET */;\n }\n static getClassNameFromMetadata(metadata) {\n let foreground = this.getForeground(metadata);\n let className = 'mtk' + foreground;\n let fontStyle = this.getFontStyle(metadata);\n if (fontStyle & 1 /* Italic */) {\n className += ' mtki';\n }\n if (fontStyle & 2 /* Bold */) {\n className += ' mtkb';\n }\n if (fontStyle & 4 /* Underline */) {\n className += ' mtku';\n }\n return className;\n }\n static getInlineStyleFromMetadata(metadata, colorMap) {\n const foreground = this.getForeground(metadata);\n const fontStyle = this.getFontStyle(metadata);\n let result = `color: ${colorMap[foreground]};`;\n if (fontStyle & 1 /* Italic */) {\n result += 'font-style: italic;';\n }\n if (fontStyle & 2 /* Bold */) {\n result += 'font-weight: bold;';\n }\n if (fontStyle & 4 /* Underline */) {\n result += 'text-decoration: underline;';\n }\n return result;\n }\n}\n/**\n * @internal\n */\nexport const completionKindToCssClass = (function () {\n let data = Object.create(null);\n data[0 /* Method */] = 'symbol-method';\n data[1 /* Function */] = 'symbol-function';\n data[2 /* Constructor */] = 'symbol-constructor';\n data[3 /* Field */] = 'symbol-field';\n data[4 /* Variable */] = 'symbol-variable';\n data[5 /* Class */] = 'symbol-class';\n data[6 /* Struct */] = 'symbol-struct';\n data[7 /* Interface */] = 'symbol-interface';\n data[8 /* Module */] = 'symbol-module';\n data[9 /* Property */] = 'symbol-property';\n data[10 /* Event */] = 'symbol-event';\n data[11 /* Operator */] = 'symbol-operator';\n data[12 /* Unit */] = 'symbol-unit';\n data[13 /* Value */] = 'symbol-value';\n data[14 /* Constant */] = 'symbol-constant';\n data[15 /* Enum */] = 'symbol-enum';\n data[16 /* EnumMember */] = 'symbol-enum-member';\n data[17 /* Keyword */] = 'symbol-keyword';\n data[27 /* Snippet */] = 'symbol-snippet';\n data[18 /* Text */] = 'symbol-text';\n data[19 /* Color */] = 'symbol-color';\n data[20 /* File */] = 'symbol-file';\n data[21 /* Reference */] = 'symbol-reference';\n data[22 /* Customcolor */] = 'symbol-customcolor';\n data[23 /* Folder */] = 'symbol-folder';\n data[24 /* TypeParameter */] = 'symbol-type-parameter';\n data[25 /* User */] = 'account';\n data[26 /* Issue */] = 'issues';\n return function (kind) {\n const name = data[kind];\n let codicon = name && iconRegistry.get(name);\n if (!codicon) {\n console.info('No codicon found for CompletionItemKind ' + kind);\n codicon = Codicon.symbolProperty;\n }\n return codicon.classNames;\n };\n})();\n/**\n * @internal\n */\nexport let completionKindFromString = (function () {\n let data = Object.create(null);\n data['method'] = 0 /* Method */;\n data['function'] = 1 /* Function */;\n data['constructor'] = 2 /* Constructor */;\n data['field'] = 3 /* Field */;\n data['variable'] = 4 /* Variable */;\n data['class'] = 5 /* Class */;\n data['struct'] = 6 /* Struct */;\n data['interface'] = 7 /* Interface */;\n data['module'] = 8 /* Module */;\n data['property'] = 9 /* Property */;\n data['event'] = 10 /* Event */;\n data['operator'] = 11 /* Operator */;\n data['unit'] = 12 /* Unit */;\n data['value'] = 13 /* Value */;\n data['constant'] = 14 /* Constant */;\n data['enum'] = 15 /* Enum */;\n data['enum-member'] = 16 /* EnumMember */;\n data['enumMember'] = 16 /* EnumMember */;\n data['keyword'] = 17 /* Keyword */;\n data['snippet'] = 27 /* Snippet */;\n data['text'] = 18 /* Text */;\n data['color'] = 19 /* Color */;\n data['file'] = 20 /* File */;\n data['reference'] = 21 /* Reference */;\n data['customcolor'] = 22 /* Customcolor */;\n data['folder'] = 23 /* Folder */;\n data['type-parameter'] = 24 /* TypeParameter */;\n data['typeParameter'] = 24 /* TypeParameter */;\n data['account'] = 25 /* User */;\n data['issue'] = 26 /* Issue */;\n return function (value, strict) {\n let res = data[value];\n if (typeof res === 'undefined' && !strict) {\n res = 9 /* Property */;\n }\n return res;\n };\n})();\n/**\n * How an {@link InlineCompletionsProvider inline completion provider} was triggered.\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n /**\n * Completion was triggered automatically while editing.\n * It is sufficient to return a single completion item in this case.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Automatic\"] = 0] = \"Automatic\";\n /**\n * Completion was triggered explicitly by a user gesture.\n * Return multiple completion items to enable cycling through them.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Explicit\"] = 1] = \"Explicit\";\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\nexport var SignatureHelpTriggerKind;\n(function (SignatureHelpTriggerKind) {\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"Invoke\"] = 1] = \"Invoke\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"ContentChange\"] = 3] = \"ContentChange\";\n})(SignatureHelpTriggerKind || (SignatureHelpTriggerKind = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Text\"] = 0] = \"Text\";\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Read\"] = 1] = \"Read\";\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Write\"] = 2] = \"Write\";\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * @internal\n */\nexport function isLocationLink(thing) {\n return thing\n && URI.isUri(thing.uri)\n && Range.isIRange(thing.range)\n && (Range.isIRange(thing.originSelectionRange) || Range.isIRange(thing.targetSelectionRange));\n}\n/**\n * @internal\n */\nexport var SymbolKinds;\n(function (SymbolKinds) {\n const byName = new Map();\n byName.set('file', 0 /* File */);\n byName.set('module', 1 /* Module */);\n byName.set('namespace', 2 /* Namespace */);\n byName.set('package', 3 /* Package */);\n byName.set('class', 4 /* Class */);\n byName.set('method', 5 /* Method */);\n byName.set('property', 6 /* Property */);\n byName.set('field', 7 /* Field */);\n byName.set('constructor', 8 /* Constructor */);\n byName.set('enum', 9 /* Enum */);\n byName.set('interface', 10 /* Interface */);\n byName.set('function', 11 /* Function */);\n byName.set('variable', 12 /* Variable */);\n byName.set('constant', 13 /* Constant */);\n byName.set('string', 14 /* String */);\n byName.set('number', 15 /* Number */);\n byName.set('boolean', 16 /* Boolean */);\n byName.set('array', 17 /* Array */);\n byName.set('object', 18 /* Object */);\n byName.set('key', 19 /* Key */);\n byName.set('null', 20 /* Null */);\n byName.set('enum-member', 21 /* EnumMember */);\n byName.set('struct', 22 /* Struct */);\n byName.set('event', 23 /* Event */);\n byName.set('operator', 24 /* Operator */);\n byName.set('type-parameter', 25 /* TypeParameter */);\n const byKind = new Map();\n byKind.set(0 /* File */, 'file');\n byKind.set(1 /* Module */, 'module');\n byKind.set(2 /* Namespace */, 'namespace');\n byKind.set(3 /* Package */, 'package');\n byKind.set(4 /* Class */, 'class');\n byKind.set(5 /* Method */, 'method');\n byKind.set(6 /* Property */, 'property');\n byKind.set(7 /* Field */, 'field');\n byKind.set(8 /* Constructor */, 'constructor');\n byKind.set(9 /* Enum */, 'enum');\n byKind.set(10 /* Interface */, 'interface');\n byKind.set(11 /* Function */, 'function');\n byKind.set(12 /* Variable */, 'variable');\n byKind.set(13 /* Constant */, 'constant');\n byKind.set(14 /* String */, 'string');\n byKind.set(15 /* Number */, 'number');\n byKind.set(16 /* Boolean */, 'boolean');\n byKind.set(17 /* Array */, 'array');\n byKind.set(18 /* Object */, 'object');\n byKind.set(19 /* Key */, 'key');\n byKind.set(20 /* Null */, 'null');\n byKind.set(21 /* EnumMember */, 'enum-member');\n byKind.set(22 /* Struct */, 'struct');\n byKind.set(23 /* Event */, 'event');\n byKind.set(24 /* Operator */, 'operator');\n byKind.set(25 /* TypeParameter */, 'type-parameter');\n /**\n * @internal\n */\n function fromString(value) {\n return byName.get(value);\n }\n SymbolKinds.fromString = fromString;\n /**\n * @internal\n */\n function toString(kind) {\n return byKind.get(kind);\n }\n SymbolKinds.toString = toString;\n /**\n * @internal\n */\n function toCssClassName(kind, inline) {\n const symbolName = byKind.get(kind);\n let codicon = symbolName && iconRegistry.get('symbol-' + symbolName);\n if (!codicon) {\n console.info('No codicon found for SymbolKind ' + kind);\n codicon = Codicon.symbolProperty;\n }\n return `${inline ? 'inline' : 'block'} ${codicon.classNames}`;\n }\n SymbolKinds.toCssClassName = toCssClassName;\n})(SymbolKinds || (SymbolKinds = {}));\nexport class FoldingRangeKind {\n /**\n * Creates a new {@link FoldingRangeKind}.\n *\n * @param value of the kind.\n */\n constructor(value) {\n this.value = value;\n }\n}\n/**\n * Kind for folding range representing a comment. The value of the kind is 'comment'.\n */\nFoldingRangeKind.Comment = new FoldingRangeKind('comment');\n/**\n * Kind for folding range representing a import. The value of the kind is 'imports'.\n */\nFoldingRangeKind.Imports = new FoldingRangeKind('imports');\n/**\n * Kind for folding range representing regions (for example marked by `#region`, `#endregion`).\n * The value of the kind is 'region'.\n */\nFoldingRangeKind.Region = new FoldingRangeKind('region');\nexport var InlayHintKind;\n(function (InlayHintKind) {\n InlayHintKind[InlayHintKind[\"Other\"] = 0] = \"Other\";\n InlayHintKind[InlayHintKind[\"Type\"] = 1] = \"Type\";\n InlayHintKind[InlayHintKind[\"Parameter\"] = 2] = \"Parameter\";\n})(InlayHintKind || (InlayHintKind = {}));\n// --- feature registries ------\n/**\n * @internal\n */\nexport const ReferenceProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const RenameProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const CompletionProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const InlineCompletionsProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const SignatureHelpProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const HoverProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentSymbolProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentHighlightProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const LinkedEditingRangeProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DefinitionProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DeclarationProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const ImplementationProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const TypeDefinitionProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const CodeLensProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const InlayHintsProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const CodeActionProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentFormattingEditProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentRangeFormattingEditProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const OnTypeFormattingEditProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const LinkProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const ColorProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const SelectionRangeRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const FoldingRangeProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentSemanticTokensProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentRangeSemanticTokensProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const TokenizationRegistry = new TokenizationRegistryImpl();\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ITextModelService = createDecorator('textModelService');\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { CSSIcon } from '../../../base/common/codicons.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport * as platform from '../../registry/common/platform.js';\nimport { ColorScheme } from './theme.js';\nexport const IThemeService = createDecorator('themeService');\nexport var ThemeColor;\n(function (ThemeColor) {\n function isThemeColor(obj) {\n return obj && typeof obj === 'object' && typeof obj.id === 'string';\n }\n ThemeColor.isThemeColor = isThemeColor;\n})(ThemeColor || (ThemeColor = {}));\nexport function themeColorFromId(id) {\n return { id };\n}\nexport var ThemeIcon;\n(function (ThemeIcon) {\n function isThemeIcon(obj) {\n return obj && typeof obj === 'object' && typeof obj.id === 'string' && (typeof obj.color === 'undefined' || ThemeColor.isThemeColor(obj.color));\n }\n ThemeIcon.isThemeIcon = isThemeIcon;\n const _regexFromString = new RegExp(`^\\\\$\\\\((${CSSIcon.iconNameExpression}(?:${CSSIcon.iconModifierExpression})?)\\\\)$`);\n function fromString(str) {\n const match = _regexFromString.exec(str);\n if (!match) {\n return undefined;\n }\n let [, name] = match;\n return { id: name };\n }\n ThemeIcon.fromString = fromString;\n function modify(icon, modifier) {\n let id = icon.id;\n const tildeIndex = id.lastIndexOf('~');\n if (tildeIndex !== -1) {\n id = id.substring(0, tildeIndex);\n }\n if (modifier) {\n id = `${id}~${modifier}`;\n }\n return { id };\n }\n ThemeIcon.modify = modify;\n function isEqual(ti1, ti2) {\n var _a, _b;\n return ti1.id === ti2.id && ((_a = ti1.color) === null || _a === void 0 ? void 0 : _a.id) === ((_b = ti2.color) === null || _b === void 0 ? void 0 : _b.id);\n }\n ThemeIcon.isEqual = isEqual;\n function asThemeIcon(codicon, color) {\n return { id: codicon.id, color: color ? themeColorFromId(color) : undefined };\n }\n ThemeIcon.asThemeIcon = asThemeIcon;\n ThemeIcon.asClassNameArray = CSSIcon.asClassNameArray;\n ThemeIcon.asClassName = CSSIcon.asClassName;\n ThemeIcon.asCSSSelector = CSSIcon.asCSSSelector;\n})(ThemeIcon || (ThemeIcon = {}));\nexport function getThemeTypeSelector(type) {\n switch (type) {\n case ColorScheme.DARK: return 'vs-dark';\n case ColorScheme.HIGH_CONTRAST: return 'hc-black';\n default: return 'vs';\n }\n}\n// static theming participant\nexport const Extensions = {\n ThemingContribution: 'base.contributions.theming'\n};\nclass ThemingRegistry {\n constructor() {\n this.themingParticipants = [];\n this.themingParticipants = [];\n this.onThemingParticipantAddedEmitter = new Emitter();\n }\n onColorThemeChange(participant) {\n this.themingParticipants.push(participant);\n this.onThemingParticipantAddedEmitter.fire(participant);\n return toDisposable(() => {\n const idx = this.themingParticipants.indexOf(participant);\n this.themingParticipants.splice(idx, 1);\n });\n }\n getThemingParticipants() {\n return this.themingParticipants;\n }\n}\nlet themingRegistry = new ThemingRegistry();\nplatform.Registry.add(Extensions.ThemingContribution, themingRegistry);\nexport function registerThemingParticipant(participant) {\n return themingRegistry.onColorThemeChange(participant);\n}\n/**\n * Utility base class for all themable components.\n */\nexport class Themable extends Disposable {\n constructor(themeService) {\n super();\n this.themeService = themeService;\n this.theme = themeService.getColorTheme();\n // Hook up to theme changes\n this._register(this.themeService.onDidColorThemeChange(theme => this.onThemeChange(theme)));\n }\n onThemeChange(theme) {\n this.theme = theme;\n this.updateStyles();\n }\n updateStyles() {\n // Subclasses to override\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { EVENT_KEY_CODE_MAP, KeyCodeUtils } from '../common/keyCodes.js';\nimport { SimpleKeybinding } from '../common/keybindings.js';\nimport * as platform from '../common/platform.js';\nfunction extractKeyCode(e) {\n if (e.charCode) {\n // \"keypress\" events mostly\n let char = String.fromCharCode(e.charCode).toUpperCase();\n return KeyCodeUtils.fromString(char);\n }\n const keyCode = e.keyCode;\n // browser quirks\n if (keyCode === 3) {\n return 7 /* PauseBreak */;\n }\n else if (browser.isFirefox) {\n if (keyCode === 59) {\n return 80 /* Semicolon */;\n }\n else if (keyCode === 107) {\n return 81 /* Equal */;\n }\n else if (keyCode === 109) {\n return 83 /* Minus */;\n }\n else if (platform.isMacintosh && keyCode === 224) {\n return 57 /* Meta */;\n }\n }\n else if (browser.isWebKit) {\n if (keyCode === 91) {\n return 57 /* Meta */;\n }\n else if (platform.isMacintosh && keyCode === 93) {\n // the two meta keys in the Mac have different key codes (91 and 93)\n return 57 /* Meta */;\n }\n else if (!platform.isMacintosh && keyCode === 92) {\n return 57 /* Meta */;\n }\n }\n // cross browser keycodes:\n return EVENT_KEY_CODE_MAP[keyCode] || 0 /* Unknown */;\n}\nconst ctrlKeyMod = (platform.isMacintosh ? 256 /* WinCtrl */ : 2048 /* CtrlCmd */);\nconst altKeyMod = 512 /* Alt */;\nconst shiftKeyMod = 1024 /* Shift */;\nconst metaKeyMod = (platform.isMacintosh ? 2048 /* CtrlCmd */ : 256 /* WinCtrl */);\nexport class StandardKeyboardEvent {\n constructor(source) {\n this._standardKeyboardEventBrand = true;\n let e = source;\n this.browserEvent = e;\n this.target = e.target;\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n this.keyCode = extractKeyCode(e);\n this.code = e.code;\n // console.info(e.type + \": keyCode: \" + e.keyCode + \", which: \" + e.which + \", charCode: \" + e.charCode + \", detail: \" + e.detail + \" ====> \" + this.keyCode + ' -- ' + KeyCode[this.keyCode]);\n this.ctrlKey = this.ctrlKey || this.keyCode === 5 /* Ctrl */;\n this.altKey = this.altKey || this.keyCode === 6 /* Alt */;\n this.shiftKey = this.shiftKey || this.keyCode === 4 /* Shift */;\n this.metaKey = this.metaKey || this.keyCode === 57 /* Meta */;\n this._asKeybinding = this._computeKeybinding();\n this._asRuntimeKeybinding = this._computeRuntimeKeybinding();\n // console.log(`code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`);\n }\n preventDefault() {\n if (this.browserEvent && this.browserEvent.preventDefault) {\n this.browserEvent.preventDefault();\n }\n }\n stopPropagation() {\n if (this.browserEvent && this.browserEvent.stopPropagation) {\n this.browserEvent.stopPropagation();\n }\n }\n toKeybinding() {\n return this._asRuntimeKeybinding;\n }\n equals(other) {\n return this._asKeybinding === other;\n }\n _computeKeybinding() {\n let key = 0 /* Unknown */;\n if (this.keyCode !== 5 /* Ctrl */ && this.keyCode !== 4 /* Shift */ && this.keyCode !== 6 /* Alt */ && this.keyCode !== 57 /* Meta */) {\n key = this.keyCode;\n }\n let result = 0;\n if (this.ctrlKey) {\n result |= ctrlKeyMod;\n }\n if (this.altKey) {\n result |= altKeyMod;\n }\n if (this.shiftKey) {\n result |= shiftKeyMod;\n }\n if (this.metaKey) {\n result |= metaKeyMod;\n }\n result |= key;\n return result;\n }\n _computeRuntimeKeybinding() {\n let key = 0 /* Unknown */;\n if (this.keyCode !== 5 /* Ctrl */ && this.keyCode !== 4 /* Shift */ && this.keyCode !== 6 /* Alt */ && this.keyCode !== 57 /* Meta */) {\n key = this.keyCode;\n }\n return new SimpleKeybinding(this.ctrlKey, this.shiftKey, this.altKey, this.metaKey, key);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { parse } from './glob.js';\nimport { Schemas } from './network.js';\nimport { basename, posix } from './path.js';\nimport { DataUri } from './resources.js';\nimport { startsWithUTF8BOM } from './strings.js';\nexport var Mimes;\n(function (Mimes) {\n Mimes.text = 'text/plain';\n Mimes.binary = 'application/octet-stream';\n Mimes.unknown = 'application/unknown';\n Mimes.markdown = 'text/markdown';\n Mimes.latex = 'text/latex';\n})(Mimes || (Mimes = {}));\nlet registeredAssociations = [];\nlet nonUserRegisteredAssociations = [];\nlet userRegisteredAssociations = [];\n/**\n * Associate a text mime to the registry.\n */\nexport function registerTextMime(association, warnOnOverwrite = false) {\n // Register\n const associationItem = toTextMimeAssociationItem(association);\n registeredAssociations.push(associationItem);\n if (!associationItem.userConfigured) {\n nonUserRegisteredAssociations.push(associationItem);\n }\n else {\n userRegisteredAssociations.push(associationItem);\n }\n // Check for conflicts unless this is a user configured association\n if (warnOnOverwrite && !associationItem.userConfigured) {\n registeredAssociations.forEach(a => {\n if (a.mime === associationItem.mime || a.userConfigured) {\n return; // same mime or userConfigured is ok\n }\n if (associationItem.extension && a.extension === associationItem.extension) {\n console.warn(`Overwriting extension <<${associationItem.extension}>> to now point to mime <<${associationItem.mime}>>`);\n }\n if (associationItem.filename && a.filename === associationItem.filename) {\n console.warn(`Overwriting filename <<${associationItem.filename}>> to now point to mime <<${associationItem.mime}>>`);\n }\n if (associationItem.filepattern && a.filepattern === associationItem.filepattern) {\n console.warn(`Overwriting filepattern <<${associationItem.filepattern}>> to now point to mime <<${associationItem.mime}>>`);\n }\n if (associationItem.firstline && a.firstline === associationItem.firstline) {\n console.warn(`Overwriting firstline <<${associationItem.firstline}>> to now point to mime <<${associationItem.mime}>>`);\n }\n });\n }\n}\nfunction toTextMimeAssociationItem(association) {\n return {\n id: association.id,\n mime: association.mime,\n filename: association.filename,\n extension: association.extension,\n filepattern: association.filepattern,\n firstline: association.firstline,\n userConfigured: association.userConfigured,\n filenameLowercase: association.filename ? association.filename.toLowerCase() : undefined,\n extensionLowercase: association.extension ? association.extension.toLowerCase() : undefined,\n filepatternLowercase: association.filepattern ? parse(association.filepattern.toLowerCase()) : undefined,\n filepatternOnPath: association.filepattern ? association.filepattern.indexOf(posix.sep) >= 0 : false\n };\n}\n/**\n * Clear text mimes from the registry.\n */\nexport function clearTextMimes(onlyUserConfigured) {\n if (!onlyUserConfigured) {\n registeredAssociations = [];\n nonUserRegisteredAssociations = [];\n userRegisteredAssociations = [];\n }\n else {\n registeredAssociations = registeredAssociations.filter(a => !a.userConfigured);\n userRegisteredAssociations = [];\n }\n}\n/**\n * Given a file, return the best matching mime type for it\n */\nexport function guessMimeTypes(resource, firstLine) {\n let path;\n if (resource) {\n switch (resource.scheme) {\n case Schemas.file:\n path = resource.fsPath;\n break;\n case Schemas.data:\n const metadata = DataUri.parseMetaData(resource);\n path = metadata.get(DataUri.META_DATA_LABEL);\n break;\n default:\n path = resource.path;\n }\n }\n if (!path) {\n return [Mimes.unknown];\n }\n path = path.toLowerCase();\n const filename = basename(path);\n // 1.) User configured mappings have highest priority\n const configuredMime = guessMimeTypeByPath(path, filename, userRegisteredAssociations);\n if (configuredMime) {\n return [configuredMime, Mimes.text];\n }\n // 2.) Registered mappings have middle priority\n const registeredMime = guessMimeTypeByPath(path, filename, nonUserRegisteredAssociations);\n if (registeredMime) {\n return [registeredMime, Mimes.text];\n }\n // 3.) Firstline has lowest priority\n if (firstLine) {\n const firstlineMime = guessMimeTypeByFirstline(firstLine);\n if (firstlineMime) {\n return [firstlineMime, Mimes.text];\n }\n }\n return [Mimes.unknown];\n}\nfunction guessMimeTypeByPath(path, filename, associations) {\n var _a;\n let filenameMatch = null;\n let patternMatch = null;\n let extensionMatch = null;\n // We want to prioritize associations based on the order they are registered so that the last registered\n // association wins over all other. This is for https://github.com/microsoft/vscode/issues/20074\n for (let i = associations.length - 1; i >= 0; i--) {\n const association = associations[i];\n // First exact name match\n if (filename === association.filenameLowercase) {\n filenameMatch = association;\n break; // take it!\n }\n // Longest pattern match\n if (association.filepattern) {\n if (!patternMatch || association.filepattern.length > patternMatch.filepattern.length) {\n const target = association.filepatternOnPath ? path : filename; // match on full path if pattern contains path separator\n if ((_a = association.filepatternLowercase) === null || _a === void 0 ? void 0 : _a.call(association, target)) {\n patternMatch = association;\n }\n }\n }\n // Longest extension match\n if (association.extension) {\n if (!extensionMatch || association.extension.length > extensionMatch.extension.length) {\n if (filename.endsWith(association.extensionLowercase)) {\n extensionMatch = association;\n }\n }\n }\n }\n // 1.) Exact name match has second highest priority\n if (filenameMatch) {\n return filenameMatch.mime;\n }\n // 2.) Match on pattern\n if (patternMatch) {\n return patternMatch.mime;\n }\n // 3.) Match on extension comes next\n if (extensionMatch) {\n return extensionMatch.mime;\n }\n return null;\n}\nfunction guessMimeTypeByFirstline(firstLine) {\n if (startsWithUTF8BOM(firstLine)) {\n firstLine = firstLine.substr(1);\n }\n if (firstLine.length > 0) {\n // We want to prioritize associations based on the order they are registered so that the last registered\n // association wins over all other. This is for https://github.com/microsoft/vscode/issues/20074\n for (let i = registeredAssociations.length - 1; i >= 0; i--) {\n const association = registeredAssociations[i];\n if (!association.firstline) {\n continue;\n }\n const matches = firstLine.match(association.firstline);\n if (matches && matches.length > 0) {\n return association.mime;\n }\n }\n }\n return null;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport * as Codicons from '../../../base/common/codicons.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { localize } from '../../../nls.js';\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\nimport * as platform from '../../registry/common/platform.js';\nimport { ThemeIcon } from './themeService.js';\n// ------ API types\n// icon registry\nexport const Extensions = {\n IconContribution: 'base.contributions.icons'\n};\nclass IconRegistry {\n constructor() {\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this.iconSchema = {\n definitions: {\n icons: {\n type: 'object',\n properties: {\n fontId: { type: 'string', description: localize('iconDefintion.fontId', 'The id of the font to use. If not set, the font that is defined first is used.') },\n fontCharacter: { type: 'string', description: localize('iconDefintion.fontCharacter', 'The font character associated with the icon definition.') }\n },\n additionalProperties: false,\n defaultSnippets: [{ body: { fontCharacter: '\\\\\\\\e030' } }]\n }\n },\n type: 'object',\n properties: {}\n };\n this.iconReferenceSchema = { type: 'string', pattern: `^${Codicons.CSSIcon.iconNameExpression}$`, enum: [], enumDescriptions: [] };\n this.iconsById = {};\n this.iconFontsById = {};\n }\n registerIcon(id, defaults, description, deprecationMessage) {\n const existing = this.iconsById[id];\n if (existing) {\n if (description && !existing.description) {\n existing.description = description;\n this.iconSchema.properties[id].markdownDescription = `${description} $(${id})`;\n const enumIndex = this.iconReferenceSchema.enum.indexOf(id);\n if (enumIndex !== -1) {\n this.iconReferenceSchema.enumDescriptions[enumIndex] = description;\n }\n this._onDidChange.fire();\n }\n return existing;\n }\n let iconContribution = { id, description, defaults, deprecationMessage };\n this.iconsById[id] = iconContribution;\n let propertySchema = { $ref: '#/definitions/icons' };\n if (deprecationMessage) {\n propertySchema.deprecationMessage = deprecationMessage;\n }\n if (description) {\n propertySchema.markdownDescription = `${description}: $(${id})`;\n }\n this.iconSchema.properties[id] = propertySchema;\n this.iconReferenceSchema.enum.push(id);\n this.iconReferenceSchema.enumDescriptions.push(description || '');\n this._onDidChange.fire();\n return { id };\n }\n getIcons() {\n return Object.keys(this.iconsById).map(id => this.iconsById[id]);\n }\n getIcon(id) {\n return this.iconsById[id];\n }\n getIconSchema() {\n return this.iconSchema;\n }\n getIconFont(id) {\n return this.iconFontsById[id];\n }\n toString() {\n const sorter = (i1, i2) => {\n return i1.id.localeCompare(i2.id);\n };\n const classNames = (i) => {\n while (ThemeIcon.isThemeIcon(i.defaults)) {\n i = this.iconsById[i.defaults.id];\n }\n return `codicon codicon-${i ? i.id : ''}`;\n };\n let reference = [];\n reference.push(`| preview | identifier | default codicon ID | description`);\n reference.push(`| ----------- | --------------------------------- | --------------------------------- | --------------------------------- |`);\n const contributions = Object.keys(this.iconsById).map(key => this.iconsById[key]);\n for (const i of contributions.filter(i => !!i.description).sort(sorter)) {\n reference.push(`||${i.id}|${ThemeIcon.isThemeIcon(i.defaults) ? i.defaults.id : i.id}|${i.description || ''}|`);\n }\n reference.push(`| preview | identifier `);\n reference.push(`| ----------- | --------------------------------- |`);\n for (const i of contributions.filter(i => !ThemeIcon.isThemeIcon(i.defaults)).sort(sorter)) {\n reference.push(`||${i.id}|`);\n }\n return reference.join('\\n');\n }\n}\nconst iconRegistry = new IconRegistry();\nplatform.Registry.add(Extensions.IconContribution, iconRegistry);\nexport function registerIcon(id, defaults, description, deprecationMessage) {\n return iconRegistry.registerIcon(id, defaults, description, deprecationMessage);\n}\nexport function getIconRegistry() {\n return iconRegistry;\n}\nfunction initialize() {\n for (const icon of Codicons.iconRegistry.all) {\n iconRegistry.registerIcon(icon.id, icon.definition, icon.description);\n }\n Codicons.iconRegistry.onDidRegister(icon => iconRegistry.registerIcon(icon.id, icon.definition, icon.description));\n}\ninitialize();\nexport const iconsSchemaId = 'vscode://schemas/icons';\nlet schemaRegistry = platform.Registry.as(JSONExtensions.JSONContribution);\nschemaRegistry.registerSchema(iconsSchemaId, iconRegistry.getIconSchema());\nconst delayer = new RunOnceScheduler(() => schemaRegistry.notifySchemaChanged(iconsSchemaId), 200);\niconRegistry.onDidChange(() => {\n if (!delayer.isScheduled()) {\n delayer.schedule();\n }\n});\n//setTimeout(_ => console.log(iconRegistry.toString()), 5000);\n// common icons\nexport const widgetClose = registerIcon('widget-close', Codicons.Codicon.close, localize('widgetClose', 'Icon for the close action in widgets.'));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../nls.js';\nimport { RawContextKey } from '../../platform/contextkey/common/contextkey.js';\nexport var EditorContextKeys;\n(function (EditorContextKeys) {\n EditorContextKeys.editorSimpleInput = new RawContextKey('editorSimpleInput', false, true);\n /**\n * A context key that is set when the editor's text has focus (cursor is blinking).\n * Is false when focus is in simple editor widgets (repl input, scm commit input).\n */\n EditorContextKeys.editorTextFocus = new RawContextKey('editorTextFocus', false, nls.localize('editorTextFocus', \"Whether the editor text has focus (cursor is blinking)\"));\n /**\n * A context key that is set when the editor's text or an editor's widget has focus.\n */\n EditorContextKeys.focus = new RawContextKey('editorFocus', false, nls.localize('editorFocus', \"Whether the editor or an editor widget has focus (e.g. focus is in the find widget)\"));\n /**\n * A context key that is set when any editor input has focus (regular editor, repl input...).\n */\n EditorContextKeys.textInputFocus = new RawContextKey('textInputFocus', false, nls.localize('textInputFocus', \"Whether an editor or a rich text input has focus (cursor is blinking)\"));\n EditorContextKeys.readOnly = new RawContextKey('editorReadonly', false, nls.localize('editorReadonly', \"Whether the editor is read only\"));\n EditorContextKeys.inDiffEditor = new RawContextKey('inDiffEditor', false, nls.localize('inDiffEditor', \"Whether the context is a diff editor\"));\n EditorContextKeys.columnSelection = new RawContextKey('editorColumnSelection', false, nls.localize('editorColumnSelection', \"Whether `editor.columnSelection` is enabled\"));\n EditorContextKeys.writable = EditorContextKeys.readOnly.toNegated();\n EditorContextKeys.hasNonEmptySelection = new RawContextKey('editorHasSelection', false, nls.localize('editorHasSelection', \"Whether the editor has text selected\"));\n EditorContextKeys.hasOnlyEmptySelection = EditorContextKeys.hasNonEmptySelection.toNegated();\n EditorContextKeys.hasMultipleSelections = new RawContextKey('editorHasMultipleSelections', false, nls.localize('editorHasMultipleSelections', \"Whether the editor has multiple selections\"));\n EditorContextKeys.hasSingleSelection = EditorContextKeys.hasMultipleSelections.toNegated();\n EditorContextKeys.tabMovesFocus = new RawContextKey('editorTabMovesFocus', false, nls.localize('editorTabMovesFocus', \"Whether `Tab` will move focus out of the editor\"));\n EditorContextKeys.tabDoesNotMoveFocus = EditorContextKeys.tabMovesFocus.toNegated();\n EditorContextKeys.isInWalkThroughSnippet = new RawContextKey('isInEmbeddedEditor', false, true);\n EditorContextKeys.canUndo = new RawContextKey('canUndo', false, true);\n EditorContextKeys.canRedo = new RawContextKey('canRedo', false, true);\n EditorContextKeys.hoverVisible = new RawContextKey('editorHoverVisible', false, nls.localize('editorHoverVisible', \"Whether the editor hover is visible\"));\n /**\n * A context key that is set when an editor is part of a larger editor, like notebooks or\n * (future) a diff editor\n */\n EditorContextKeys.inCompositeEditor = new RawContextKey('inCompositeEditor', undefined, nls.localize('inCompositeEditor', \"Whether the editor is part of a larger editor (e.g. notebooks)\"));\n EditorContextKeys.notInCompositeEditor = EditorContextKeys.inCompositeEditor.toNegated();\n // -- mode context keys\n EditorContextKeys.languageId = new RawContextKey('editorLangId', '', nls.localize('editorLangId', \"The language identifier of the editor\"));\n EditorContextKeys.hasCompletionItemProvider = new RawContextKey('editorHasCompletionItemProvider', false, nls.localize('editorHasCompletionItemProvider', \"Whether the editor has a completion item provider\"));\n EditorContextKeys.hasCodeActionsProvider = new RawContextKey('editorHasCodeActionsProvider', false, nls.localize('editorHasCodeActionsProvider', \"Whether the editor has a code actions provider\"));\n EditorContextKeys.hasCodeLensProvider = new RawContextKey('editorHasCodeLensProvider', false, nls.localize('editorHasCodeLensProvider', \"Whether the editor has a code lens provider\"));\n EditorContextKeys.hasDefinitionProvider = new RawContextKey('editorHasDefinitionProvider', false, nls.localize('editorHasDefinitionProvider', \"Whether the editor has a definition provider\"));\n EditorContextKeys.hasDeclarationProvider = new RawContextKey('editorHasDeclarationProvider', false, nls.localize('editorHasDeclarationProvider', \"Whether the editor has a declaration provider\"));\n EditorContextKeys.hasImplementationProvider = new RawContextKey('editorHasImplementationProvider', false, nls.localize('editorHasImplementationProvider', \"Whether the editor has an implementation provider\"));\n EditorContextKeys.hasTypeDefinitionProvider = new RawContextKey('editorHasTypeDefinitionProvider', false, nls.localize('editorHasTypeDefinitionProvider', \"Whether the editor has a type definition provider\"));\n EditorContextKeys.hasHoverProvider = new RawContextKey('editorHasHoverProvider', false, nls.localize('editorHasHoverProvider', \"Whether the editor has a hover provider\"));\n EditorContextKeys.hasDocumentHighlightProvider = new RawContextKey('editorHasDocumentHighlightProvider', false, nls.localize('editorHasDocumentHighlightProvider', \"Whether the editor has a document highlight provider\"));\n EditorContextKeys.hasDocumentSymbolProvider = new RawContextKey('editorHasDocumentSymbolProvider', false, nls.localize('editorHasDocumentSymbolProvider', \"Whether the editor has a document symbol provider\"));\n EditorContextKeys.hasReferenceProvider = new RawContextKey('editorHasReferenceProvider', false, nls.localize('editorHasReferenceProvider', \"Whether the editor has a reference provider\"));\n EditorContextKeys.hasRenameProvider = new RawContextKey('editorHasRenameProvider', false, nls.localize('editorHasRenameProvider', \"Whether the editor has a rename provider\"));\n EditorContextKeys.hasSignatureHelpProvider = new RawContextKey('editorHasSignatureHelpProvider', false, nls.localize('editorHasSignatureHelpProvider', \"Whether the editor has a signature help provider\"));\n EditorContextKeys.hasInlayHintsProvider = new RawContextKey('editorHasInlayHintsProvider', false, nls.localize('editorHasInlayHintsProvider', \"Whether the editor has an inline hints provider\"));\n // -- mode context keys: formatting\n EditorContextKeys.hasDocumentFormattingProvider = new RawContextKey('editorHasDocumentFormattingProvider', false, nls.localize('editorHasDocumentFormattingProvider', \"Whether the editor has a document formatting provider\"));\n EditorContextKeys.hasDocumentSelectionFormattingProvider = new RawContextKey('editorHasDocumentSelectionFormattingProvider', false, nls.localize('editorHasDocumentSelectionFormattingProvider', \"Whether the editor has a document selection formatting provider\"));\n EditorContextKeys.hasMultipleDocumentFormattingProvider = new RawContextKey('editorHasMultipleDocumentFormattingProvider', false, nls.localize('editorHasMultipleDocumentFormattingProvider', \"Whether the editor has multiple document formatting providers\"));\n EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider = new RawContextKey('editorHasMultipleDocumentSelectionFormattingProvider', false, nls.localize('editorHasMultipleDocumentSelectionFormattingProvider', \"Whether the editor has multiple document selection formatting providers\"));\n})(EditorContextKeys || (EditorContextKeys = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { globals, isMacintosh, isWindows, setImmediate } from './platform.js';\nlet safeProcess;\n// Native sandbox environment\nif (typeof globals.vscode !== 'undefined' && typeof globals.vscode.process !== 'undefined') {\n const sandboxProcess = globals.vscode.process;\n safeProcess = {\n get platform() { return sandboxProcess.platform; },\n get arch() { return sandboxProcess.arch; },\n get env() { return sandboxProcess.env; },\n cwd() { return sandboxProcess.cwd(); },\n nextTick(callback) { return setImmediate(callback); }\n };\n}\n// Native node.js environment\nelse if (typeof process !== 'undefined') {\n safeProcess = {\n get platform() { return process.platform; },\n get arch() { return process.arch; },\n get env() { return process.env; },\n cwd() { return process.env['VSCODE_CWD'] || process.cwd(); },\n nextTick(callback) { return process.nextTick(callback); }\n };\n}\n// Web environment\nelse {\n safeProcess = {\n // Supported\n get platform() { return isWindows ? 'win32' : isMacintosh ? 'darwin' : 'linux'; },\n get arch() { return undefined; /* arch is undefined in web */ },\n nextTick(callback) { return setImmediate(callback); },\n // Unsupported\n get env() { return {}; },\n cwd() { return '/'; }\n };\n}\n/**\n * Provides safe access to the `cwd` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `/`.\n */\nexport const cwd = safeProcess.cwd;\n/**\n * Provides safe access to the `env` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `{}`.\n */\nexport const env = safeProcess.env;\n/**\n * Provides safe access to the `platform` property in node.js, sandboxed or web\n * environments.\n */\nexport const platform = safeProcess.platform;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction roundFloat(number, decimalPoints) {\n const decimal = Math.pow(10, decimalPoints);\n return Math.round(number * decimal) / decimal;\n}\nexport class RGBA {\n constructor(r, g, b, a = 1) {\n this._rgbaBrand = undefined;\n this.r = Math.min(255, Math.max(0, r)) | 0;\n this.g = Math.min(255, Math.max(0, g)) | 0;\n this.b = Math.min(255, Math.max(0, b)) | 0;\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n }\n static equals(a, b) {\n return a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;\n }\n}\nexport class HSLA {\n constructor(h, s, l, a) {\n this._hslaBrand = undefined;\n this.h = Math.max(Math.min(360, h), 0) | 0;\n this.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\n this.l = roundFloat(Math.max(Math.min(1, l), 0), 3);\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n }\n static equals(a, b) {\n return a.h === b.h && a.s === b.s && a.l === b.l && a.a === b.a;\n }\n /**\n * Converts an RGB color value to HSL. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h in the set [0, 360], s, and l in the set [0, 1].\n */\n static fromRGBA(rgba) {\n const r = rgba.r / 255;\n const g = rgba.g / 255;\n const b = rgba.b / 255;\n const a = rgba.a;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (min + max) / 2;\n const chroma = max - min;\n if (chroma > 0) {\n s = Math.min((l <= 0.5 ? chroma / (2 * l) : chroma / (2 - (2 * l))), 1);\n switch (max) {\n case r:\n h = (g - b) / chroma + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / chroma + 2;\n break;\n case b:\n h = (r - g) / chroma + 4;\n break;\n }\n h *= 60;\n h = Math.round(h);\n }\n return new HSLA(h, s, l, a);\n }\n static _hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h in the set [0, 360] s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n */\n static toRGBA(hsla) {\n const h = hsla.h / 360;\n const { s, l, a } = hsla;\n let r, g, b;\n if (s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = HSLA._hue2rgb(p, q, h + 1 / 3);\n g = HSLA._hue2rgb(p, q, h);\n b = HSLA._hue2rgb(p, q, h - 1 / 3);\n }\n return new RGBA(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), a);\n }\n}\nexport class HSVA {\n constructor(h, s, v, a) {\n this._hsvaBrand = undefined;\n this.h = Math.max(Math.min(360, h), 0) | 0;\n this.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\n this.v = roundFloat(Math.max(Math.min(1, v), 0), 3);\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n }\n static equals(a, b) {\n return a.h === b.h && a.s === b.s && a.v === b.v && a.a === b.a;\n }\n // from http://www.rapidtables.com/convert/color/rgb-to-hsv.htm\n static fromRGBA(rgba) {\n const r = rgba.r / 255;\n const g = rgba.g / 255;\n const b = rgba.b / 255;\n const cmax = Math.max(r, g, b);\n const cmin = Math.min(r, g, b);\n const delta = cmax - cmin;\n const s = cmax === 0 ? 0 : (delta / cmax);\n let m;\n if (delta === 0) {\n m = 0;\n }\n else if (cmax === r) {\n m = ((((g - b) / delta) % 6) + 6) % 6;\n }\n else if (cmax === g) {\n m = ((b - r) / delta) + 2;\n }\n else {\n m = ((r - g) / delta) + 4;\n }\n return new HSVA(Math.round(m * 60), s, cmax, rgba.a);\n }\n // from http://www.rapidtables.com/convert/color/hsv-to-rgb.htm\n static toRGBA(hsva) {\n const { h, s, v, a } = hsva;\n const c = v * s;\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n const m = v - c;\n let [r, g, b] = [0, 0, 0];\n if (h < 60) {\n r = c;\n g = x;\n }\n else if (h < 120) {\n r = x;\n g = c;\n }\n else if (h < 180) {\n g = c;\n b = x;\n }\n else if (h < 240) {\n g = x;\n b = c;\n }\n else if (h < 300) {\n r = x;\n b = c;\n }\n else if (h <= 360) {\n r = c;\n b = x;\n }\n r = Math.round((r + m) * 255);\n g = Math.round((g + m) * 255);\n b = Math.round((b + m) * 255);\n return new RGBA(r, g, b, a);\n }\n}\nexport class Color {\n constructor(arg) {\n if (!arg) {\n throw new Error('Color needs a value');\n }\n else if (arg instanceof RGBA) {\n this.rgba = arg;\n }\n else if (arg instanceof HSLA) {\n this._hsla = arg;\n this.rgba = HSLA.toRGBA(arg);\n }\n else if (arg instanceof HSVA) {\n this._hsva = arg;\n this.rgba = HSVA.toRGBA(arg);\n }\n else {\n throw new Error('Invalid color ctor argument');\n }\n }\n static fromHex(hex) {\n return Color.Format.CSS.parseHex(hex) || Color.red;\n }\n get hsla() {\n if (this._hsla) {\n return this._hsla;\n }\n else {\n return HSLA.fromRGBA(this.rgba);\n }\n }\n get hsva() {\n if (this._hsva) {\n return this._hsva;\n }\n return HSVA.fromRGBA(this.rgba);\n }\n equals(other) {\n return !!other && RGBA.equals(this.rgba, other.rgba) && HSLA.equals(this.hsla, other.hsla) && HSVA.equals(this.hsva, other.hsva);\n }\n /**\n * http://www.w3.org/TR/WCAG20/#relativeluminancedef\n * Returns the number in the set [0, 1]. O => Darkest Black. 1 => Lightest white.\n */\n getRelativeLuminance() {\n const R = Color._relativeLuminanceForComponent(this.rgba.r);\n const G = Color._relativeLuminanceForComponent(this.rgba.g);\n const B = Color._relativeLuminanceForComponent(this.rgba.b);\n const luminance = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n return roundFloat(luminance, 4);\n }\n static _relativeLuminanceForComponent(color) {\n const c = color / 255;\n return (c <= 0.03928) ? c / 12.92 : Math.pow(((c + 0.055) / 1.055), 2.4);\n }\n /**\n *\thttp://24ways.org/2010/calculating-color-contrast\n * Return 'true' if lighter color otherwise 'false'\n */\n isLighter() {\n const yiq = (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1000;\n return yiq >= 128;\n }\n isLighterThan(another) {\n const lum1 = this.getRelativeLuminance();\n const lum2 = another.getRelativeLuminance();\n return lum1 > lum2;\n }\n isDarkerThan(another) {\n const lum1 = this.getRelativeLuminance();\n const lum2 = another.getRelativeLuminance();\n return lum1 < lum2;\n }\n lighten(factor) {\n return new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l + this.hsla.l * factor, this.hsla.a));\n }\n darken(factor) {\n return new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l - this.hsla.l * factor, this.hsla.a));\n }\n transparent(factor) {\n const { r, g, b, a } = this.rgba;\n return new Color(new RGBA(r, g, b, a * factor));\n }\n isTransparent() {\n return this.rgba.a === 0;\n }\n isOpaque() {\n return this.rgba.a === 1;\n }\n opposite() {\n return new Color(new RGBA(255 - this.rgba.r, 255 - this.rgba.g, 255 - this.rgba.b, this.rgba.a));\n }\n toString() {\n if (!this._toString) {\n this._toString = Color.Format.CSS.format(this);\n }\n return this._toString;\n }\n static getLighterColor(of, relative, factor) {\n if (of.isLighterThan(relative)) {\n return of;\n }\n factor = factor ? factor : 0.5;\n const lum1 = of.getRelativeLuminance();\n const lum2 = relative.getRelativeLuminance();\n factor = factor * (lum2 - lum1) / lum2;\n return of.lighten(factor);\n }\n static getDarkerColor(of, relative, factor) {\n if (of.isDarkerThan(relative)) {\n return of;\n }\n factor = factor ? factor : 0.5;\n const lum1 = of.getRelativeLuminance();\n const lum2 = relative.getRelativeLuminance();\n factor = factor * (lum1 - lum2) / lum1;\n return of.darken(factor);\n }\n}\nColor.white = new Color(new RGBA(255, 255, 255, 1));\nColor.black = new Color(new RGBA(0, 0, 0, 1));\nColor.red = new Color(new RGBA(255, 0, 0, 1));\nColor.blue = new Color(new RGBA(0, 0, 255, 1));\nColor.cyan = new Color(new RGBA(0, 255, 255, 1));\nColor.lightgrey = new Color(new RGBA(211, 211, 211, 1));\nColor.transparent = new Color(new RGBA(0, 0, 0, 0));\n(function (Color) {\n let Format;\n (function (Format) {\n let CSS;\n (function (CSS) {\n function formatRGB(color) {\n if (color.rgba.a === 1) {\n return `rgb(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b})`;\n }\n return Color.Format.CSS.formatRGBA(color);\n }\n CSS.formatRGB = formatRGB;\n function formatRGBA(color) {\n return `rgba(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b}, ${+(color.rgba.a).toFixed(2)})`;\n }\n CSS.formatRGBA = formatRGBA;\n function formatHSL(color) {\n if (color.hsla.a === 1) {\n return `hsl(${color.hsla.h}, ${(color.hsla.s * 100).toFixed(2)}%, ${(color.hsla.l * 100).toFixed(2)}%)`;\n }\n return Color.Format.CSS.formatHSLA(color);\n }\n CSS.formatHSL = formatHSL;\n function formatHSLA(color) {\n return `hsla(${color.hsla.h}, ${(color.hsla.s * 100).toFixed(2)}%, ${(color.hsla.l * 100).toFixed(2)}%, ${color.hsla.a.toFixed(2)})`;\n }\n CSS.formatHSLA = formatHSLA;\n function _toTwoDigitHex(n) {\n const r = n.toString(16);\n return r.length !== 2 ? '0' + r : r;\n }\n /**\n * Formats the color as #RRGGBB\n */\n function formatHex(color) {\n return `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}`;\n }\n CSS.formatHex = formatHex;\n /**\n * Formats the color as #RRGGBBAA\n * If 'compact' is set, colors without transparancy will be printed as #RRGGBB\n */\n function formatHexA(color, compact = false) {\n if (compact && color.rgba.a === 1) {\n return Color.Format.CSS.formatHex(color);\n }\n return `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}${_toTwoDigitHex(Math.round(color.rgba.a * 255))}`;\n }\n CSS.formatHexA = formatHexA;\n /**\n * The default format will use HEX if opaque and RGBA otherwise.\n */\n function format(color) {\n if (color.isOpaque()) {\n return Color.Format.CSS.formatHex(color);\n }\n return Color.Format.CSS.formatRGBA(color);\n }\n CSS.format = format;\n /**\n * Converts an Hex color value to a Color.\n * returns r, g, and b are contained in the set [0, 255]\n * @param hex string (#RGB, #RGBA, #RRGGBB or #RRGGBBAA).\n */\n function parseHex(hex) {\n const length = hex.length;\n if (length === 0) {\n // Invalid color\n return null;\n }\n if (hex.charCodeAt(0) !== 35 /* Hash */) {\n // Does not begin with a #\n return null;\n }\n if (length === 7) {\n // #RRGGBB format\n const r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\n const g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\n const b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\n return new Color(new RGBA(r, g, b, 1));\n }\n if (length === 9) {\n // #RRGGBBAA format\n const r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\n const g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\n const b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\n const a = 16 * _parseHexDigit(hex.charCodeAt(7)) + _parseHexDigit(hex.charCodeAt(8));\n return new Color(new RGBA(r, g, b, a / 255));\n }\n if (length === 4) {\n // #RGB format\n const r = _parseHexDigit(hex.charCodeAt(1));\n const g = _parseHexDigit(hex.charCodeAt(2));\n const b = _parseHexDigit(hex.charCodeAt(3));\n return new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b));\n }\n if (length === 5) {\n // #RGBA format\n const r = _parseHexDigit(hex.charCodeAt(1));\n const g = _parseHexDigit(hex.charCodeAt(2));\n const b = _parseHexDigit(hex.charCodeAt(3));\n const a = _parseHexDigit(hex.charCodeAt(4));\n return new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b, (16 * a + a) / 255));\n }\n // Invalid color\n return null;\n }\n CSS.parseHex = parseHex;\n function _parseHexDigit(charCode) {\n switch (charCode) {\n case 48 /* Digit0 */: return 0;\n case 49 /* Digit1 */: return 1;\n case 50 /* Digit2 */: return 2;\n case 51 /* Digit3 */: return 3;\n case 52 /* Digit4 */: return 4;\n case 53 /* Digit5 */: return 5;\n case 54 /* Digit6 */: return 6;\n case 55 /* Digit7 */: return 7;\n case 56 /* Digit8 */: return 8;\n case 57 /* Digit9 */: return 9;\n case 97 /* a */: return 10;\n case 65 /* A */: return 10;\n case 98 /* b */: return 11;\n case 66 /* B */: return 11;\n case 99 /* c */: return 12;\n case 67 /* C */: return 12;\n case 100 /* d */: return 13;\n case 68 /* D */: return 13;\n case 101 /* e */: return 14;\n case 69 /* E */: return 14;\n case 102 /* f */: return 15;\n case 70 /* F */: return 15;\n }\n return 0;\n }\n })(CSS = Format.CSS || (Format.CSS = {}));\n })(Format = Color.Format || (Color.Format = {}));\n})(Color || (Color = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport const USUAL_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?';\n/**\n * Create a word definition regular expression based on default word separators.\n * Optionally provide allowed separators that should be included in words.\n *\n * The default would look like this:\n * /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g\n */\nfunction createWordRegExp(allowInWords = '') {\n let source = '(-?\\\\d*\\\\.\\\\d\\\\w*)|([^';\n for (const sep of USUAL_WORD_SEPARATORS) {\n if (allowInWords.indexOf(sep) >= 0) {\n continue;\n }\n source += '\\\\' + sep;\n }\n source += '\\\\s]+)';\n return new RegExp(source, 'g');\n}\n// catches numbers (including floating numbers) in the first group, and alphanum in the second\nexport const DEFAULT_WORD_REGEXP = createWordRegExp();\nexport function ensureValidWordDefinition(wordDefinition) {\n let result = DEFAULT_WORD_REGEXP;\n if (wordDefinition && (wordDefinition instanceof RegExp)) {\n if (!wordDefinition.global) {\n let flags = 'g';\n if (wordDefinition.ignoreCase) {\n flags += 'i';\n }\n if (wordDefinition.multiline) {\n flags += 'm';\n }\n if (wordDefinition.unicode) {\n flags += 'u';\n }\n result = new RegExp(wordDefinition.source, flags);\n }\n else {\n result = wordDefinition;\n }\n }\n result.lastIndex = 0;\n return result;\n}\nconst _defaultConfig = {\n maxLen: 1000,\n windowSize: 15,\n timeBudget: 150\n};\nexport function getWordAtText(column, wordDefinition, text, textOffset, config = _defaultConfig) {\n if (text.length > config.maxLen) {\n // don't throw strings that long at the regexp\n // but use a sub-string in which a word must occur\n let start = column - config.maxLen / 2;\n if (start < 0) {\n start = 0;\n }\n else {\n textOffset += start;\n }\n text = text.substring(start, column + config.maxLen / 2);\n return getWordAtText(column, wordDefinition, text, textOffset, config);\n }\n const t1 = Date.now();\n const pos = column - 1 - textOffset;\n let prevRegexIndex = -1;\n let match = null;\n for (let i = 1;; i++) {\n // check time budget\n if (Date.now() - t1 >= config.timeBudget) {\n break;\n }\n // reset the index at which the regexp should start matching, also know where it\n // should stop so that subsequent search don't repeat previous searches\n const regexIndex = pos - config.windowSize * i;\n wordDefinition.lastIndex = Math.max(0, regexIndex);\n const thisMatch = _findRegexMatchEnclosingPosition(wordDefinition, text, pos, prevRegexIndex);\n if (!thisMatch && match) {\n // stop: we have something\n break;\n }\n match = thisMatch;\n // stop: searched at start\n if (regexIndex <= 0) {\n break;\n }\n prevRegexIndex = regexIndex;\n }\n if (match) {\n let result = {\n word: match[0],\n startColumn: textOffset + 1 + match.index,\n endColumn: textOffset + 1 + match.index + match[0].length\n };\n wordDefinition.lastIndex = 0;\n return result;\n }\n return null;\n}\nfunction _findRegexMatchEnclosingPosition(wordDefinition, text, pos, stopPos) {\n let match;\n while (match = wordDefinition.exec(text)) {\n const matchIndex = match.index || 0;\n if (matchIndex <= pos && wordDefinition.lastIndex >= pos) {\n return match;\n }\n else if (stopPos > 0 && matchIndex > stopPos) {\n return null;\n }\n }\n return null;\n}\n","import { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { createDecorator as createServiceDecorator } from '../../instantiation/common/instantiation.js';\nexport const ILogService = createServiceDecorator('logService');\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"Trace\"] = 0] = \"Trace\";\n LogLevel[LogLevel[\"Debug\"] = 1] = \"Debug\";\n LogLevel[LogLevel[\"Info\"] = 2] = \"Info\";\n LogLevel[LogLevel[\"Warning\"] = 3] = \"Warning\";\n LogLevel[LogLevel[\"Error\"] = 4] = \"Error\";\n LogLevel[LogLevel[\"Critical\"] = 5] = \"Critical\";\n LogLevel[LogLevel[\"Off\"] = 6] = \"Off\";\n})(LogLevel || (LogLevel = {}));\nexport const DEFAULT_LOG_LEVEL = LogLevel.Info;\nexport class AbstractLogger extends Disposable {\n constructor() {\n super(...arguments);\n this.level = DEFAULT_LOG_LEVEL;\n this._onDidChangeLogLevel = this._register(new Emitter());\n }\n setLevel(level) {\n if (this.level !== level) {\n this.level = level;\n this._onDidChangeLogLevel.fire(this.level);\n }\n }\n getLevel() {\n return this.level;\n }\n}\nexport class ConsoleLogger extends AbstractLogger {\n constructor(logLevel = DEFAULT_LOG_LEVEL) {\n super();\n this.setLevel(logLevel);\n }\n trace(message, ...args) {\n if (this.getLevel() <= LogLevel.Trace) {\n console.log('%cTRACE', 'color: #888', message, ...args);\n }\n }\n debug(message, ...args) {\n if (this.getLevel() <= LogLevel.Debug) {\n console.log('%cDEBUG', 'background: #eee; color: #888', message, ...args);\n }\n }\n info(message, ...args) {\n if (this.getLevel() <= LogLevel.Info) {\n console.log('%c INFO', 'color: #33f', message, ...args);\n }\n }\n error(message, ...args) {\n if (this.getLevel() <= LogLevel.Error) {\n console.log('%c ERR', 'color: #f33', message, ...args);\n }\n }\n dispose() {\n // noop\n }\n}\nexport class LogService extends Disposable {\n constructor(logger) {\n super();\n this.logger = logger;\n this._register(logger);\n }\n getLevel() {\n return this.logger.getLevel();\n }\n trace(message, ...args) {\n this.logger.trace(message, ...args);\n }\n debug(message, ...args) {\n this.logger.debug(message, ...args);\n }\n info(message, ...args) {\n this.logger.info(message, ...args);\n }\n error(message, ...args) {\n this.logger.error(message, ...args);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as DOM from './dom.js';\nexport function renderText(text, options = {}) {\n const element = createElement(options);\n element.textContent = text;\n return element;\n}\nexport function renderFormattedText(formattedText, options = {}) {\n const element = createElement(options);\n _renderFormattedText(element, parseFormattedText(formattedText, !!options.renderCodeSegments), options.actionHandler, options.renderCodeSegments);\n return element;\n}\nexport function createElement(options) {\n const tagName = options.inline ? 'span' : 'div';\n const element = document.createElement(tagName);\n if (options.className) {\n element.className = options.className;\n }\n return element;\n}\nclass StringStream {\n constructor(source) {\n this.source = source;\n this.index = 0;\n }\n eos() {\n return this.index >= this.source.length;\n }\n next() {\n const next = this.peek();\n this.advance();\n return next;\n }\n peek() {\n return this.source[this.index];\n }\n advance() {\n this.index++;\n }\n}\nfunction _renderFormattedText(element, treeNode, actionHandler, renderCodeSegments) {\n let child;\n if (treeNode.type === 2 /* Text */) {\n child = document.createTextNode(treeNode.content || '');\n }\n else if (treeNode.type === 3 /* Bold */) {\n child = document.createElement('b');\n }\n else if (treeNode.type === 4 /* Italics */) {\n child = document.createElement('i');\n }\n else if (treeNode.type === 7 /* Code */ && renderCodeSegments) {\n child = document.createElement('code');\n }\n else if (treeNode.type === 5 /* Action */ && actionHandler) {\n const a = document.createElement('a');\n a.href = '#';\n actionHandler.disposables.add(DOM.addStandardDisposableListener(a, 'click', (event) => {\n actionHandler.callback(String(treeNode.index), event);\n }));\n child = a;\n }\n else if (treeNode.type === 8 /* NewLine */) {\n child = document.createElement('br');\n }\n else if (treeNode.type === 1 /* Root */) {\n child = element;\n }\n if (child && element !== child) {\n element.appendChild(child);\n }\n if (child && Array.isArray(treeNode.children)) {\n treeNode.children.forEach((nodeChild) => {\n _renderFormattedText(child, nodeChild, actionHandler, renderCodeSegments);\n });\n }\n}\nfunction parseFormattedText(content, parseCodeSegments) {\n const root = {\n type: 1 /* Root */,\n children: []\n };\n let actionViewItemIndex = 0;\n let current = root;\n const stack = [];\n const stream = new StringStream(content);\n while (!stream.eos()) {\n let next = stream.next();\n const isEscapedFormatType = (next === '\\\\' && formatTagType(stream.peek(), parseCodeSegments) !== 0 /* Invalid */);\n if (isEscapedFormatType) {\n next = stream.next(); // unread the backslash if it escapes a format tag type\n }\n if (!isEscapedFormatType && isFormatTag(next, parseCodeSegments) && next === stream.peek()) {\n stream.advance();\n if (current.type === 2 /* Text */) {\n current = stack.pop();\n }\n const type = formatTagType(next, parseCodeSegments);\n if (current.type === type || (current.type === 5 /* Action */ && type === 6 /* ActionClose */)) {\n current = stack.pop();\n }\n else {\n const newCurrent = {\n type: type,\n children: []\n };\n if (type === 5 /* Action */) {\n newCurrent.index = actionViewItemIndex;\n actionViewItemIndex++;\n }\n current.children.push(newCurrent);\n stack.push(current);\n current = newCurrent;\n }\n }\n else if (next === '\\n') {\n if (current.type === 2 /* Text */) {\n current = stack.pop();\n }\n current.children.push({\n type: 8 /* NewLine */\n });\n }\n else {\n if (current.type !== 2 /* Text */) {\n const textCurrent = {\n type: 2 /* Text */,\n content: next\n };\n current.children.push(textCurrent);\n stack.push(current);\n current = textCurrent;\n }\n else {\n current.content += next;\n }\n }\n }\n if (current.type === 2 /* Text */) {\n current = stack.pop();\n }\n if (stack.length) {\n // incorrectly formatted string literal\n }\n return root;\n}\nfunction isFormatTag(char, supportCodeSegments) {\n return formatTagType(char, supportCodeSegments) !== 0 /* Invalid */;\n}\nfunction formatTagType(char, supportCodeSegments) {\n switch (char) {\n case '*':\n return 3 /* Bold */;\n case '_':\n return 4 /* Italics */;\n case '[':\n return 5 /* Action */;\n case ']':\n return 6 /* ActionClose */;\n case '`':\n return supportCodeSegments ? 7 /* Code */ : 0 /* Invalid */;\n default:\n return 0 /* Invalid */;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class ArrayNavigator {\n constructor(items, start = 0, end = items.length, index = start - 1) {\n this.items = items;\n this.start = start;\n this.end = end;\n this.index = index;\n }\n current() {\n if (this.index === this.start - 1 || this.index === this.end) {\n return null;\n }\n return this.items[this.index];\n }\n next() {\n this.index = Math.min(this.index + 1, this.end);\n return this.current();\n }\n previous() {\n this.index = Math.max(this.index - 1, this.start - 1);\n return this.current();\n }\n first() {\n this.index = this.start;\n return this.current();\n }\n last() {\n this.index = this.end - 1;\n return this.current();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ArrayNavigator } from './navigator.js';\nexport class HistoryNavigator {\n constructor(history = [], limit = 10) {\n this._initialize(history);\n this._limit = limit;\n this._onChange();\n }\n getHistory() {\n return this._elements;\n }\n add(t) {\n this._history.delete(t);\n this._history.add(t);\n this._onChange();\n }\n next() {\n if (this._currentPosition() !== this._elements.length - 1) {\n return this._navigator.next();\n }\n return null;\n }\n previous() {\n if (this._currentPosition() !== 0) {\n return this._navigator.previous();\n }\n return null;\n }\n current() {\n return this._navigator.current();\n }\n first() {\n return this._navigator.first();\n }\n last() {\n return this._navigator.last();\n }\n has(t) {\n return this._history.has(t);\n }\n _onChange() {\n this._reduceToLimit();\n const elements = this._elements;\n this._navigator = new ArrayNavigator(elements, 0, elements.length, elements.length);\n }\n _reduceToLimit() {\n const data = this._elements;\n if (data.length > this._limit) {\n this._initialize(data.slice(data.length - this._limit));\n }\n }\n _currentPosition() {\n const currentElement = this._navigator.current();\n if (!currentElement) {\n return -1;\n }\n return this._elements.indexOf(currentElement);\n }\n _initialize(history) {\n this._history = new Set();\n for (const entry of history) {\n this._history.add(entry);\n }\n }\n get _elements() {\n const elements = [];\n this._history.forEach(e => elements.push(e));\n return elements;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { renderFormattedText, renderText } from '../../formattedTextRenderer.js';\nimport { ActionBar } from '../actionbar/actionbar.js';\nimport * as aria from '../aria/aria.js';\nimport { ScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { Widget } from '../widget.js';\nimport { Color } from '../../../common/color.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { HistoryNavigator } from '../../../common/history.js';\nimport { mixin } from '../../../common/objects.js';\nimport './inputBox.css';\nimport * as nls from '../../../../nls.js';\nconst $ = dom.$;\nconst defaultOpts = {\n inputBackground: Color.fromHex('#3C3C3C'),\n inputForeground: Color.fromHex('#CCCCCC'),\n inputValidationInfoBorder: Color.fromHex('#55AAFF'),\n inputValidationInfoBackground: Color.fromHex('#063B49'),\n inputValidationWarningBorder: Color.fromHex('#B89500'),\n inputValidationWarningBackground: Color.fromHex('#352A05'),\n inputValidationErrorBorder: Color.fromHex('#BE1100'),\n inputValidationErrorBackground: Color.fromHex('#5A1D1D')\n};\nexport class InputBox extends Widget {\n constructor(container, contextViewProvider, options) {\n var _a;\n super();\n this.state = 'idle';\n this.maxHeight = Number.POSITIVE_INFINITY;\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._onDidHeightChange = this._register(new Emitter());\n this.onDidHeightChange = this._onDidHeightChange.event;\n this.contextViewProvider = contextViewProvider;\n this.options = options || Object.create(null);\n mixin(this.options, defaultOpts, false);\n this.message = null;\n this.placeholder = this.options.placeholder || '';\n this.tooltip = (_a = this.options.tooltip) !== null && _a !== void 0 ? _a : (this.placeholder || '');\n this.ariaLabel = this.options.ariaLabel || '';\n this.inputBackground = this.options.inputBackground;\n this.inputForeground = this.options.inputForeground;\n this.inputBorder = this.options.inputBorder;\n this.inputValidationInfoBorder = this.options.inputValidationInfoBorder;\n this.inputValidationInfoBackground = this.options.inputValidationInfoBackground;\n this.inputValidationInfoForeground = this.options.inputValidationInfoForeground;\n this.inputValidationWarningBorder = this.options.inputValidationWarningBorder;\n this.inputValidationWarningBackground = this.options.inputValidationWarningBackground;\n this.inputValidationWarningForeground = this.options.inputValidationWarningForeground;\n this.inputValidationErrorBorder = this.options.inputValidationErrorBorder;\n this.inputValidationErrorBackground = this.options.inputValidationErrorBackground;\n this.inputValidationErrorForeground = this.options.inputValidationErrorForeground;\n if (this.options.validationOptions) {\n this.validation = this.options.validationOptions.validation;\n }\n this.element = dom.append(container, $('.monaco-inputbox.idle'));\n let tagName = this.options.flexibleHeight ? 'textarea' : 'input';\n let wrapper = dom.append(this.element, $('.ibwrapper'));\n this.input = dom.append(wrapper, $(tagName + '.input.empty'));\n this.input.setAttribute('autocorrect', 'off');\n this.input.setAttribute('autocapitalize', 'off');\n this.input.setAttribute('spellcheck', 'false');\n this.onfocus(this.input, () => this.element.classList.add('synthetic-focus'));\n this.onblur(this.input, () => this.element.classList.remove('synthetic-focus'));\n if (this.options.flexibleHeight) {\n this.maxHeight = typeof this.options.flexibleMaxHeight === 'number' ? this.options.flexibleMaxHeight : Number.POSITIVE_INFINITY;\n this.mirror = dom.append(wrapper, $('div.mirror'));\n this.mirror.innerText = '\\u00a0';\n this.scrollableElement = new ScrollableElement(this.element, { vertical: 1 /* Auto */ });\n if (this.options.flexibleWidth) {\n this.input.setAttribute('wrap', 'off');\n this.mirror.style.whiteSpace = 'pre';\n this.mirror.style.wordWrap = 'initial';\n }\n dom.append(container, this.scrollableElement.getDomNode());\n this._register(this.scrollableElement);\n // from ScrollableElement to DOM\n this._register(this.scrollableElement.onScroll(e => this.input.scrollTop = e.scrollTop));\n const onSelectionChange = this._register(new DomEmitter(document, 'selectionchange'));\n const onAnchoredSelectionChange = Event.filter(onSelectionChange.event, () => {\n const selection = document.getSelection();\n return (selection === null || selection === void 0 ? void 0 : selection.anchorNode) === wrapper;\n });\n // from DOM to ScrollableElement\n this._register(onAnchoredSelectionChange(this.updateScrollDimensions, this));\n this._register(this.onDidHeightChange(this.updateScrollDimensions, this));\n }\n else {\n this.input.type = this.options.type || 'text';\n this.input.setAttribute('wrap', 'off');\n }\n if (this.ariaLabel) {\n this.input.setAttribute('aria-label', this.ariaLabel);\n }\n if (this.placeholder && !this.options.showPlaceholderOnFocus) {\n this.setPlaceHolder(this.placeholder);\n }\n if (this.tooltip) {\n this.setTooltip(this.tooltip);\n }\n this.oninput(this.input, () => this.onValueChange());\n this.onblur(this.input, () => this.onBlur());\n this.onfocus(this.input, () => this.onFocus());\n this.ignoreGesture(this.input);\n setTimeout(() => this.updateMirror(), 0);\n // Support actions\n if (this.options.actions) {\n this.actionbar = this._register(new ActionBar(this.element));\n this.actionbar.push(this.options.actions, { icon: true, label: false });\n }\n this.applyStyles();\n }\n onBlur() {\n this._hideMessage();\n if (this.options.showPlaceholderOnFocus) {\n this.input.setAttribute('placeholder', '');\n }\n }\n onFocus() {\n this._showMessage();\n if (this.options.showPlaceholderOnFocus) {\n this.input.setAttribute('placeholder', this.placeholder || '');\n }\n }\n setPlaceHolder(placeHolder) {\n this.placeholder = placeHolder;\n this.input.setAttribute('placeholder', placeHolder);\n }\n setTooltip(tooltip) {\n this.tooltip = tooltip;\n this.input.title = tooltip;\n }\n setAriaLabel(label) {\n this.ariaLabel = label;\n if (label) {\n this.input.setAttribute('aria-label', this.ariaLabel);\n }\n else {\n this.input.removeAttribute('aria-label');\n }\n }\n getAriaLabel() {\n return this.ariaLabel;\n }\n get inputElement() {\n return this.input;\n }\n get value() {\n return this.input.value;\n }\n set value(newValue) {\n if (this.input.value !== newValue) {\n this.input.value = newValue;\n this.onValueChange();\n }\n }\n get height() {\n return typeof this.cachedHeight === 'number' ? this.cachedHeight : dom.getTotalHeight(this.element);\n }\n focus() {\n this.input.focus();\n }\n blur() {\n this.input.blur();\n }\n hasFocus() {\n return document.activeElement === this.input;\n }\n select(range = null) {\n this.input.select();\n if (range) {\n this.input.setSelectionRange(range.start, range.end);\n if (range.end === this.input.value.length) {\n this.input.scrollLeft = this.input.scrollWidth;\n }\n }\n }\n isSelectionAtEnd() {\n return this.input.selectionEnd === this.input.value.length && this.input.selectionStart === this.input.selectionEnd;\n }\n enable() {\n this.input.removeAttribute('disabled');\n }\n disable() {\n this.blur();\n this.input.disabled = true;\n this._hideMessage();\n }\n get width() {\n return dom.getTotalWidth(this.input);\n }\n set width(width) {\n if (this.options.flexibleHeight && this.options.flexibleWidth) {\n // textarea with horizontal scrolling\n let horizontalPadding = 0;\n if (this.mirror) {\n const paddingLeft = parseFloat(this.mirror.style.paddingLeft || '') || 0;\n const paddingRight = parseFloat(this.mirror.style.paddingRight || '') || 0;\n horizontalPadding = paddingLeft + paddingRight;\n }\n this.input.style.width = (width - horizontalPadding) + 'px';\n }\n else {\n this.input.style.width = width + 'px';\n }\n if (this.mirror) {\n this.mirror.style.width = width + 'px';\n }\n }\n set paddingRight(paddingRight) {\n if (this.options.flexibleHeight && this.options.flexibleWidth) {\n this.input.style.width = `calc(100% - ${paddingRight}px)`;\n }\n else {\n this.input.style.paddingRight = paddingRight + 'px';\n }\n if (this.mirror) {\n this.mirror.style.paddingRight = paddingRight + 'px';\n }\n }\n updateScrollDimensions() {\n if (typeof this.cachedContentHeight !== 'number' || typeof this.cachedHeight !== 'number' || !this.scrollableElement) {\n return;\n }\n const scrollHeight = this.cachedContentHeight;\n const height = this.cachedHeight;\n const scrollTop = this.input.scrollTop;\n this.scrollableElement.setScrollDimensions({ scrollHeight, height });\n this.scrollableElement.setScrollPosition({ scrollTop });\n }\n showMessage(message, force) {\n this.message = message;\n this.element.classList.remove('idle');\n this.element.classList.remove('info');\n this.element.classList.remove('warning');\n this.element.classList.remove('error');\n this.element.classList.add(this.classForType(message.type));\n const styles = this.stylesForType(this.message.type);\n this.element.style.border = styles.border ? `1px solid ${styles.border}` : '';\n if (this.hasFocus() || force) {\n this._showMessage();\n }\n }\n hideMessage() {\n this.message = null;\n this.element.classList.remove('info');\n this.element.classList.remove('warning');\n this.element.classList.remove('error');\n this.element.classList.add('idle');\n this._hideMessage();\n this.applyStyles();\n }\n validate() {\n let errorMsg = null;\n if (this.validation) {\n errorMsg = this.validation(this.value);\n if (errorMsg) {\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.showMessage(errorMsg);\n }\n else if (this.inputElement.hasAttribute('aria-invalid')) {\n this.inputElement.removeAttribute('aria-invalid');\n this.hideMessage();\n }\n }\n return errorMsg === null || errorMsg === void 0 ? void 0 : errorMsg.type;\n }\n stylesForType(type) {\n switch (type) {\n case 1 /* INFO */: return { border: this.inputValidationInfoBorder, background: this.inputValidationInfoBackground, foreground: this.inputValidationInfoForeground };\n case 2 /* WARNING */: return { border: this.inputValidationWarningBorder, background: this.inputValidationWarningBackground, foreground: this.inputValidationWarningForeground };\n default: return { border: this.inputValidationErrorBorder, background: this.inputValidationErrorBackground, foreground: this.inputValidationErrorForeground };\n }\n }\n classForType(type) {\n switch (type) {\n case 1 /* INFO */: return 'info';\n case 2 /* WARNING */: return 'warning';\n default: return 'error';\n }\n }\n _showMessage() {\n if (!this.contextViewProvider || !this.message) {\n return;\n }\n let div;\n let layout = () => div.style.width = dom.getTotalWidth(this.element) + 'px';\n this.contextViewProvider.showContextView({\n getAnchor: () => this.element,\n anchorAlignment: 1 /* RIGHT */,\n render: (container) => {\n if (!this.message) {\n return null;\n }\n div = dom.append(container, $('.monaco-inputbox-container'));\n layout();\n const renderOptions = {\n inline: true,\n className: 'monaco-inputbox-message'\n };\n const spanElement = (this.message.formatContent\n ? renderFormattedText(this.message.content, renderOptions)\n : renderText(this.message.content, renderOptions));\n spanElement.classList.add(this.classForType(this.message.type));\n const styles = this.stylesForType(this.message.type);\n spanElement.style.backgroundColor = styles.background ? styles.background.toString() : '';\n spanElement.style.color = styles.foreground ? styles.foreground.toString() : '';\n spanElement.style.border = styles.border ? `1px solid ${styles.border}` : '';\n dom.append(div, spanElement);\n return null;\n },\n onHide: () => {\n this.state = 'closed';\n },\n layout: layout\n });\n // ARIA Support\n let alertText;\n if (this.message.type === 3 /* ERROR */) {\n alertText = nls.localize('alertErrorMessage', \"Error: {0}\", this.message.content);\n }\n else if (this.message.type === 2 /* WARNING */) {\n alertText = nls.localize('alertWarningMessage', \"Warning: {0}\", this.message.content);\n }\n else {\n alertText = nls.localize('alertInfoMessage', \"Info: {0}\", this.message.content);\n }\n aria.alert(alertText);\n this.state = 'open';\n }\n _hideMessage() {\n if (!this.contextViewProvider) {\n return;\n }\n if (this.state === 'open') {\n this.contextViewProvider.hideContextView();\n }\n this.state = 'idle';\n }\n onValueChange() {\n this._onDidChange.fire(this.value);\n this.validate();\n this.updateMirror();\n this.input.classList.toggle('empty', !this.value);\n if (this.state === 'open' && this.contextViewProvider) {\n this.contextViewProvider.layout();\n }\n }\n updateMirror() {\n if (!this.mirror) {\n return;\n }\n const value = this.value;\n const lastCharCode = value.charCodeAt(value.length - 1);\n const suffix = lastCharCode === 10 ? ' ' : '';\n const mirrorTextContent = (value + suffix)\n .replace(/\\u000c/g, ''); // Don't measure with the form feed character, which messes up sizing\n if (mirrorTextContent) {\n this.mirror.textContent = value + suffix;\n }\n else {\n this.mirror.innerText = '\\u00a0';\n }\n this.layout();\n }\n style(styles) {\n this.inputBackground = styles.inputBackground;\n this.inputForeground = styles.inputForeground;\n this.inputBorder = styles.inputBorder;\n this.inputValidationInfoBackground = styles.inputValidationInfoBackground;\n this.inputValidationInfoForeground = styles.inputValidationInfoForeground;\n this.inputValidationInfoBorder = styles.inputValidationInfoBorder;\n this.inputValidationWarningBackground = styles.inputValidationWarningBackground;\n this.inputValidationWarningForeground = styles.inputValidationWarningForeground;\n this.inputValidationWarningBorder = styles.inputValidationWarningBorder;\n this.inputValidationErrorBackground = styles.inputValidationErrorBackground;\n this.inputValidationErrorForeground = styles.inputValidationErrorForeground;\n this.inputValidationErrorBorder = styles.inputValidationErrorBorder;\n this.applyStyles();\n }\n applyStyles() {\n const background = this.inputBackground ? this.inputBackground.toString() : '';\n const foreground = this.inputForeground ? this.inputForeground.toString() : '';\n const border = this.inputBorder ? this.inputBorder.toString() : '';\n this.element.style.backgroundColor = background;\n this.element.style.color = foreground;\n this.input.style.backgroundColor = 'inherit';\n this.input.style.color = foreground;\n this.element.style.borderWidth = border ? '1px' : '';\n this.element.style.borderStyle = border ? 'solid' : '';\n this.element.style.borderColor = border;\n }\n layout() {\n if (!this.mirror) {\n return;\n }\n const previousHeight = this.cachedContentHeight;\n this.cachedContentHeight = dom.getTotalHeight(this.mirror);\n if (previousHeight !== this.cachedContentHeight) {\n this.cachedHeight = Math.min(this.cachedContentHeight, this.maxHeight);\n this.input.style.height = this.cachedHeight + 'px';\n this._onDidHeightChange.fire(this.cachedContentHeight);\n }\n }\n insertAtCursor(text) {\n const inputElement = this.inputElement;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n const content = inputElement.value;\n if (start !== null && end !== null) {\n this.value = content.substr(0, start) + text + content.substr(end);\n inputElement.setSelectionRange(start + 1, start + 1);\n this.layout();\n }\n }\n dispose() {\n this._hideMessage();\n this.message = null;\n if (this.actionbar) {\n this.actionbar.dispose();\n }\n super.dispose();\n }\n}\nexport class HistoryInputBox extends InputBox {\n constructor(container, contextViewProvider, options) {\n const NLS_PLACEHOLDER_HISTORY_HINT = nls.localize({ key: 'history.inputbox.hint', comment: ['Text will be prefixed with \\u21C5 plus a single space, then used as a hint where input field keeps history'] }, \"for history\");\n const NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX = ` or \\u21C5 ${NLS_PLACEHOLDER_HISTORY_HINT}`;\n const NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS = ` (\\u21C5 ${NLS_PLACEHOLDER_HISTORY_HINT})`;\n super(container, contextViewProvider, options);\n this.history = new HistoryNavigator(options.history, 100);\n // Function to append the history suffix to the placeholder if necessary\n const addSuffix = () => {\n if (options.showHistoryHint && options.showHistoryHint() && !this.placeholder.endsWith(NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX) && !this.placeholder.endsWith(NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS) && this.history.getHistory().length) {\n const suffix = this.placeholder.endsWith(')') ? NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX : NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS;\n const suffixedPlaceholder = this.placeholder + suffix;\n if (options.showPlaceholderOnFocus && document.activeElement !== this.input) {\n this.placeholder = suffixedPlaceholder;\n }\n else {\n this.setPlaceHolder(suffixedPlaceholder);\n }\n }\n };\n // Spot the change to the textarea class attribute which occurs when it changes between non-empty and empty,\n // and add the history suffix to the placeholder if not yet present\n this.observer = new MutationObserver((mutationList, observer) => {\n mutationList.forEach((mutation) => {\n if (!mutation.target.textContent) {\n addSuffix();\n }\n });\n });\n this.observer.observe(this.input, { attributeFilter: ['class'] });\n this.onfocus(this.input, () => addSuffix());\n this.onblur(this.input, () => {\n const resetPlaceholder = (historyHint) => {\n if (!this.placeholder.endsWith(historyHint)) {\n return false;\n }\n else {\n const revertedPlaceholder = this.placeholder.slice(0, this.placeholder.length - historyHint.length);\n if (options.showPlaceholderOnFocus) {\n this.placeholder = revertedPlaceholder;\n }\n else {\n this.setPlaceHolder(revertedPlaceholder);\n }\n return true;\n }\n };\n if (!resetPlaceholder(NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS)) {\n resetPlaceholder(NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX);\n }\n });\n }\n dispose() {\n super.dispose();\n if (this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n }\n addToHistory() {\n if (this.value && this.value !== this.getCurrentValue()) {\n this.history.add(this.value);\n }\n }\n showNextValue() {\n if (!this.history.has(this.value)) {\n this.addToHistory();\n }\n let next = this.getNextValue();\n if (next) {\n next = next === this.value ? this.getNextValue() : next;\n }\n if (next) {\n this.value = next;\n aria.status(this.value);\n }\n }\n showPreviousValue() {\n if (!this.history.has(this.value)) {\n this.addToHistory();\n }\n let previous = this.getPreviousValue();\n if (previous) {\n previous = previous === this.value ? this.getPreviousValue() : previous;\n }\n if (previous) {\n this.value = previous;\n aria.status(this.value);\n }\n }\n getCurrentValue() {\n let currentValue = this.history.current();\n if (!currentValue) {\n currentValue = this.history.last();\n this.history.next();\n }\n return currentValue;\n }\n getPreviousValue() {\n return this.history.previous() || this.history.first();\n }\n getNextValue() {\n return this.history.next() || this.history.last();\n }\n}\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nfunction _format(message, args) {\r\n var result;\r\n if (args.length === 0) {\r\n result = message;\r\n }\r\n else {\r\n result = message.replace(/\\{(\\d+)\\}/g, function (match, rest) {\r\n var index = rest[0];\r\n return typeof args[index] !== 'undefined' ? args[index] : match;\r\n });\r\n }\r\n return result;\r\n}\r\nexport function localize(data, message) {\r\n var args = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n args[_i - 2] = arguments[_i];\r\n }\r\n return _format(message, args);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport var USUAL_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?';\r\n/**\r\n * Create a word definition regular expression based on default word separators.\r\n * Optionally provide allowed separators that should be included in words.\r\n *\r\n * The default would look like this:\r\n * /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g\r\n */\r\nfunction createWordRegExp(allowInWords) {\r\n if (allowInWords === void 0) { allowInWords = ''; }\r\n var source = '(-?\\\\d*\\\\.\\\\d\\\\w*)|([^';\r\n for (var _i = 0, USUAL_WORD_SEPARATORS_1 = USUAL_WORD_SEPARATORS; _i < USUAL_WORD_SEPARATORS_1.length; _i++) {\r\n var sep = USUAL_WORD_SEPARATORS_1[_i];\r\n if (allowInWords.indexOf(sep) >= 0) {\r\n continue;\r\n }\r\n source += '\\\\' + sep;\r\n }\r\n source += '\\\\s]+)';\r\n return new RegExp(source, 'g');\r\n}\r\n// catches numbers (including floating numbers) in the first group, and alphanum in the second\r\nexport var DEFAULT_WORD_REGEXP = createWordRegExp();\r\nexport function ensureValidWordDefinition(wordDefinition) {\r\n var result = DEFAULT_WORD_REGEXP;\r\n if (wordDefinition && (wordDefinition instanceof RegExp)) {\r\n if (!wordDefinition.global) {\r\n var flags = 'g';\r\n if (wordDefinition.ignoreCase) {\r\n flags += 'i';\r\n }\r\n if (wordDefinition.multiline) {\r\n flags += 'm';\r\n }\r\n if (wordDefinition.unicode) {\r\n flags += 'u';\r\n }\r\n result = new RegExp(wordDefinition.source, flags);\r\n }\r\n else {\r\n result = wordDefinition;\r\n }\r\n }\r\n result.lastIndex = 0;\r\n return result;\r\n}\r\nfunction getWordAtPosFast(column, wordDefinition, text, textOffset) {\r\n // find whitespace enclosed text around column and match from there\r\n var pos = column - 1 - textOffset;\r\n var start = text.lastIndexOf(' ', pos - 1) + 1;\r\n wordDefinition.lastIndex = start;\r\n var match;\r\n while (match = wordDefinition.exec(text)) {\r\n var matchIndex = match.index || 0;\r\n if (matchIndex <= pos && wordDefinition.lastIndex >= pos) {\r\n return {\r\n word: match[0],\r\n startColumn: textOffset + 1 + matchIndex,\r\n endColumn: textOffset + 1 + wordDefinition.lastIndex\r\n };\r\n }\r\n }\r\n return null;\r\n}\r\nfunction getWordAtPosSlow(column, wordDefinition, text, textOffset) {\r\n // matches all words starting at the beginning\r\n // of the input until it finds a match that encloses\r\n // the desired column. slow but correct\r\n var pos = column - 1 - textOffset;\r\n wordDefinition.lastIndex = 0;\r\n var match;\r\n while (match = wordDefinition.exec(text)) {\r\n var matchIndex = match.index || 0;\r\n if (matchIndex > pos) {\r\n // |nW -> matched only after the pos\r\n return null;\r\n }\r\n else if (wordDefinition.lastIndex >= pos) {\r\n // W|W -> match encloses pos\r\n return {\r\n word: match[0],\r\n startColumn: textOffset + 1 + matchIndex,\r\n endColumn: textOffset + 1 + wordDefinition.lastIndex\r\n };\r\n }\r\n }\r\n return null;\r\n}\r\nexport function getWordAtText(column, wordDefinition, text, textOffset) {\r\n // if `words` can contain whitespace character we have to use the slow variant\r\n // otherwise we use the fast variant of finding a word\r\n wordDefinition.lastIndex = 0;\r\n var match = wordDefinition.exec(text);\r\n if (!match) {\r\n return null;\r\n }\r\n // todo@joh the `match` could already be the (first) word\r\n var ret = match[0].indexOf(' ') >= 0\r\n // did match a word which contains a space character -> use slow word find\r\n ? getWordAtPosSlow(column, wordDefinition, text, textOffset)\r\n // sane word definition -> use fast word find\r\n : getWordAtPosFast(column, wordDefinition, text, textOffset);\r\n // both (getWordAtPosFast and getWordAtPosSlow) leave the wordDefinition-RegExp\r\n // in an undefined state and to not confuse other users of the wordDefinition\r\n // we reset the lastIndex\r\n wordDefinition.lastIndex = 0;\r\n return ret;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport * as nls from '../../../nls.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nimport { USUAL_WORD_SEPARATORS } from '../model/wordHelper.js';\r\n/**\r\n * @internal\r\n * The width of the minimap gutter, in pixels.\r\n */\r\nexport var MINIMAP_GUTTER_WIDTH = 8;\r\n//#endregion\r\n/**\r\n * An event describing that the configuration of the editor has changed.\r\n */\r\nvar ConfigurationChangedEvent = /** @class */ (function () {\r\n /**\r\n * @internal\r\n */\r\n function ConfigurationChangedEvent(values) {\r\n this._values = values;\r\n }\r\n /**\r\n * @internal\r\n */\r\n ConfigurationChangedEvent.prototype.hasChanged = function (id) {\r\n return this._values[id];\r\n };\r\n return ConfigurationChangedEvent;\r\n}());\r\nexport { ConfigurationChangedEvent };\r\n/**\r\n * @internal\r\n */\r\nvar ValidatedEditorOptions = /** @class */ (function () {\r\n function ValidatedEditorOptions() {\r\n this._values = [];\r\n }\r\n ValidatedEditorOptions.prototype._read = function (option) {\r\n return this._values[option];\r\n };\r\n ValidatedEditorOptions.prototype.get = function (id) {\r\n return this._values[id];\r\n };\r\n ValidatedEditorOptions.prototype._write = function (option, value) {\r\n this._values[option] = value;\r\n };\r\n return ValidatedEditorOptions;\r\n}());\r\nexport { ValidatedEditorOptions };\r\n/**\r\n * @internal\r\n */\r\nvar BaseEditorOption = /** @class */ (function () {\r\n function BaseEditorOption(id, name, defaultValue, schema) {\r\n this.id = id;\r\n this.name = name;\r\n this.defaultValue = defaultValue;\r\n this.schema = schema;\r\n }\r\n BaseEditorOption.prototype.compute = function (env, options, value) {\r\n return value;\r\n };\r\n return BaseEditorOption;\r\n}());\r\n/**\r\n * @internal\r\n */\r\nvar ComputedEditorOption = /** @class */ (function () {\r\n function ComputedEditorOption(id, deps) {\r\n if (deps === void 0) { deps = null; }\r\n this.schema = undefined;\r\n this.id = id;\r\n this.name = '_never_';\r\n this.defaultValue = undefined;\r\n this.deps = deps;\r\n }\r\n ComputedEditorOption.prototype.validate = function (input) {\r\n return this.defaultValue;\r\n };\r\n return ComputedEditorOption;\r\n}());\r\nvar SimpleEditorOption = /** @class */ (function () {\r\n function SimpleEditorOption(id, name, defaultValue, schema) {\r\n this.id = id;\r\n this.name = name;\r\n this.defaultValue = defaultValue;\r\n this.schema = schema;\r\n }\r\n SimpleEditorOption.prototype.validate = function (input) {\r\n if (typeof input === 'undefined') {\r\n return this.defaultValue;\r\n }\r\n return input;\r\n };\r\n SimpleEditorOption.prototype.compute = function (env, options, value) {\r\n return value;\r\n };\r\n return SimpleEditorOption;\r\n}());\r\nvar EditorBooleanOption = /** @class */ (function (_super) {\r\n __extends(EditorBooleanOption, _super);\r\n function EditorBooleanOption(id, name, defaultValue, schema) {\r\n if (schema === void 0) { schema = undefined; }\r\n var _this = this;\r\n if (typeof schema !== 'undefined') {\r\n schema.type = 'boolean';\r\n schema.default = defaultValue;\r\n }\r\n _this = _super.call(this, id, name, defaultValue, schema) || this;\r\n return _this;\r\n }\r\n EditorBooleanOption.boolean = function (value, defaultValue) {\r\n if (typeof value === 'undefined') {\r\n return defaultValue;\r\n }\r\n if (value === 'false') {\r\n // treat the string 'false' as false\r\n return false;\r\n }\r\n return Boolean(value);\r\n };\r\n EditorBooleanOption.prototype.validate = function (input) {\r\n return EditorBooleanOption.boolean(input, this.defaultValue);\r\n };\r\n return EditorBooleanOption;\r\n}(SimpleEditorOption));\r\nvar EditorIntOption = /** @class */ (function (_super) {\r\n __extends(EditorIntOption, _super);\r\n function EditorIntOption(id, name, defaultValue, minimum, maximum, schema) {\r\n if (schema === void 0) { schema = undefined; }\r\n var _this = this;\r\n if (typeof schema !== 'undefined') {\r\n schema.type = 'integer';\r\n schema.default = defaultValue;\r\n schema.minimum = minimum;\r\n schema.maximum = maximum;\r\n }\r\n _this = _super.call(this, id, name, defaultValue, schema) || this;\r\n _this.minimum = minimum;\r\n _this.maximum = maximum;\r\n return _this;\r\n }\r\n EditorIntOption.clampedInt = function (value, defaultValue, minimum, maximum) {\r\n var r;\r\n if (typeof value === 'undefined') {\r\n r = defaultValue;\r\n }\r\n else {\r\n r = parseInt(value, 10);\r\n if (isNaN(r)) {\r\n r = defaultValue;\r\n }\r\n }\r\n r = Math.max(minimum, r);\r\n r = Math.min(maximum, r);\r\n return r | 0;\r\n };\r\n EditorIntOption.prototype.validate = function (input) {\r\n return EditorIntOption.clampedInt(input, this.defaultValue, this.minimum, this.maximum);\r\n };\r\n return EditorIntOption;\r\n}(SimpleEditorOption));\r\nvar EditorFloatOption = /** @class */ (function (_super) {\r\n __extends(EditorFloatOption, _super);\r\n function EditorFloatOption(id, name, defaultValue, validationFn, schema) {\r\n var _this = this;\r\n if (typeof schema !== 'undefined') {\r\n schema.type = 'number';\r\n schema.default = defaultValue;\r\n }\r\n _this = _super.call(this, id, name, defaultValue, schema) || this;\r\n _this.validationFn = validationFn;\r\n return _this;\r\n }\r\n EditorFloatOption.clamp = function (n, min, max) {\r\n if (n < min) {\r\n return min;\r\n }\r\n if (n > max) {\r\n return max;\r\n }\r\n return n;\r\n };\r\n EditorFloatOption.float = function (value, defaultValue) {\r\n if (typeof value === 'number') {\r\n return value;\r\n }\r\n if (typeof value === 'undefined') {\r\n return defaultValue;\r\n }\r\n var r = parseFloat(value);\r\n return (isNaN(r) ? defaultValue : r);\r\n };\r\n EditorFloatOption.prototype.validate = function (input) {\r\n return this.validationFn(EditorFloatOption.float(input, this.defaultValue));\r\n };\r\n return EditorFloatOption;\r\n}(SimpleEditorOption));\r\nvar EditorStringOption = /** @class */ (function (_super) {\r\n __extends(EditorStringOption, _super);\r\n function EditorStringOption(id, name, defaultValue, schema) {\r\n if (schema === void 0) { schema = undefined; }\r\n var _this = this;\r\n if (typeof schema !== 'undefined') {\r\n schema.type = 'string';\r\n schema.default = defaultValue;\r\n }\r\n _this = _super.call(this, id, name, defaultValue, schema) || this;\r\n return _this;\r\n }\r\n EditorStringOption.string = function (value, defaultValue) {\r\n if (typeof value !== 'string') {\r\n return defaultValue;\r\n }\r\n return value;\r\n };\r\n EditorStringOption.prototype.validate = function (input) {\r\n return EditorStringOption.string(input, this.defaultValue);\r\n };\r\n return EditorStringOption;\r\n}(SimpleEditorOption));\r\nvar EditorStringEnumOption = /** @class */ (function (_super) {\r\n __extends(EditorStringEnumOption, _super);\r\n function EditorStringEnumOption(id, name, defaultValue, allowedValues, schema) {\r\n if (schema === void 0) { schema = undefined; }\r\n var _this = this;\r\n if (typeof schema !== 'undefined') {\r\n schema.type = 'string';\r\n schema.enum = allowedValues;\r\n schema.default = defaultValue;\r\n }\r\n _this = _super.call(this, id, name, defaultValue, schema) || this;\r\n _this._allowedValues = allowedValues;\r\n return _this;\r\n }\r\n EditorStringEnumOption.stringSet = function (value, defaultValue, allowedValues) {\r\n if (typeof value !== 'string') {\r\n return defaultValue;\r\n }\r\n if (allowedValues.indexOf(value) === -1) {\r\n return defaultValue;\r\n }\r\n return value;\r\n };\r\n EditorStringEnumOption.prototype.validate = function (input) {\r\n return EditorStringEnumOption.stringSet(input, this.defaultValue, this._allowedValues);\r\n };\r\n return EditorStringEnumOption;\r\n}(SimpleEditorOption));\r\nvar EditorEnumOption = /** @class */ (function (_super) {\r\n __extends(EditorEnumOption, _super);\r\n function EditorEnumOption(id, name, defaultValue, defaultStringValue, allowedValues, convert, schema) {\r\n if (schema === void 0) { schema = undefined; }\r\n var _this = this;\r\n if (typeof schema !== 'undefined') {\r\n schema.type = 'string';\r\n schema.enum = allowedValues;\r\n schema.default = defaultStringValue;\r\n }\r\n _this = _super.call(this, id, name, defaultValue, schema) || this;\r\n _this._allowedValues = allowedValues;\r\n _this._convert = convert;\r\n return _this;\r\n }\r\n EditorEnumOption.prototype.validate = function (input) {\r\n if (typeof input !== 'string') {\r\n return this.defaultValue;\r\n }\r\n if (this._allowedValues.indexOf(input) === -1) {\r\n return this.defaultValue;\r\n }\r\n return this._convert(input);\r\n };\r\n return EditorEnumOption;\r\n}(BaseEditorOption));\r\n//#endregion\r\n//#region autoIndent\r\nfunction _autoIndentFromString(autoIndent) {\r\n switch (autoIndent) {\r\n case 'none': return 0 /* None */;\r\n case 'keep': return 1 /* Keep */;\r\n case 'brackets': return 2 /* Brackets */;\r\n case 'advanced': return 3 /* Advanced */;\r\n case 'full': return 4 /* Full */;\r\n }\r\n}\r\n//#endregion\r\n//#region accessibilitySupport\r\nvar EditorAccessibilitySupport = /** @class */ (function (_super) {\r\n __extends(EditorAccessibilitySupport, _super);\r\n function EditorAccessibilitySupport() {\r\n return _super.call(this, 2 /* accessibilitySupport */, 'accessibilitySupport', 0 /* Unknown */, {\r\n type: 'string',\r\n enum: ['auto', 'on', 'off'],\r\n enumDescriptions: [\r\n nls.localize('accessibilitySupport.auto', \"The editor will use platform APIs to detect when a Screen Reader is attached.\"),\r\n nls.localize('accessibilitySupport.on', \"The editor will be permanently optimized for usage with a Screen Reader.\"),\r\n nls.localize('accessibilitySupport.off', \"The editor will never be optimized for usage with a Screen Reader.\"),\r\n ],\r\n default: 'auto',\r\n description: nls.localize('accessibilitySupport', \"Controls whether the editor should run in a mode where it is optimized for screen readers.\")\r\n }) || this;\r\n }\r\n EditorAccessibilitySupport.prototype.validate = function (input) {\r\n switch (input) {\r\n case 'auto': return 0 /* Unknown */;\r\n case 'off': return 1 /* Disabled */;\r\n case 'on': return 2 /* Enabled */;\r\n }\r\n return this.defaultValue;\r\n };\r\n EditorAccessibilitySupport.prototype.compute = function (env, options, value) {\r\n if (value === 0 /* Unknown */) {\r\n // The editor reads the `accessibilitySupport` from the environment\r\n return env.accessibilitySupport;\r\n }\r\n return value;\r\n };\r\n return EditorAccessibilitySupport;\r\n}(BaseEditorOption));\r\nfunction _cursorBlinkingStyleFromString(cursorBlinkingStyle) {\r\n switch (cursorBlinkingStyle) {\r\n case 'blink': return 1 /* Blink */;\r\n case 'smooth': return 2 /* Smooth */;\r\n case 'phase': return 3 /* Phase */;\r\n case 'expand': return 4 /* Expand */;\r\n case 'solid': return 5 /* Solid */;\r\n }\r\n}\r\n//#endregion\r\n//#region cursorStyle\r\n/**\r\n * The style in which the editor's cursor should be rendered.\r\n */\r\nexport var TextEditorCursorStyle;\r\n(function (TextEditorCursorStyle) {\r\n /**\r\n * As a vertical line (sitting between two characters).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"Line\"] = 1] = \"Line\";\r\n /**\r\n * As a block (sitting on top of a character).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"Block\"] = 2] = \"Block\";\r\n /**\r\n * As a horizontal line (sitting under a character).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"Underline\"] = 3] = \"Underline\";\r\n /**\r\n * As a thin vertical line (sitting between two characters).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"LineThin\"] = 4] = \"LineThin\";\r\n /**\r\n * As an outlined block (sitting on top of a character).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"BlockOutline\"] = 5] = \"BlockOutline\";\r\n /**\r\n * As a thin horizontal line (sitting under a character).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"UnderlineThin\"] = 6] = \"UnderlineThin\";\r\n})(TextEditorCursorStyle || (TextEditorCursorStyle = {}));\r\nfunction _cursorStyleFromString(cursorStyle) {\r\n switch (cursorStyle) {\r\n case 'line': return TextEditorCursorStyle.Line;\r\n case 'block': return TextEditorCursorStyle.Block;\r\n case 'underline': return TextEditorCursorStyle.Underline;\r\n case 'line-thin': return TextEditorCursorStyle.LineThin;\r\n case 'block-outline': return TextEditorCursorStyle.BlockOutline;\r\n case 'underline-thin': return TextEditorCursorStyle.UnderlineThin;\r\n }\r\n}\r\n//#endregion\r\n//#region editorClassName\r\nvar EditorClassName = /** @class */ (function (_super) {\r\n __extends(EditorClassName, _super);\r\n function EditorClassName() {\r\n return _super.call(this, 100 /* editorClassName */, [53 /* mouseStyle */, 25 /* extraEditorClassName */]) || this;\r\n }\r\n EditorClassName.prototype.compute = function (env, options, _) {\r\n var className = 'monaco-editor';\r\n if (options.get(25 /* extraEditorClassName */)) {\r\n className += ' ' + options.get(25 /* extraEditorClassName */);\r\n }\r\n if (env.extraEditorClassName) {\r\n className += ' ' + env.extraEditorClassName;\r\n }\r\n if (options.get(53 /* mouseStyle */) === 'default') {\r\n className += ' mouse-default';\r\n }\r\n else if (options.get(53 /* mouseStyle */) === 'copy') {\r\n className += ' mouse-copy';\r\n }\r\n if (options.get(81 /* showUnused */)) {\r\n className += ' showUnused';\r\n }\r\n return className;\r\n };\r\n return EditorClassName;\r\n}(ComputedEditorOption));\r\n//#endregion\r\n//#region emptySelectionClipboard\r\nvar EditorEmptySelectionClipboard = /** @class */ (function (_super) {\r\n __extends(EditorEmptySelectionClipboard, _super);\r\n function EditorEmptySelectionClipboard() {\r\n return _super.call(this, 24 /* emptySelectionClipboard */, 'emptySelectionClipboard', true, { description: nls.localize('emptySelectionClipboard', \"Controls whether copying without a selection copies the current line.\") }) || this;\r\n }\r\n EditorEmptySelectionClipboard.prototype.compute = function (env, options, value) {\r\n return value && env.emptySelectionClipboard;\r\n };\r\n return EditorEmptySelectionClipboard;\r\n}(EditorBooleanOption));\r\nvar EditorFind = /** @class */ (function (_super) {\r\n __extends(EditorFind, _super);\r\n function EditorFind() {\r\n var _this = this;\r\n var defaults = {\r\n seedSearchStringFromSelection: true,\r\n autoFindInSelection: 'never',\r\n globalFindClipboard: false,\r\n addExtraSpaceOnTop: true\r\n };\r\n _this = _super.call(this, 27 /* find */, 'find', defaults, {\r\n 'editor.find.seedSearchStringFromSelection': {\r\n type: 'boolean',\r\n default: defaults.seedSearchStringFromSelection,\r\n description: nls.localize('find.seedSearchStringFromSelection', \"Controls whether the search string in the Find Widget is seeded from the editor selection.\")\r\n },\r\n 'editor.find.autoFindInSelection': {\r\n type: 'string',\r\n enum: ['never', 'always', 'multiline'],\r\n default: defaults.autoFindInSelection,\r\n enumDescriptions: [\r\n nls.localize('editor.find.autoFindInSelection.never', 'Never turn on Find in selection automatically (default)'),\r\n nls.localize('editor.find.autoFindInSelection.always', 'Always turn on Find in selection automatically'),\r\n nls.localize('editor.find.autoFindInSelection.multiline', 'Turn on Find in selection automatically when multiple lines of content are selected.')\r\n ],\r\n description: nls.localize('find.autoFindInSelection', \"Controls whether the find operation is carried out on selected text or the entire file in the editor.\")\r\n },\r\n 'editor.find.globalFindClipboard': {\r\n type: 'boolean',\r\n default: defaults.globalFindClipboard,\r\n description: nls.localize('find.globalFindClipboard', \"Controls whether the Find Widget should read or modify the shared find clipboard on macOS.\"),\r\n included: platform.isMacintosh\r\n },\r\n 'editor.find.addExtraSpaceOnTop': {\r\n type: 'boolean',\r\n default: defaults.addExtraSpaceOnTop,\r\n description: nls.localize('find.addExtraSpaceOnTop', \"Controls whether the Find Widget should add extra lines on top of the editor. When true, you can scroll beyond the first line when the Find Widget is visible.\")\r\n }\r\n }) || this;\r\n return _this;\r\n }\r\n EditorFind.prototype.validate = function (_input) {\r\n if (typeof _input !== 'object') {\r\n return this.defaultValue;\r\n }\r\n var input = _input;\r\n return {\r\n seedSearchStringFromSelection: EditorBooleanOption.boolean(input.seedSearchStringFromSelection, this.defaultValue.seedSearchStringFromSelection),\r\n autoFindInSelection: typeof _input.autoFindInSelection === 'boolean'\r\n ? (_input.autoFindInSelection ? 'always' : 'never')\r\n : EditorStringEnumOption.stringSet(input.autoFindInSelection, this.defaultValue.autoFindInSelection, ['never', 'always', 'multiline']),\r\n globalFindClipboard: EditorBooleanOption.boolean(input.globalFindClipboard, this.defaultValue.globalFindClipboard),\r\n addExtraSpaceOnTop: EditorBooleanOption.boolean(input.addExtraSpaceOnTop, this.defaultValue.addExtraSpaceOnTop)\r\n };\r\n };\r\n return EditorFind;\r\n}(BaseEditorOption));\r\n//#endregion\r\n//#region fontLigatures\r\n/**\r\n * @internal\r\n */\r\nvar EditorFontLigatures = /** @class */ (function (_super) {\r\n __extends(EditorFontLigatures, _super);\r\n function EditorFontLigatures() {\r\n return _super.call(this, 33 /* fontLigatures */, 'fontLigatures', EditorFontLigatures.OFF, {\r\n anyOf: [\r\n {\r\n type: 'boolean',\r\n description: nls.localize('fontLigatures', \"Enables/Disables font ligatures.\"),\r\n },\r\n {\r\n type: 'string',\r\n description: nls.localize('fontFeatureSettings', \"Explicit font-feature-settings.\")\r\n }\r\n ],\r\n description: nls.localize('fontLigaturesGeneral', \"Configures font ligatures.\"),\r\n default: false\r\n }) || this;\r\n }\r\n EditorFontLigatures.prototype.validate = function (input) {\r\n if (typeof input === 'undefined') {\r\n return this.defaultValue;\r\n }\r\n if (typeof input === 'string') {\r\n if (input === 'false') {\r\n return EditorFontLigatures.OFF;\r\n }\r\n if (input === 'true') {\r\n return EditorFontLigatures.ON;\r\n }\r\n return input;\r\n }\r\n if (Boolean(input)) {\r\n return EditorFontLigatures.ON;\r\n }\r\n return EditorFontLigatures.OFF;\r\n };\r\n EditorFontLigatures.OFF = '\"liga\" off, \"calt\" off';\r\n EditorFontLigatures.ON = '\"liga\" on, \"calt\" on';\r\n return EditorFontLigatures;\r\n}(BaseEditorOption));\r\nexport { EditorFontLigatures };\r\n//#endregion\r\n//#region fontInfo\r\nvar EditorFontInfo = /** @class */ (function (_super) {\r\n __extends(EditorFontInfo, _super);\r\n function EditorFontInfo() {\r\n return _super.call(this, 32 /* fontInfo */) || this;\r\n }\r\n EditorFontInfo.prototype.compute = function (env, options, _) {\r\n return env.fontInfo;\r\n };\r\n return EditorFontInfo;\r\n}(ComputedEditorOption));\r\n//#endregion\r\n//#region fontSize\r\nvar EditorFontSize = /** @class */ (function (_super) {\r\n __extends(EditorFontSize, _super);\r\n function EditorFontSize() {\r\n return _super.call(this, 34 /* fontSize */, 'fontSize', EDITOR_FONT_DEFAULTS.fontSize, {\r\n type: 'number',\r\n minimum: 6,\r\n maximum: 100,\r\n default: EDITOR_FONT_DEFAULTS.fontSize,\r\n description: nls.localize('fontSize', \"Controls the font size in pixels.\")\r\n }) || this;\r\n }\r\n EditorFontSize.prototype.validate = function (input) {\r\n var r = EditorFloatOption.float(input, this.defaultValue);\r\n if (r === 0) {\r\n return EDITOR_FONT_DEFAULTS.fontSize;\r\n }\r\n return EditorFloatOption.clamp(r, 6, 100);\r\n };\r\n EditorFontSize.prototype.compute = function (env, options, value) {\r\n // The final fontSize respects the editor zoom level.\r\n // So take the result from env.fontInfo\r\n return env.fontInfo.fontSize;\r\n };\r\n return EditorFontSize;\r\n}(SimpleEditorOption));\r\nvar EditorGoToLocation = /** @class */ (function (_super) {\r\n __extends(EditorGoToLocation, _super);\r\n function EditorGoToLocation() {\r\n var _this = this;\r\n var defaults = {\r\n multiple: 'peek',\r\n multipleDefinitions: 'peek',\r\n multipleTypeDefinitions: 'peek',\r\n multipleDeclarations: 'peek',\r\n multipleImplementations: 'peek',\r\n multipleReferences: 'peek',\r\n alternativeDefinitionCommand: 'editor.action.goToReferences',\r\n alternativeTypeDefinitionCommand: 'editor.action.goToReferences',\r\n alternativeDeclarationCommand: 'editor.action.goToReferences',\r\n alternativeImplementationCommand: '',\r\n alternativeReferenceCommand: '',\r\n };\r\n var jsonSubset = {\r\n type: 'string',\r\n enum: ['peek', 'gotoAndPeek', 'goto'],\r\n default: defaults.multiple,\r\n enumDescriptions: [\r\n nls.localize('editor.gotoLocation.multiple.peek', 'Show peek view of the results (default)'),\r\n nls.localize('editor.gotoLocation.multiple.gotoAndPeek', 'Go to the primary result and show a peek view'),\r\n nls.localize('editor.gotoLocation.multiple.goto', 'Go to the primary result and enable peek-less navigation to others')\r\n ]\r\n };\r\n _this = _super.call(this, 39 /* gotoLocation */, 'gotoLocation', defaults, {\r\n 'editor.gotoLocation.multiple': {\r\n deprecationMessage: nls.localize('editor.gotoLocation.multiple.deprecated', \"This setting is deprecated, please use separate settings like 'editor.editor.gotoLocation.multipleDefinitions' or 'editor.editor.gotoLocation.multipleImplementations' instead.\"),\r\n },\r\n 'editor.gotoLocation.multipleDefinitions': __assign({ description: nls.localize('editor.editor.gotoLocation.multipleDefinitions', \"Controls the behavior the 'Go to Definition'-command when multiple target locations exist.\") }, jsonSubset),\r\n 'editor.gotoLocation.multipleTypeDefinitions': __assign({ description: nls.localize('editor.editor.gotoLocation.multipleTypeDefinitions', \"Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist.\") }, jsonSubset),\r\n 'editor.gotoLocation.multipleDeclarations': __assign({ description: nls.localize('editor.editor.gotoLocation.multipleDeclarations', \"Controls the behavior the 'Go to Declaration'-command when multiple target locations exist.\") }, jsonSubset),\r\n 'editor.gotoLocation.multipleImplementations': __assign({ description: nls.localize('editor.editor.gotoLocation.multipleImplemenattions', \"Controls the behavior the 'Go to Implementations'-command when multiple target locations exist.\") }, jsonSubset),\r\n 'editor.gotoLocation.multipleReferences': __assign({ description: nls.localize('editor.editor.gotoLocation.multipleReferences', \"Controls the behavior the 'Go to References'-command when multiple target locations exist.\") }, jsonSubset),\r\n 'editor.gotoLocation.alternativeDefinitionCommand': {\r\n type: 'string',\r\n default: defaults.alternativeDefinitionCommand,\r\n description: nls.localize('alternativeDefinitionCommand', \"Alternative command id that is being executed when the result of 'Go to Definition' is the current location.\")\r\n },\r\n 'editor.gotoLocation.alternativeTypeDefinitionCommand': {\r\n type: 'string',\r\n default: defaults.alternativeTypeDefinitionCommand,\r\n description: nls.localize('alternativeTypeDefinitionCommand', \"Alternative command id that is being executed when the result of 'Go to Type Definition' is the current location.\")\r\n },\r\n 'editor.gotoLocation.alternativeDeclarationCommand': {\r\n type: 'string',\r\n default: defaults.alternativeDeclarationCommand,\r\n description: nls.localize('alternativeDeclarationCommand', \"Alternative command id that is being executed when the result of 'Go to Declaration' is the current location.\")\r\n },\r\n 'editor.gotoLocation.alternativeImplementationCommand': {\r\n type: 'string',\r\n default: defaults.alternativeImplementationCommand,\r\n description: nls.localize('alternativeImplementationCommand', \"Alternative command id that is being executed when the result of 'Go to Implementation' is the current location.\")\r\n },\r\n 'editor.gotoLocation.alternativeReferenceCommand': {\r\n type: 'string',\r\n default: defaults.alternativeReferenceCommand,\r\n description: nls.localize('alternativeReferenceCommand', \"Alternative command id that is being executed when the result of 'Go to Reference' is the current location.\")\r\n },\r\n }) || this;\r\n return _this;\r\n }\r\n EditorGoToLocation.prototype.validate = function (_input) {\r\n var _a, _b, _c, _d, _e;\r\n if (typeof _input !== 'object') {\r\n return this.defaultValue;\r\n }\r\n var input = _input;\r\n return {\r\n multiple: EditorStringEnumOption.stringSet(input.multiple, this.defaultValue.multiple, ['peek', 'gotoAndPeek', 'goto']),\r\n multipleDefinitions: (_a = input.multipleDefinitions, (_a !== null && _a !== void 0 ? _a : EditorStringEnumOption.stringSet(input.multipleDefinitions, 'peek', ['peek', 'gotoAndPeek', 'goto']))),\r\n multipleTypeDefinitions: (_b = input.multipleTypeDefinitions, (_b !== null && _b !== void 0 ? _b : EditorStringEnumOption.stringSet(input.multipleTypeDefinitions, 'peek', ['peek', 'gotoAndPeek', 'goto']))),\r\n multipleDeclarations: (_c = input.multipleDeclarations, (_c !== null && _c !== void 0 ? _c : EditorStringEnumOption.stringSet(input.multipleDeclarations, 'peek', ['peek', 'gotoAndPeek', 'goto']))),\r\n multipleImplementations: (_d = input.multipleImplementations, (_d !== null && _d !== void 0 ? _d : EditorStringEnumOption.stringSet(input.multipleImplementations, 'peek', ['peek', 'gotoAndPeek', 'goto']))),\r\n multipleReferences: (_e = input.multipleReferences, (_e !== null && _e !== void 0 ? _e : EditorStringEnumOption.stringSet(input.multipleReferences, 'peek', ['peek', 'gotoAndPeek', 'goto']))),\r\n alternativeDefinitionCommand: EditorStringOption.string(input.alternativeDefinitionCommand, this.defaultValue.alternativeDefinitionCommand),\r\n alternativeTypeDefinitionCommand: EditorStringOption.string(input.alternativeTypeDefinitionCommand, this.defaultValue.alternativeTypeDefinitionCommand),\r\n alternativeDeclarationCommand: EditorStringOption.string(input.alternativeDeclarationCommand, this.defaultValue.alternativeDeclarationCommand),\r\n alternativeImplementationCommand: EditorStringOption.string(input.alternativeImplementationCommand, this.defaultValue.alternativeImplementationCommand),\r\n alternativeReferenceCommand: EditorStringOption.string(input.alternativeReferenceCommand, this.defaultValue.alternativeReferenceCommand),\r\n };\r\n };\r\n return EditorGoToLocation;\r\n}(BaseEditorOption));\r\nvar EditorHover = /** @class */ (function (_super) {\r\n __extends(EditorHover, _super);\r\n function EditorHover() {\r\n var _this = this;\r\n var defaults = {\r\n enabled: true,\r\n delay: 300,\r\n sticky: true\r\n };\r\n _this = _super.call(this, 42 /* hover */, 'hover', defaults, {\r\n 'editor.hover.enabled': {\r\n type: 'boolean',\r\n default: defaults.enabled,\r\n description: nls.localize('hover.enabled', \"Controls whether the hover is shown.\")\r\n },\r\n 'editor.hover.delay': {\r\n type: 'number',\r\n default: defaults.delay,\r\n description: nls.localize('hover.delay', \"Controls the delay in milliseconds after which the hover is shown.\")\r\n },\r\n 'editor.hover.sticky': {\r\n type: 'boolean',\r\n default: defaults.sticky,\r\n description: nls.localize('hover.sticky', \"Controls whether the hover should remain visible when mouse is moved over it.\")\r\n },\r\n }) || this;\r\n return _this;\r\n }\r\n EditorHover.prototype.validate = function (_input) {\r\n if (typeof _input !== 'object') {\r\n return this.defaultValue;\r\n }\r\n var input = _input;\r\n return {\r\n enabled: EditorBooleanOption.boolean(input.enabled, this.defaultValue.enabled),\r\n delay: EditorIntOption.clampedInt(input.delay, this.defaultValue.delay, 0, 10000),\r\n sticky: EditorBooleanOption.boolean(input.sticky, this.defaultValue.sticky)\r\n };\r\n };\r\n return EditorHover;\r\n}(BaseEditorOption));\r\n/**\r\n * @internal\r\n */\r\nvar EditorLayoutInfoComputer = /** @class */ (function (_super) {\r\n __extends(EditorLayoutInfoComputer, _super);\r\n function EditorLayoutInfoComputer() {\r\n return _super.call(this, 103 /* layoutInfo */, [38 /* glyphMargin */, 46 /* lineDecorationsWidth */, 29 /* folding */, 52 /* minimap */, 74 /* scrollbar */, 48 /* lineNumbers */]) || this;\r\n }\r\n EditorLayoutInfoComputer.prototype.compute = function (env, options, _) {\r\n return EditorLayoutInfoComputer.computeLayout(options, {\r\n outerWidth: env.outerWidth,\r\n outerHeight: env.outerHeight,\r\n lineHeight: env.fontInfo.lineHeight,\r\n lineNumbersDigitCount: env.lineNumbersDigitCount,\r\n typicalHalfwidthCharacterWidth: env.fontInfo.typicalHalfwidthCharacterWidth,\r\n maxDigitWidth: env.fontInfo.maxDigitWidth,\r\n pixelRatio: env.pixelRatio\r\n });\r\n };\r\n EditorLayoutInfoComputer.computeLayout = function (options, env) {\r\n var outerWidth = env.outerWidth | 0;\r\n var outerHeight = env.outerHeight | 0;\r\n var lineHeight = env.lineHeight | 0;\r\n var lineNumbersDigitCount = env.lineNumbersDigitCount | 0;\r\n var typicalHalfwidthCharacterWidth = env.typicalHalfwidthCharacterWidth;\r\n var maxDigitWidth = env.maxDigitWidth;\r\n var pixelRatio = env.pixelRatio;\r\n var showGlyphMargin = options.get(38 /* glyphMargin */);\r\n var showLineNumbers = (options.get(48 /* lineNumbers */).renderType !== 0 /* Off */);\r\n var lineNumbersMinChars = options.get(49 /* lineNumbersMinChars */) | 0;\r\n var minimap = options.get(52 /* minimap */);\r\n var minimapEnabled = minimap.enabled;\r\n var minimapSide = minimap.side;\r\n var minimapRenderCharacters = minimap.renderCharacters;\r\n var minimapScale = (pixelRatio >= 2 ? Math.round(minimap.scale * 2) : minimap.scale);\r\n var minimapMaxColumn = minimap.maxColumn | 0;\r\n var scrollbar = options.get(74 /* scrollbar */);\r\n var verticalScrollbarWidth = scrollbar.verticalScrollbarSize | 0;\r\n var verticalScrollbarHasArrows = scrollbar.verticalHasArrows;\r\n var scrollbarArrowSize = scrollbar.arrowSize | 0;\r\n var horizontalScrollbarHeight = scrollbar.horizontalScrollbarSize | 0;\r\n var rawLineDecorationsWidth = options.get(46 /* lineDecorationsWidth */);\r\n var folding = options.get(29 /* folding */);\r\n var lineDecorationsWidth;\r\n if (typeof rawLineDecorationsWidth === 'string' && /^\\d+(\\.\\d+)?ch$/.test(rawLineDecorationsWidth)) {\r\n var multiple = parseFloat(rawLineDecorationsWidth.substr(0, rawLineDecorationsWidth.length - 2));\r\n lineDecorationsWidth = EditorIntOption.clampedInt(multiple * typicalHalfwidthCharacterWidth, 0, 0, 1000);\r\n }\r\n else {\r\n lineDecorationsWidth = EditorIntOption.clampedInt(rawLineDecorationsWidth, 0, 0, 1000);\r\n }\r\n if (folding) {\r\n lineDecorationsWidth += 16;\r\n }\r\n var lineNumbersWidth = 0;\r\n if (showLineNumbers) {\r\n var digitCount = Math.max(lineNumbersDigitCount, lineNumbersMinChars);\r\n lineNumbersWidth = Math.round(digitCount * maxDigitWidth);\r\n }\r\n var glyphMarginWidth = 0;\r\n if (showGlyphMargin) {\r\n glyphMarginWidth = lineHeight;\r\n }\r\n var glyphMarginLeft = 0;\r\n var lineNumbersLeft = glyphMarginLeft + glyphMarginWidth;\r\n var decorationsLeft = lineNumbersLeft + lineNumbersWidth;\r\n var contentLeft = decorationsLeft + lineDecorationsWidth;\r\n var remainingWidth = outerWidth - glyphMarginWidth - lineNumbersWidth - lineDecorationsWidth;\r\n var renderMinimap;\r\n var minimapLeft;\r\n var minimapWidth;\r\n var contentWidth;\r\n if (!minimapEnabled) {\r\n minimapLeft = 0;\r\n minimapWidth = 0;\r\n renderMinimap = 0 /* None */;\r\n contentWidth = remainingWidth;\r\n }\r\n else {\r\n // The minimapScale is also the pixel width of each character. Adjust\r\n // for the pixel ratio of the screen.\r\n var minimapCharWidth = minimapScale / pixelRatio;\r\n renderMinimap = minimapRenderCharacters ? 1 /* Text */ : 2 /* Blocks */;\r\n // Given:\r\n // (leaving 2px for the cursor to have space after the last character)\r\n // viewportColumn = (contentWidth - verticalScrollbarWidth - 2) / typicalHalfwidthCharacterWidth\r\n // minimapWidth = viewportColumn * minimapCharWidth\r\n // contentWidth = remainingWidth - minimapWidth\r\n // What are good values for contentWidth and minimapWidth ?\r\n // minimapWidth = ((contentWidth - verticalScrollbarWidth - 2) / typicalHalfwidthCharacterWidth) * minimapCharWidth\r\n // typicalHalfwidthCharacterWidth * minimapWidth = (contentWidth - verticalScrollbarWidth - 2) * minimapCharWidth\r\n // typicalHalfwidthCharacterWidth * minimapWidth = (remainingWidth - minimapWidth - verticalScrollbarWidth - 2) * minimapCharWidth\r\n // (typicalHalfwidthCharacterWidth + minimapCharWidth) * minimapWidth = (remainingWidth - verticalScrollbarWidth - 2) * minimapCharWidth\r\n // minimapWidth = ((remainingWidth - verticalScrollbarWidth - 2) * minimapCharWidth) / (typicalHalfwidthCharacterWidth + minimapCharWidth)\r\n minimapWidth = Math.max(0, Math.floor(((remainingWidth - verticalScrollbarWidth - 2) * minimapCharWidth) / (typicalHalfwidthCharacterWidth + minimapCharWidth))) + MINIMAP_GUTTER_WIDTH;\r\n var minimapColumns = minimapWidth / minimapCharWidth;\r\n if (minimapColumns > minimapMaxColumn) {\r\n minimapWidth = Math.floor(minimapMaxColumn * minimapCharWidth);\r\n }\r\n contentWidth = remainingWidth - minimapWidth;\r\n if (minimapSide === 'left') {\r\n minimapLeft = 0;\r\n glyphMarginLeft += minimapWidth;\r\n lineNumbersLeft += minimapWidth;\r\n decorationsLeft += minimapWidth;\r\n contentLeft += minimapWidth;\r\n }\r\n else {\r\n minimapLeft = outerWidth - minimapWidth - verticalScrollbarWidth;\r\n }\r\n }\r\n // (leaving 2px for the cursor to have space after the last character)\r\n var viewportColumn = Math.max(1, Math.floor((contentWidth - verticalScrollbarWidth - 2) / typicalHalfwidthCharacterWidth));\r\n var verticalArrowSize = (verticalScrollbarHasArrows ? scrollbarArrowSize : 0);\r\n return {\r\n width: outerWidth,\r\n height: outerHeight,\r\n glyphMarginLeft: glyphMarginLeft,\r\n glyphMarginWidth: glyphMarginWidth,\r\n glyphMarginHeight: outerHeight,\r\n lineNumbersLeft: lineNumbersLeft,\r\n lineNumbersWidth: lineNumbersWidth,\r\n lineNumbersHeight: outerHeight,\r\n decorationsLeft: decorationsLeft,\r\n decorationsWidth: lineDecorationsWidth,\r\n decorationsHeight: outerHeight,\r\n contentLeft: contentLeft,\r\n contentWidth: contentWidth,\r\n contentHeight: outerHeight,\r\n renderMinimap: renderMinimap,\r\n minimapLeft: minimapLeft,\r\n minimapWidth: minimapWidth,\r\n viewportColumn: viewportColumn,\r\n verticalScrollbarWidth: verticalScrollbarWidth,\r\n horizontalScrollbarHeight: horizontalScrollbarHeight,\r\n overviewRuler: {\r\n top: verticalArrowSize,\r\n width: verticalScrollbarWidth,\r\n height: (outerHeight - 2 * verticalArrowSize),\r\n right: 0\r\n }\r\n };\r\n };\r\n return EditorLayoutInfoComputer;\r\n}(ComputedEditorOption));\r\nexport { EditorLayoutInfoComputer };\r\nvar EditorLightbulb = /** @class */ (function (_super) {\r\n __extends(EditorLightbulb, _super);\r\n function EditorLightbulb() {\r\n var _this = this;\r\n var defaults = { enabled: true };\r\n _this = _super.call(this, 45 /* lightbulb */, 'lightbulb', defaults, {\r\n 'editor.lightbulb.enabled': {\r\n type: 'boolean',\r\n default: defaults.enabled,\r\n description: nls.localize('codeActions', \"Enables the code action lightbulb in the editor.\")\r\n },\r\n }) || this;\r\n return _this;\r\n }\r\n EditorLightbulb.prototype.validate = function (_input) {\r\n if (typeof _input !== 'object') {\r\n return this.defaultValue;\r\n }\r\n var input = _input;\r\n return {\r\n enabled: EditorBooleanOption.boolean(input.enabled, this.defaultValue.enabled)\r\n };\r\n };\r\n return EditorLightbulb;\r\n}(BaseEditorOption));\r\n//#endregion\r\n//#region lineHeight\r\nvar EditorLineHeight = /** @class */ (function (_super) {\r\n __extends(EditorLineHeight, _super);\r\n function EditorLineHeight() {\r\n return _super.call(this, 47 /* lineHeight */, 'lineHeight', EDITOR_FONT_DEFAULTS.lineHeight, 0, 150, { description: nls.localize('lineHeight', \"Controls the line height. Use 0 to compute the line height from the font size.\") }) || this;\r\n }\r\n EditorLineHeight.prototype.compute = function (env, options, value) {\r\n // The lineHeight is computed from the fontSize if it is 0.\r\n // Moreover, the final lineHeight respects the editor zoom level.\r\n // So take the result from env.fontInfo\r\n return env.fontInfo.lineHeight;\r\n };\r\n return EditorLineHeight;\r\n}(EditorIntOption));\r\nvar EditorMinimap = /** @class */ (function (_super) {\r\n __extends(EditorMinimap, _super);\r\n function EditorMinimap() {\r\n var _this = this;\r\n var defaults = {\r\n enabled: true,\r\n side: 'right',\r\n showSlider: 'mouseover',\r\n renderCharacters: true,\r\n maxColumn: 120,\r\n scale: 1,\r\n };\r\n _this = _super.call(this, 52 /* minimap */, 'minimap', defaults, {\r\n 'editor.minimap.enabled': {\r\n type: 'boolean',\r\n default: defaults.enabled,\r\n description: nls.localize('minimap.enabled', \"Controls whether the minimap is shown.\")\r\n },\r\n 'editor.minimap.side': {\r\n type: 'string',\r\n enum: ['left', 'right'],\r\n default: defaults.side,\r\n description: nls.localize('minimap.side', \"Controls the side where to render the minimap.\")\r\n },\r\n 'editor.minimap.showSlider': {\r\n type: 'string',\r\n enum: ['always', 'mouseover'],\r\n default: defaults.showSlider,\r\n description: nls.localize('minimap.showSlider', \"Controls when the minimap slider is shown.\")\r\n },\r\n 'editor.minimap.scale': {\r\n type: 'number',\r\n default: defaults.scale,\r\n minimum: 1,\r\n maximum: 3,\r\n description: nls.localize('minimap.scale', \"Scale of content drawn in the minimap.\")\r\n },\r\n 'editor.minimap.renderCharacters': {\r\n type: 'boolean',\r\n default: defaults.renderCharacters,\r\n description: nls.localize('minimap.renderCharacters', \"Render the actual characters on a line as opposed to color blocks.\")\r\n },\r\n 'editor.minimap.maxColumn': {\r\n type: 'number',\r\n default: defaults.maxColumn,\r\n description: nls.localize('minimap.maxColumn', \"Limit the width of the minimap to render at most a certain number of columns.\")\r\n },\r\n }) || this;\r\n return _this;\r\n }\r\n EditorMinimap.prototype.validate = function (_input) {\r\n if (typeof _input !== 'object') {\r\n return this.defaultValue;\r\n }\r\n var input = _input;\r\n return {\r\n enabled: EditorBooleanOption.boolean(input.enabled, this.defaultValue.enabled),\r\n side: EditorStringEnumOption.stringSet(input.side, this.defaultValue.side, ['right', 'left']),\r\n showSlider: EditorStringEnumOption.stringSet(input.showSlider, this.defaultValue.showSlider, ['always', 'mouseover']),\r\n renderCharacters: EditorBooleanOption.boolean(input.renderCharacters, this.defaultValue.renderCharacters),\r\n scale: EditorIntOption.clampedInt(input.scale, 1, 1, 3),\r\n maxColumn: EditorIntOption.clampedInt(input.maxColumn, this.defaultValue.maxColumn, 1, 10000),\r\n };\r\n };\r\n return EditorMinimap;\r\n}(BaseEditorOption));\r\n//#endregion\r\n//#region multiCursorModifier\r\nfunction _multiCursorModifierFromString(multiCursorModifier) {\r\n if (multiCursorModifier === 'ctrlCmd') {\r\n return (platform.isMacintosh ? 'metaKey' : 'ctrlKey');\r\n }\r\n return 'altKey';\r\n}\r\nvar EditorParameterHints = /** @class */ (function (_super) {\r\n __extends(EditorParameterHints, _super);\r\n function EditorParameterHints() {\r\n var _this = this;\r\n var defaults = {\r\n enabled: true,\r\n cycle: false\r\n };\r\n _this = _super.call(this, 62 /* parameterHints */, 'parameterHints', defaults, {\r\n 'editor.parameterHints.enabled': {\r\n type: 'boolean',\r\n default: defaults.enabled,\r\n description: nls.localize('parameterHints.enabled', \"Enables a pop-up that shows parameter documentation and type information as you type.\")\r\n },\r\n 'editor.parameterHints.cycle': {\r\n type: 'boolean',\r\n default: defaults.cycle,\r\n description: nls.localize('parameterHints.cycle', \"Controls whether the parameter hints menu cycles or closes when reaching the end of the list.\")\r\n },\r\n }) || this;\r\n return _this;\r\n }\r\n EditorParameterHints.prototype.validate = function (_input) {\r\n if (typeof _input !== 'object') {\r\n return this.defaultValue;\r\n }\r\n var input = _input;\r\n return {\r\n enabled: EditorBooleanOption.boolean(input.enabled, this.defaultValue.enabled),\r\n cycle: EditorBooleanOption.boolean(input.cycle, this.defaultValue.cycle)\r\n };\r\n };\r\n return EditorParameterHints;\r\n}(BaseEditorOption));\r\n//#endregion\r\n//#region pixelRatio\r\nvar EditorPixelRatio = /** @class */ (function (_super) {\r\n __extends(EditorPixelRatio, _super);\r\n function EditorPixelRatio() {\r\n return _super.call(this, 101 /* pixelRatio */) || this;\r\n }\r\n EditorPixelRatio.prototype.compute = function (env, options, _) {\r\n return env.pixelRatio;\r\n };\r\n return EditorPixelRatio;\r\n}(ComputedEditorOption));\r\nvar EditorQuickSuggestions = /** @class */ (function (_super) {\r\n __extends(EditorQuickSuggestions, _super);\r\n function EditorQuickSuggestions() {\r\n var _this = this;\r\n var defaults = {\r\n other: true,\r\n comments: false,\r\n strings: false\r\n };\r\n _this = _super.call(this, 63 /* quickSuggestions */, 'quickSuggestions', defaults, {\r\n anyOf: [\r\n {\r\n type: 'boolean',\r\n },\r\n {\r\n type: 'object',\r\n properties: {\r\n strings: {\r\n type: 'boolean',\r\n default: defaults.strings,\r\n description: nls.localize('quickSuggestions.strings', \"Enable quick suggestions inside strings.\")\r\n },\r\n comments: {\r\n type: 'boolean',\r\n default: defaults.comments,\r\n description: nls.localize('quickSuggestions.comments', \"Enable quick suggestions inside comments.\")\r\n },\r\n other: {\r\n type: 'boolean',\r\n default: defaults.other,\r\n description: nls.localize('quickSuggestions.other', \"Enable quick suggestions outside of strings and comments.\")\r\n },\r\n }\r\n }\r\n ],\r\n default: defaults,\r\n description: nls.localize('quickSuggestions', \"Controls whether suggestions should automatically show up while typing.\")\r\n }) || this;\r\n _this.defaultValue = defaults;\r\n return _this;\r\n }\r\n EditorQuickSuggestions.prototype.validate = function (_input) {\r\n if (typeof _input === 'boolean') {\r\n return _input;\r\n }\r\n if (typeof _input === 'object') {\r\n var input = _input;\r\n var opts = {\r\n other: EditorBooleanOption.boolean(input.other, this.defaultValue.other),\r\n comments: EditorBooleanOption.boolean(input.comments, this.defaultValue.comments),\r\n strings: EditorBooleanOption.boolean(input.strings, this.defaultValue.strings),\r\n };\r\n if (opts.other && opts.comments && opts.strings) {\r\n return true; // all on\r\n }\r\n else if (!opts.other && !opts.comments && !opts.strings) {\r\n return false; // all off\r\n }\r\n else {\r\n return opts;\r\n }\r\n }\r\n return this.defaultValue;\r\n };\r\n return EditorQuickSuggestions;\r\n}(BaseEditorOption));\r\nvar EditorRenderLineNumbersOption = /** @class */ (function (_super) {\r\n __extends(EditorRenderLineNumbersOption, _super);\r\n function EditorRenderLineNumbersOption() {\r\n return _super.call(this, 48 /* lineNumbers */, 'lineNumbers', { renderType: 1 /* On */, renderFn: null }, {\r\n type: 'string',\r\n enum: ['off', 'on', 'relative', 'interval'],\r\n enumDescriptions: [\r\n nls.localize('lineNumbers.off', \"Line numbers are not rendered.\"),\r\n nls.localize('lineNumbers.on', \"Line numbers are rendered as absolute number.\"),\r\n nls.localize('lineNumbers.relative', \"Line numbers are rendered as distance in lines to cursor position.\"),\r\n nls.localize('lineNumbers.interval', \"Line numbers are rendered every 10 lines.\")\r\n ],\r\n default: 'on',\r\n description: nls.localize('lineNumbers', \"Controls the display of line numbers.\")\r\n }) || this;\r\n }\r\n EditorRenderLineNumbersOption.prototype.validate = function (lineNumbers) {\r\n var renderType = this.defaultValue.renderType;\r\n var renderFn = this.defaultValue.renderFn;\r\n if (typeof lineNumbers !== 'undefined') {\r\n if (typeof lineNumbers === 'function') {\r\n renderType = 4 /* Custom */;\r\n renderFn = lineNumbers;\r\n }\r\n else if (lineNumbers === 'interval') {\r\n renderType = 3 /* Interval */;\r\n }\r\n else if (lineNumbers === 'relative') {\r\n renderType = 2 /* Relative */;\r\n }\r\n else if (lineNumbers === 'on') {\r\n renderType = 1 /* On */;\r\n }\r\n else {\r\n renderType = 0 /* Off */;\r\n }\r\n }\r\n return {\r\n renderType: renderType,\r\n renderFn: renderFn\r\n };\r\n };\r\n return EditorRenderLineNumbersOption;\r\n}(BaseEditorOption));\r\n//#endregion\r\n//#region rulers\r\nvar EditorRulers = /** @class */ (function (_super) {\r\n __extends(EditorRulers, _super);\r\n function EditorRulers() {\r\n var _this = this;\r\n var defaults = [];\r\n _this = _super.call(this, 73 /* rulers */, 'rulers', defaults, {\r\n type: 'array',\r\n items: {\r\n type: 'number'\r\n },\r\n default: defaults,\r\n description: nls.localize('rulers', \"Render vertical rulers after a certain number of monospace characters. Use multiple values for multiple rulers. No rulers are drawn if array is empty.\")\r\n }) || this;\r\n return _this;\r\n }\r\n EditorRulers.prototype.validate = function (input) {\r\n if (Array.isArray(input)) {\r\n var rulers = [];\r\n for (var _i = 0, input_1 = input; _i < input_1.length; _i++) {\r\n var value = input_1[_i];\r\n rulers.push(EditorIntOption.clampedInt(value, 0, 0, 10000));\r\n }\r\n rulers.sort(function (a, b) { return a - b; });\r\n return rulers;\r\n }\r\n return this.defaultValue;\r\n };\r\n return EditorRulers;\r\n}(SimpleEditorOption));\r\nfunction _scrollbarVisibilityFromString(visibility, defaultValue) {\r\n if (typeof visibility !== 'string') {\r\n return defaultValue;\r\n }\r\n switch (visibility) {\r\n case 'hidden': return 2 /* Hidden */;\r\n case 'visible': return 3 /* Visible */;\r\n default: return 1 /* Auto */;\r\n }\r\n}\r\nvar EditorScrollbar = /** @class */ (function (_super) {\r\n __extends(EditorScrollbar, _super);\r\n function EditorScrollbar() {\r\n return _super.call(this, 74 /* scrollbar */, 'scrollbar', {\r\n vertical: 1 /* Auto */,\r\n horizontal: 1 /* Auto */,\r\n arrowSize: 11,\r\n useShadows: true,\r\n verticalHasArrows: false,\r\n horizontalHasArrows: false,\r\n horizontalScrollbarSize: 10,\r\n horizontalSliderSize: 10,\r\n verticalScrollbarSize: 14,\r\n verticalSliderSize: 14,\r\n handleMouseWheel: true,\r\n alwaysConsumeMouseWheel: true\r\n }) || this;\r\n }\r\n EditorScrollbar.prototype.validate = function (_input) {\r\n if (typeof _input !== 'object') {\r\n return this.defaultValue;\r\n }\r\n var input = _input;\r\n var horizontalScrollbarSize = EditorIntOption.clampedInt(input.horizontalScrollbarSize, this.defaultValue.horizontalScrollbarSize, 0, 1000);\r\n var verticalScrollbarSize = EditorIntOption.clampedInt(input.verticalScrollbarSize, this.defaultValue.verticalScrollbarSize, 0, 1000);\r\n return {\r\n arrowSize: EditorIntOption.clampedInt(input.arrowSize, this.defaultValue.arrowSize, 0, 1000),\r\n vertical: _scrollbarVisibilityFromString(input.vertical, this.defaultValue.vertical),\r\n horizontal: _scrollbarVisibilityFromString(input.horizontal, this.defaultValue.horizontal),\r\n useShadows: EditorBooleanOption.boolean(input.useShadows, this.defaultValue.useShadows),\r\n verticalHasArrows: EditorBooleanOption.boolean(input.verticalHasArrows, this.defaultValue.verticalHasArrows),\r\n horizontalHasArrows: EditorBooleanOption.boolean(input.horizontalHasArrows, this.defaultValue.horizontalHasArrows),\r\n handleMouseWheel: EditorBooleanOption.boolean(input.handleMouseWheel, this.defaultValue.handleMouseWheel),\r\n alwaysConsumeMouseWheel: EditorBooleanOption.boolean(input.alwaysConsumeMouseWheel, this.defaultValue.alwaysConsumeMouseWheel),\r\n horizontalScrollbarSize: horizontalScrollbarSize,\r\n horizontalSliderSize: EditorIntOption.clampedInt(input.horizontalSliderSize, horizontalScrollbarSize, 0, 1000),\r\n verticalScrollbarSize: verticalScrollbarSize,\r\n verticalSliderSize: EditorIntOption.clampedInt(input.verticalSliderSize, verticalScrollbarSize, 0, 1000),\r\n };\r\n };\r\n return EditorScrollbar;\r\n}(BaseEditorOption));\r\nvar EditorSuggest = /** @class */ (function (_super) {\r\n __extends(EditorSuggest, _super);\r\n function EditorSuggest() {\r\n var _this = this;\r\n var defaults = {\r\n insertMode: 'insert',\r\n insertHighlight: false,\r\n filterGraceful: true,\r\n snippetsPreventQuickSuggestions: true,\r\n localityBonus: false,\r\n shareSuggestSelections: false,\r\n showIcons: true,\r\n maxVisibleSuggestions: 12,\r\n showMethods: true,\r\n showFunctions: true,\r\n showConstructors: true,\r\n showFields: true,\r\n showVariables: true,\r\n showClasses: true,\r\n showStructs: true,\r\n showInterfaces: true,\r\n showModules: true,\r\n showProperties: true,\r\n showEvents: true,\r\n showOperators: true,\r\n showUnits: true,\r\n showValues: true,\r\n showConstants: true,\r\n showEnums: true,\r\n showEnumMembers: true,\r\n showKeywords: true,\r\n showWords: true,\r\n showColors: true,\r\n showFiles: true,\r\n showReferences: true,\r\n showFolders: true,\r\n showTypeParameters: true,\r\n showSnippets: true,\r\n };\r\n _this = _super.call(this, 85 /* suggest */, 'suggest', defaults, {\r\n 'editor.suggest.insertMode': {\r\n type: 'string',\r\n enum: ['insert', 'replace'],\r\n enumDescriptions: [\r\n nls.localize('suggest.insertMode.insert', \"Insert suggestion without overwriting text right of the cursor.\"),\r\n nls.localize('suggest.insertMode.replace', \"Insert suggestion and overwrite text right of the cursor.\"),\r\n ],\r\n default: defaults.insertMode,\r\n description: nls.localize('suggest.insertMode', \"Controls whether words are overwritten when accepting completions. Note that this depends on extensions opting into this feature.\")\r\n },\r\n 'editor.suggest.insertHighlight': {\r\n type: 'boolean',\r\n default: defaults.insertHighlight,\r\n description: nls.localize('suggest.insertHighlight', \"Controls whether unexpected text modifications while accepting completions should be highlighted, e.g `insertMode` is `replace` but the completion only supports `insert`.\")\r\n },\r\n 'editor.suggest.filterGraceful': {\r\n type: 'boolean',\r\n default: defaults.filterGraceful,\r\n description: nls.localize('suggest.filterGraceful', \"Controls whether filtering and sorting suggestions accounts for small typos.\")\r\n },\r\n 'editor.suggest.localityBonus': {\r\n type: 'boolean',\r\n default: defaults.localityBonus,\r\n description: nls.localize('suggest.localityBonus', \"Controls whether sorting favours words that appear close to the cursor.\")\r\n },\r\n 'editor.suggest.shareSuggestSelections': {\r\n type: 'boolean',\r\n default: defaults.shareSuggestSelections,\r\n markdownDescription: nls.localize('suggest.shareSuggestSelections', \"Controls whether remembered suggestion selections are shared between multiple workspaces and windows (needs `#editor.suggestSelection#`).\")\r\n },\r\n 'editor.suggest.snippetsPreventQuickSuggestions': {\r\n type: 'boolean',\r\n default: defaults.snippetsPreventQuickSuggestions,\r\n description: nls.localize('suggest.snippetsPreventQuickSuggestions', \"Control whether an active snippet prevents quick suggestions.\")\r\n },\r\n 'editor.suggest.showIcons': {\r\n type: 'boolean',\r\n default: defaults.showIcons,\r\n description: nls.localize('suggest.showIcons', \"Controls whether to show or hide icons in suggestions.\")\r\n },\r\n 'editor.suggest.maxVisibleSuggestions': {\r\n type: 'number',\r\n default: defaults.maxVisibleSuggestions,\r\n minimum: 1,\r\n maximum: 15,\r\n description: nls.localize('suggest.maxVisibleSuggestions', \"Controls how many suggestions IntelliSense will show before showing a scrollbar (maximum 15).\")\r\n },\r\n 'editor.suggest.filteredTypes': {\r\n type: 'object',\r\n deprecationMessage: nls.localize('deprecated', \"This setting is deprecated, please use separate settings like 'editor.suggest.showKeywords' or 'editor.suggest.showSnippets' instead.\")\r\n },\r\n 'editor.suggest.showMethods': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showMethods', \"When enabled IntelliSense shows `method`-suggestions.\")\r\n },\r\n 'editor.suggest.showFunctions': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showFunctions', \"When enabled IntelliSense shows `function`-suggestions.\")\r\n },\r\n 'editor.suggest.showConstructors': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showConstructors', \"When enabled IntelliSense shows `constructor`-suggestions.\")\r\n },\r\n 'editor.suggest.showFields': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showFields', \"When enabled IntelliSense shows `field`-suggestions.\")\r\n },\r\n 'editor.suggest.showVariables': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showVariables', \"When enabled IntelliSense shows `variable`-suggestions.\")\r\n },\r\n 'editor.suggest.showClasses': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showClasss', \"When enabled IntelliSense shows `class`-suggestions.\")\r\n },\r\n 'editor.suggest.showStructs': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showStructs', \"When enabled IntelliSense shows `struct`-suggestions.\")\r\n },\r\n 'editor.suggest.showInterfaces': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showInterfaces', \"When enabled IntelliSense shows `interface`-suggestions.\")\r\n },\r\n 'editor.suggest.showModules': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showModules', \"When enabled IntelliSense shows `module`-suggestions.\")\r\n },\r\n 'editor.suggest.showProperties': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showPropertys', \"When enabled IntelliSense shows `property`-suggestions.\")\r\n },\r\n 'editor.suggest.showEvents': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showEvents', \"When enabled IntelliSense shows `event`-suggestions.\")\r\n },\r\n 'editor.suggest.showOperators': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showOperators', \"When enabled IntelliSense shows `operator`-suggestions.\")\r\n },\r\n 'editor.suggest.showUnits': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showUnits', \"When enabled IntelliSense shows `unit`-suggestions.\")\r\n },\r\n 'editor.suggest.showValues': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showValues', \"When enabled IntelliSense shows `value`-suggestions.\")\r\n },\r\n 'editor.suggest.showConstants': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showConstants', \"When enabled IntelliSense shows `constant`-suggestions.\")\r\n },\r\n 'editor.suggest.showEnums': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showEnums', \"When enabled IntelliSense shows `enum`-suggestions.\")\r\n },\r\n 'editor.suggest.showEnumMembers': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showEnumMembers', \"When enabled IntelliSense shows `enumMember`-suggestions.\")\r\n },\r\n 'editor.suggest.showKeywords': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showKeywords', \"When enabled IntelliSense shows `keyword`-suggestions.\")\r\n },\r\n 'editor.suggest.showWords': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showTexts', \"When enabled IntelliSense shows `text`-suggestions.\")\r\n },\r\n 'editor.suggest.showColors': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showColors', \"When enabled IntelliSense shows `color`-suggestions.\")\r\n },\r\n 'editor.suggest.showFiles': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showFiles', \"When enabled IntelliSense shows `file`-suggestions.\")\r\n },\r\n 'editor.suggest.showReferences': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showReferences', \"When enabled IntelliSense shows `reference`-suggestions.\")\r\n },\r\n 'editor.suggest.showCustomcolors': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showCustomcolors', \"When enabled IntelliSense shows `customcolor`-suggestions.\")\r\n },\r\n 'editor.suggest.showFolders': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showFolders', \"When enabled IntelliSense shows `folder`-suggestions.\")\r\n },\r\n 'editor.suggest.showTypeParameters': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showTypeParameters', \"When enabled IntelliSense shows `typeParameter`-suggestions.\")\r\n },\r\n 'editor.suggest.showSnippets': {\r\n type: 'boolean',\r\n default: true,\r\n markdownDescription: nls.localize('editor.suggest.showSnippets', \"When enabled IntelliSense shows `snippet`-suggestions.\")\r\n },\r\n }) || this;\r\n return _this;\r\n }\r\n EditorSuggest.prototype.validate = function (_input) {\r\n if (typeof _input !== 'object') {\r\n return this.defaultValue;\r\n }\r\n var input = _input;\r\n return {\r\n insertMode: EditorStringEnumOption.stringSet(input.insertMode, this.defaultValue.insertMode, ['insert', 'replace']),\r\n insertHighlight: EditorBooleanOption.boolean(input.insertHighlight, this.defaultValue.insertHighlight),\r\n filterGraceful: EditorBooleanOption.boolean(input.filterGraceful, this.defaultValue.filterGraceful),\r\n snippetsPreventQuickSuggestions: EditorBooleanOption.boolean(input.snippetsPreventQuickSuggestions, this.defaultValue.filterGraceful),\r\n localityBonus: EditorBooleanOption.boolean(input.localityBonus, this.defaultValue.localityBonus),\r\n shareSuggestSelections: EditorBooleanOption.boolean(input.shareSuggestSelections, this.defaultValue.shareSuggestSelections),\r\n showIcons: EditorBooleanOption.boolean(input.showIcons, this.defaultValue.showIcons),\r\n maxVisibleSuggestions: EditorIntOption.clampedInt(input.maxVisibleSuggestions, this.defaultValue.maxVisibleSuggestions, 1, 15),\r\n showMethods: EditorBooleanOption.boolean(input.showMethods, this.defaultValue.showMethods),\r\n showFunctions: EditorBooleanOption.boolean(input.showFunctions, this.defaultValue.showFunctions),\r\n showConstructors: EditorBooleanOption.boolean(input.showConstructors, this.defaultValue.showConstructors),\r\n showFields: EditorBooleanOption.boolean(input.showFields, this.defaultValue.showFields),\r\n showVariables: EditorBooleanOption.boolean(input.showVariables, this.defaultValue.showVariables),\r\n showClasses: EditorBooleanOption.boolean(input.showClasses, this.defaultValue.showClasses),\r\n showStructs: EditorBooleanOption.boolean(input.showStructs, this.defaultValue.showStructs),\r\n showInterfaces: EditorBooleanOption.boolean(input.showInterfaces, this.defaultValue.showInterfaces),\r\n showModules: EditorBooleanOption.boolean(input.showModules, this.defaultValue.showModules),\r\n showProperties: EditorBooleanOption.boolean(input.showProperties, this.defaultValue.showProperties),\r\n showEvents: EditorBooleanOption.boolean(input.showEvents, this.defaultValue.showEvents),\r\n showOperators: EditorBooleanOption.boolean(input.showOperators, this.defaultValue.showOperators),\r\n showUnits: EditorBooleanOption.boolean(input.showUnits, this.defaultValue.showUnits),\r\n showValues: EditorBooleanOption.boolean(input.showValues, this.defaultValue.showValues),\r\n showConstants: EditorBooleanOption.boolean(input.showConstants, this.defaultValue.showConstants),\r\n showEnums: EditorBooleanOption.boolean(input.showEnums, this.defaultValue.showEnums),\r\n showEnumMembers: EditorBooleanOption.boolean(input.showEnumMembers, this.defaultValue.showEnumMembers),\r\n showKeywords: EditorBooleanOption.boolean(input.showKeywords, this.defaultValue.showKeywords),\r\n showWords: EditorBooleanOption.boolean(input.showWords, this.defaultValue.showWords),\r\n showColors: EditorBooleanOption.boolean(input.showColors, this.defaultValue.showColors),\r\n showFiles: EditorBooleanOption.boolean(input.showFiles, this.defaultValue.showFiles),\r\n showReferences: EditorBooleanOption.boolean(input.showReferences, this.defaultValue.showReferences),\r\n showFolders: EditorBooleanOption.boolean(input.showFolders, this.defaultValue.showFolders),\r\n showTypeParameters: EditorBooleanOption.boolean(input.showTypeParameters, this.defaultValue.showTypeParameters),\r\n showSnippets: EditorBooleanOption.boolean(input.showSnippets, this.defaultValue.showSnippets),\r\n };\r\n };\r\n return EditorSuggest;\r\n}(BaseEditorOption));\r\n//#endregion\r\n//#region tabFocusMode\r\nvar EditorTabFocusMode = /** @class */ (function (_super) {\r\n __extends(EditorTabFocusMode, _super);\r\n function EditorTabFocusMode() {\r\n return _super.call(this, 102 /* tabFocusMode */, [65 /* readOnly */]) || this;\r\n }\r\n EditorTabFocusMode.prototype.compute = function (env, options, _) {\r\n var readOnly = options.get(65 /* readOnly */);\r\n return (readOnly ? true : env.tabFocusMode);\r\n };\r\n return EditorTabFocusMode;\r\n}(ComputedEditorOption));\r\nfunction _wrappingIndentFromString(wrappingIndent) {\r\n switch (wrappingIndent) {\r\n case 'none': return 0 /* None */;\r\n case 'same': return 1 /* Same */;\r\n case 'indent': return 2 /* Indent */;\r\n case 'deepIndent': return 3 /* DeepIndent */;\r\n }\r\n}\r\nvar EditorWrappingInfoComputer = /** @class */ (function (_super) {\r\n __extends(EditorWrappingInfoComputer, _super);\r\n function EditorWrappingInfoComputer() {\r\n return _super.call(this, 104 /* wrappingInfo */, [93 /* wordWrap */, 97 /* wordWrapColumn */, 98 /* wordWrapMinified */, 103 /* layoutInfo */, 2 /* accessibilitySupport */]) || this;\r\n }\r\n EditorWrappingInfoComputer.prototype.compute = function (env, options, _) {\r\n var wordWrap = options.get(93 /* wordWrap */);\r\n var wordWrapColumn = options.get(97 /* wordWrapColumn */);\r\n var wordWrapMinified = options.get(98 /* wordWrapMinified */);\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n var accessibilitySupport = options.get(2 /* accessibilitySupport */);\r\n var bareWrappingInfo = null;\r\n {\r\n if (accessibilitySupport === 2 /* Enabled */) {\r\n // See https://github.com/Microsoft/vscode/issues/27766\r\n // Never enable wrapping when a screen reader is attached\r\n // because arrow down etc. will not move the cursor in the way\r\n // a screen reader expects.\r\n bareWrappingInfo = {\r\n isWordWrapMinified: false,\r\n isViewportWrapping: false,\r\n wrappingColumn: -1\r\n };\r\n }\r\n else if (wordWrapMinified && env.isDominatedByLongLines) {\r\n // Force viewport width wrapping if model is dominated by long lines\r\n bareWrappingInfo = {\r\n isWordWrapMinified: true,\r\n isViewportWrapping: true,\r\n wrappingColumn: Math.max(1, layoutInfo.viewportColumn)\r\n };\r\n }\r\n else if (wordWrap === 'on') {\r\n bareWrappingInfo = {\r\n isWordWrapMinified: false,\r\n isViewportWrapping: true,\r\n wrappingColumn: Math.max(1, layoutInfo.viewportColumn)\r\n };\r\n }\r\n else if (wordWrap === 'bounded') {\r\n bareWrappingInfo = {\r\n isWordWrapMinified: false,\r\n isViewportWrapping: true,\r\n wrappingColumn: Math.min(Math.max(1, layoutInfo.viewportColumn), wordWrapColumn)\r\n };\r\n }\r\n else if (wordWrap === 'wordWrapColumn') {\r\n bareWrappingInfo = {\r\n isWordWrapMinified: false,\r\n isViewportWrapping: false,\r\n wrappingColumn: wordWrapColumn\r\n };\r\n }\r\n else {\r\n bareWrappingInfo = {\r\n isWordWrapMinified: false,\r\n isViewportWrapping: false,\r\n wrappingColumn: -1\r\n };\r\n }\r\n }\r\n return {\r\n isDominatedByLongLines: env.isDominatedByLongLines,\r\n isWordWrapMinified: bareWrappingInfo.isWordWrapMinified,\r\n isViewportWrapping: bareWrappingInfo.isViewportWrapping,\r\n wrappingColumn: bareWrappingInfo.wrappingColumn,\r\n };\r\n };\r\n return EditorWrappingInfoComputer;\r\n}(ComputedEditorOption));\r\n//#endregion\r\nvar DEFAULT_WINDOWS_FONT_FAMILY = 'Consolas, \\'Courier New\\', monospace';\r\nvar DEFAULT_MAC_FONT_FAMILY = 'Menlo, Monaco, \\'Courier New\\', monospace';\r\nvar DEFAULT_LINUX_FONT_FAMILY = '\\'Droid Sans Mono\\', \\'monospace\\', monospace, \\'Droid Sans Fallback\\'';\r\n/**\r\n * @internal\r\n */\r\nexport var EDITOR_FONT_DEFAULTS = {\r\n fontFamily: (platform.isMacintosh ? DEFAULT_MAC_FONT_FAMILY : (platform.isLinux ? DEFAULT_LINUX_FONT_FAMILY : DEFAULT_WINDOWS_FONT_FAMILY)),\r\n fontWeight: 'normal',\r\n fontSize: (platform.isMacintosh ? 12 : 14),\r\n lineHeight: 0,\r\n letterSpacing: 0,\r\n};\r\n/**\r\n * @internal\r\n */\r\nexport var EDITOR_MODEL_DEFAULTS = {\r\n tabSize: 4,\r\n indentSize: 4,\r\n insertSpaces: true,\r\n detectIndentation: true,\r\n trimAutoWhitespace: true,\r\n largeFileOptimizations: true\r\n};\r\n/**\r\n * @internal\r\n */\r\nexport var editorOptionsRegistry = [];\r\nfunction register(option) {\r\n editorOptionsRegistry[option.id] = option;\r\n return option;\r\n}\r\n/**\r\n * WORKAROUND: TS emits \"any\" for complex editor options values (anything except string, bool, enum, etc. ends up being \"any\")\r\n * @monacodtsreplace\r\n * /accessibilitySupport, any/accessibilitySupport, AccessibilitySupport/\r\n * /find, any/find, EditorFindOptions/\r\n * /fontInfo, any/fontInfo, FontInfo/\r\n * /gotoLocation, any/gotoLocation, GoToLocationOptions/\r\n * /hover, any/hover, EditorHoverOptions/\r\n * /lightbulb, any/lightbulb, EditorLightbulbOptions/\r\n * /minimap, any/minimap, EditorMinimapOptions/\r\n * /parameterHints, any/parameterHints, InternalParameterHintOptions/\r\n * /quickSuggestions, any/quickSuggestions, ValidQuickSuggestionsOptions/\r\n * /suggest, any/suggest, InternalSuggestOptions/\r\n */\r\nexport var EditorOptions = {\r\n acceptSuggestionOnCommitCharacter: register(new EditorBooleanOption(0 /* acceptSuggestionOnCommitCharacter */, 'acceptSuggestionOnCommitCharacter', true, { markdownDescription: nls.localize('acceptSuggestionOnCommitCharacter', \"Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character.\") })),\r\n acceptSuggestionOnEnter: register(new EditorStringEnumOption(1 /* acceptSuggestionOnEnter */, 'acceptSuggestionOnEnter', 'on', ['on', 'smart', 'off'], {\r\n markdownEnumDescriptions: [\r\n '',\r\n nls.localize('acceptSuggestionOnEnterSmart', \"Only accept a suggestion with `Enter` when it makes a textual change.\"),\r\n ''\r\n ],\r\n markdownDescription: nls.localize('acceptSuggestionOnEnter', \"Controls whether suggestions should be accepted on `Enter`, in addition to `Tab`. Helps to avoid ambiguity between inserting new lines or accepting suggestions.\")\r\n })),\r\n accessibilitySupport: register(new EditorAccessibilitySupport()),\r\n accessibilityPageSize: register(new EditorIntOption(3 /* accessibilityPageSize */, 'accessibilityPageSize', 10, 1, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, { description: nls.localize('accessibilityPageSize', \"Controls the number of lines in the editor that can be read out by a screen reader. Warning: this has a performance implication for numbers larger than the default.\") })),\r\n ariaLabel: register(new EditorStringOption(4 /* ariaLabel */, 'ariaLabel', nls.localize('editorViewAccessibleLabel', \"Editor content\"))),\r\n autoClosingBrackets: register(new EditorStringEnumOption(5 /* autoClosingBrackets */, 'autoClosingBrackets', 'languageDefined', ['always', 'languageDefined', 'beforeWhitespace', 'never'], {\r\n enumDescriptions: [\r\n '',\r\n nls.localize('editor.autoClosingBrackets.languageDefined', \"Use language configurations to determine when to autoclose brackets.\"),\r\n nls.localize('editor.autoClosingBrackets.beforeWhitespace', \"Autoclose brackets only when the cursor is to the left of whitespace.\"),\r\n '',\r\n ],\r\n description: nls.localize('autoClosingBrackets', \"Controls whether the editor should automatically close brackets after the user adds an opening bracket.\")\r\n })),\r\n autoClosingOvertype: register(new EditorStringEnumOption(6 /* autoClosingOvertype */, 'autoClosingOvertype', 'auto', ['always', 'auto', 'never'], {\r\n enumDescriptions: [\r\n '',\r\n nls.localize('editor.autoClosingOvertype.auto', \"Type over closing quotes or brackets only if they were automatically inserted.\"),\r\n '',\r\n ],\r\n description: nls.localize('autoClosingOvertype', \"Controls whether the editor should type over closing quotes or brackets.\")\r\n })),\r\n autoClosingQuotes: register(new EditorStringEnumOption(7 /* autoClosingQuotes */, 'autoClosingQuotes', 'languageDefined', ['always', 'languageDefined', 'beforeWhitespace', 'never'], {\r\n enumDescriptions: [\r\n '',\r\n nls.localize('editor.autoClosingQuotes.languageDefined', \"Use language configurations to determine when to autoclose quotes.\"),\r\n nls.localize('editor.autoClosingQuotes.beforeWhitespace', \"Autoclose quotes only when the cursor is to the left of whitespace.\"),\r\n '',\r\n ],\r\n description: nls.localize('autoClosingQuotes', \"Controls whether the editor should automatically close quotes after the user adds an opening quote.\")\r\n })),\r\n autoIndent: register(new EditorEnumOption(8 /* autoIndent */, 'autoIndent', 4 /* Full */, 'full', ['none', 'keep', 'brackets', 'advanced', 'full'], _autoIndentFromString, {\r\n enumDescriptions: [\r\n nls.localize('editor.autoIndent.none', \"The editor will not insert indentation automatically.\"),\r\n nls.localize('editor.autoIndent.keep', \"The editor will keep the current line's indentation.\"),\r\n nls.localize('editor.autoIndent.brackets', \"The editor will keep the current line's indentation and honor language defined brackets.\"),\r\n nls.localize('editor.autoIndent.advanced', \"The editor will keep the current line's indentation, honor language defined brackets and invoke special onEnterRules defined by languages.\"),\r\n nls.localize('editor.autoIndent.full', \"The editor will keep the current line's indentation, honor language defined brackets, invoke special onEnterRules defined by languages, and honor indentationRules defined by languages.\"),\r\n ],\r\n description: nls.localize('autoIndent', \"Controls whether the editor should automatically adjust the indentation when users type, paste, move or indent lines.\")\r\n })),\r\n automaticLayout: register(new EditorBooleanOption(9 /* automaticLayout */, 'automaticLayout', false)),\r\n autoSurround: register(new EditorStringEnumOption(10 /* autoSurround */, 'autoSurround', 'languageDefined', ['languageDefined', 'quotes', 'brackets', 'never'], {\r\n enumDescriptions: [\r\n nls.localize('editor.autoSurround.languageDefined', \"Use language configurations to determine when to automatically surround selections.\"),\r\n nls.localize('editor.autoSurround.quotes', \"Surround with quotes but not brackets.\"),\r\n nls.localize('editor.autoSurround.brackets', \"Surround with brackets but not quotes.\"),\r\n ''\r\n ],\r\n description: nls.localize('autoSurround', \"Controls whether the editor should automatically surround selections.\")\r\n })),\r\n codeLens: register(new EditorBooleanOption(11 /* codeLens */, 'codeLens', true, { description: nls.localize('codeLens', \"Controls whether the editor shows CodeLens.\") })),\r\n colorDecorators: register(new EditorBooleanOption(12 /* colorDecorators */, 'colorDecorators', true, { description: nls.localize('colorDecorators', \"Controls whether the editor should render the inline color decorators and color picker.\") })),\r\n contextmenu: register(new EditorBooleanOption(13 /* contextmenu */, 'contextmenu', true)),\r\n copyWithSyntaxHighlighting: register(new EditorBooleanOption(14 /* copyWithSyntaxHighlighting */, 'copyWithSyntaxHighlighting', true, { description: nls.localize('copyWithSyntaxHighlighting', \"Controls whether syntax highlighting should be copied into the clipboard.\") })),\r\n cursorBlinking: register(new EditorEnumOption(15 /* cursorBlinking */, 'cursorBlinking', 1 /* Blink */, 'blink', ['blink', 'smooth', 'phase', 'expand', 'solid'], _cursorBlinkingStyleFromString, { description: nls.localize('cursorBlinking', \"Control the cursor animation style.\") })),\r\n cursorSmoothCaretAnimation: register(new EditorBooleanOption(16 /* cursorSmoothCaretAnimation */, 'cursorSmoothCaretAnimation', false, { description: nls.localize('cursorSmoothCaretAnimation', \"Controls whether the smooth caret animation should be enabled.\") })),\r\n cursorStyle: register(new EditorEnumOption(17 /* cursorStyle */, 'cursorStyle', TextEditorCursorStyle.Line, 'line', ['line', 'block', 'underline', 'line-thin', 'block-outline', 'underline-thin'], _cursorStyleFromString, { description: nls.localize('cursorStyle', \"Controls the cursor style.\") })),\r\n cursorSurroundingLines: register(new EditorIntOption(18 /* cursorSurroundingLines */, 'cursorSurroundingLines', 0, 0, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, { description: nls.localize('cursorSurroundingLines', \"Controls the minimal number of visible leading and trailing lines surrounding the cursor. Known as 'scrollOff' or `scrollOffset` in some other editors.\") })),\r\n cursorSurroundingLinesStyle: register(new EditorStringEnumOption(19 /* cursorSurroundingLinesStyle */, 'cursorSurroundingLinesStyle', 'default', ['default', 'all'], {\r\n enumDescriptions: [\r\n nls.localize('cursorSurroundingLinesStyle.default', \"`cursorSurroundingLines` is enforced only when triggered via the keyboard or API.\"),\r\n nls.localize('cursorSurroundingLinesStyle.all', \"`cursorSurroundingLines` is enforced always.\")\r\n ],\r\n description: nls.localize('cursorSurroundingLinesStyle', \"Controls when `cursorSurroundingLines` should be enforced.\")\r\n })),\r\n cursorWidth: register(new EditorIntOption(20 /* cursorWidth */, 'cursorWidth', 0, 0, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, { markdownDescription: nls.localize('cursorWidth', \"Controls the width of the cursor when `#editor.cursorStyle#` is set to `line`.\") })),\r\n disableLayerHinting: register(new EditorBooleanOption(21 /* disableLayerHinting */, 'disableLayerHinting', false)),\r\n disableMonospaceOptimizations: register(new EditorBooleanOption(22 /* disableMonospaceOptimizations */, 'disableMonospaceOptimizations', false)),\r\n dragAndDrop: register(new EditorBooleanOption(23 /* dragAndDrop */, 'dragAndDrop', true, { description: nls.localize('dragAndDrop', \"Controls whether the editor should allow moving selections via drag and drop.\") })),\r\n emptySelectionClipboard: register(new EditorEmptySelectionClipboard()),\r\n extraEditorClassName: register(new EditorStringOption(25 /* extraEditorClassName */, 'extraEditorClassName', '')),\r\n fastScrollSensitivity: register(new EditorFloatOption(26 /* fastScrollSensitivity */, 'fastScrollSensitivity', 5, function (x) { return (x <= 0 ? 5 : x); }, { markdownDescription: nls.localize('fastScrollSensitivity', \"Scrolling speed multiplier when pressing `Alt`.\") })),\r\n find: register(new EditorFind()),\r\n fixedOverflowWidgets: register(new EditorBooleanOption(28 /* fixedOverflowWidgets */, 'fixedOverflowWidgets', false)),\r\n folding: register(new EditorBooleanOption(29 /* folding */, 'folding', true, { description: nls.localize('folding', \"Controls whether the editor has code folding enabled.\") })),\r\n foldingStrategy: register(new EditorStringEnumOption(30 /* foldingStrategy */, 'foldingStrategy', 'auto', ['auto', 'indentation'], { markdownDescription: nls.localize('foldingStrategy', \"Controls the strategy for computing folding ranges. `auto` uses a language specific folding strategy, if available. `indentation` uses the indentation based folding strategy.\") })),\r\n fontFamily: register(new EditorStringOption(31 /* fontFamily */, 'fontFamily', EDITOR_FONT_DEFAULTS.fontFamily, { description: nls.localize('fontFamily', \"Controls the font family.\") })),\r\n fontInfo: register(new EditorFontInfo()),\r\n fontLigatures2: register(new EditorFontLigatures()),\r\n fontSize: register(new EditorFontSize()),\r\n fontWeight: register(new EditorStringOption(35 /* fontWeight */, 'fontWeight', EDITOR_FONT_DEFAULTS.fontWeight, {\r\n enum: ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'],\r\n description: nls.localize('fontWeight', \"Controls the font weight.\")\r\n })),\r\n formatOnPaste: register(new EditorBooleanOption(36 /* formatOnPaste */, 'formatOnPaste', false, { description: nls.localize('formatOnPaste', \"Controls whether the editor should automatically format the pasted content. A formatter must be available and the formatter should be able to format a range in a document.\") })),\r\n formatOnType: register(new EditorBooleanOption(37 /* formatOnType */, 'formatOnType', false, { description: nls.localize('formatOnType', \"Controls whether the editor should automatically format the line after typing.\") })),\r\n glyphMargin: register(new EditorBooleanOption(38 /* glyphMargin */, 'glyphMargin', true, { description: nls.localize('glyphMargin', \"Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.\") })),\r\n gotoLocation: register(new EditorGoToLocation()),\r\n hideCursorInOverviewRuler: register(new EditorBooleanOption(40 /* hideCursorInOverviewRuler */, 'hideCursorInOverviewRuler', false, { description: nls.localize('hideCursorInOverviewRuler', \"Controls whether the cursor should be hidden in the overview ruler.\") })),\r\n highlightActiveIndentGuide: register(new EditorBooleanOption(41 /* highlightActiveIndentGuide */, 'highlightActiveIndentGuide', true, { description: nls.localize('highlightActiveIndentGuide', \"Controls whether the editor should highlight the active indent guide.\") })),\r\n hover: register(new EditorHover()),\r\n inDiffEditor: register(new EditorBooleanOption(43 /* inDiffEditor */, 'inDiffEditor', false)),\r\n letterSpacing: register(new EditorFloatOption(44 /* letterSpacing */, 'letterSpacing', EDITOR_FONT_DEFAULTS.letterSpacing, function (x) { return EditorFloatOption.clamp(x, -5, 20); }, { description: nls.localize('letterSpacing', \"Controls the letter spacing in pixels.\") })),\r\n lightbulb: register(new EditorLightbulb()),\r\n lineDecorationsWidth: register(new SimpleEditorOption(46 /* lineDecorationsWidth */, 'lineDecorationsWidth', 10)),\r\n lineHeight: register(new EditorLineHeight()),\r\n lineNumbers: register(new EditorRenderLineNumbersOption()),\r\n lineNumbersMinChars: register(new EditorIntOption(49 /* lineNumbersMinChars */, 'lineNumbersMinChars', 5, 1, 300)),\r\n links: register(new EditorBooleanOption(50 /* links */, 'links', true, { description: nls.localize('links', \"Controls whether the editor should detect links and make them clickable.\") })),\r\n matchBrackets: register(new EditorStringEnumOption(51 /* matchBrackets */, 'matchBrackets', 'always', ['always', 'near', 'never'], { description: nls.localize('matchBrackets', \"Highlight matching brackets.\") })),\r\n minimap: register(new EditorMinimap()),\r\n mouseStyle: register(new EditorStringEnumOption(53 /* mouseStyle */, 'mouseStyle', 'text', ['text', 'default', 'copy'])),\r\n mouseWheelScrollSensitivity: register(new EditorFloatOption(54 /* mouseWheelScrollSensitivity */, 'mouseWheelScrollSensitivity', 1, function (x) { return (x === 0 ? 1 : x); }, { markdownDescription: nls.localize('mouseWheelScrollSensitivity', \"A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.\") })),\r\n mouseWheelZoom: register(new EditorBooleanOption(55 /* mouseWheelZoom */, 'mouseWheelZoom', false, { markdownDescription: nls.localize('mouseWheelZoom', \"Zoom the font of the editor when using mouse wheel and holding `Ctrl`.\") })),\r\n multiCursorMergeOverlapping: register(new EditorBooleanOption(56 /* multiCursorMergeOverlapping */, 'multiCursorMergeOverlapping', true, { description: nls.localize('multiCursorMergeOverlapping', \"Merge multiple cursors when they are overlapping.\") })),\r\n multiCursorModifier: register(new EditorEnumOption(57 /* multiCursorModifier */, 'multiCursorModifier', 'altKey', 'alt', ['ctrlCmd', 'alt'], _multiCursorModifierFromString, {\r\n markdownEnumDescriptions: [\r\n nls.localize('multiCursorModifier.ctrlCmd', \"Maps to `Control` on Windows and Linux and to `Command` on macOS.\"),\r\n nls.localize('multiCursorModifier.alt', \"Maps to `Alt` on Windows and Linux and to `Option` on macOS.\")\r\n ],\r\n markdownDescription: nls.localize({\r\n key: 'multiCursorModifier',\r\n comment: [\r\n '- `ctrlCmd` refers to a value the setting can take and should not be localized.',\r\n '- `Control` and `Command` refer to the modifier keys Ctrl or Cmd on the keyboard and can be localized.'\r\n ]\r\n }, \"The modifier to be used to add multiple cursors with the mouse. The Go To Definition and Open Link mouse gestures will adapt such that they do not conflict with the multicursor modifier. [Read more](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).\")\r\n })),\r\n multiCursorPaste: register(new EditorStringEnumOption(58 /* multiCursorPaste */, 'multiCursorPaste', 'spread', ['spread', 'full'], {\r\n markdownEnumDescriptions: [\r\n nls.localize('multiCursorPaste.spread', \"Each cursor pastes a single line of the text.\"),\r\n nls.localize('multiCursorPaste.full', \"Each cursor pastes the full text.\")\r\n ],\r\n markdownDescription: nls.localize('multiCursorPaste', \"Controls pasting when the line count of the pasted text matches the cursor count.\")\r\n })),\r\n occurrencesHighlight: register(new EditorBooleanOption(59 /* occurrencesHighlight */, 'occurrencesHighlight', true, { description: nls.localize('occurrencesHighlight', \"Controls whether the editor should highlight semantic symbol occurrences.\") })),\r\n overviewRulerBorder: register(new EditorBooleanOption(60 /* overviewRulerBorder */, 'overviewRulerBorder', true, { description: nls.localize('overviewRulerBorder', \"Controls whether a border should be drawn around the overview ruler.\") })),\r\n overviewRulerLanes: register(new EditorIntOption(61 /* overviewRulerLanes */, 'overviewRulerLanes', 3, 0, 3)),\r\n parameterHints: register(new EditorParameterHints()),\r\n quickSuggestions: register(new EditorQuickSuggestions()),\r\n quickSuggestionsDelay: register(new EditorIntOption(64 /* quickSuggestionsDelay */, 'quickSuggestionsDelay', 10, 0, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, { description: nls.localize('quickSuggestionsDelay', \"Controls the delay in milliseconds after which quick suggestions will show up.\") })),\r\n readOnly: register(new EditorBooleanOption(65 /* readOnly */, 'readOnly', false)),\r\n renderControlCharacters: register(new EditorBooleanOption(66 /* renderControlCharacters */, 'renderControlCharacters', false, { description: nls.localize('renderControlCharacters', \"Controls whether the editor should render control characters.\") })),\r\n renderIndentGuides: register(new EditorBooleanOption(67 /* renderIndentGuides */, 'renderIndentGuides', true, { description: nls.localize('renderIndentGuides', \"Controls whether the editor should render indent guides.\") })),\r\n renderFinalNewline: register(new EditorBooleanOption(68 /* renderFinalNewline */, 'renderFinalNewline', true, { description: nls.localize('renderFinalNewline', \"Render last line number when the file ends with a newline.\") })),\r\n renderLineHighlight: register(new EditorStringEnumOption(69 /* renderLineHighlight */, 'renderLineHighlight', 'line', ['none', 'gutter', 'line', 'all'], {\r\n enumDescriptions: [\r\n '',\r\n '',\r\n '',\r\n nls.localize('renderLineHighlight.all', \"Highlights both the gutter and the current line.\"),\r\n ],\r\n description: nls.localize('renderLineHighlight', \"Controls how the editor should render the current line highlight.\")\r\n })),\r\n renderWhitespace: register(new EditorStringEnumOption(70 /* renderWhitespace */, 'renderWhitespace', 'none', ['none', 'boundary', 'selection', 'all'], {\r\n enumDescriptions: [\r\n '',\r\n nls.localize('renderWhitespace.boundary', \"Render whitespace characters except for single spaces between words.\"),\r\n nls.localize('renderWhitespace.selection', \"Render whitespace characters only on selected text.\"),\r\n ''\r\n ],\r\n description: nls.localize('renderWhitespace', \"Controls how the editor should render whitespace characters.\")\r\n })),\r\n revealHorizontalRightPadding: register(new EditorIntOption(71 /* revealHorizontalRightPadding */, 'revealHorizontalRightPadding', 30, 0, 1000)),\r\n roundedSelection: register(new EditorBooleanOption(72 /* roundedSelection */, 'roundedSelection', true, { description: nls.localize('roundedSelection', \"Controls whether selections should have rounded corners.\") })),\r\n rulers: register(new EditorRulers()),\r\n scrollbar: register(new EditorScrollbar()),\r\n scrollBeyondLastColumn: register(new EditorIntOption(75 /* scrollBeyondLastColumn */, 'scrollBeyondLastColumn', 5, 0, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, { description: nls.localize('scrollBeyondLastColumn', \"Controls the number of extra characters beyond which the editor will scroll horizontally.\") })),\r\n scrollBeyondLastLine: register(new EditorBooleanOption(76 /* scrollBeyondLastLine */, 'scrollBeyondLastLine', true, { description: nls.localize('scrollBeyondLastLine', \"Controls whether the editor will scroll beyond the last line.\") })),\r\n selectionClipboard: register(new EditorBooleanOption(77 /* selectionClipboard */, 'selectionClipboard', true, {\r\n description: nls.localize('selectionClipboard', \"Controls whether the Linux primary clipboard should be supported.\"),\r\n included: platform.isLinux\r\n })),\r\n selectionHighlight: register(new EditorBooleanOption(78 /* selectionHighlight */, 'selectionHighlight', true, { description: nls.localize('selectionHighlight', \"Controls whether the editor should highlight matches similar to the selection.\") })),\r\n selectOnLineNumbers: register(new EditorBooleanOption(79 /* selectOnLineNumbers */, 'selectOnLineNumbers', true)),\r\n showFoldingControls: register(new EditorStringEnumOption(80 /* showFoldingControls */, 'showFoldingControls', 'mouseover', ['always', 'mouseover'], { description: nls.localize('showFoldingControls', \"Controls whether the fold controls on the gutter are automatically hidden.\") })),\r\n showUnused: register(new EditorBooleanOption(81 /* showUnused */, 'showUnused', true, { description: nls.localize('showUnused', \"Controls fading out of unused code.\") })),\r\n snippetSuggestions: register(new EditorStringEnumOption(82 /* snippetSuggestions */, 'snippetSuggestions', 'inline', ['top', 'bottom', 'inline', 'none'], {\r\n enumDescriptions: [\r\n nls.localize('snippetSuggestions.top', \"Show snippet suggestions on top of other suggestions.\"),\r\n nls.localize('snippetSuggestions.bottom', \"Show snippet suggestions below other suggestions.\"),\r\n nls.localize('snippetSuggestions.inline', \"Show snippets suggestions with other suggestions.\"),\r\n nls.localize('snippetSuggestions.none', \"Do not show snippet suggestions.\"),\r\n ],\r\n description: nls.localize('snippetSuggestions', \"Controls whether snippets are shown with other suggestions and how they are sorted.\")\r\n })),\r\n smoothScrolling: register(new EditorBooleanOption(83 /* smoothScrolling */, 'smoothScrolling', false, { description: nls.localize('smoothScrolling', \"Controls whether the editor will scroll using an animation.\") })),\r\n stopRenderingLineAfter: register(new EditorIntOption(84 /* stopRenderingLineAfter */, 'stopRenderingLineAfter', 10000, -1, 1073741824 /* MAX_SAFE_SMALL_INTEGER */)),\r\n suggest: register(new EditorSuggest()),\r\n suggestFontSize: register(new EditorIntOption(86 /* suggestFontSize */, 'suggestFontSize', 0, 0, 1000, { markdownDescription: nls.localize('suggestFontSize', \"Font size for the suggest widget. When set to `0`, the value of `#editor.fontSize#` is used.\") })),\r\n suggestLineHeight: register(new EditorIntOption(87 /* suggestLineHeight */, 'suggestLineHeight', 0, 0, 1000, { markdownDescription: nls.localize('suggestLineHeight', \"Line height for the suggest widget. When set to `0`, the value of `#editor.lineHeight#` is used.\") })),\r\n suggestOnTriggerCharacters: register(new EditorBooleanOption(88 /* suggestOnTriggerCharacters */, 'suggestOnTriggerCharacters', true, { description: nls.localize('suggestOnTriggerCharacters', \"Controls whether suggestions should automatically show up when typing trigger characters.\") })),\r\n suggestSelection: register(new EditorStringEnumOption(89 /* suggestSelection */, 'suggestSelection', 'recentlyUsed', ['first', 'recentlyUsed', 'recentlyUsedByPrefix'], {\r\n markdownEnumDescriptions: [\r\n nls.localize('suggestSelection.first', \"Always select the first suggestion.\"),\r\n nls.localize('suggestSelection.recentlyUsed', \"Select recent suggestions unless further typing selects one, e.g. `console.| -> console.log` because `log` has been completed recently.\"),\r\n nls.localize('suggestSelection.recentlyUsedByPrefix', \"Select suggestions based on previous prefixes that have completed those suggestions, e.g. `co -> console` and `con -> const`.\"),\r\n ],\r\n description: nls.localize('suggestSelection', \"Controls how suggestions are pre-selected when showing the suggest list.\")\r\n })),\r\n tabCompletion: register(new EditorStringEnumOption(90 /* tabCompletion */, 'tabCompletion', 'off', ['on', 'off', 'onlySnippets'], {\r\n enumDescriptions: [\r\n nls.localize('tabCompletion.on', \"Tab complete will insert the best matching suggestion when pressing tab.\"),\r\n nls.localize('tabCompletion.off', \"Disable tab completions.\"),\r\n nls.localize('tabCompletion.onlySnippets', \"Tab complete snippets when their prefix match. Works best when 'quickSuggestions' aren't enabled.\"),\r\n ],\r\n description: nls.localize('tabCompletion', \"Enables tab completions.\")\r\n })),\r\n useTabStops: register(new EditorBooleanOption(91 /* useTabStops */, 'useTabStops', true, { description: nls.localize('useTabStops', \"Inserting and deleting whitespace follows tab stops.\") })),\r\n wordSeparators: register(new EditorStringOption(92 /* wordSeparators */, 'wordSeparators', USUAL_WORD_SEPARATORS, { description: nls.localize('wordSeparators', \"Characters that will be used as word separators when doing word related navigations or operations.\") })),\r\n wordWrap: register(new EditorStringEnumOption(93 /* wordWrap */, 'wordWrap', 'off', ['off', 'on', 'wordWrapColumn', 'bounded'], {\r\n markdownEnumDescriptions: [\r\n nls.localize('wordWrap.off', \"Lines will never wrap.\"),\r\n nls.localize('wordWrap.on', \"Lines will wrap at the viewport width.\"),\r\n nls.localize({\r\n key: 'wordWrap.wordWrapColumn',\r\n comment: [\r\n '- `editor.wordWrapColumn` refers to a different setting and should not be localized.'\r\n ]\r\n }, \"Lines will wrap at `#editor.wordWrapColumn#`.\"),\r\n nls.localize({\r\n key: 'wordWrap.bounded',\r\n comment: [\r\n '- viewport means the edge of the visible window size.',\r\n '- `editor.wordWrapColumn` refers to a different setting and should not be localized.'\r\n ]\r\n }, \"Lines will wrap at the minimum of viewport and `#editor.wordWrapColumn#`.\"),\r\n ],\r\n description: nls.localize({\r\n key: 'wordWrap',\r\n comment: [\r\n '- \\'off\\', \\'on\\', \\'wordWrapColumn\\' and \\'bounded\\' refer to values the setting can take and should not be localized.',\r\n '- `editor.wordWrapColumn` refers to a different setting and should not be localized.'\r\n ]\r\n }, \"Controls how lines should wrap.\")\r\n })),\r\n wordWrapBreakAfterCharacters: register(new EditorStringOption(94 /* wordWrapBreakAfterCharacters */, 'wordWrapBreakAfterCharacters', ' \\t})]?|/&,;¢°′″‰℃、。。、¢,.:;?!%・・ゝゞヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻ァィゥェォャュョッー”〉》」』】〕)]}」')),\r\n wordWrapBreakBeforeCharacters: register(new EditorStringOption(95 /* wordWrapBreakBeforeCharacters */, 'wordWrapBreakBeforeCharacters', '([{‘“〈《「『【〔([{「£¥$£¥++')),\r\n wordWrapBreakObtrusiveCharacters: register(new EditorStringOption(96 /* wordWrapBreakObtrusiveCharacters */, 'wordWrapBreakObtrusiveCharacters', '.')),\r\n wordWrapColumn: register(new EditorIntOption(97 /* wordWrapColumn */, 'wordWrapColumn', 80, 1, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, {\r\n markdownDescription: nls.localize({\r\n key: 'wordWrapColumn',\r\n comment: [\r\n '- `editor.wordWrap` refers to a different setting and should not be localized.',\r\n '- \\'wordWrapColumn\\' and \\'bounded\\' refer to values the different setting can take and should not be localized.'\r\n ]\r\n }, \"Controls the wrapping column of the editor when `#editor.wordWrap#` is `wordWrapColumn` or `bounded`.\")\r\n })),\r\n wordWrapMinified: register(new EditorBooleanOption(98 /* wordWrapMinified */, 'wordWrapMinified', true)),\r\n wrappingIndent: register(new EditorEnumOption(99 /* wrappingIndent */, 'wrappingIndent', 1 /* Same */, 'same', ['none', 'same', 'indent', 'deepIndent'], _wrappingIndentFromString, {\r\n enumDescriptions: [\r\n nls.localize('wrappingIndent.none', \"No indentation. Wrapped lines begin at column 1.\"),\r\n nls.localize('wrappingIndent.same', \"Wrapped lines get the same indentation as the parent.\"),\r\n nls.localize('wrappingIndent.indent', \"Wrapped lines get +1 indentation toward the parent.\"),\r\n nls.localize('wrappingIndent.deepIndent', \"Wrapped lines get +2 indentation toward the parent.\"),\r\n ],\r\n description: nls.localize('wrappingIndent', \"Controls the indentation of wrapped lines.\"),\r\n })),\r\n // Leave these at the end (because they have dependencies!)\r\n editorClassName: register(new EditorClassName()),\r\n pixelRatio: register(new EditorPixelRatio()),\r\n tabFocusMode: register(new EditorTabFocusMode()),\r\n layoutInfo: register(new EditorLayoutInfoComputer()),\r\n wrappingInfo: register(new EditorWrappingInfoComputer()),\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n// Avoid circular dependency on EventEmitter by implementing a subset of the interface.\r\nvar ErrorHandler = /** @class */ (function () {\r\n function ErrorHandler() {\r\n this.listeners = [];\r\n this.unexpectedErrorHandler = function (e) {\r\n setTimeout(function () {\r\n if (e.stack) {\r\n throw new Error(e.message + '\\n\\n' + e.stack);\r\n }\r\n throw e;\r\n }, 0);\r\n };\r\n }\r\n ErrorHandler.prototype.emit = function (e) {\r\n this.listeners.forEach(function (listener) {\r\n listener(e);\r\n });\r\n };\r\n ErrorHandler.prototype.onUnexpectedError = function (e) {\r\n this.unexpectedErrorHandler(e);\r\n this.emit(e);\r\n };\r\n // For external errors, we don't want the listeners to be called\r\n ErrorHandler.prototype.onUnexpectedExternalError = function (e) {\r\n this.unexpectedErrorHandler(e);\r\n };\r\n return ErrorHandler;\r\n}());\r\nexport { ErrorHandler };\r\nexport var errorHandler = new ErrorHandler();\r\nexport function onUnexpectedError(e) {\r\n // ignore errors from cancelled promises\r\n if (!isPromiseCanceledError(e)) {\r\n errorHandler.onUnexpectedError(e);\r\n }\r\n return undefined;\r\n}\r\nexport function onUnexpectedExternalError(e) {\r\n // ignore errors from cancelled promises\r\n if (!isPromiseCanceledError(e)) {\r\n errorHandler.onUnexpectedExternalError(e);\r\n }\r\n return undefined;\r\n}\r\nexport function transformErrorForSerialization(error) {\r\n if (error instanceof Error) {\r\n var name_1 = error.name, message = error.message;\r\n var stack = error.stacktrace || error.stack;\r\n return {\r\n $isError: true,\r\n name: name_1,\r\n message: message,\r\n stack: stack\r\n };\r\n }\r\n // return as is\r\n return error;\r\n}\r\nvar canceledName = 'Canceled';\r\n/**\r\n * Checks if the given error is a promise in canceled state\r\n */\r\nexport function isPromiseCanceledError(error) {\r\n return error instanceof Error && error.name === canceledName && error.message === canceledName;\r\n}\r\n/**\r\n * Returns an error that signals cancellation.\r\n */\r\nexport function canceled() {\r\n var error = new Error(canceledName);\r\n error.name = error.message;\r\n return error;\r\n}\r\nexport function illegalArgument(name) {\r\n if (name) {\r\n return new Error(\"Illegal argument: \" + name);\r\n }\r\n else {\r\n return new Error('Illegal argument');\r\n }\r\n}\r\nexport function illegalState(name) {\r\n if (name) {\r\n return new Error(\"Illegal state: \" + name);\r\n }\r\n else {\r\n return new Error('Illegal state');\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport function once(fn) {\r\n var _this = this;\r\n var didCall = false;\r\n var result;\r\n return function () {\r\n if (didCall) {\r\n return result;\r\n }\r\n didCall = true;\r\n result = fn.apply(_this, arguments);\r\n return result;\r\n };\r\n}\r\n","/**\r\n * Enables logging of potentially leaked disposables.\r\n *\r\n * A disposable is considered leaked if it is not disposed or not registered as the child of\r\n * another disposable. This tracking is very simple an only works for classes that either\r\n * extend Disposable or use a DisposableStore. This means there are a lot of false positives.\r\n */\r\nvar TRACK_DISPOSABLES = false;\r\nvar __is_disposable_tracked__ = '__is_disposable_tracked__';\r\nfunction markTracked(x) {\r\n if (!TRACK_DISPOSABLES) {\r\n return;\r\n }\r\n if (x && x !== Disposable.None) {\r\n try {\r\n x[__is_disposable_tracked__] = true;\r\n }\r\n catch (_a) {\r\n // noop\r\n }\r\n }\r\n}\r\nfunction trackDisposable(x) {\r\n if (!TRACK_DISPOSABLES) {\r\n return x;\r\n }\r\n var stack = new Error('Potentially leaked disposable').stack;\r\n setTimeout(function () {\r\n if (!x[__is_disposable_tracked__]) {\r\n console.log(stack);\r\n }\r\n }, 3000);\r\n return x;\r\n}\r\nexport function isDisposable(thing) {\r\n return typeof thing.dispose === 'function'\r\n && thing.dispose.length === 0;\r\n}\r\nexport function dispose(disposables) {\r\n if (Array.isArray(disposables)) {\r\n disposables.forEach(function (d) {\r\n if (d) {\r\n markTracked(d);\r\n d.dispose();\r\n }\r\n });\r\n return [];\r\n }\r\n else if (disposables) {\r\n markTracked(disposables);\r\n disposables.dispose();\r\n return disposables;\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\nexport function combinedDisposable() {\r\n var disposables = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n disposables[_i] = arguments[_i];\r\n }\r\n disposables.forEach(markTracked);\r\n return trackDisposable({ dispose: function () { return dispose(disposables); } });\r\n}\r\nexport function toDisposable(fn) {\r\n var self = trackDisposable({\r\n dispose: function () {\r\n markTracked(self);\r\n fn();\r\n }\r\n });\r\n return self;\r\n}\r\nvar DisposableStore = /** @class */ (function () {\r\n function DisposableStore() {\r\n this._toDispose = new Set();\r\n this._isDisposed = false;\r\n }\r\n /**\r\n * Dispose of all registered disposables and mark this object as disposed.\r\n *\r\n * Any future disposables added to this object will be disposed of on `add`.\r\n */\r\n DisposableStore.prototype.dispose = function () {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n markTracked(this);\r\n this._isDisposed = true;\r\n this.clear();\r\n };\r\n /**\r\n * Dispose of all registered disposables but do not mark this object as disposed.\r\n */\r\n DisposableStore.prototype.clear = function () {\r\n this._toDispose.forEach(function (item) { return item.dispose(); });\r\n this._toDispose.clear();\r\n };\r\n DisposableStore.prototype.add = function (t) {\r\n if (!t) {\r\n return t;\r\n }\r\n if (t === this) {\r\n throw new Error('Cannot register a disposable on itself!');\r\n }\r\n markTracked(t);\r\n if (this._isDisposed) {\r\n console.warn(new Error('Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!').stack);\r\n }\r\n else {\r\n this._toDispose.add(t);\r\n }\r\n return t;\r\n };\r\n return DisposableStore;\r\n}());\r\nexport { DisposableStore };\r\nvar Disposable = /** @class */ (function () {\r\n function Disposable() {\r\n this._store = new DisposableStore();\r\n trackDisposable(this);\r\n }\r\n Disposable.prototype.dispose = function () {\r\n markTracked(this);\r\n this._store.dispose();\r\n };\r\n Disposable.prototype._register = function (t) {\r\n if (t === this) {\r\n throw new Error('Cannot register a disposable on itself!');\r\n }\r\n return this._store.add(t);\r\n };\r\n Disposable.None = Object.freeze({ dispose: function () { } });\r\n return Disposable;\r\n}());\r\nexport { Disposable };\r\n/**\r\n * Manages the lifecycle of a disposable value that may be changed.\r\n *\r\n * This ensures that when the the disposable value is changed, the previously held disposable is disposed of. You can\r\n * also register a `MutableDisposable` on a `Disposable` to ensure it is automatically cleaned up.\r\n */\r\nvar MutableDisposable = /** @class */ (function () {\r\n function MutableDisposable() {\r\n this._isDisposed = false;\r\n trackDisposable(this);\r\n }\r\n Object.defineProperty(MutableDisposable.prototype, \"value\", {\r\n get: function () {\r\n return this._isDisposed ? undefined : this._value;\r\n },\r\n set: function (value) {\r\n if (this._isDisposed || value === this._value) {\r\n return;\r\n }\r\n if (this._value) {\r\n this._value.dispose();\r\n }\r\n if (value) {\r\n markTracked(value);\r\n }\r\n this._value = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n MutableDisposable.prototype.clear = function () {\r\n this.value = undefined;\r\n };\r\n MutableDisposable.prototype.dispose = function () {\r\n this._isDisposed = true;\r\n markTracked(this);\r\n if (this._value) {\r\n this._value.dispose();\r\n }\r\n this._value = undefined;\r\n };\r\n return MutableDisposable;\r\n}());\r\nexport { MutableDisposable };\r\nvar ImmortalReference = /** @class */ (function () {\r\n function ImmortalReference(object) {\r\n this.object = object;\r\n }\r\n ImmortalReference.prototype.dispose = function () { };\r\n return ImmortalReference;\r\n}());\r\nexport { ImmortalReference };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nexport var FIN = { done: true, value: undefined };\r\nexport var Iterator;\r\n(function (Iterator) {\r\n var _empty = {\r\n next: function () {\r\n return FIN;\r\n }\r\n };\r\n function empty() {\r\n return _empty;\r\n }\r\n Iterator.empty = empty;\r\n function single(value) {\r\n var done = false;\r\n return {\r\n next: function () {\r\n if (done) {\r\n return FIN;\r\n }\r\n done = true;\r\n return { done: false, value: value };\r\n }\r\n };\r\n }\r\n Iterator.single = single;\r\n function fromArray(array, index, length) {\r\n if (index === void 0) { index = 0; }\r\n if (length === void 0) { length = array.length; }\r\n return {\r\n next: function () {\r\n if (index >= length) {\r\n return FIN;\r\n }\r\n return { done: false, value: array[index++] };\r\n }\r\n };\r\n }\r\n Iterator.fromArray = fromArray;\r\n function fromNativeIterator(it) {\r\n return {\r\n next: function () {\r\n var result = it.next();\r\n if (result.done) {\r\n return FIN;\r\n }\r\n return { done: false, value: result.value };\r\n }\r\n };\r\n }\r\n Iterator.fromNativeIterator = fromNativeIterator;\r\n function from(elements) {\r\n if (!elements) {\r\n return Iterator.empty();\r\n }\r\n else if (Array.isArray(elements)) {\r\n return Iterator.fromArray(elements);\r\n }\r\n else {\r\n return elements;\r\n }\r\n }\r\n Iterator.from = from;\r\n function map(iterator, fn) {\r\n return {\r\n next: function () {\r\n var element = iterator.next();\r\n if (element.done) {\r\n return FIN;\r\n }\r\n else {\r\n return { done: false, value: fn(element.value) };\r\n }\r\n }\r\n };\r\n }\r\n Iterator.map = map;\r\n function filter(iterator, fn) {\r\n return {\r\n next: function () {\r\n while (true) {\r\n var element = iterator.next();\r\n if (element.done) {\r\n return FIN;\r\n }\r\n if (fn(element.value)) {\r\n return { done: false, value: element.value };\r\n }\r\n }\r\n }\r\n };\r\n }\r\n Iterator.filter = filter;\r\n function forEach(iterator, fn) {\r\n for (var next = iterator.next(); !next.done; next = iterator.next()) {\r\n fn(next.value);\r\n }\r\n }\r\n Iterator.forEach = forEach;\r\n function collect(iterator, atMost) {\r\n if (atMost === void 0) { atMost = Number.POSITIVE_INFINITY; }\r\n var result = [];\r\n if (atMost === 0) {\r\n return result;\r\n }\r\n var i = 0;\r\n for (var next = iterator.next(); !next.done; next = iterator.next()) {\r\n result.push(next.value);\r\n if (++i >= atMost) {\r\n break;\r\n }\r\n }\r\n return result;\r\n }\r\n Iterator.collect = collect;\r\n function concat() {\r\n var iterators = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n iterators[_i] = arguments[_i];\r\n }\r\n var i = 0;\r\n return {\r\n next: function () {\r\n if (i >= iterators.length) {\r\n return FIN;\r\n }\r\n var iterator = iterators[i];\r\n var result = iterator.next();\r\n if (result.done) {\r\n i++;\r\n return this.next();\r\n }\r\n return result;\r\n }\r\n };\r\n }\r\n Iterator.concat = concat;\r\n function chain(iterator) {\r\n return new ChainableIterator(iterator);\r\n }\r\n Iterator.chain = chain;\r\n})(Iterator || (Iterator = {}));\r\nvar ChainableIterator = /** @class */ (function () {\r\n function ChainableIterator(it) {\r\n this.it = it;\r\n }\r\n ChainableIterator.prototype.next = function () { return this.it.next(); };\r\n return ChainableIterator;\r\n}());\r\nexport { ChainableIterator };\r\nexport function getSequenceIterator(arg) {\r\n if (Array.isArray(arg)) {\r\n return Iterator.fromArray(arg);\r\n }\r\n else if (!arg) {\r\n return Iterator.empty();\r\n }\r\n else {\r\n return arg;\r\n }\r\n}\r\nvar ArrayIterator = /** @class */ (function () {\r\n function ArrayIterator(items, start, end, index) {\r\n if (start === void 0) { start = 0; }\r\n if (end === void 0) { end = items.length; }\r\n if (index === void 0) { index = start - 1; }\r\n this.items = items;\r\n this.start = start;\r\n this.end = end;\r\n this.index = index;\r\n }\r\n ArrayIterator.prototype.first = function () {\r\n this.index = this.start;\r\n return this.current();\r\n };\r\n ArrayIterator.prototype.next = function () {\r\n this.index = Math.min(this.index + 1, this.end);\r\n return this.current();\r\n };\r\n ArrayIterator.prototype.current = function () {\r\n if (this.index === this.start - 1 || this.index === this.end) {\r\n return null;\r\n }\r\n return this.items[this.index];\r\n };\r\n return ArrayIterator;\r\n}());\r\nexport { ArrayIterator };\r\nvar ArrayNavigator = /** @class */ (function (_super) {\r\n __extends(ArrayNavigator, _super);\r\n function ArrayNavigator(items, start, end, index) {\r\n if (start === void 0) { start = 0; }\r\n if (end === void 0) { end = items.length; }\r\n if (index === void 0) { index = start - 1; }\r\n return _super.call(this, items, start, end, index) || this;\r\n }\r\n ArrayNavigator.prototype.current = function () {\r\n return _super.prototype.current.call(this);\r\n };\r\n ArrayNavigator.prototype.previous = function () {\r\n this.index = Math.max(this.index - 1, this.start - 1);\r\n return this.current();\r\n };\r\n ArrayNavigator.prototype.first = function () {\r\n this.index = this.start;\r\n return this.current();\r\n };\r\n ArrayNavigator.prototype.last = function () {\r\n this.index = this.end - 1;\r\n return this.current();\r\n };\r\n ArrayNavigator.prototype.parent = function () {\r\n return null;\r\n };\r\n return ArrayNavigator;\r\n}(ArrayIterator));\r\nexport { ArrayNavigator };\r\nvar MappedIterator = /** @class */ (function () {\r\n function MappedIterator(iterator, fn) {\r\n this.iterator = iterator;\r\n this.fn = fn;\r\n // noop\r\n }\r\n MappedIterator.prototype.next = function () { return this.fn(this.iterator.next()); };\r\n return MappedIterator;\r\n}());\r\nexport { MappedIterator };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { onUnexpectedError } from './errors.js';\r\nimport { once as onceFn } from './functional.js';\r\nimport { Disposable, toDisposable, combinedDisposable, DisposableStore } from './lifecycle.js';\r\nimport { LinkedList } from './linkedList.js';\r\nexport var Event;\r\n(function (Event) {\r\n Event.None = function () { return Disposable.None; };\r\n /**\r\n * Given an event, returns another event which only fires once.\r\n */\r\n function once(event) {\r\n return function (listener, thisArgs, disposables) {\r\n if (thisArgs === void 0) { thisArgs = null; }\r\n // we need this, in case the event fires during the listener call\r\n var didFire = false;\r\n var result;\r\n result = event(function (e) {\r\n if (didFire) {\r\n return;\r\n }\r\n else if (result) {\r\n result.dispose();\r\n }\r\n else {\r\n didFire = true;\r\n }\r\n return listener.call(thisArgs, e);\r\n }, null, disposables);\r\n if (didFire) {\r\n result.dispose();\r\n }\r\n return result;\r\n };\r\n }\r\n Event.once = once;\r\n /**\r\n * Given an event and a `map` function, returns another event which maps each element\r\n * through the mapping function.\r\n */\r\n function map(event, map) {\r\n return snapshot(function (listener, thisArgs, disposables) {\r\n if (thisArgs === void 0) { thisArgs = null; }\r\n return event(function (i) { return listener.call(thisArgs, map(i)); }, null, disposables);\r\n });\r\n }\r\n Event.map = map;\r\n /**\r\n * Given an event and an `each` function, returns another identical event and calls\r\n * the `each` function per each element.\r\n */\r\n function forEach(event, each) {\r\n return snapshot(function (listener, thisArgs, disposables) {\r\n if (thisArgs === void 0) { thisArgs = null; }\r\n return event(function (i) { each(i); listener.call(thisArgs, i); }, null, disposables);\r\n });\r\n }\r\n Event.forEach = forEach;\r\n function filter(event, filter) {\r\n return snapshot(function (listener, thisArgs, disposables) {\r\n if (thisArgs === void 0) { thisArgs = null; }\r\n return event(function (e) { return filter(e) && listener.call(thisArgs, e); }, null, disposables);\r\n });\r\n }\r\n Event.filter = filter;\r\n /**\r\n * Given an event, returns the same event but typed as `Event`.\r\n */\r\n function signal(event) {\r\n return event;\r\n }\r\n Event.signal = signal;\r\n /**\r\n * Given a collection of events, returns a single event which emits\r\n * whenever any of the provided events emit.\r\n */\r\n function any() {\r\n var events = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n events[_i] = arguments[_i];\r\n }\r\n return function (listener, thisArgs, disposables) {\r\n if (thisArgs === void 0) { thisArgs = null; }\r\n return combinedDisposable.apply(void 0, events.map(function (event) { return event(function (e) { return listener.call(thisArgs, e); }, null, disposables); }));\r\n };\r\n }\r\n Event.any = any;\r\n /**\r\n * Given an event and a `merge` function, returns another event which maps each element\r\n * and the cumulative result through the `merge` function. Similar to `map`, but with memory.\r\n */\r\n function reduce(event, merge, initial) {\r\n var output = initial;\r\n return map(event, function (e) {\r\n output = merge(output, e);\r\n return output;\r\n });\r\n }\r\n Event.reduce = reduce;\r\n /**\r\n * Given a chain of event processing functions (filter, map, etc), each\r\n * function will be invoked per event & per listener. Snapshotting an event\r\n * chain allows each function to be invoked just once per event.\r\n */\r\n function snapshot(event) {\r\n var listener;\r\n var emitter = new Emitter({\r\n onFirstListenerAdd: function () {\r\n listener = event(emitter.fire, emitter);\r\n },\r\n onLastListenerRemove: function () {\r\n listener.dispose();\r\n }\r\n });\r\n return emitter.event;\r\n }\r\n Event.snapshot = snapshot;\r\n function debounce(event, merge, delay, leading, leakWarningThreshold) {\r\n if (delay === void 0) { delay = 100; }\r\n if (leading === void 0) { leading = false; }\r\n var subscription;\r\n var output = undefined;\r\n var handle = undefined;\r\n var numDebouncedCalls = 0;\r\n var emitter = new Emitter({\r\n leakWarningThreshold: leakWarningThreshold,\r\n onFirstListenerAdd: function () {\r\n subscription = event(function (cur) {\r\n numDebouncedCalls++;\r\n output = merge(output, cur);\r\n if (leading && !handle) {\r\n emitter.fire(output);\r\n }\r\n clearTimeout(handle);\r\n handle = setTimeout(function () {\r\n var _output = output;\r\n output = undefined;\r\n handle = undefined;\r\n if (!leading || numDebouncedCalls > 1) {\r\n emitter.fire(_output);\r\n }\r\n numDebouncedCalls = 0;\r\n }, delay);\r\n });\r\n },\r\n onLastListenerRemove: function () {\r\n subscription.dispose();\r\n }\r\n });\r\n return emitter.event;\r\n }\r\n Event.debounce = debounce;\r\n /**\r\n * Given an event, it returns another event which fires only once and as soon as\r\n * the input event emits. The event data is the number of millis it took for the\r\n * event to fire.\r\n */\r\n function stopwatch(event) {\r\n var start = new Date().getTime();\r\n return map(once(event), function (_) { return new Date().getTime() - start; });\r\n }\r\n Event.stopwatch = stopwatch;\r\n /**\r\n * Given an event, it returns another event which fires only when the event\r\n * element changes.\r\n */\r\n function latch(event) {\r\n var firstCall = true;\r\n var cache;\r\n return filter(event, function (value) {\r\n var shouldEmit = firstCall || value !== cache;\r\n firstCall = false;\r\n cache = value;\r\n return shouldEmit;\r\n });\r\n }\r\n Event.latch = latch;\r\n /**\r\n * Buffers the provided event until a first listener comes\r\n * along, at which point fire all the events at once and\r\n * pipe the event from then on.\r\n *\r\n * ```typescript\r\n * const emitter = new Emitter();\r\n * const event = emitter.event;\r\n * const bufferedEvent = buffer(event);\r\n *\r\n * emitter.fire(1);\r\n * emitter.fire(2);\r\n * emitter.fire(3);\r\n * // nothing...\r\n *\r\n * const listener = bufferedEvent(num => console.log(num));\r\n * // 1, 2, 3\r\n *\r\n * emitter.fire(4);\r\n * // 4\r\n * ```\r\n */\r\n function buffer(event, nextTick, _buffer) {\r\n if (nextTick === void 0) { nextTick = false; }\r\n if (_buffer === void 0) { _buffer = []; }\r\n var buffer = _buffer.slice();\r\n var listener = event(function (e) {\r\n if (buffer) {\r\n buffer.push(e);\r\n }\r\n else {\r\n emitter.fire(e);\r\n }\r\n });\r\n var flush = function () {\r\n if (buffer) {\r\n buffer.forEach(function (e) { return emitter.fire(e); });\r\n }\r\n buffer = null;\r\n };\r\n var emitter = new Emitter({\r\n onFirstListenerAdd: function () {\r\n if (!listener) {\r\n listener = event(function (e) { return emitter.fire(e); });\r\n }\r\n },\r\n onFirstListenerDidAdd: function () {\r\n if (buffer) {\r\n if (nextTick) {\r\n setTimeout(flush);\r\n }\r\n else {\r\n flush();\r\n }\r\n }\r\n },\r\n onLastListenerRemove: function () {\r\n if (listener) {\r\n listener.dispose();\r\n }\r\n listener = null;\r\n }\r\n });\r\n return emitter.event;\r\n }\r\n Event.buffer = buffer;\r\n var ChainableEvent = /** @class */ (function () {\r\n function ChainableEvent(event) {\r\n this.event = event;\r\n }\r\n ChainableEvent.prototype.map = function (fn) {\r\n return new ChainableEvent(map(this.event, fn));\r\n };\r\n ChainableEvent.prototype.forEach = function (fn) {\r\n return new ChainableEvent(forEach(this.event, fn));\r\n };\r\n ChainableEvent.prototype.filter = function (fn) {\r\n return new ChainableEvent(filter(this.event, fn));\r\n };\r\n ChainableEvent.prototype.reduce = function (merge, initial) {\r\n return new ChainableEvent(reduce(this.event, merge, initial));\r\n };\r\n ChainableEvent.prototype.latch = function () {\r\n return new ChainableEvent(latch(this.event));\r\n };\r\n ChainableEvent.prototype.debounce = function (merge, delay, leading, leakWarningThreshold) {\r\n if (delay === void 0) { delay = 100; }\r\n if (leading === void 0) { leading = false; }\r\n return new ChainableEvent(debounce(this.event, merge, delay, leading, leakWarningThreshold));\r\n };\r\n ChainableEvent.prototype.on = function (listener, thisArgs, disposables) {\r\n return this.event(listener, thisArgs, disposables);\r\n };\r\n ChainableEvent.prototype.once = function (listener, thisArgs, disposables) {\r\n return once(this.event)(listener, thisArgs, disposables);\r\n };\r\n return ChainableEvent;\r\n }());\r\n function chain(event) {\r\n return new ChainableEvent(event);\r\n }\r\n Event.chain = chain;\r\n function fromNodeEventEmitter(emitter, eventName, map) {\r\n if (map === void 0) { map = function (id) { return id; }; }\r\n var fn = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n return result.fire(map.apply(void 0, args));\r\n };\r\n var onFirstListenerAdd = function () { return emitter.on(eventName, fn); };\r\n var onLastListenerRemove = function () { return emitter.removeListener(eventName, fn); };\r\n var result = new Emitter({ onFirstListenerAdd: onFirstListenerAdd, onLastListenerRemove: onLastListenerRemove });\r\n return result.event;\r\n }\r\n Event.fromNodeEventEmitter = fromNodeEventEmitter;\r\n function fromDOMEventEmitter(emitter, eventName, map) {\r\n if (map === void 0) { map = function (id) { return id; }; }\r\n var fn = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n return result.fire(map.apply(void 0, args));\r\n };\r\n var onFirstListenerAdd = function () { return emitter.addEventListener(eventName, fn); };\r\n var onLastListenerRemove = function () { return emitter.removeEventListener(eventName, fn); };\r\n var result = new Emitter({ onFirstListenerAdd: onFirstListenerAdd, onLastListenerRemove: onLastListenerRemove });\r\n return result.event;\r\n }\r\n Event.fromDOMEventEmitter = fromDOMEventEmitter;\r\n function fromPromise(promise) {\r\n var emitter = new Emitter();\r\n var shouldEmit = false;\r\n promise\r\n .then(undefined, function () { return null; })\r\n .then(function () {\r\n if (!shouldEmit) {\r\n setTimeout(function () { return emitter.fire(undefined); }, 0);\r\n }\r\n else {\r\n emitter.fire(undefined);\r\n }\r\n });\r\n shouldEmit = true;\r\n return emitter.event;\r\n }\r\n Event.fromPromise = fromPromise;\r\n function toPromise(event) {\r\n return new Promise(function (c) { return once(event)(c); });\r\n }\r\n Event.toPromise = toPromise;\r\n})(Event || (Event = {}));\r\nvar _globalLeakWarningThreshold = -1;\r\nvar LeakageMonitor = /** @class */ (function () {\r\n function LeakageMonitor(customThreshold, name) {\r\n if (name === void 0) { name = Math.random().toString(18).slice(2, 5); }\r\n this.customThreshold = customThreshold;\r\n this.name = name;\r\n this._warnCountdown = 0;\r\n }\r\n LeakageMonitor.prototype.dispose = function () {\r\n if (this._stacks) {\r\n this._stacks.clear();\r\n }\r\n };\r\n LeakageMonitor.prototype.check = function (listenerCount) {\r\n var _this = this;\r\n var threshold = _globalLeakWarningThreshold;\r\n if (typeof this.customThreshold === 'number') {\r\n threshold = this.customThreshold;\r\n }\r\n if (threshold <= 0 || listenerCount < threshold) {\r\n return undefined;\r\n }\r\n if (!this._stacks) {\r\n this._stacks = new Map();\r\n }\r\n var stack = new Error().stack.split('\\n').slice(3).join('\\n');\r\n var count = (this._stacks.get(stack) || 0);\r\n this._stacks.set(stack, count + 1);\r\n this._warnCountdown -= 1;\r\n if (this._warnCountdown <= 0) {\r\n // only warn on first exceed and then every time the limit\r\n // is exceeded by 50% again\r\n this._warnCountdown = threshold * 0.5;\r\n // find most frequent listener and print warning\r\n var topStack_1;\r\n var topCount_1 = 0;\r\n this._stacks.forEach(function (count, stack) {\r\n if (!topStack_1 || topCount_1 < count) {\r\n topStack_1 = stack;\r\n topCount_1 = count;\r\n }\r\n });\r\n console.warn(\"[\" + this.name + \"] potential listener LEAK detected, having \" + listenerCount + \" listeners already. MOST frequent listener (\" + topCount_1 + \"):\");\r\n console.warn(topStack_1);\r\n }\r\n return function () {\r\n var count = (_this._stacks.get(stack) || 0);\r\n _this._stacks.set(stack, count - 1);\r\n };\r\n };\r\n return LeakageMonitor;\r\n}());\r\n/**\r\n * The Emitter can be used to expose an Event to the public\r\n * to fire it from the insides.\r\n * Sample:\r\n class Document {\r\n\r\n private readonly _onDidChange = new Emitter<(value:string)=>any>();\r\n\r\n public onDidChange = this._onDidChange.event;\r\n\r\n // getter-style\r\n // get onDidChange(): Event<(value:string)=>any> {\r\n // \treturn this._onDidChange.event;\r\n // }\r\n\r\n private _doIt() {\r\n //...\r\n this._onDidChange.fire(value);\r\n }\r\n }\r\n */\r\nvar Emitter = /** @class */ (function () {\r\n function Emitter(options) {\r\n this._disposed = false;\r\n this._options = options;\r\n this._leakageMon = _globalLeakWarningThreshold > 0\r\n ? new LeakageMonitor(this._options && this._options.leakWarningThreshold)\r\n : undefined;\r\n }\r\n Object.defineProperty(Emitter.prototype, \"event\", {\r\n /**\r\n * For the public to allow to subscribe\r\n * to events from this Emitter\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._event) {\r\n this._event = function (listener, thisArgs, disposables) {\r\n if (!_this._listeners) {\r\n _this._listeners = new LinkedList();\r\n }\r\n var firstListener = _this._listeners.isEmpty();\r\n if (firstListener && _this._options && _this._options.onFirstListenerAdd) {\r\n _this._options.onFirstListenerAdd(_this);\r\n }\r\n var remove = _this._listeners.push(!thisArgs ? listener : [listener, thisArgs]);\r\n if (firstListener && _this._options && _this._options.onFirstListenerDidAdd) {\r\n _this._options.onFirstListenerDidAdd(_this);\r\n }\r\n if (_this._options && _this._options.onListenerDidAdd) {\r\n _this._options.onListenerDidAdd(_this, listener, thisArgs);\r\n }\r\n // check and record this emitter for potential leakage\r\n var removeMonitor;\r\n if (_this._leakageMon) {\r\n removeMonitor = _this._leakageMon.check(_this._listeners.size);\r\n }\r\n var result;\r\n result = {\r\n dispose: function () {\r\n if (removeMonitor) {\r\n removeMonitor();\r\n }\r\n result.dispose = Emitter._noop;\r\n if (!_this._disposed) {\r\n remove();\r\n if (_this._options && _this._options.onLastListenerRemove) {\r\n var hasListeners = (_this._listeners && !_this._listeners.isEmpty());\r\n if (!hasListeners) {\r\n _this._options.onLastListenerRemove(_this);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n if (disposables instanceof DisposableStore) {\r\n disposables.add(result);\r\n }\r\n else if (Array.isArray(disposables)) {\r\n disposables.push(result);\r\n }\r\n return result;\r\n };\r\n }\r\n return this._event;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * To be kept private to fire an event to\r\n * subscribers\r\n */\r\n Emitter.prototype.fire = function (event) {\r\n if (this._listeners) {\r\n // put all [listener,event]-pairs into delivery queue\r\n // then emit all event. an inner/nested event might be\r\n // the driver of this\r\n if (!this._deliveryQueue) {\r\n this._deliveryQueue = new LinkedList();\r\n }\r\n for (var iter = this._listeners.iterator(), e = iter.next(); !e.done; e = iter.next()) {\r\n this._deliveryQueue.push([e.value, event]);\r\n }\r\n while (this._deliveryQueue.size > 0) {\r\n var _a = this._deliveryQueue.shift(), listener = _a[0], event_1 = _a[1];\r\n try {\r\n if (typeof listener === 'function') {\r\n listener.call(undefined, event_1);\r\n }\r\n else {\r\n listener[0].call(listener[1], event_1);\r\n }\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n }\r\n }\r\n }\r\n };\r\n Emitter.prototype.dispose = function () {\r\n if (this._listeners) {\r\n this._listeners.clear();\r\n }\r\n if (this._deliveryQueue) {\r\n this._deliveryQueue.clear();\r\n }\r\n if (this._leakageMon) {\r\n this._leakageMon.dispose();\r\n }\r\n this._disposed = true;\r\n };\r\n Emitter._noop = function () { };\r\n return Emitter;\r\n}());\r\nexport { Emitter };\r\nvar PauseableEmitter = /** @class */ (function (_super) {\r\n __extends(PauseableEmitter, _super);\r\n function PauseableEmitter(options) {\r\n var _this = _super.call(this, options) || this;\r\n _this._isPaused = 0;\r\n _this._eventQueue = new LinkedList();\r\n _this._mergeFn = options && options.merge;\r\n return _this;\r\n }\r\n PauseableEmitter.prototype.pause = function () {\r\n this._isPaused++;\r\n };\r\n PauseableEmitter.prototype.resume = function () {\r\n if (this._isPaused !== 0 && --this._isPaused === 0) {\r\n if (this._mergeFn) {\r\n // use the merge function to create a single composite\r\n // event. make a copy in case firing pauses this emitter\r\n var events = this._eventQueue.toArray();\r\n this._eventQueue.clear();\r\n _super.prototype.fire.call(this, this._mergeFn(events));\r\n }\r\n else {\r\n // no merging, fire each event individually and test\r\n // that this emitter isn't paused halfway through\r\n while (!this._isPaused && this._eventQueue.size !== 0) {\r\n _super.prototype.fire.call(this, this._eventQueue.shift());\r\n }\r\n }\r\n }\r\n };\r\n PauseableEmitter.prototype.fire = function (event) {\r\n if (this._listeners) {\r\n if (this._isPaused !== 0) {\r\n this._eventQueue.push(event);\r\n }\r\n else {\r\n _super.prototype.fire.call(this, event);\r\n }\r\n }\r\n };\r\n return PauseableEmitter;\r\n}(Emitter));\r\nexport { PauseableEmitter };\r\nvar EventMultiplexer = /** @class */ (function () {\r\n function EventMultiplexer() {\r\n var _this = this;\r\n this.hasListeners = false;\r\n this.events = [];\r\n this.emitter = new Emitter({\r\n onFirstListenerAdd: function () { return _this.onFirstListenerAdd(); },\r\n onLastListenerRemove: function () { return _this.onLastListenerRemove(); }\r\n });\r\n }\r\n Object.defineProperty(EventMultiplexer.prototype, \"event\", {\r\n get: function () {\r\n return this.emitter.event;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n EventMultiplexer.prototype.add = function (event) {\r\n var _this = this;\r\n var e = { event: event, listener: null };\r\n this.events.push(e);\r\n if (this.hasListeners) {\r\n this.hook(e);\r\n }\r\n var dispose = function () {\r\n if (_this.hasListeners) {\r\n _this.unhook(e);\r\n }\r\n var idx = _this.events.indexOf(e);\r\n _this.events.splice(idx, 1);\r\n };\r\n return toDisposable(onceFn(dispose));\r\n };\r\n EventMultiplexer.prototype.onFirstListenerAdd = function () {\r\n var _this = this;\r\n this.hasListeners = true;\r\n this.events.forEach(function (e) { return _this.hook(e); });\r\n };\r\n EventMultiplexer.prototype.onLastListenerRemove = function () {\r\n var _this = this;\r\n this.hasListeners = false;\r\n this.events.forEach(function (e) { return _this.unhook(e); });\r\n };\r\n EventMultiplexer.prototype.hook = function (e) {\r\n var _this = this;\r\n e.listener = e.event(function (r) { return _this.emitter.fire(r); });\r\n };\r\n EventMultiplexer.prototype.unhook = function (e) {\r\n if (e.listener) {\r\n e.listener.dispose();\r\n }\r\n e.listener = null;\r\n };\r\n EventMultiplexer.prototype.dispose = function () {\r\n this.emitter.dispose();\r\n };\r\n return EventMultiplexer;\r\n}());\r\nexport { EventMultiplexer };\r\n/**\r\n * The EventBufferer is useful in situations in which you want\r\n * to delay firing your events during some code.\r\n * You can wrap that code and be sure that the event will not\r\n * be fired during that wrap.\r\n *\r\n * ```\r\n * const emitter: Emitter;\r\n * const delayer = new EventDelayer();\r\n * const delayedEvent = delayer.wrapEvent(emitter.event);\r\n *\r\n * delayedEvent(console.log);\r\n *\r\n * delayer.bufferEvents(() => {\r\n * emitter.fire(); // event will not be fired yet\r\n * });\r\n *\r\n * // event will only be fired at this point\r\n * ```\r\n */\r\nvar EventBufferer = /** @class */ (function () {\r\n function EventBufferer() {\r\n this.buffers = [];\r\n }\r\n EventBufferer.prototype.wrapEvent = function (event) {\r\n var _this = this;\r\n return function (listener, thisArgs, disposables) {\r\n return event(function (i) {\r\n var buffer = _this.buffers[_this.buffers.length - 1];\r\n if (buffer) {\r\n buffer.push(function () { return listener.call(thisArgs, i); });\r\n }\r\n else {\r\n listener.call(thisArgs, i);\r\n }\r\n }, undefined, disposables);\r\n };\r\n };\r\n EventBufferer.prototype.bufferEvents = function (fn) {\r\n var buffer = [];\r\n this.buffers.push(buffer);\r\n var r = fn();\r\n this.buffers.pop();\r\n buffer.forEach(function (flush) { return flush(); });\r\n return r;\r\n };\r\n return EventBufferer;\r\n}());\r\nexport { EventBufferer };\r\n/**\r\n * A Relay is an event forwarder which functions as a replugabble event pipe.\r\n * Once created, you can connect an input event to it and it will simply forward\r\n * events from that input event through its own `event` property. The `input`\r\n * can be changed at any point in time.\r\n */\r\nvar Relay = /** @class */ (function () {\r\n function Relay() {\r\n var _this = this;\r\n this.listening = false;\r\n this.inputEvent = Event.None;\r\n this.inputEventListener = Disposable.None;\r\n this.emitter = new Emitter({\r\n onFirstListenerDidAdd: function () {\r\n _this.listening = true;\r\n _this.inputEventListener = _this.inputEvent(_this.emitter.fire, _this.emitter);\r\n },\r\n onLastListenerRemove: function () {\r\n _this.listening = false;\r\n _this.inputEventListener.dispose();\r\n }\r\n });\r\n this.event = this.emitter.event;\r\n }\r\n Object.defineProperty(Relay.prototype, \"input\", {\r\n set: function (event) {\r\n this.inputEvent = event;\r\n if (this.listening) {\r\n this.inputEventListener.dispose();\r\n this.inputEventListener = event(this.emitter.fire, this.emitter);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Relay.prototype.dispose = function () {\r\n this.inputEventListener.dispose();\r\n this.emitter.dispose();\r\n };\r\n return Relay;\r\n}());\r\nexport { Relay };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { FIN } from './iterator.js';\r\nvar Node = /** @class */ (function () {\r\n function Node(element) {\r\n this.element = element;\r\n this.next = Node.Undefined;\r\n this.prev = Node.Undefined;\r\n }\r\n Node.Undefined = new Node(undefined);\r\n return Node;\r\n}());\r\nvar LinkedList = /** @class */ (function () {\r\n function LinkedList() {\r\n this._first = Node.Undefined;\r\n this._last = Node.Undefined;\r\n this._size = 0;\r\n }\r\n Object.defineProperty(LinkedList.prototype, \"size\", {\r\n get: function () {\r\n return this._size;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n LinkedList.prototype.isEmpty = function () {\r\n return this._first === Node.Undefined;\r\n };\r\n LinkedList.prototype.clear = function () {\r\n this._first = Node.Undefined;\r\n this._last = Node.Undefined;\r\n this._size = 0;\r\n };\r\n LinkedList.prototype.unshift = function (element) {\r\n return this._insert(element, false);\r\n };\r\n LinkedList.prototype.push = function (element) {\r\n return this._insert(element, true);\r\n };\r\n LinkedList.prototype._insert = function (element, atTheEnd) {\r\n var _this = this;\r\n var newNode = new Node(element);\r\n if (this._first === Node.Undefined) {\r\n this._first = newNode;\r\n this._last = newNode;\r\n }\r\n else if (atTheEnd) {\r\n // push\r\n var oldLast = this._last;\r\n this._last = newNode;\r\n newNode.prev = oldLast;\r\n oldLast.next = newNode;\r\n }\r\n else {\r\n // unshift\r\n var oldFirst = this._first;\r\n this._first = newNode;\r\n newNode.next = oldFirst;\r\n oldFirst.prev = newNode;\r\n }\r\n this._size += 1;\r\n var didRemove = false;\r\n return function () {\r\n if (!didRemove) {\r\n didRemove = true;\r\n _this._remove(newNode);\r\n }\r\n };\r\n };\r\n LinkedList.prototype.shift = function () {\r\n if (this._first === Node.Undefined) {\r\n return undefined;\r\n }\r\n else {\r\n var res = this._first.element;\r\n this._remove(this._first);\r\n return res;\r\n }\r\n };\r\n LinkedList.prototype.pop = function () {\r\n if (this._last === Node.Undefined) {\r\n return undefined;\r\n }\r\n else {\r\n var res = this._last.element;\r\n this._remove(this._last);\r\n return res;\r\n }\r\n };\r\n LinkedList.prototype._remove = function (node) {\r\n if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\r\n // middle\r\n var anchor = node.prev;\r\n anchor.next = node.next;\r\n node.next.prev = anchor;\r\n }\r\n else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\r\n // only node\r\n this._first = Node.Undefined;\r\n this._last = Node.Undefined;\r\n }\r\n else if (node.next === Node.Undefined) {\r\n // last\r\n this._last = this._last.prev;\r\n this._last.next = Node.Undefined;\r\n }\r\n else if (node.prev === Node.Undefined) {\r\n // first\r\n this._first = this._first.next;\r\n this._first.prev = Node.Undefined;\r\n }\r\n // done\r\n this._size -= 1;\r\n };\r\n LinkedList.prototype.iterator = function () {\r\n var element;\r\n var node = this._first;\r\n return {\r\n next: function () {\r\n if (node === Node.Undefined) {\r\n return FIN;\r\n }\r\n if (!element) {\r\n element = { done: false, value: node.element };\r\n }\r\n else {\r\n element.value = node.element;\r\n }\r\n node = node.next;\r\n return element;\r\n }\r\n };\r\n };\r\n LinkedList.prototype.toArray = function () {\r\n var result = [];\r\n for (var node = this._first; node !== Node.Undefined; node = node.next) {\r\n result.push(node.element);\r\n }\r\n return result;\r\n };\r\n return LinkedList;\r\n}());\r\nexport { LinkedList };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Emitter, Event } from './event.js';\r\nvar shortcutEvent = Object.freeze(function (callback, context) {\r\n var handle = setTimeout(callback.bind(context), 0);\r\n return { dispose: function () { clearTimeout(handle); } };\r\n});\r\nexport var CancellationToken;\r\n(function (CancellationToken) {\r\n function isCancellationToken(thing) {\r\n if (thing === CancellationToken.None || thing === CancellationToken.Cancelled) {\r\n return true;\r\n }\r\n if (thing instanceof MutableToken) {\r\n return true;\r\n }\r\n if (!thing || typeof thing !== 'object') {\r\n return false;\r\n }\r\n return typeof thing.isCancellationRequested === 'boolean'\r\n && typeof thing.onCancellationRequested === 'function';\r\n }\r\n CancellationToken.isCancellationToken = isCancellationToken;\r\n CancellationToken.None = Object.freeze({\r\n isCancellationRequested: false,\r\n onCancellationRequested: Event.None\r\n });\r\n CancellationToken.Cancelled = Object.freeze({\r\n isCancellationRequested: true,\r\n onCancellationRequested: shortcutEvent\r\n });\r\n})(CancellationToken || (CancellationToken = {}));\r\nvar MutableToken = /** @class */ (function () {\r\n function MutableToken() {\r\n this._isCancelled = false;\r\n this._emitter = null;\r\n }\r\n MutableToken.prototype.cancel = function () {\r\n if (!this._isCancelled) {\r\n this._isCancelled = true;\r\n if (this._emitter) {\r\n this._emitter.fire(undefined);\r\n this.dispose();\r\n }\r\n }\r\n };\r\n Object.defineProperty(MutableToken.prototype, \"isCancellationRequested\", {\r\n get: function () {\r\n return this._isCancelled;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MutableToken.prototype, \"onCancellationRequested\", {\r\n get: function () {\r\n if (this._isCancelled) {\r\n return shortcutEvent;\r\n }\r\n if (!this._emitter) {\r\n this._emitter = new Emitter();\r\n }\r\n return this._emitter.event;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n MutableToken.prototype.dispose = function () {\r\n if (this._emitter) {\r\n this._emitter.dispose();\r\n this._emitter = null;\r\n }\r\n };\r\n return MutableToken;\r\n}());\r\nvar CancellationTokenSource = /** @class */ (function () {\r\n function CancellationTokenSource(parent) {\r\n this._token = undefined;\r\n this._parentListener = undefined;\r\n this._parentListener = parent && parent.onCancellationRequested(this.cancel, this);\r\n }\r\n Object.defineProperty(CancellationTokenSource.prototype, \"token\", {\r\n get: function () {\r\n if (!this._token) {\r\n // be lazy and create the token only when\r\n // actually needed\r\n this._token = new MutableToken();\r\n }\r\n return this._token;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n CancellationTokenSource.prototype.cancel = function () {\r\n if (!this._token) {\r\n // save an object by returning the default\r\n // cancelled token when cancellation happens\r\n // before someone asks for the token\r\n this._token = CancellationToken.Cancelled;\r\n }\r\n else if (this._token instanceof MutableToken) {\r\n // actually cancel\r\n this._token.cancel();\r\n }\r\n };\r\n CancellationTokenSource.prototype.dispose = function (cancel) {\r\n if (cancel === void 0) { cancel = false; }\r\n if (cancel) {\r\n this.cancel();\r\n }\r\n if (this._parentListener) {\r\n this._parentListener.dispose();\r\n }\r\n if (!this._token) {\r\n // ensure to initialize with an empty token if we had none\r\n this._token = CancellationToken.None;\r\n }\r\n else if (this._token instanceof MutableToken) {\r\n // actually dispose\r\n this._token.dispose();\r\n }\r\n };\r\n return CancellationTokenSource;\r\n}());\r\nexport { CancellationTokenSource };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { illegalArgument } from './errors.js';\r\nvar KeyCodeStrMap = /** @class */ (function () {\r\n function KeyCodeStrMap() {\r\n this._keyCodeToStr = [];\r\n this._strToKeyCode = Object.create(null);\r\n }\r\n KeyCodeStrMap.prototype.define = function (keyCode, str) {\r\n this._keyCodeToStr[keyCode] = str;\r\n this._strToKeyCode[str.toLowerCase()] = keyCode;\r\n };\r\n KeyCodeStrMap.prototype.keyCodeToStr = function (keyCode) {\r\n return this._keyCodeToStr[keyCode];\r\n };\r\n KeyCodeStrMap.prototype.strToKeyCode = function (str) {\r\n return this._strToKeyCode[str.toLowerCase()] || 0 /* Unknown */;\r\n };\r\n return KeyCodeStrMap;\r\n}());\r\nvar uiMap = new KeyCodeStrMap();\r\nvar userSettingsUSMap = new KeyCodeStrMap();\r\nvar userSettingsGeneralMap = new KeyCodeStrMap();\r\n(function () {\r\n function define(keyCode, uiLabel, usUserSettingsLabel, generalUserSettingsLabel) {\r\n if (usUserSettingsLabel === void 0) { usUserSettingsLabel = uiLabel; }\r\n if (generalUserSettingsLabel === void 0) { generalUserSettingsLabel = usUserSettingsLabel; }\r\n uiMap.define(keyCode, uiLabel);\r\n userSettingsUSMap.define(keyCode, usUserSettingsLabel);\r\n userSettingsGeneralMap.define(keyCode, generalUserSettingsLabel);\r\n }\r\n define(0 /* Unknown */, 'unknown');\r\n define(1 /* Backspace */, 'Backspace');\r\n define(2 /* Tab */, 'Tab');\r\n define(3 /* Enter */, 'Enter');\r\n define(4 /* Shift */, 'Shift');\r\n define(5 /* Ctrl */, 'Ctrl');\r\n define(6 /* Alt */, 'Alt');\r\n define(7 /* PauseBreak */, 'PauseBreak');\r\n define(8 /* CapsLock */, 'CapsLock');\r\n define(9 /* Escape */, 'Escape');\r\n define(10 /* Space */, 'Space');\r\n define(11 /* PageUp */, 'PageUp');\r\n define(12 /* PageDown */, 'PageDown');\r\n define(13 /* End */, 'End');\r\n define(14 /* Home */, 'Home');\r\n define(15 /* LeftArrow */, 'LeftArrow', 'Left');\r\n define(16 /* UpArrow */, 'UpArrow', 'Up');\r\n define(17 /* RightArrow */, 'RightArrow', 'Right');\r\n define(18 /* DownArrow */, 'DownArrow', 'Down');\r\n define(19 /* Insert */, 'Insert');\r\n define(20 /* Delete */, 'Delete');\r\n define(21 /* KEY_0 */, '0');\r\n define(22 /* KEY_1 */, '1');\r\n define(23 /* KEY_2 */, '2');\r\n define(24 /* KEY_3 */, '3');\r\n define(25 /* KEY_4 */, '4');\r\n define(26 /* KEY_5 */, '5');\r\n define(27 /* KEY_6 */, '6');\r\n define(28 /* KEY_7 */, '7');\r\n define(29 /* KEY_8 */, '8');\r\n define(30 /* KEY_9 */, '9');\r\n define(31 /* KEY_A */, 'A');\r\n define(32 /* KEY_B */, 'B');\r\n define(33 /* KEY_C */, 'C');\r\n define(34 /* KEY_D */, 'D');\r\n define(35 /* KEY_E */, 'E');\r\n define(36 /* KEY_F */, 'F');\r\n define(37 /* KEY_G */, 'G');\r\n define(38 /* KEY_H */, 'H');\r\n define(39 /* KEY_I */, 'I');\r\n define(40 /* KEY_J */, 'J');\r\n define(41 /* KEY_K */, 'K');\r\n define(42 /* KEY_L */, 'L');\r\n define(43 /* KEY_M */, 'M');\r\n define(44 /* KEY_N */, 'N');\r\n define(45 /* KEY_O */, 'O');\r\n define(46 /* KEY_P */, 'P');\r\n define(47 /* KEY_Q */, 'Q');\r\n define(48 /* KEY_R */, 'R');\r\n define(49 /* KEY_S */, 'S');\r\n define(50 /* KEY_T */, 'T');\r\n define(51 /* KEY_U */, 'U');\r\n define(52 /* KEY_V */, 'V');\r\n define(53 /* KEY_W */, 'W');\r\n define(54 /* KEY_X */, 'X');\r\n define(55 /* KEY_Y */, 'Y');\r\n define(56 /* KEY_Z */, 'Z');\r\n define(57 /* Meta */, 'Meta');\r\n define(58 /* ContextMenu */, 'ContextMenu');\r\n define(59 /* F1 */, 'F1');\r\n define(60 /* F2 */, 'F2');\r\n define(61 /* F3 */, 'F3');\r\n define(62 /* F4 */, 'F4');\r\n define(63 /* F5 */, 'F5');\r\n define(64 /* F6 */, 'F6');\r\n define(65 /* F7 */, 'F7');\r\n define(66 /* F8 */, 'F8');\r\n define(67 /* F9 */, 'F9');\r\n define(68 /* F10 */, 'F10');\r\n define(69 /* F11 */, 'F11');\r\n define(70 /* F12 */, 'F12');\r\n define(71 /* F13 */, 'F13');\r\n define(72 /* F14 */, 'F14');\r\n define(73 /* F15 */, 'F15');\r\n define(74 /* F16 */, 'F16');\r\n define(75 /* F17 */, 'F17');\r\n define(76 /* F18 */, 'F18');\r\n define(77 /* F19 */, 'F19');\r\n define(78 /* NumLock */, 'NumLock');\r\n define(79 /* ScrollLock */, 'ScrollLock');\r\n define(80 /* US_SEMICOLON */, ';', ';', 'OEM_1');\r\n define(81 /* US_EQUAL */, '=', '=', 'OEM_PLUS');\r\n define(82 /* US_COMMA */, ',', ',', 'OEM_COMMA');\r\n define(83 /* US_MINUS */, '-', '-', 'OEM_MINUS');\r\n define(84 /* US_DOT */, '.', '.', 'OEM_PERIOD');\r\n define(85 /* US_SLASH */, '/', '/', 'OEM_2');\r\n define(86 /* US_BACKTICK */, '`', '`', 'OEM_3');\r\n define(110 /* ABNT_C1 */, 'ABNT_C1');\r\n define(111 /* ABNT_C2 */, 'ABNT_C2');\r\n define(87 /* US_OPEN_SQUARE_BRACKET */, '[', '[', 'OEM_4');\r\n define(88 /* US_BACKSLASH */, '\\\\', '\\\\', 'OEM_5');\r\n define(89 /* US_CLOSE_SQUARE_BRACKET */, ']', ']', 'OEM_6');\r\n define(90 /* US_QUOTE */, '\\'', '\\'', 'OEM_7');\r\n define(91 /* OEM_8 */, 'OEM_8');\r\n define(92 /* OEM_102 */, 'OEM_102');\r\n define(93 /* NUMPAD_0 */, 'NumPad0');\r\n define(94 /* NUMPAD_1 */, 'NumPad1');\r\n define(95 /* NUMPAD_2 */, 'NumPad2');\r\n define(96 /* NUMPAD_3 */, 'NumPad3');\r\n define(97 /* NUMPAD_4 */, 'NumPad4');\r\n define(98 /* NUMPAD_5 */, 'NumPad5');\r\n define(99 /* NUMPAD_6 */, 'NumPad6');\r\n define(100 /* NUMPAD_7 */, 'NumPad7');\r\n define(101 /* NUMPAD_8 */, 'NumPad8');\r\n define(102 /* NUMPAD_9 */, 'NumPad9');\r\n define(103 /* NUMPAD_MULTIPLY */, 'NumPad_Multiply');\r\n define(104 /* NUMPAD_ADD */, 'NumPad_Add');\r\n define(105 /* NUMPAD_SEPARATOR */, 'NumPad_Separator');\r\n define(106 /* NUMPAD_SUBTRACT */, 'NumPad_Subtract');\r\n define(107 /* NUMPAD_DECIMAL */, 'NumPad_Decimal');\r\n define(108 /* NUMPAD_DIVIDE */, 'NumPad_Divide');\r\n})();\r\nexport var KeyCodeUtils;\r\n(function (KeyCodeUtils) {\r\n function toString(keyCode) {\r\n return uiMap.keyCodeToStr(keyCode);\r\n }\r\n KeyCodeUtils.toString = toString;\r\n function fromString(key) {\r\n return uiMap.strToKeyCode(key);\r\n }\r\n KeyCodeUtils.fromString = fromString;\r\n function toUserSettingsUS(keyCode) {\r\n return userSettingsUSMap.keyCodeToStr(keyCode);\r\n }\r\n KeyCodeUtils.toUserSettingsUS = toUserSettingsUS;\r\n function toUserSettingsGeneral(keyCode) {\r\n return userSettingsGeneralMap.keyCodeToStr(keyCode);\r\n }\r\n KeyCodeUtils.toUserSettingsGeneral = toUserSettingsGeneral;\r\n function fromUserSettings(key) {\r\n return userSettingsUSMap.strToKeyCode(key) || userSettingsGeneralMap.strToKeyCode(key);\r\n }\r\n KeyCodeUtils.fromUserSettings = fromUserSettings;\r\n})(KeyCodeUtils || (KeyCodeUtils = {}));\r\nexport function KeyChord(firstPart, secondPart) {\r\n var chordPart = ((secondPart & 0x0000FFFF) << 16) >>> 0;\r\n return (firstPart | chordPart) >>> 0;\r\n}\r\nexport function createKeybinding(keybinding, OS) {\r\n if (keybinding === 0) {\r\n return null;\r\n }\r\n var firstPart = (keybinding & 0x0000FFFF) >>> 0;\r\n var chordPart = (keybinding & 0xFFFF0000) >>> 16;\r\n if (chordPart !== 0) {\r\n return new ChordKeybinding([\r\n createSimpleKeybinding(firstPart, OS),\r\n createSimpleKeybinding(chordPart, OS)\r\n ]);\r\n }\r\n return new ChordKeybinding([createSimpleKeybinding(firstPart, OS)]);\r\n}\r\nexport function createSimpleKeybinding(keybinding, OS) {\r\n var ctrlCmd = (keybinding & 2048 /* CtrlCmd */ ? true : false);\r\n var winCtrl = (keybinding & 256 /* WinCtrl */ ? true : false);\r\n var ctrlKey = (OS === 2 /* Macintosh */ ? winCtrl : ctrlCmd);\r\n var shiftKey = (keybinding & 1024 /* Shift */ ? true : false);\r\n var altKey = (keybinding & 512 /* Alt */ ? true : false);\r\n var metaKey = (OS === 2 /* Macintosh */ ? ctrlCmd : winCtrl);\r\n var keyCode = (keybinding & 255 /* KeyCode */);\r\n return new SimpleKeybinding(ctrlKey, shiftKey, altKey, metaKey, keyCode);\r\n}\r\nvar SimpleKeybinding = /** @class */ (function () {\r\n function SimpleKeybinding(ctrlKey, shiftKey, altKey, metaKey, keyCode) {\r\n this.ctrlKey = ctrlKey;\r\n this.shiftKey = shiftKey;\r\n this.altKey = altKey;\r\n this.metaKey = metaKey;\r\n this.keyCode = keyCode;\r\n }\r\n SimpleKeybinding.prototype.equals = function (other) {\r\n return (this.ctrlKey === other.ctrlKey\r\n && this.shiftKey === other.shiftKey\r\n && this.altKey === other.altKey\r\n && this.metaKey === other.metaKey\r\n && this.keyCode === other.keyCode);\r\n };\r\n SimpleKeybinding.prototype.isModifierKey = function () {\r\n return (this.keyCode === 0 /* Unknown */\r\n || this.keyCode === 5 /* Ctrl */\r\n || this.keyCode === 57 /* Meta */\r\n || this.keyCode === 6 /* Alt */\r\n || this.keyCode === 4 /* Shift */);\r\n };\r\n SimpleKeybinding.prototype.toChord = function () {\r\n return new ChordKeybinding([this]);\r\n };\r\n /**\r\n * Does this keybinding refer to the key code of a modifier and it also has the modifier flag?\r\n */\r\n SimpleKeybinding.prototype.isDuplicateModifierCase = function () {\r\n return ((this.ctrlKey && this.keyCode === 5 /* Ctrl */)\r\n || (this.shiftKey && this.keyCode === 4 /* Shift */)\r\n || (this.altKey && this.keyCode === 6 /* Alt */)\r\n || (this.metaKey && this.keyCode === 57 /* Meta */));\r\n };\r\n return SimpleKeybinding;\r\n}());\r\nexport { SimpleKeybinding };\r\nvar ChordKeybinding = /** @class */ (function () {\r\n function ChordKeybinding(parts) {\r\n if (parts.length === 0) {\r\n throw illegalArgument(\"parts\");\r\n }\r\n this.parts = parts;\r\n }\r\n ChordKeybinding.prototype.equals = function (other) {\r\n if (other === null) {\r\n return false;\r\n }\r\n if (this.parts.length !== other.parts.length) {\r\n return false;\r\n }\r\n for (var i = 0; i < this.parts.length; i++) {\r\n if (!this.parts[i].equals(other.parts[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n return ChordKeybinding;\r\n}());\r\nexport { ChordKeybinding };\r\nvar ResolvedKeybindingPart = /** @class */ (function () {\r\n function ResolvedKeybindingPart(ctrlKey, shiftKey, altKey, metaKey, kbLabel, kbAriaLabel) {\r\n this.ctrlKey = ctrlKey;\r\n this.shiftKey = shiftKey;\r\n this.altKey = altKey;\r\n this.metaKey = metaKey;\r\n this.keyLabel = kbLabel;\r\n this.keyAriaLabel = kbAriaLabel;\r\n }\r\n return ResolvedKeybindingPart;\r\n}());\r\nexport { ResolvedKeybindingPart };\r\n/**\r\n * A resolved keybinding. Can be a simple keybinding or a chord keybinding.\r\n */\r\nvar ResolvedKeybinding = /** @class */ (function () {\r\n function ResolvedKeybinding() {\r\n }\r\n return ResolvedKeybinding;\r\n}());\r\nexport { ResolvedKeybinding };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar _a;\r\nimport { isWindows } from './platform.js';\r\nvar _schemePattern = /^\\w[\\w\\d+.-]*$/;\r\nvar _singleSlashStart = /^\\//;\r\nvar _doubleSlashStart = /^\\/\\//;\r\nfunction _validateUri(ret, _strict) {\r\n // scheme, must be set\r\n if (!ret.scheme && _strict) {\r\n throw new Error(\"[UriError]: Scheme is missing: {scheme: \\\"\\\", authority: \\\"\" + ret.authority + \"\\\", path: \\\"\" + ret.path + \"\\\", query: \\\"\" + ret.query + \"\\\", fragment: \\\"\" + ret.fragment + \"\\\"}\");\r\n }\r\n // scheme, https://tools.ietf.org/html/rfc3986#section-3.1\r\n // ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\r\n if (ret.scheme && !_schemePattern.test(ret.scheme)) {\r\n throw new Error('[UriError]: Scheme contains illegal characters.');\r\n }\r\n // path, http://tools.ietf.org/html/rfc3986#section-3.3\r\n // If a URI contains an authority component, then the path component\r\n // must either be empty or begin with a slash (\"/\") character. If a URI\r\n // does not contain an authority component, then the path cannot begin\r\n // with two slash characters (\"//\").\r\n if (ret.path) {\r\n if (ret.authority) {\r\n if (!_singleSlashStart.test(ret.path)) {\r\n throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character');\r\n }\r\n }\r\n else {\r\n if (_doubleSlashStart.test(ret.path)) {\r\n throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\r\n }\r\n }\r\n }\r\n}\r\n// for a while we allowed uris *without* schemes and this is the migration\r\n// for them, e.g. an uri without scheme and without strict-mode warns and falls\r\n// back to the file-scheme. that should cause the least carnage and still be a\r\n// clear warning\r\nfunction _schemeFix(scheme, _strict) {\r\n if (!scheme && !_strict) {\r\n return 'file';\r\n }\r\n return scheme;\r\n}\r\n// implements a bit of https://tools.ietf.org/html/rfc3986#section-5\r\nfunction _referenceResolution(scheme, path) {\r\n // the slash-character is our 'default base' as we don't\r\n // support constructing URIs relative to other URIs. This\r\n // also means that we alter and potentially break paths.\r\n // see https://tools.ietf.org/html/rfc3986#section-5.1.4\r\n switch (scheme) {\r\n case 'https':\r\n case 'http':\r\n case 'file':\r\n if (!path) {\r\n path = _slash;\r\n }\r\n else if (path[0] !== _slash) {\r\n path = _slash + path;\r\n }\r\n break;\r\n }\r\n return path;\r\n}\r\nvar _empty = '';\r\nvar _slash = '/';\r\nvar _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\r\n/**\r\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\r\n * This class is a simple parser which creates the basic component parts\r\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\r\n * and encoding.\r\n *\r\n * foo://example.com:8042/over/there?name=ferret#nose\r\n * \\_/ \\______________/\\_________/ \\_________/ \\__/\r\n * | | | | |\r\n * scheme authority path query fragment\r\n * | _____________________|__\r\n * / \\ / \\\r\n * urn:example:animal:ferret:nose\r\n */\r\nvar URI = /** @class */ (function () {\r\n /**\r\n * @internal\r\n */\r\n function URI(schemeOrData, authority, path, query, fragment, _strict) {\r\n if (_strict === void 0) { _strict = false; }\r\n if (typeof schemeOrData === 'object') {\r\n this.scheme = schemeOrData.scheme || _empty;\r\n this.authority = schemeOrData.authority || _empty;\r\n this.path = schemeOrData.path || _empty;\r\n this.query = schemeOrData.query || _empty;\r\n this.fragment = schemeOrData.fragment || _empty;\r\n // no validation because it's this URI\r\n // that creates uri components.\r\n // _validateUri(this);\r\n }\r\n else {\r\n this.scheme = _schemeFix(schemeOrData, _strict);\r\n this.authority = authority || _empty;\r\n this.path = _referenceResolution(this.scheme, path || _empty);\r\n this.query = query || _empty;\r\n this.fragment = fragment || _empty;\r\n _validateUri(this, _strict);\r\n }\r\n }\r\n URI.isUri = function (thing) {\r\n if (thing instanceof URI) {\r\n return true;\r\n }\r\n if (!thing) {\r\n return false;\r\n }\r\n return typeof thing.authority === 'string'\r\n && typeof thing.fragment === 'string'\r\n && typeof thing.path === 'string'\r\n && typeof thing.query === 'string'\r\n && typeof thing.scheme === 'string'\r\n && typeof thing.fsPath === 'function'\r\n && typeof thing.with === 'function'\r\n && typeof thing.toString === 'function';\r\n };\r\n Object.defineProperty(URI.prototype, \"fsPath\", {\r\n // ---- filesystem path -----------------------\r\n /**\r\n * Returns a string representing the corresponding file system path of this URI.\r\n * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the\r\n * platform specific path separator.\r\n *\r\n * * Will *not* validate the path for invalid characters and semantics.\r\n * * Will *not* look at the scheme of this URI.\r\n * * The result shall *not* be used for display purposes but for accessing a file on disk.\r\n *\r\n *\r\n * The *difference* to `URI#path` is the use of the platform specific separator and the handling\r\n * of UNC paths. See the below sample of a file-uri with an authority (UNC path).\r\n *\r\n * ```ts\r\n const u = URI.parse('file://server/c$/folder/file.txt')\r\n u.authority === 'server'\r\n u.path === '/shares/c$/file.txt'\r\n u.fsPath === '\\\\server\\c$\\folder\\file.txt'\r\n ```\r\n *\r\n * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,\r\n * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working\r\n * with URIs that represent files on disk (`file` scheme).\r\n */\r\n get: function () {\r\n // if (this.scheme !== 'file') {\r\n // \tconsole.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);\r\n // }\r\n return _makeFsPath(this);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n // ---- modify to new -------------------------\r\n URI.prototype.with = function (change) {\r\n if (!change) {\r\n return this;\r\n }\r\n var scheme = change.scheme, authority = change.authority, path = change.path, query = change.query, fragment = change.fragment;\r\n if (scheme === undefined) {\r\n scheme = this.scheme;\r\n }\r\n else if (scheme === null) {\r\n scheme = _empty;\r\n }\r\n if (authority === undefined) {\r\n authority = this.authority;\r\n }\r\n else if (authority === null) {\r\n authority = _empty;\r\n }\r\n if (path === undefined) {\r\n path = this.path;\r\n }\r\n else if (path === null) {\r\n path = _empty;\r\n }\r\n if (query === undefined) {\r\n query = this.query;\r\n }\r\n else if (query === null) {\r\n query = _empty;\r\n }\r\n if (fragment === undefined) {\r\n fragment = this.fragment;\r\n }\r\n else if (fragment === null) {\r\n fragment = _empty;\r\n }\r\n if (scheme === this.scheme\r\n && authority === this.authority\r\n && path === this.path\r\n && query === this.query\r\n && fragment === this.fragment) {\r\n return this;\r\n }\r\n return new _URI(scheme, authority, path, query, fragment);\r\n };\r\n // ---- parse & validate ------------------------\r\n /**\r\n * Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,\r\n * `file:///usr/home`, or `scheme:with/path`.\r\n *\r\n * @param value A string which represents an URI (see `URI#toString`).\r\n */\r\n URI.parse = function (value, _strict) {\r\n if (_strict === void 0) { _strict = false; }\r\n var match = _regexp.exec(value);\r\n if (!match) {\r\n return new _URI(_empty, _empty, _empty, _empty, _empty);\r\n }\r\n return new _URI(match[2] || _empty, percentDecode(match[4] || _empty), percentDecode(match[5] || _empty), percentDecode(match[7] || _empty), percentDecode(match[9] || _empty), _strict);\r\n };\r\n /**\r\n * Creates a new URI from a file system path, e.g. `c:\\my\\files`,\r\n * `/usr/home`, or `\\\\server\\share\\some\\path`.\r\n *\r\n * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument\r\n * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**\r\n * `URI.parse('file://' + path)` because the path might contain characters that are\r\n * interpreted (# and ?). See the following sample:\r\n * ```ts\r\n const good = URI.file('/coding/c#/project1');\r\n good.scheme === 'file';\r\n good.path === '/coding/c#/project1';\r\n good.fragment === '';\r\n const bad = URI.parse('file://' + '/coding/c#/project1');\r\n bad.scheme === 'file';\r\n bad.path === '/coding/c'; // path is now broken\r\n bad.fragment === '/project1';\r\n ```\r\n *\r\n * @param path A file system path (see `URI#fsPath`)\r\n */\r\n URI.file = function (path) {\r\n var authority = _empty;\r\n // normalize to fwd-slashes on windows,\r\n // on other systems bwd-slashes are valid\r\n // filename character, eg /f\\oo/ba\\r.txt\r\n if (isWindows) {\r\n path = path.replace(/\\\\/g, _slash);\r\n }\r\n // check for authority as used in UNC shares\r\n // or use the path as given\r\n if (path[0] === _slash && path[1] === _slash) {\r\n var idx = path.indexOf(_slash, 2);\r\n if (idx === -1) {\r\n authority = path.substring(2);\r\n path = _slash;\r\n }\r\n else {\r\n authority = path.substring(2, idx);\r\n path = path.substring(idx) || _slash;\r\n }\r\n }\r\n return new _URI('file', authority, path, _empty, _empty);\r\n };\r\n URI.from = function (components) {\r\n return new _URI(components.scheme, components.authority, components.path, components.query, components.fragment);\r\n };\r\n // ---- printing/externalize ---------------------------\r\n /**\r\n * Creates a string representation for this URI. It's guaranteed that calling\r\n * `URI.parse` with the result of this function creates an URI which is equal\r\n * to this URI.\r\n *\r\n * * The result shall *not* be used for display purposes but for externalization or transport.\r\n * * The result will be encoded using the percentage encoding and encoding happens mostly\r\n * ignore the scheme-specific encoding rules.\r\n *\r\n * @param skipEncoding Do not encode the result, default is `false`\r\n */\r\n URI.prototype.toString = function (skipEncoding) {\r\n if (skipEncoding === void 0) { skipEncoding = false; }\r\n return _asFormatted(this, skipEncoding);\r\n };\r\n URI.prototype.toJSON = function () {\r\n return this;\r\n };\r\n URI.revive = function (data) {\r\n if (!data) {\r\n return data;\r\n }\r\n else if (data instanceof URI) {\r\n return data;\r\n }\r\n else {\r\n var result = new _URI(data);\r\n result._formatted = data.external;\r\n result._fsPath = data._sep === _pathSepMarker ? data.fsPath : null;\r\n return result;\r\n }\r\n };\r\n return URI;\r\n}());\r\nexport { URI };\r\nvar _pathSepMarker = isWindows ? 1 : undefined;\r\n// tslint:disable-next-line:class-name\r\nvar _URI = /** @class */ (function (_super) {\r\n __extends(_URI, _super);\r\n function _URI() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this._formatted = null;\r\n _this._fsPath = null;\r\n return _this;\r\n }\r\n Object.defineProperty(_URI.prototype, \"fsPath\", {\r\n get: function () {\r\n if (!this._fsPath) {\r\n this._fsPath = _makeFsPath(this);\r\n }\r\n return this._fsPath;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n _URI.prototype.toString = function (skipEncoding) {\r\n if (skipEncoding === void 0) { skipEncoding = false; }\r\n if (!skipEncoding) {\r\n if (!this._formatted) {\r\n this._formatted = _asFormatted(this, false);\r\n }\r\n return this._formatted;\r\n }\r\n else {\r\n // we don't cache that\r\n return _asFormatted(this, true);\r\n }\r\n };\r\n _URI.prototype.toJSON = function () {\r\n var res = {\r\n $mid: 1\r\n };\r\n // cached state\r\n if (this._fsPath) {\r\n res.fsPath = this._fsPath;\r\n res._sep = _pathSepMarker;\r\n }\r\n if (this._formatted) {\r\n res.external = this._formatted;\r\n }\r\n // uri components\r\n if (this.path) {\r\n res.path = this.path;\r\n }\r\n if (this.scheme) {\r\n res.scheme = this.scheme;\r\n }\r\n if (this.authority) {\r\n res.authority = this.authority;\r\n }\r\n if (this.query) {\r\n res.query = this.query;\r\n }\r\n if (this.fragment) {\r\n res.fragment = this.fragment;\r\n }\r\n return res;\r\n };\r\n return _URI;\r\n}(URI));\r\n// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2\r\nvar encodeTable = (_a = {},\r\n _a[58 /* Colon */] = '%3A',\r\n _a[47 /* Slash */] = '%2F',\r\n _a[63 /* QuestionMark */] = '%3F',\r\n _a[35 /* Hash */] = '%23',\r\n _a[91 /* OpenSquareBracket */] = '%5B',\r\n _a[93 /* CloseSquareBracket */] = '%5D',\r\n _a[64 /* AtSign */] = '%40',\r\n _a[33 /* ExclamationMark */] = '%21',\r\n _a[36 /* DollarSign */] = '%24',\r\n _a[38 /* Ampersand */] = '%26',\r\n _a[39 /* SingleQuote */] = '%27',\r\n _a[40 /* OpenParen */] = '%28',\r\n _a[41 /* CloseParen */] = '%29',\r\n _a[42 /* Asterisk */] = '%2A',\r\n _a[43 /* Plus */] = '%2B',\r\n _a[44 /* Comma */] = '%2C',\r\n _a[59 /* Semicolon */] = '%3B',\r\n _a[61 /* Equals */] = '%3D',\r\n _a[32 /* Space */] = '%20',\r\n _a);\r\nfunction encodeURIComponentFast(uriComponent, allowSlash) {\r\n var res = undefined;\r\n var nativeEncodePos = -1;\r\n for (var pos = 0; pos < uriComponent.length; pos++) {\r\n var code = uriComponent.charCodeAt(pos);\r\n // unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3\r\n if ((code >= 97 /* a */ && code <= 122 /* z */)\r\n || (code >= 65 /* A */ && code <= 90 /* Z */)\r\n || (code >= 48 /* Digit0 */ && code <= 57 /* Digit9 */)\r\n || code === 45 /* Dash */\r\n || code === 46 /* Period */\r\n || code === 95 /* Underline */\r\n || code === 126 /* Tilde */\r\n || (allowSlash && code === 47 /* Slash */)) {\r\n // check if we are delaying native encode\r\n if (nativeEncodePos !== -1) {\r\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\r\n nativeEncodePos = -1;\r\n }\r\n // check if we write into a new string (by default we try to return the param)\r\n if (res !== undefined) {\r\n res += uriComponent.charAt(pos);\r\n }\r\n }\r\n else {\r\n // encoding needed, we need to allocate a new string\r\n if (res === undefined) {\r\n res = uriComponent.substr(0, pos);\r\n }\r\n // check with default table first\r\n var escaped = encodeTable[code];\r\n if (escaped !== undefined) {\r\n // check if we are delaying native encode\r\n if (nativeEncodePos !== -1) {\r\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\r\n nativeEncodePos = -1;\r\n }\r\n // append escaped variant to result\r\n res += escaped;\r\n }\r\n else if (nativeEncodePos === -1) {\r\n // use native encode only when needed\r\n nativeEncodePos = pos;\r\n }\r\n }\r\n }\r\n if (nativeEncodePos !== -1) {\r\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos));\r\n }\r\n return res !== undefined ? res : uriComponent;\r\n}\r\nfunction encodeURIComponentMinimal(path) {\r\n var res = undefined;\r\n for (var pos = 0; pos < path.length; pos++) {\r\n var code = path.charCodeAt(pos);\r\n if (code === 35 /* Hash */ || code === 63 /* QuestionMark */) {\r\n if (res === undefined) {\r\n res = path.substr(0, pos);\r\n }\r\n res += encodeTable[code];\r\n }\r\n else {\r\n if (res !== undefined) {\r\n res += path[pos];\r\n }\r\n }\r\n }\r\n return res !== undefined ? res : path;\r\n}\r\n/**\r\n * Compute `fsPath` for the given uri\r\n */\r\nfunction _makeFsPath(uri) {\r\n var value;\r\n if (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {\r\n // unc path: file://shares/c$/far/boo\r\n value = \"//\" + uri.authority + uri.path;\r\n }\r\n else if (uri.path.charCodeAt(0) === 47 /* Slash */\r\n && (uri.path.charCodeAt(1) >= 65 /* A */ && uri.path.charCodeAt(1) <= 90 /* Z */ || uri.path.charCodeAt(1) >= 97 /* a */ && uri.path.charCodeAt(1) <= 122 /* z */)\r\n && uri.path.charCodeAt(2) === 58 /* Colon */) {\r\n // windows drive letter: file:///c:/far/boo\r\n value = uri.path[1].toLowerCase() + uri.path.substr(2);\r\n }\r\n else {\r\n // other path\r\n value = uri.path;\r\n }\r\n if (isWindows) {\r\n value = value.replace(/\\//g, '\\\\');\r\n }\r\n return value;\r\n}\r\n/**\r\n * Create the external version of a uri\r\n */\r\nfunction _asFormatted(uri, skipEncoding) {\r\n var encoder = !skipEncoding\r\n ? encodeURIComponentFast\r\n : encodeURIComponentMinimal;\r\n var res = '';\r\n var scheme = uri.scheme, authority = uri.authority, path = uri.path, query = uri.query, fragment = uri.fragment;\r\n if (scheme) {\r\n res += scheme;\r\n res += ':';\r\n }\r\n if (authority || scheme === 'file') {\r\n res += _slash;\r\n res += _slash;\r\n }\r\n if (authority) {\r\n var idx = authority.indexOf('@');\r\n if (idx !== -1) {\r\n // @\r\n var userinfo = authority.substr(0, idx);\r\n authority = authority.substr(idx + 1);\r\n idx = userinfo.indexOf(':');\r\n if (idx === -1) {\r\n res += encoder(userinfo, false);\r\n }\r\n else {\r\n // :@\r\n res += encoder(userinfo.substr(0, idx), false);\r\n res += ':';\r\n res += encoder(userinfo.substr(idx + 1), false);\r\n }\r\n res += '@';\r\n }\r\n authority = authority.toLowerCase();\r\n idx = authority.indexOf(':');\r\n if (idx === -1) {\r\n res += encoder(authority, false);\r\n }\r\n else {\r\n // :\r\n res += encoder(authority.substr(0, idx), false);\r\n res += authority.substr(idx);\r\n }\r\n }\r\n if (path) {\r\n // lower-case windows drive letters in /C:/fff or C:/fff\r\n if (path.length >= 3 && path.charCodeAt(0) === 47 /* Slash */ && path.charCodeAt(2) === 58 /* Colon */) {\r\n var code = path.charCodeAt(1);\r\n if (code >= 65 /* A */ && code <= 90 /* Z */) {\r\n path = \"/\" + String.fromCharCode(code + 32) + \":\" + path.substr(3); // \"/c:\".length === 3\r\n }\r\n }\r\n else if (path.length >= 2 && path.charCodeAt(1) === 58 /* Colon */) {\r\n var code = path.charCodeAt(0);\r\n if (code >= 65 /* A */ && code <= 90 /* Z */) {\r\n path = String.fromCharCode(code + 32) + \":\" + path.substr(2); // \"/c:\".length === 3\r\n }\r\n }\r\n // encode the rest of the path\r\n res += encoder(path, true);\r\n }\r\n if (query) {\r\n res += '?';\r\n res += encoder(query, false);\r\n }\r\n if (fragment) {\r\n res += '#';\r\n res += !skipEncoding ? encodeURIComponentFast(fragment, false) : fragment;\r\n }\r\n return res;\r\n}\r\n// --- decode\r\nfunction decodeURIComponentGraceful(str) {\r\n try {\r\n return decodeURIComponent(str);\r\n }\r\n catch (_a) {\r\n if (str.length > 3) {\r\n return str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));\r\n }\r\n else {\r\n return str;\r\n }\r\n }\r\n}\r\nvar _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\r\nfunction percentDecode(str) {\r\n if (!str.match(_rEncodedAsHex)) {\r\n return str;\r\n }\r\n return str.replace(_rEncodedAsHex, function (match) { return decodeURIComponentGraceful(match); });\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * A position in the editor.\r\n */\r\nvar Position = /** @class */ (function () {\r\n function Position(lineNumber, column) {\r\n this.lineNumber = lineNumber;\r\n this.column = column;\r\n }\r\n /**\r\n * Create a new position from this position.\r\n *\r\n * @param newLineNumber new line number\r\n * @param newColumn new column\r\n */\r\n Position.prototype.with = function (newLineNumber, newColumn) {\r\n if (newLineNumber === void 0) { newLineNumber = this.lineNumber; }\r\n if (newColumn === void 0) { newColumn = this.column; }\r\n if (newLineNumber === this.lineNumber && newColumn === this.column) {\r\n return this;\r\n }\r\n else {\r\n return new Position(newLineNumber, newColumn);\r\n }\r\n };\r\n /**\r\n * Derive a new position from this position.\r\n *\r\n * @param deltaLineNumber line number delta\r\n * @param deltaColumn column delta\r\n */\r\n Position.prototype.delta = function (deltaLineNumber, deltaColumn) {\r\n if (deltaLineNumber === void 0) { deltaLineNumber = 0; }\r\n if (deltaColumn === void 0) { deltaColumn = 0; }\r\n return this.with(this.lineNumber + deltaLineNumber, this.column + deltaColumn);\r\n };\r\n /**\r\n * Test if this position equals other position\r\n */\r\n Position.prototype.equals = function (other) {\r\n return Position.equals(this, other);\r\n };\r\n /**\r\n * Test if position `a` equals position `b`\r\n */\r\n Position.equals = function (a, b) {\r\n if (!a && !b) {\r\n return true;\r\n }\r\n return (!!a &&\r\n !!b &&\r\n a.lineNumber === b.lineNumber &&\r\n a.column === b.column);\r\n };\r\n /**\r\n * Test if this position is before other position.\r\n * If the two positions are equal, the result will be false.\r\n */\r\n Position.prototype.isBefore = function (other) {\r\n return Position.isBefore(this, other);\r\n };\r\n /**\r\n * Test if position `a` is before position `b`.\r\n * If the two positions are equal, the result will be false.\r\n */\r\n Position.isBefore = function (a, b) {\r\n if (a.lineNumber < b.lineNumber) {\r\n return true;\r\n }\r\n if (b.lineNumber < a.lineNumber) {\r\n return false;\r\n }\r\n return a.column < b.column;\r\n };\r\n /**\r\n * Test if this position is before other position.\r\n * If the two positions are equal, the result will be true.\r\n */\r\n Position.prototype.isBeforeOrEqual = function (other) {\r\n return Position.isBeforeOrEqual(this, other);\r\n };\r\n /**\r\n * Test if position `a` is before position `b`.\r\n * If the two positions are equal, the result will be true.\r\n */\r\n Position.isBeforeOrEqual = function (a, b) {\r\n if (a.lineNumber < b.lineNumber) {\r\n return true;\r\n }\r\n if (b.lineNumber < a.lineNumber) {\r\n return false;\r\n }\r\n return a.column <= b.column;\r\n };\r\n /**\r\n * A function that compares positions, useful for sorting\r\n */\r\n Position.compare = function (a, b) {\r\n var aLineNumber = a.lineNumber | 0;\r\n var bLineNumber = b.lineNumber | 0;\r\n if (aLineNumber === bLineNumber) {\r\n var aColumn = a.column | 0;\r\n var bColumn = b.column | 0;\r\n return aColumn - bColumn;\r\n }\r\n return aLineNumber - bLineNumber;\r\n };\r\n /**\r\n * Clone this position.\r\n */\r\n Position.prototype.clone = function () {\r\n return new Position(this.lineNumber, this.column);\r\n };\r\n /**\r\n * Convert to a human-readable representation.\r\n */\r\n Position.prototype.toString = function () {\r\n return '(' + this.lineNumber + ',' + this.column + ')';\r\n };\r\n // ---\r\n /**\r\n * Create a `Position` from an `IPosition`.\r\n */\r\n Position.lift = function (pos) {\r\n return new Position(pos.lineNumber, pos.column);\r\n };\r\n /**\r\n * Test if `obj` is an `IPosition`.\r\n */\r\n Position.isIPosition = function (obj) {\r\n return (obj\r\n && (typeof obj.lineNumber === 'number')\r\n && (typeof obj.column === 'number'));\r\n };\r\n return Position;\r\n}());\r\nexport { Position };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.\r\nexport var AccessibilitySupport;\r\n(function (AccessibilitySupport) {\r\n /**\r\n * This should be the browser case where it is not known if a screen reader is attached or no.\r\n */\r\n AccessibilitySupport[AccessibilitySupport[\"Unknown\"] = 0] = \"Unknown\";\r\n AccessibilitySupport[AccessibilitySupport[\"Disabled\"] = 1] = \"Disabled\";\r\n AccessibilitySupport[AccessibilitySupport[\"Enabled\"] = 2] = \"Enabled\";\r\n})(AccessibilitySupport || (AccessibilitySupport = {}));\r\nexport var CompletionItemInsertTextRule;\r\n(function (CompletionItemInsertTextRule) {\r\n /**\r\n * Adjust whitespace/indentation of multiline insert texts to\r\n * match the current line indentation.\r\n */\r\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"KeepWhitespace\"] = 1] = \"KeepWhitespace\";\r\n /**\r\n * `insertText` is a snippet.\r\n */\r\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"InsertAsSnippet\"] = 4] = \"InsertAsSnippet\";\r\n})(CompletionItemInsertTextRule || (CompletionItemInsertTextRule = {}));\r\nexport var CompletionItemKind;\r\n(function (CompletionItemKind) {\r\n CompletionItemKind[CompletionItemKind[\"Method\"] = 0] = \"Method\";\r\n CompletionItemKind[CompletionItemKind[\"Function\"] = 1] = \"Function\";\r\n CompletionItemKind[CompletionItemKind[\"Constructor\"] = 2] = \"Constructor\";\r\n CompletionItemKind[CompletionItemKind[\"Field\"] = 3] = \"Field\";\r\n CompletionItemKind[CompletionItemKind[\"Variable\"] = 4] = \"Variable\";\r\n CompletionItemKind[CompletionItemKind[\"Class\"] = 5] = \"Class\";\r\n CompletionItemKind[CompletionItemKind[\"Struct\"] = 6] = \"Struct\";\r\n CompletionItemKind[CompletionItemKind[\"Interface\"] = 7] = \"Interface\";\r\n CompletionItemKind[CompletionItemKind[\"Module\"] = 8] = \"Module\";\r\n CompletionItemKind[CompletionItemKind[\"Property\"] = 9] = \"Property\";\r\n CompletionItemKind[CompletionItemKind[\"Event\"] = 10] = \"Event\";\r\n CompletionItemKind[CompletionItemKind[\"Operator\"] = 11] = \"Operator\";\r\n CompletionItemKind[CompletionItemKind[\"Unit\"] = 12] = \"Unit\";\r\n CompletionItemKind[CompletionItemKind[\"Value\"] = 13] = \"Value\";\r\n CompletionItemKind[CompletionItemKind[\"Constant\"] = 14] = \"Constant\";\r\n CompletionItemKind[CompletionItemKind[\"Enum\"] = 15] = \"Enum\";\r\n CompletionItemKind[CompletionItemKind[\"EnumMember\"] = 16] = \"EnumMember\";\r\n CompletionItemKind[CompletionItemKind[\"Keyword\"] = 17] = \"Keyword\";\r\n CompletionItemKind[CompletionItemKind[\"Text\"] = 18] = \"Text\";\r\n CompletionItemKind[CompletionItemKind[\"Color\"] = 19] = \"Color\";\r\n CompletionItemKind[CompletionItemKind[\"File\"] = 20] = \"File\";\r\n CompletionItemKind[CompletionItemKind[\"Reference\"] = 21] = \"Reference\";\r\n CompletionItemKind[CompletionItemKind[\"Customcolor\"] = 22] = \"Customcolor\";\r\n CompletionItemKind[CompletionItemKind[\"Folder\"] = 23] = \"Folder\";\r\n CompletionItemKind[CompletionItemKind[\"TypeParameter\"] = 24] = \"TypeParameter\";\r\n CompletionItemKind[CompletionItemKind[\"Snippet\"] = 25] = \"Snippet\";\r\n})(CompletionItemKind || (CompletionItemKind = {}));\r\nexport var CompletionItemTag;\r\n(function (CompletionItemTag) {\r\n CompletionItemTag[CompletionItemTag[\"Deprecated\"] = 1] = \"Deprecated\";\r\n})(CompletionItemTag || (CompletionItemTag = {}));\r\n/**\r\n * How a suggest provider was triggered.\r\n */\r\nexport var CompletionTriggerKind;\r\n(function (CompletionTriggerKind) {\r\n CompletionTriggerKind[CompletionTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\r\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerCharacter\"] = 1] = \"TriggerCharacter\";\r\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerForIncompleteCompletions\"] = 2] = \"TriggerForIncompleteCompletions\";\r\n})(CompletionTriggerKind || (CompletionTriggerKind = {}));\r\n/**\r\n * A positioning preference for rendering content widgets.\r\n */\r\nexport var ContentWidgetPositionPreference;\r\n(function (ContentWidgetPositionPreference) {\r\n /**\r\n * Place the content widget exactly at a position\r\n */\r\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"EXACT\"] = 0] = \"EXACT\";\r\n /**\r\n * Place the content widget above a position\r\n */\r\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"ABOVE\"] = 1] = \"ABOVE\";\r\n /**\r\n * Place the content widget below a position\r\n */\r\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"BELOW\"] = 2] = \"BELOW\";\r\n})(ContentWidgetPositionPreference || (ContentWidgetPositionPreference = {}));\r\n/**\r\n * Describes the reason the cursor has changed its position.\r\n */\r\nexport var CursorChangeReason;\r\n(function (CursorChangeReason) {\r\n /**\r\n * Unknown or not set.\r\n */\r\n CursorChangeReason[CursorChangeReason[\"NotSet\"] = 0] = \"NotSet\";\r\n /**\r\n * A `model.setValue()` was called.\r\n */\r\n CursorChangeReason[CursorChangeReason[\"ContentFlush\"] = 1] = \"ContentFlush\";\r\n /**\r\n * The `model` has been changed outside of this cursor and the cursor recovers its position from associated markers.\r\n */\r\n CursorChangeReason[CursorChangeReason[\"RecoverFromMarkers\"] = 2] = \"RecoverFromMarkers\";\r\n /**\r\n * There was an explicit user gesture.\r\n */\r\n CursorChangeReason[CursorChangeReason[\"Explicit\"] = 3] = \"Explicit\";\r\n /**\r\n * There was a Paste.\r\n */\r\n CursorChangeReason[CursorChangeReason[\"Paste\"] = 4] = \"Paste\";\r\n /**\r\n * There was an Undo.\r\n */\r\n CursorChangeReason[CursorChangeReason[\"Undo\"] = 5] = \"Undo\";\r\n /**\r\n * There was a Redo.\r\n */\r\n CursorChangeReason[CursorChangeReason[\"Redo\"] = 6] = \"Redo\";\r\n})(CursorChangeReason || (CursorChangeReason = {}));\r\n/**\r\n * The default end of line to use when instantiating models.\r\n */\r\nexport var DefaultEndOfLine;\r\n(function (DefaultEndOfLine) {\r\n /**\r\n * Use line feed (\\n) as the end of line character.\r\n */\r\n DefaultEndOfLine[DefaultEndOfLine[\"LF\"] = 1] = \"LF\";\r\n /**\r\n * Use carriage return and line feed (\\r\\n) as the end of line character.\r\n */\r\n DefaultEndOfLine[DefaultEndOfLine[\"CRLF\"] = 2] = \"CRLF\";\r\n})(DefaultEndOfLine || (DefaultEndOfLine = {}));\r\n/**\r\n * A document highlight kind.\r\n */\r\nexport var DocumentHighlightKind;\r\n(function (DocumentHighlightKind) {\r\n /**\r\n * A textual occurrence.\r\n */\r\n DocumentHighlightKind[DocumentHighlightKind[\"Text\"] = 0] = \"Text\";\r\n /**\r\n * Read-access of a symbol, like reading a variable.\r\n */\r\n DocumentHighlightKind[DocumentHighlightKind[\"Read\"] = 1] = \"Read\";\r\n /**\r\n * Write-access of a symbol, like writing to a variable.\r\n */\r\n DocumentHighlightKind[DocumentHighlightKind[\"Write\"] = 2] = \"Write\";\r\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\r\n/**\r\n * Configuration options for auto indentation in the editor\r\n */\r\nexport var EditorAutoIndentStrategy;\r\n(function (EditorAutoIndentStrategy) {\r\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"None\"] = 0] = \"None\";\r\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Keep\"] = 1] = \"Keep\";\r\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Brackets\"] = 2] = \"Brackets\";\r\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Advanced\"] = 3] = \"Advanced\";\r\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Full\"] = 4] = \"Full\";\r\n})(EditorAutoIndentStrategy || (EditorAutoIndentStrategy = {}));\r\nexport var EditorOption;\r\n(function (EditorOption) {\r\n EditorOption[EditorOption[\"acceptSuggestionOnCommitCharacter\"] = 0] = \"acceptSuggestionOnCommitCharacter\";\r\n EditorOption[EditorOption[\"acceptSuggestionOnEnter\"] = 1] = \"acceptSuggestionOnEnter\";\r\n EditorOption[EditorOption[\"accessibilitySupport\"] = 2] = \"accessibilitySupport\";\r\n EditorOption[EditorOption[\"accessibilityPageSize\"] = 3] = \"accessibilityPageSize\";\r\n EditorOption[EditorOption[\"ariaLabel\"] = 4] = \"ariaLabel\";\r\n EditorOption[EditorOption[\"autoClosingBrackets\"] = 5] = \"autoClosingBrackets\";\r\n EditorOption[EditorOption[\"autoClosingOvertype\"] = 6] = \"autoClosingOvertype\";\r\n EditorOption[EditorOption[\"autoClosingQuotes\"] = 7] = \"autoClosingQuotes\";\r\n EditorOption[EditorOption[\"autoIndent\"] = 8] = \"autoIndent\";\r\n EditorOption[EditorOption[\"automaticLayout\"] = 9] = \"automaticLayout\";\r\n EditorOption[EditorOption[\"autoSurround\"] = 10] = \"autoSurround\";\r\n EditorOption[EditorOption[\"codeLens\"] = 11] = \"codeLens\";\r\n EditorOption[EditorOption[\"colorDecorators\"] = 12] = \"colorDecorators\";\r\n EditorOption[EditorOption[\"contextmenu\"] = 13] = \"contextmenu\";\r\n EditorOption[EditorOption[\"copyWithSyntaxHighlighting\"] = 14] = \"copyWithSyntaxHighlighting\";\r\n EditorOption[EditorOption[\"cursorBlinking\"] = 15] = \"cursorBlinking\";\r\n EditorOption[EditorOption[\"cursorSmoothCaretAnimation\"] = 16] = \"cursorSmoothCaretAnimation\";\r\n EditorOption[EditorOption[\"cursorStyle\"] = 17] = \"cursorStyle\";\r\n EditorOption[EditorOption[\"cursorSurroundingLines\"] = 18] = \"cursorSurroundingLines\";\r\n EditorOption[EditorOption[\"cursorSurroundingLinesStyle\"] = 19] = \"cursorSurroundingLinesStyle\";\r\n EditorOption[EditorOption[\"cursorWidth\"] = 20] = \"cursorWidth\";\r\n EditorOption[EditorOption[\"disableLayerHinting\"] = 21] = \"disableLayerHinting\";\r\n EditorOption[EditorOption[\"disableMonospaceOptimizations\"] = 22] = \"disableMonospaceOptimizations\";\r\n EditorOption[EditorOption[\"dragAndDrop\"] = 23] = \"dragAndDrop\";\r\n EditorOption[EditorOption[\"emptySelectionClipboard\"] = 24] = \"emptySelectionClipboard\";\r\n EditorOption[EditorOption[\"extraEditorClassName\"] = 25] = \"extraEditorClassName\";\r\n EditorOption[EditorOption[\"fastScrollSensitivity\"] = 26] = \"fastScrollSensitivity\";\r\n EditorOption[EditorOption[\"find\"] = 27] = \"find\";\r\n EditorOption[EditorOption[\"fixedOverflowWidgets\"] = 28] = \"fixedOverflowWidgets\";\r\n EditorOption[EditorOption[\"folding\"] = 29] = \"folding\";\r\n EditorOption[EditorOption[\"foldingStrategy\"] = 30] = \"foldingStrategy\";\r\n EditorOption[EditorOption[\"fontFamily\"] = 31] = \"fontFamily\";\r\n EditorOption[EditorOption[\"fontInfo\"] = 32] = \"fontInfo\";\r\n EditorOption[EditorOption[\"fontLigatures\"] = 33] = \"fontLigatures\";\r\n EditorOption[EditorOption[\"fontSize\"] = 34] = \"fontSize\";\r\n EditorOption[EditorOption[\"fontWeight\"] = 35] = \"fontWeight\";\r\n EditorOption[EditorOption[\"formatOnPaste\"] = 36] = \"formatOnPaste\";\r\n EditorOption[EditorOption[\"formatOnType\"] = 37] = \"formatOnType\";\r\n EditorOption[EditorOption[\"glyphMargin\"] = 38] = \"glyphMargin\";\r\n EditorOption[EditorOption[\"gotoLocation\"] = 39] = \"gotoLocation\";\r\n EditorOption[EditorOption[\"hideCursorInOverviewRuler\"] = 40] = \"hideCursorInOverviewRuler\";\r\n EditorOption[EditorOption[\"highlightActiveIndentGuide\"] = 41] = \"highlightActiveIndentGuide\";\r\n EditorOption[EditorOption[\"hover\"] = 42] = \"hover\";\r\n EditorOption[EditorOption[\"inDiffEditor\"] = 43] = \"inDiffEditor\";\r\n EditorOption[EditorOption[\"letterSpacing\"] = 44] = \"letterSpacing\";\r\n EditorOption[EditorOption[\"lightbulb\"] = 45] = \"lightbulb\";\r\n EditorOption[EditorOption[\"lineDecorationsWidth\"] = 46] = \"lineDecorationsWidth\";\r\n EditorOption[EditorOption[\"lineHeight\"] = 47] = \"lineHeight\";\r\n EditorOption[EditorOption[\"lineNumbers\"] = 48] = \"lineNumbers\";\r\n EditorOption[EditorOption[\"lineNumbersMinChars\"] = 49] = \"lineNumbersMinChars\";\r\n EditorOption[EditorOption[\"links\"] = 50] = \"links\";\r\n EditorOption[EditorOption[\"matchBrackets\"] = 51] = \"matchBrackets\";\r\n EditorOption[EditorOption[\"minimap\"] = 52] = \"minimap\";\r\n EditorOption[EditorOption[\"mouseStyle\"] = 53] = \"mouseStyle\";\r\n EditorOption[EditorOption[\"mouseWheelScrollSensitivity\"] = 54] = \"mouseWheelScrollSensitivity\";\r\n EditorOption[EditorOption[\"mouseWheelZoom\"] = 55] = \"mouseWheelZoom\";\r\n EditorOption[EditorOption[\"multiCursorMergeOverlapping\"] = 56] = \"multiCursorMergeOverlapping\";\r\n EditorOption[EditorOption[\"multiCursorModifier\"] = 57] = \"multiCursorModifier\";\r\n EditorOption[EditorOption[\"multiCursorPaste\"] = 58] = \"multiCursorPaste\";\r\n EditorOption[EditorOption[\"occurrencesHighlight\"] = 59] = \"occurrencesHighlight\";\r\n EditorOption[EditorOption[\"overviewRulerBorder\"] = 60] = \"overviewRulerBorder\";\r\n EditorOption[EditorOption[\"overviewRulerLanes\"] = 61] = \"overviewRulerLanes\";\r\n EditorOption[EditorOption[\"parameterHints\"] = 62] = \"parameterHints\";\r\n EditorOption[EditorOption[\"quickSuggestions\"] = 63] = \"quickSuggestions\";\r\n EditorOption[EditorOption[\"quickSuggestionsDelay\"] = 64] = \"quickSuggestionsDelay\";\r\n EditorOption[EditorOption[\"readOnly\"] = 65] = \"readOnly\";\r\n EditorOption[EditorOption[\"renderControlCharacters\"] = 66] = \"renderControlCharacters\";\r\n EditorOption[EditorOption[\"renderIndentGuides\"] = 67] = \"renderIndentGuides\";\r\n EditorOption[EditorOption[\"renderFinalNewline\"] = 68] = \"renderFinalNewline\";\r\n EditorOption[EditorOption[\"renderLineHighlight\"] = 69] = \"renderLineHighlight\";\r\n EditorOption[EditorOption[\"renderWhitespace\"] = 70] = \"renderWhitespace\";\r\n EditorOption[EditorOption[\"revealHorizontalRightPadding\"] = 71] = \"revealHorizontalRightPadding\";\r\n EditorOption[EditorOption[\"roundedSelection\"] = 72] = \"roundedSelection\";\r\n EditorOption[EditorOption[\"rulers\"] = 73] = \"rulers\";\r\n EditorOption[EditorOption[\"scrollbar\"] = 74] = \"scrollbar\";\r\n EditorOption[EditorOption[\"scrollBeyondLastColumn\"] = 75] = \"scrollBeyondLastColumn\";\r\n EditorOption[EditorOption[\"scrollBeyondLastLine\"] = 76] = \"scrollBeyondLastLine\";\r\n EditorOption[EditorOption[\"selectionClipboard\"] = 77] = \"selectionClipboard\";\r\n EditorOption[EditorOption[\"selectionHighlight\"] = 78] = \"selectionHighlight\";\r\n EditorOption[EditorOption[\"selectOnLineNumbers\"] = 79] = \"selectOnLineNumbers\";\r\n EditorOption[EditorOption[\"showFoldingControls\"] = 80] = \"showFoldingControls\";\r\n EditorOption[EditorOption[\"showUnused\"] = 81] = \"showUnused\";\r\n EditorOption[EditorOption[\"snippetSuggestions\"] = 82] = \"snippetSuggestions\";\r\n EditorOption[EditorOption[\"smoothScrolling\"] = 83] = \"smoothScrolling\";\r\n EditorOption[EditorOption[\"stopRenderingLineAfter\"] = 84] = \"stopRenderingLineAfter\";\r\n EditorOption[EditorOption[\"suggest\"] = 85] = \"suggest\";\r\n EditorOption[EditorOption[\"suggestFontSize\"] = 86] = \"suggestFontSize\";\r\n EditorOption[EditorOption[\"suggestLineHeight\"] = 87] = \"suggestLineHeight\";\r\n EditorOption[EditorOption[\"suggestOnTriggerCharacters\"] = 88] = \"suggestOnTriggerCharacters\";\r\n EditorOption[EditorOption[\"suggestSelection\"] = 89] = \"suggestSelection\";\r\n EditorOption[EditorOption[\"tabCompletion\"] = 90] = \"tabCompletion\";\r\n EditorOption[EditorOption[\"useTabStops\"] = 91] = \"useTabStops\";\r\n EditorOption[EditorOption[\"wordSeparators\"] = 92] = \"wordSeparators\";\r\n EditorOption[EditorOption[\"wordWrap\"] = 93] = \"wordWrap\";\r\n EditorOption[EditorOption[\"wordWrapBreakAfterCharacters\"] = 94] = \"wordWrapBreakAfterCharacters\";\r\n EditorOption[EditorOption[\"wordWrapBreakBeforeCharacters\"] = 95] = \"wordWrapBreakBeforeCharacters\";\r\n EditorOption[EditorOption[\"wordWrapBreakObtrusiveCharacters\"] = 96] = \"wordWrapBreakObtrusiveCharacters\";\r\n EditorOption[EditorOption[\"wordWrapColumn\"] = 97] = \"wordWrapColumn\";\r\n EditorOption[EditorOption[\"wordWrapMinified\"] = 98] = \"wordWrapMinified\";\r\n EditorOption[EditorOption[\"wrappingIndent\"] = 99] = \"wrappingIndent\";\r\n EditorOption[EditorOption[\"editorClassName\"] = 100] = \"editorClassName\";\r\n EditorOption[EditorOption[\"pixelRatio\"] = 101] = \"pixelRatio\";\r\n EditorOption[EditorOption[\"tabFocusMode\"] = 102] = \"tabFocusMode\";\r\n EditorOption[EditorOption[\"layoutInfo\"] = 103] = \"layoutInfo\";\r\n EditorOption[EditorOption[\"wrappingInfo\"] = 104] = \"wrappingInfo\";\r\n})(EditorOption || (EditorOption = {}));\r\n/**\r\n * End of line character preference.\r\n */\r\nexport var EndOfLinePreference;\r\n(function (EndOfLinePreference) {\r\n /**\r\n * Use the end of line character identified in the text buffer.\r\n */\r\n EndOfLinePreference[EndOfLinePreference[\"TextDefined\"] = 0] = \"TextDefined\";\r\n /**\r\n * Use line feed (\\n) as the end of line character.\r\n */\r\n EndOfLinePreference[EndOfLinePreference[\"LF\"] = 1] = \"LF\";\r\n /**\r\n * Use carriage return and line feed (\\r\\n) as the end of line character.\r\n */\r\n EndOfLinePreference[EndOfLinePreference[\"CRLF\"] = 2] = \"CRLF\";\r\n})(EndOfLinePreference || (EndOfLinePreference = {}));\r\n/**\r\n * End of line character preference.\r\n */\r\nexport var EndOfLineSequence;\r\n(function (EndOfLineSequence) {\r\n /**\r\n * Use line feed (\\n) as the end of line character.\r\n */\r\n EndOfLineSequence[EndOfLineSequence[\"LF\"] = 0] = \"LF\";\r\n /**\r\n * Use carriage return and line feed (\\r\\n) as the end of line character.\r\n */\r\n EndOfLineSequence[EndOfLineSequence[\"CRLF\"] = 1] = \"CRLF\";\r\n})(EndOfLineSequence || (EndOfLineSequence = {}));\r\n/**\r\n * Describes what to do with the indentation when pressing Enter.\r\n */\r\nexport var IndentAction;\r\n(function (IndentAction) {\r\n /**\r\n * Insert new line and copy the previous line's indentation.\r\n */\r\n IndentAction[IndentAction[\"None\"] = 0] = \"None\";\r\n /**\r\n * Insert new line and indent once (relative to the previous line's indentation).\r\n */\r\n IndentAction[IndentAction[\"Indent\"] = 1] = \"Indent\";\r\n /**\r\n * Insert two new lines:\r\n * - the first one indented which will hold the cursor\r\n * - the second one at the same indentation level\r\n */\r\n IndentAction[IndentAction[\"IndentOutdent\"] = 2] = \"IndentOutdent\";\r\n /**\r\n * Insert new line and outdent once (relative to the previous line's indentation).\r\n */\r\n IndentAction[IndentAction[\"Outdent\"] = 3] = \"Outdent\";\r\n})(IndentAction || (IndentAction = {}));\r\n/**\r\n * Virtual Key Codes, the value does not hold any inherent meaning.\r\n * Inspired somewhat from https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx\r\n * But these are \"more general\", as they should work across browsers & OS`s.\r\n */\r\nexport var KeyCode;\r\n(function (KeyCode) {\r\n /**\r\n * Placed first to cover the 0 value of the enum.\r\n */\r\n KeyCode[KeyCode[\"Unknown\"] = 0] = \"Unknown\";\r\n KeyCode[KeyCode[\"Backspace\"] = 1] = \"Backspace\";\r\n KeyCode[KeyCode[\"Tab\"] = 2] = \"Tab\";\r\n KeyCode[KeyCode[\"Enter\"] = 3] = \"Enter\";\r\n KeyCode[KeyCode[\"Shift\"] = 4] = \"Shift\";\r\n KeyCode[KeyCode[\"Ctrl\"] = 5] = \"Ctrl\";\r\n KeyCode[KeyCode[\"Alt\"] = 6] = \"Alt\";\r\n KeyCode[KeyCode[\"PauseBreak\"] = 7] = \"PauseBreak\";\r\n KeyCode[KeyCode[\"CapsLock\"] = 8] = \"CapsLock\";\r\n KeyCode[KeyCode[\"Escape\"] = 9] = \"Escape\";\r\n KeyCode[KeyCode[\"Space\"] = 10] = \"Space\";\r\n KeyCode[KeyCode[\"PageUp\"] = 11] = \"PageUp\";\r\n KeyCode[KeyCode[\"PageDown\"] = 12] = \"PageDown\";\r\n KeyCode[KeyCode[\"End\"] = 13] = \"End\";\r\n KeyCode[KeyCode[\"Home\"] = 14] = \"Home\";\r\n KeyCode[KeyCode[\"LeftArrow\"] = 15] = \"LeftArrow\";\r\n KeyCode[KeyCode[\"UpArrow\"] = 16] = \"UpArrow\";\r\n KeyCode[KeyCode[\"RightArrow\"] = 17] = \"RightArrow\";\r\n KeyCode[KeyCode[\"DownArrow\"] = 18] = \"DownArrow\";\r\n KeyCode[KeyCode[\"Insert\"] = 19] = \"Insert\";\r\n KeyCode[KeyCode[\"Delete\"] = 20] = \"Delete\";\r\n KeyCode[KeyCode[\"KEY_0\"] = 21] = \"KEY_0\";\r\n KeyCode[KeyCode[\"KEY_1\"] = 22] = \"KEY_1\";\r\n KeyCode[KeyCode[\"KEY_2\"] = 23] = \"KEY_2\";\r\n KeyCode[KeyCode[\"KEY_3\"] = 24] = \"KEY_3\";\r\n KeyCode[KeyCode[\"KEY_4\"] = 25] = \"KEY_4\";\r\n KeyCode[KeyCode[\"KEY_5\"] = 26] = \"KEY_5\";\r\n KeyCode[KeyCode[\"KEY_6\"] = 27] = \"KEY_6\";\r\n KeyCode[KeyCode[\"KEY_7\"] = 28] = \"KEY_7\";\r\n KeyCode[KeyCode[\"KEY_8\"] = 29] = \"KEY_8\";\r\n KeyCode[KeyCode[\"KEY_9\"] = 30] = \"KEY_9\";\r\n KeyCode[KeyCode[\"KEY_A\"] = 31] = \"KEY_A\";\r\n KeyCode[KeyCode[\"KEY_B\"] = 32] = \"KEY_B\";\r\n KeyCode[KeyCode[\"KEY_C\"] = 33] = \"KEY_C\";\r\n KeyCode[KeyCode[\"KEY_D\"] = 34] = \"KEY_D\";\r\n KeyCode[KeyCode[\"KEY_E\"] = 35] = \"KEY_E\";\r\n KeyCode[KeyCode[\"KEY_F\"] = 36] = \"KEY_F\";\r\n KeyCode[KeyCode[\"KEY_G\"] = 37] = \"KEY_G\";\r\n KeyCode[KeyCode[\"KEY_H\"] = 38] = \"KEY_H\";\r\n KeyCode[KeyCode[\"KEY_I\"] = 39] = \"KEY_I\";\r\n KeyCode[KeyCode[\"KEY_J\"] = 40] = \"KEY_J\";\r\n KeyCode[KeyCode[\"KEY_K\"] = 41] = \"KEY_K\";\r\n KeyCode[KeyCode[\"KEY_L\"] = 42] = \"KEY_L\";\r\n KeyCode[KeyCode[\"KEY_M\"] = 43] = \"KEY_M\";\r\n KeyCode[KeyCode[\"KEY_N\"] = 44] = \"KEY_N\";\r\n KeyCode[KeyCode[\"KEY_O\"] = 45] = \"KEY_O\";\r\n KeyCode[KeyCode[\"KEY_P\"] = 46] = \"KEY_P\";\r\n KeyCode[KeyCode[\"KEY_Q\"] = 47] = \"KEY_Q\";\r\n KeyCode[KeyCode[\"KEY_R\"] = 48] = \"KEY_R\";\r\n KeyCode[KeyCode[\"KEY_S\"] = 49] = \"KEY_S\";\r\n KeyCode[KeyCode[\"KEY_T\"] = 50] = \"KEY_T\";\r\n KeyCode[KeyCode[\"KEY_U\"] = 51] = \"KEY_U\";\r\n KeyCode[KeyCode[\"KEY_V\"] = 52] = \"KEY_V\";\r\n KeyCode[KeyCode[\"KEY_W\"] = 53] = \"KEY_W\";\r\n KeyCode[KeyCode[\"KEY_X\"] = 54] = \"KEY_X\";\r\n KeyCode[KeyCode[\"KEY_Y\"] = 55] = \"KEY_Y\";\r\n KeyCode[KeyCode[\"KEY_Z\"] = 56] = \"KEY_Z\";\r\n KeyCode[KeyCode[\"Meta\"] = 57] = \"Meta\";\r\n KeyCode[KeyCode[\"ContextMenu\"] = 58] = \"ContextMenu\";\r\n KeyCode[KeyCode[\"F1\"] = 59] = \"F1\";\r\n KeyCode[KeyCode[\"F2\"] = 60] = \"F2\";\r\n KeyCode[KeyCode[\"F3\"] = 61] = \"F3\";\r\n KeyCode[KeyCode[\"F4\"] = 62] = \"F4\";\r\n KeyCode[KeyCode[\"F5\"] = 63] = \"F5\";\r\n KeyCode[KeyCode[\"F6\"] = 64] = \"F6\";\r\n KeyCode[KeyCode[\"F7\"] = 65] = \"F7\";\r\n KeyCode[KeyCode[\"F8\"] = 66] = \"F8\";\r\n KeyCode[KeyCode[\"F9\"] = 67] = \"F9\";\r\n KeyCode[KeyCode[\"F10\"] = 68] = \"F10\";\r\n KeyCode[KeyCode[\"F11\"] = 69] = \"F11\";\r\n KeyCode[KeyCode[\"F12\"] = 70] = \"F12\";\r\n KeyCode[KeyCode[\"F13\"] = 71] = \"F13\";\r\n KeyCode[KeyCode[\"F14\"] = 72] = \"F14\";\r\n KeyCode[KeyCode[\"F15\"] = 73] = \"F15\";\r\n KeyCode[KeyCode[\"F16\"] = 74] = \"F16\";\r\n KeyCode[KeyCode[\"F17\"] = 75] = \"F17\";\r\n KeyCode[KeyCode[\"F18\"] = 76] = \"F18\";\r\n KeyCode[KeyCode[\"F19\"] = 77] = \"F19\";\r\n KeyCode[KeyCode[\"NumLock\"] = 78] = \"NumLock\";\r\n KeyCode[KeyCode[\"ScrollLock\"] = 79] = \"ScrollLock\";\r\n /**\r\n * Used for miscellaneous characters; it can vary by keyboard.\r\n * For the US standard keyboard, the ';:' key\r\n */\r\n KeyCode[KeyCode[\"US_SEMICOLON\"] = 80] = \"US_SEMICOLON\";\r\n /**\r\n * For any country/region, the '+' key\r\n * For the US standard keyboard, the '=+' key\r\n */\r\n KeyCode[KeyCode[\"US_EQUAL\"] = 81] = \"US_EQUAL\";\r\n /**\r\n * For any country/region, the ',' key\r\n * For the US standard keyboard, the ',<' key\r\n */\r\n KeyCode[KeyCode[\"US_COMMA\"] = 82] = \"US_COMMA\";\r\n /**\r\n * For any country/region, the '-' key\r\n * For the US standard keyboard, the '-_' key\r\n */\r\n KeyCode[KeyCode[\"US_MINUS\"] = 83] = \"US_MINUS\";\r\n /**\r\n * For any country/region, the '.' key\r\n * For the US standard keyboard, the '.>' key\r\n */\r\n KeyCode[KeyCode[\"US_DOT\"] = 84] = \"US_DOT\";\r\n /**\r\n * Used for miscellaneous characters; it can vary by keyboard.\r\n * For the US standard keyboard, the '/?' key\r\n */\r\n KeyCode[KeyCode[\"US_SLASH\"] = 85] = \"US_SLASH\";\r\n /**\r\n * Used for miscellaneous characters; it can vary by keyboard.\r\n * For the US standard keyboard, the '`~' key\r\n */\r\n KeyCode[KeyCode[\"US_BACKTICK\"] = 86] = \"US_BACKTICK\";\r\n /**\r\n * Used for miscellaneous characters; it can vary by keyboard.\r\n * For the US standard keyboard, the '[{' key\r\n */\r\n KeyCode[KeyCode[\"US_OPEN_SQUARE_BRACKET\"] = 87] = \"US_OPEN_SQUARE_BRACKET\";\r\n /**\r\n * Used for miscellaneous characters; it can vary by keyboard.\r\n * For the US standard keyboard, the '\\|' key\r\n */\r\n KeyCode[KeyCode[\"US_BACKSLASH\"] = 88] = \"US_BACKSLASH\";\r\n /**\r\n * Used for miscellaneous characters; it can vary by keyboard.\r\n * For the US standard keyboard, the ']}' key\r\n */\r\n KeyCode[KeyCode[\"US_CLOSE_SQUARE_BRACKET\"] = 89] = \"US_CLOSE_SQUARE_BRACKET\";\r\n /**\r\n * Used for miscellaneous characters; it can vary by keyboard.\r\n * For the US standard keyboard, the ''\"' key\r\n */\r\n KeyCode[KeyCode[\"US_QUOTE\"] = 90] = \"US_QUOTE\";\r\n /**\r\n * Used for miscellaneous characters; it can vary by keyboard.\r\n */\r\n KeyCode[KeyCode[\"OEM_8\"] = 91] = \"OEM_8\";\r\n /**\r\n * Either the angle bracket key or the backslash key on the RT 102-key keyboard.\r\n */\r\n KeyCode[KeyCode[\"OEM_102\"] = 92] = \"OEM_102\";\r\n KeyCode[KeyCode[\"NUMPAD_0\"] = 93] = \"NUMPAD_0\";\r\n KeyCode[KeyCode[\"NUMPAD_1\"] = 94] = \"NUMPAD_1\";\r\n KeyCode[KeyCode[\"NUMPAD_2\"] = 95] = \"NUMPAD_2\";\r\n KeyCode[KeyCode[\"NUMPAD_3\"] = 96] = \"NUMPAD_3\";\r\n KeyCode[KeyCode[\"NUMPAD_4\"] = 97] = \"NUMPAD_4\";\r\n KeyCode[KeyCode[\"NUMPAD_5\"] = 98] = \"NUMPAD_5\";\r\n KeyCode[KeyCode[\"NUMPAD_6\"] = 99] = \"NUMPAD_6\";\r\n KeyCode[KeyCode[\"NUMPAD_7\"] = 100] = \"NUMPAD_7\";\r\n KeyCode[KeyCode[\"NUMPAD_8\"] = 101] = \"NUMPAD_8\";\r\n KeyCode[KeyCode[\"NUMPAD_9\"] = 102] = \"NUMPAD_9\";\r\n KeyCode[KeyCode[\"NUMPAD_MULTIPLY\"] = 103] = \"NUMPAD_MULTIPLY\";\r\n KeyCode[KeyCode[\"NUMPAD_ADD\"] = 104] = \"NUMPAD_ADD\";\r\n KeyCode[KeyCode[\"NUMPAD_SEPARATOR\"] = 105] = \"NUMPAD_SEPARATOR\";\r\n KeyCode[KeyCode[\"NUMPAD_SUBTRACT\"] = 106] = \"NUMPAD_SUBTRACT\";\r\n KeyCode[KeyCode[\"NUMPAD_DECIMAL\"] = 107] = \"NUMPAD_DECIMAL\";\r\n KeyCode[KeyCode[\"NUMPAD_DIVIDE\"] = 108] = \"NUMPAD_DIVIDE\";\r\n /**\r\n * Cover all key codes when IME is processing input.\r\n */\r\n KeyCode[KeyCode[\"KEY_IN_COMPOSITION\"] = 109] = \"KEY_IN_COMPOSITION\";\r\n KeyCode[KeyCode[\"ABNT_C1\"] = 110] = \"ABNT_C1\";\r\n KeyCode[KeyCode[\"ABNT_C2\"] = 111] = \"ABNT_C2\";\r\n /**\r\n * Placed last to cover the length of the enum.\r\n * Please do not depend on this value!\r\n */\r\n KeyCode[KeyCode[\"MAX_VALUE\"] = 112] = \"MAX_VALUE\";\r\n})(KeyCode || (KeyCode = {}));\r\nexport var MarkerSeverity;\r\n(function (MarkerSeverity) {\r\n MarkerSeverity[MarkerSeverity[\"Hint\"] = 1] = \"Hint\";\r\n MarkerSeverity[MarkerSeverity[\"Info\"] = 2] = \"Info\";\r\n MarkerSeverity[MarkerSeverity[\"Warning\"] = 4] = \"Warning\";\r\n MarkerSeverity[MarkerSeverity[\"Error\"] = 8] = \"Error\";\r\n})(MarkerSeverity || (MarkerSeverity = {}));\r\nexport var MarkerTag;\r\n(function (MarkerTag) {\r\n MarkerTag[MarkerTag[\"Unnecessary\"] = 1] = \"Unnecessary\";\r\n MarkerTag[MarkerTag[\"Deprecated\"] = 2] = \"Deprecated\";\r\n})(MarkerTag || (MarkerTag = {}));\r\n/**\r\n * Position in the minimap to render the decoration.\r\n */\r\nexport var MinimapPosition;\r\n(function (MinimapPosition) {\r\n MinimapPosition[MinimapPosition[\"Inline\"] = 1] = \"Inline\";\r\n MinimapPosition[MinimapPosition[\"Gutter\"] = 2] = \"Gutter\";\r\n})(MinimapPosition || (MinimapPosition = {}));\r\n/**\r\n * Type of hit element with the mouse in the editor.\r\n */\r\nexport var MouseTargetType;\r\n(function (MouseTargetType) {\r\n /**\r\n * Mouse is on top of an unknown element.\r\n */\r\n MouseTargetType[MouseTargetType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\r\n /**\r\n * Mouse is on top of the textarea used for input.\r\n */\r\n MouseTargetType[MouseTargetType[\"TEXTAREA\"] = 1] = \"TEXTAREA\";\r\n /**\r\n * Mouse is on top of the glyph margin\r\n */\r\n MouseTargetType[MouseTargetType[\"GUTTER_GLYPH_MARGIN\"] = 2] = \"GUTTER_GLYPH_MARGIN\";\r\n /**\r\n * Mouse is on top of the line numbers\r\n */\r\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_NUMBERS\"] = 3] = \"GUTTER_LINE_NUMBERS\";\r\n /**\r\n * Mouse is on top of the line decorations\r\n */\r\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_DECORATIONS\"] = 4] = \"GUTTER_LINE_DECORATIONS\";\r\n /**\r\n * Mouse is on top of the whitespace left in the gutter by a view zone.\r\n */\r\n MouseTargetType[MouseTargetType[\"GUTTER_VIEW_ZONE\"] = 5] = \"GUTTER_VIEW_ZONE\";\r\n /**\r\n * Mouse is on top of text in the content.\r\n */\r\n MouseTargetType[MouseTargetType[\"CONTENT_TEXT\"] = 6] = \"CONTENT_TEXT\";\r\n /**\r\n * Mouse is on top of empty space in the content (e.g. after line text or below last line)\r\n */\r\n MouseTargetType[MouseTargetType[\"CONTENT_EMPTY\"] = 7] = \"CONTENT_EMPTY\";\r\n /**\r\n * Mouse is on top of a view zone in the content.\r\n */\r\n MouseTargetType[MouseTargetType[\"CONTENT_VIEW_ZONE\"] = 8] = \"CONTENT_VIEW_ZONE\";\r\n /**\r\n * Mouse is on top of a content widget.\r\n */\r\n MouseTargetType[MouseTargetType[\"CONTENT_WIDGET\"] = 9] = \"CONTENT_WIDGET\";\r\n /**\r\n * Mouse is on top of the decorations overview ruler.\r\n */\r\n MouseTargetType[MouseTargetType[\"OVERVIEW_RULER\"] = 10] = \"OVERVIEW_RULER\";\r\n /**\r\n * Mouse is on top of a scrollbar.\r\n */\r\n MouseTargetType[MouseTargetType[\"SCROLLBAR\"] = 11] = \"SCROLLBAR\";\r\n /**\r\n * Mouse is on top of an overlay widget.\r\n */\r\n MouseTargetType[MouseTargetType[\"OVERLAY_WIDGET\"] = 12] = \"OVERLAY_WIDGET\";\r\n /**\r\n * Mouse is outside of the editor.\r\n */\r\n MouseTargetType[MouseTargetType[\"OUTSIDE_EDITOR\"] = 13] = \"OUTSIDE_EDITOR\";\r\n})(MouseTargetType || (MouseTargetType = {}));\r\n/**\r\n * A positioning preference for rendering overlay widgets.\r\n */\r\nexport var OverlayWidgetPositionPreference;\r\n(function (OverlayWidgetPositionPreference) {\r\n /**\r\n * Position the overlay widget in the top right corner\r\n */\r\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_RIGHT_CORNER\"] = 0] = \"TOP_RIGHT_CORNER\";\r\n /**\r\n * Position the overlay widget in the bottom right corner\r\n */\r\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"BOTTOM_RIGHT_CORNER\"] = 1] = \"BOTTOM_RIGHT_CORNER\";\r\n /**\r\n * Position the overlay widget in the top center\r\n */\r\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_CENTER\"] = 2] = \"TOP_CENTER\";\r\n})(OverlayWidgetPositionPreference || (OverlayWidgetPositionPreference = {}));\r\n/**\r\n * Vertical Lane in the overview ruler of the editor.\r\n */\r\nexport var OverviewRulerLane;\r\n(function (OverviewRulerLane) {\r\n OverviewRulerLane[OverviewRulerLane[\"Left\"] = 1] = \"Left\";\r\n OverviewRulerLane[OverviewRulerLane[\"Center\"] = 2] = \"Center\";\r\n OverviewRulerLane[OverviewRulerLane[\"Right\"] = 4] = \"Right\";\r\n OverviewRulerLane[OverviewRulerLane[\"Full\"] = 7] = \"Full\";\r\n})(OverviewRulerLane || (OverviewRulerLane = {}));\r\nexport var RenderLineNumbersType;\r\n(function (RenderLineNumbersType) {\r\n RenderLineNumbersType[RenderLineNumbersType[\"Off\"] = 0] = \"Off\";\r\n RenderLineNumbersType[RenderLineNumbersType[\"On\"] = 1] = \"On\";\r\n RenderLineNumbersType[RenderLineNumbersType[\"Relative\"] = 2] = \"Relative\";\r\n RenderLineNumbersType[RenderLineNumbersType[\"Interval\"] = 3] = \"Interval\";\r\n RenderLineNumbersType[RenderLineNumbersType[\"Custom\"] = 4] = \"Custom\";\r\n})(RenderLineNumbersType || (RenderLineNumbersType = {}));\r\nexport var RenderMinimap;\r\n(function (RenderMinimap) {\r\n RenderMinimap[RenderMinimap[\"None\"] = 0] = \"None\";\r\n RenderMinimap[RenderMinimap[\"Text\"] = 1] = \"Text\";\r\n RenderMinimap[RenderMinimap[\"Blocks\"] = 2] = \"Blocks\";\r\n})(RenderMinimap || (RenderMinimap = {}));\r\nexport var ScrollType;\r\n(function (ScrollType) {\r\n ScrollType[ScrollType[\"Smooth\"] = 0] = \"Smooth\";\r\n ScrollType[ScrollType[\"Immediate\"] = 1] = \"Immediate\";\r\n})(ScrollType || (ScrollType = {}));\r\nexport var ScrollbarVisibility;\r\n(function (ScrollbarVisibility) {\r\n ScrollbarVisibility[ScrollbarVisibility[\"Auto\"] = 1] = \"Auto\";\r\n ScrollbarVisibility[ScrollbarVisibility[\"Hidden\"] = 2] = \"Hidden\";\r\n ScrollbarVisibility[ScrollbarVisibility[\"Visible\"] = 3] = \"Visible\";\r\n})(ScrollbarVisibility || (ScrollbarVisibility = {}));\r\n/**\r\n * The direction of a selection.\r\n */\r\nexport var SelectionDirection;\r\n(function (SelectionDirection) {\r\n /**\r\n * The selection starts above where it ends.\r\n */\r\n SelectionDirection[SelectionDirection[\"LTR\"] = 0] = \"LTR\";\r\n /**\r\n * The selection starts below where it ends.\r\n */\r\n SelectionDirection[SelectionDirection[\"RTL\"] = 1] = \"RTL\";\r\n})(SelectionDirection || (SelectionDirection = {}));\r\nexport var SignatureHelpTriggerKind;\r\n(function (SignatureHelpTriggerKind) {\r\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"Invoke\"] = 1] = \"Invoke\";\r\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\r\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"ContentChange\"] = 3] = \"ContentChange\";\r\n})(SignatureHelpTriggerKind || (SignatureHelpTriggerKind = {}));\r\n/**\r\n * A symbol kind.\r\n */\r\nexport var SymbolKind;\r\n(function (SymbolKind) {\r\n SymbolKind[SymbolKind[\"File\"] = 0] = \"File\";\r\n SymbolKind[SymbolKind[\"Module\"] = 1] = \"Module\";\r\n SymbolKind[SymbolKind[\"Namespace\"] = 2] = \"Namespace\";\r\n SymbolKind[SymbolKind[\"Package\"] = 3] = \"Package\";\r\n SymbolKind[SymbolKind[\"Class\"] = 4] = \"Class\";\r\n SymbolKind[SymbolKind[\"Method\"] = 5] = \"Method\";\r\n SymbolKind[SymbolKind[\"Property\"] = 6] = \"Property\";\r\n SymbolKind[SymbolKind[\"Field\"] = 7] = \"Field\";\r\n SymbolKind[SymbolKind[\"Constructor\"] = 8] = \"Constructor\";\r\n SymbolKind[SymbolKind[\"Enum\"] = 9] = \"Enum\";\r\n SymbolKind[SymbolKind[\"Interface\"] = 10] = \"Interface\";\r\n SymbolKind[SymbolKind[\"Function\"] = 11] = \"Function\";\r\n SymbolKind[SymbolKind[\"Variable\"] = 12] = \"Variable\";\r\n SymbolKind[SymbolKind[\"Constant\"] = 13] = \"Constant\";\r\n SymbolKind[SymbolKind[\"String\"] = 14] = \"String\";\r\n SymbolKind[SymbolKind[\"Number\"] = 15] = \"Number\";\r\n SymbolKind[SymbolKind[\"Boolean\"] = 16] = \"Boolean\";\r\n SymbolKind[SymbolKind[\"Array\"] = 17] = \"Array\";\r\n SymbolKind[SymbolKind[\"Object\"] = 18] = \"Object\";\r\n SymbolKind[SymbolKind[\"Key\"] = 19] = \"Key\";\r\n SymbolKind[SymbolKind[\"Null\"] = 20] = \"Null\";\r\n SymbolKind[SymbolKind[\"EnumMember\"] = 21] = \"EnumMember\";\r\n SymbolKind[SymbolKind[\"Struct\"] = 22] = \"Struct\";\r\n SymbolKind[SymbolKind[\"Event\"] = 23] = \"Event\";\r\n SymbolKind[SymbolKind[\"Operator\"] = 24] = \"Operator\";\r\n SymbolKind[SymbolKind[\"TypeParameter\"] = 25] = \"TypeParameter\";\r\n})(SymbolKind || (SymbolKind = {}));\r\nexport var SymbolTag;\r\n(function (SymbolTag) {\r\n SymbolTag[SymbolTag[\"Deprecated\"] = 1] = \"Deprecated\";\r\n})(SymbolTag || (SymbolTag = {}));\r\n/**\r\n * The kind of animation in which the editor's cursor should be rendered.\r\n */\r\nexport var TextEditorCursorBlinkingStyle;\r\n(function (TextEditorCursorBlinkingStyle) {\r\n /**\r\n * Hidden\r\n */\r\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Hidden\"] = 0] = \"Hidden\";\r\n /**\r\n * Blinking\r\n */\r\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Blink\"] = 1] = \"Blink\";\r\n /**\r\n * Blinking with smooth fading\r\n */\r\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Smooth\"] = 2] = \"Smooth\";\r\n /**\r\n * Blinking with prolonged filled state and smooth fading\r\n */\r\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Phase\"] = 3] = \"Phase\";\r\n /**\r\n * Expand collapse animation on the y axis\r\n */\r\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Expand\"] = 4] = \"Expand\";\r\n /**\r\n * No-Blinking\r\n */\r\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Solid\"] = 5] = \"Solid\";\r\n})(TextEditorCursorBlinkingStyle || (TextEditorCursorBlinkingStyle = {}));\r\n/**\r\n * The style in which the editor's cursor should be rendered.\r\n */\r\nexport var TextEditorCursorStyle;\r\n(function (TextEditorCursorStyle) {\r\n /**\r\n * As a vertical line (sitting between two characters).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"Line\"] = 1] = \"Line\";\r\n /**\r\n * As a block (sitting on top of a character).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"Block\"] = 2] = \"Block\";\r\n /**\r\n * As a horizontal line (sitting under a character).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"Underline\"] = 3] = \"Underline\";\r\n /**\r\n * As a thin vertical line (sitting between two characters).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"LineThin\"] = 4] = \"LineThin\";\r\n /**\r\n * As an outlined block (sitting on top of a character).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"BlockOutline\"] = 5] = \"BlockOutline\";\r\n /**\r\n * As a thin horizontal line (sitting under a character).\r\n */\r\n TextEditorCursorStyle[TextEditorCursorStyle[\"UnderlineThin\"] = 6] = \"UnderlineThin\";\r\n})(TextEditorCursorStyle || (TextEditorCursorStyle = {}));\r\n/**\r\n * Describes the behavior of decorations when typing/editing near their edges.\r\n * Note: Please do not edit the values, as they very carefully match `DecorationRangeBehavior`\r\n */\r\nexport var TrackedRangeStickiness;\r\n(function (TrackedRangeStickiness) {\r\n TrackedRangeStickiness[TrackedRangeStickiness[\"AlwaysGrowsWhenTypingAtEdges\"] = 0] = \"AlwaysGrowsWhenTypingAtEdges\";\r\n TrackedRangeStickiness[TrackedRangeStickiness[\"NeverGrowsWhenTypingAtEdges\"] = 1] = \"NeverGrowsWhenTypingAtEdges\";\r\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingBefore\"] = 2] = \"GrowsOnlyWhenTypingBefore\";\r\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingAfter\"] = 3] = \"GrowsOnlyWhenTypingAfter\";\r\n})(TrackedRangeStickiness || (TrackedRangeStickiness = {}));\r\n/**\r\n * Describes how to indent wrapped lines.\r\n */\r\nexport var WrappingIndent;\r\n(function (WrappingIndent) {\r\n /**\r\n * No indentation => wrapped lines begin at column 1.\r\n */\r\n WrappingIndent[WrappingIndent[\"None\"] = 0] = \"None\";\r\n /**\r\n * Same => wrapped lines get the same indentation as the parent.\r\n */\r\n WrappingIndent[WrappingIndent[\"Same\"] = 1] = \"Same\";\r\n /**\r\n * Indent => wrapped lines get +1 indentation toward the parent.\r\n */\r\n WrappingIndent[WrappingIndent[\"Indent\"] = 2] = \"Indent\";\r\n /**\r\n * DeepIndent => wrapped lines get +2 indentation toward the parent.\r\n */\r\n WrappingIndent[WrappingIndent[\"DeepIndent\"] = 3] = \"DeepIndent\";\r\n})(WrappingIndent || (WrappingIndent = {}));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Position } from './position.js';\r\n/**\r\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\r\n */\r\nvar Range = /** @class */ (function () {\r\n function Range(startLineNumber, startColumn, endLineNumber, endColumn) {\r\n if ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {\r\n this.startLineNumber = endLineNumber;\r\n this.startColumn = endColumn;\r\n this.endLineNumber = startLineNumber;\r\n this.endColumn = startColumn;\r\n }\r\n else {\r\n this.startLineNumber = startLineNumber;\r\n this.startColumn = startColumn;\r\n this.endLineNumber = endLineNumber;\r\n this.endColumn = endColumn;\r\n }\r\n }\r\n /**\r\n * Test if this range is empty.\r\n */\r\n Range.prototype.isEmpty = function () {\r\n return Range.isEmpty(this);\r\n };\r\n /**\r\n * Test if `range` is empty.\r\n */\r\n Range.isEmpty = function (range) {\r\n return (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);\r\n };\r\n /**\r\n * Test if position is in this range. If the position is at the edges, will return true.\r\n */\r\n Range.prototype.containsPosition = function (position) {\r\n return Range.containsPosition(this, position);\r\n };\r\n /**\r\n * Test if `position` is in `range`. If the position is at the edges, will return true.\r\n */\r\n Range.containsPosition = function (range, position) {\r\n if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\r\n return false;\r\n }\r\n if (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {\r\n return false;\r\n }\r\n if (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n /**\r\n * Test if range is in this range. If the range is equal to this range, will return true.\r\n */\r\n Range.prototype.containsRange = function (range) {\r\n return Range.containsRange(this, range);\r\n };\r\n /**\r\n * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\r\n */\r\n Range.containsRange = function (range, otherRange) {\r\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\r\n return false;\r\n }\r\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\r\n return false;\r\n }\r\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {\r\n return false;\r\n }\r\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n /**\r\n * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\r\n */\r\n Range.prototype.strictContainsRange = function (range) {\r\n return Range.strictContainsRange(this, range);\r\n };\r\n /**\r\n * Test if `otherRange` is strinctly in `range` (must start after, and end before). If the ranges are equal, will return false.\r\n */\r\n Range.strictContainsRange = function (range, otherRange) {\r\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\r\n return false;\r\n }\r\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\r\n return false;\r\n }\r\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {\r\n return false;\r\n }\r\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n /**\r\n * A reunion of the two ranges.\r\n * The smallest position will be used as the start point, and the largest one as the end point.\r\n */\r\n Range.prototype.plusRange = function (range) {\r\n return Range.plusRange(this, range);\r\n };\r\n /**\r\n * A reunion of the two ranges.\r\n * The smallest position will be used as the start point, and the largest one as the end point.\r\n */\r\n Range.plusRange = function (a, b) {\r\n var startLineNumber;\r\n var startColumn;\r\n var endLineNumber;\r\n var endColumn;\r\n if (b.startLineNumber < a.startLineNumber) {\r\n startLineNumber = b.startLineNumber;\r\n startColumn = b.startColumn;\r\n }\r\n else if (b.startLineNumber === a.startLineNumber) {\r\n startLineNumber = b.startLineNumber;\r\n startColumn = Math.min(b.startColumn, a.startColumn);\r\n }\r\n else {\r\n startLineNumber = a.startLineNumber;\r\n startColumn = a.startColumn;\r\n }\r\n if (b.endLineNumber > a.endLineNumber) {\r\n endLineNumber = b.endLineNumber;\r\n endColumn = b.endColumn;\r\n }\r\n else if (b.endLineNumber === a.endLineNumber) {\r\n endLineNumber = b.endLineNumber;\r\n endColumn = Math.max(b.endColumn, a.endColumn);\r\n }\r\n else {\r\n endLineNumber = a.endLineNumber;\r\n endColumn = a.endColumn;\r\n }\r\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\r\n };\r\n /**\r\n * A intersection of the two ranges.\r\n */\r\n Range.prototype.intersectRanges = function (range) {\r\n return Range.intersectRanges(this, range);\r\n };\r\n /**\r\n * A intersection of the two ranges.\r\n */\r\n Range.intersectRanges = function (a, b) {\r\n var resultStartLineNumber = a.startLineNumber;\r\n var resultStartColumn = a.startColumn;\r\n var resultEndLineNumber = a.endLineNumber;\r\n var resultEndColumn = a.endColumn;\r\n var otherStartLineNumber = b.startLineNumber;\r\n var otherStartColumn = b.startColumn;\r\n var otherEndLineNumber = b.endLineNumber;\r\n var otherEndColumn = b.endColumn;\r\n if (resultStartLineNumber < otherStartLineNumber) {\r\n resultStartLineNumber = otherStartLineNumber;\r\n resultStartColumn = otherStartColumn;\r\n }\r\n else if (resultStartLineNumber === otherStartLineNumber) {\r\n resultStartColumn = Math.max(resultStartColumn, otherStartColumn);\r\n }\r\n if (resultEndLineNumber > otherEndLineNumber) {\r\n resultEndLineNumber = otherEndLineNumber;\r\n resultEndColumn = otherEndColumn;\r\n }\r\n else if (resultEndLineNumber === otherEndLineNumber) {\r\n resultEndColumn = Math.min(resultEndColumn, otherEndColumn);\r\n }\r\n // Check if selection is now empty\r\n if (resultStartLineNumber > resultEndLineNumber) {\r\n return null;\r\n }\r\n if (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {\r\n return null;\r\n }\r\n return new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\r\n };\r\n /**\r\n * Test if this range equals other.\r\n */\r\n Range.prototype.equalsRange = function (other) {\r\n return Range.equalsRange(this, other);\r\n };\r\n /**\r\n * Test if range `a` equals `b`.\r\n */\r\n Range.equalsRange = function (a, b) {\r\n return (!!a &&\r\n !!b &&\r\n a.startLineNumber === b.startLineNumber &&\r\n a.startColumn === b.startColumn &&\r\n a.endLineNumber === b.endLineNumber &&\r\n a.endColumn === b.endColumn);\r\n };\r\n /**\r\n * Return the end position (which will be after or equal to the start position)\r\n */\r\n Range.prototype.getEndPosition = function () {\r\n return new Position(this.endLineNumber, this.endColumn);\r\n };\r\n /**\r\n * Return the start position (which will be before or equal to the end position)\r\n */\r\n Range.prototype.getStartPosition = function () {\r\n return new Position(this.startLineNumber, this.startColumn);\r\n };\r\n /**\r\n * Transform to a user presentable string representation.\r\n */\r\n Range.prototype.toString = function () {\r\n return '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';\r\n };\r\n /**\r\n * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\r\n */\r\n Range.prototype.setEndPosition = function (endLineNumber, endColumn) {\r\n return new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\r\n };\r\n /**\r\n * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\r\n */\r\n Range.prototype.setStartPosition = function (startLineNumber, startColumn) {\r\n return new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\r\n };\r\n /**\r\n * Create a new empty range using this range's start position.\r\n */\r\n Range.prototype.collapseToStart = function () {\r\n return Range.collapseToStart(this);\r\n };\r\n /**\r\n * Create a new empty range using this range's start position.\r\n */\r\n Range.collapseToStart = function (range) {\r\n return new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\r\n };\r\n // ---\r\n Range.fromPositions = function (start, end) {\r\n if (end === void 0) { end = start; }\r\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\r\n };\r\n Range.lift = function (range) {\r\n if (!range) {\r\n return null;\r\n }\r\n return new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\r\n };\r\n /**\r\n * Test if `obj` is an `IRange`.\r\n */\r\n Range.isIRange = function (obj) {\r\n return (obj\r\n && (typeof obj.startLineNumber === 'number')\r\n && (typeof obj.startColumn === 'number')\r\n && (typeof obj.endLineNumber === 'number')\r\n && (typeof obj.endColumn === 'number'));\r\n };\r\n /**\r\n * Test if the two ranges are touching in any way.\r\n */\r\n Range.areIntersectingOrTouching = function (a, b) {\r\n // Check if `a` is before `b`\r\n if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {\r\n return false;\r\n }\r\n // Check if `b` is before `a`\r\n if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {\r\n return false;\r\n }\r\n // These ranges must intersect\r\n return true;\r\n };\r\n /**\r\n * Test if the two ranges are intersecting. If the ranges are touching it returns true.\r\n */\r\n Range.areIntersecting = function (a, b) {\r\n // Check if `a` is before `b`\r\n if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)) {\r\n return false;\r\n }\r\n // Check if `b` is before `a`\r\n if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)) {\r\n return false;\r\n }\r\n // These ranges must intersect\r\n return true;\r\n };\r\n /**\r\n * A function that compares ranges, useful for sorting ranges\r\n * It will first compare ranges on the startPosition and then on the endPosition\r\n */\r\n Range.compareRangesUsingStarts = function (a, b) {\r\n if (a && b) {\r\n var aStartLineNumber = a.startLineNumber | 0;\r\n var bStartLineNumber = b.startLineNumber | 0;\r\n if (aStartLineNumber === bStartLineNumber) {\r\n var aStartColumn = a.startColumn | 0;\r\n var bStartColumn = b.startColumn | 0;\r\n if (aStartColumn === bStartColumn) {\r\n var aEndLineNumber = a.endLineNumber | 0;\r\n var bEndLineNumber = b.endLineNumber | 0;\r\n if (aEndLineNumber === bEndLineNumber) {\r\n var aEndColumn = a.endColumn | 0;\r\n var bEndColumn = b.endColumn | 0;\r\n return aEndColumn - bEndColumn;\r\n }\r\n return aEndLineNumber - bEndLineNumber;\r\n }\r\n return aStartColumn - bStartColumn;\r\n }\r\n return aStartLineNumber - bStartLineNumber;\r\n }\r\n var aExists = (a ? 1 : 0);\r\n var bExists = (b ? 1 : 0);\r\n return aExists - bExists;\r\n };\r\n /**\r\n * A function that compares ranges, useful for sorting ranges\r\n * It will first compare ranges on the endPosition and then on the startPosition\r\n */\r\n Range.compareRangesUsingEnds = function (a, b) {\r\n if (a.endLineNumber === b.endLineNumber) {\r\n if (a.endColumn === b.endColumn) {\r\n if (a.startLineNumber === b.startLineNumber) {\r\n return a.startColumn - b.startColumn;\r\n }\r\n return a.startLineNumber - b.startLineNumber;\r\n }\r\n return a.endColumn - b.endColumn;\r\n }\r\n return a.endLineNumber - b.endLineNumber;\r\n };\r\n /**\r\n * Test if the range spans multiple lines.\r\n */\r\n Range.spansMultipleLines = function (range) {\r\n return range.endLineNumber > range.startLineNumber;\r\n };\r\n return Range;\r\n}());\r\nexport { Range };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Position } from './position.js';\r\nimport { Range } from './range.js';\r\n/**\r\n * A selection in the editor.\r\n * The selection is a range that has an orientation.\r\n */\r\nvar Selection = /** @class */ (function (_super) {\r\n __extends(Selection, _super);\r\n function Selection(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn) {\r\n var _this = _super.call(this, selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn) || this;\r\n _this.selectionStartLineNumber = selectionStartLineNumber;\r\n _this.selectionStartColumn = selectionStartColumn;\r\n _this.positionLineNumber = positionLineNumber;\r\n _this.positionColumn = positionColumn;\r\n return _this;\r\n }\r\n /**\r\n * Transform to a human-readable representation.\r\n */\r\n Selection.prototype.toString = function () {\r\n return '[' + this.selectionStartLineNumber + ',' + this.selectionStartColumn + ' -> ' + this.positionLineNumber + ',' + this.positionColumn + ']';\r\n };\r\n /**\r\n * Test if equals other selection.\r\n */\r\n Selection.prototype.equalsSelection = function (other) {\r\n return (Selection.selectionsEqual(this, other));\r\n };\r\n /**\r\n * Test if the two selections are equal.\r\n */\r\n Selection.selectionsEqual = function (a, b) {\r\n return (a.selectionStartLineNumber === b.selectionStartLineNumber &&\r\n a.selectionStartColumn === b.selectionStartColumn &&\r\n a.positionLineNumber === b.positionLineNumber &&\r\n a.positionColumn === b.positionColumn);\r\n };\r\n /**\r\n * Get directions (LTR or RTL).\r\n */\r\n Selection.prototype.getDirection = function () {\r\n if (this.selectionStartLineNumber === this.startLineNumber && this.selectionStartColumn === this.startColumn) {\r\n return 0 /* LTR */;\r\n }\r\n return 1 /* RTL */;\r\n };\r\n /**\r\n * Create a new selection with a different `positionLineNumber` and `positionColumn`.\r\n */\r\n Selection.prototype.setEndPosition = function (endLineNumber, endColumn) {\r\n if (this.getDirection() === 0 /* LTR */) {\r\n return new Selection(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\r\n }\r\n return new Selection(endLineNumber, endColumn, this.startLineNumber, this.startColumn);\r\n };\r\n /**\r\n * Get the position at `positionLineNumber` and `positionColumn`.\r\n */\r\n Selection.prototype.getPosition = function () {\r\n return new Position(this.positionLineNumber, this.positionColumn);\r\n };\r\n /**\r\n * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`.\r\n */\r\n Selection.prototype.setStartPosition = function (startLineNumber, startColumn) {\r\n if (this.getDirection() === 0 /* LTR */) {\r\n return new Selection(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\r\n }\r\n return new Selection(this.endLineNumber, this.endColumn, startLineNumber, startColumn);\r\n };\r\n // ----\r\n /**\r\n * Create a `Selection` from one or two positions\r\n */\r\n Selection.fromPositions = function (start, end) {\r\n if (end === void 0) { end = start; }\r\n return new Selection(start.lineNumber, start.column, end.lineNumber, end.column);\r\n };\r\n /**\r\n * Create a `Selection` from an `ISelection`.\r\n */\r\n Selection.liftSelection = function (sel) {\r\n return new Selection(sel.selectionStartLineNumber, sel.selectionStartColumn, sel.positionLineNumber, sel.positionColumn);\r\n };\r\n /**\r\n * `a` equals `b`.\r\n */\r\n Selection.selectionsArrEqual = function (a, b) {\r\n if (a && !b || !a && b) {\r\n return false;\r\n }\r\n if (!a && !b) {\r\n return true;\r\n }\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n for (var i = 0, len = a.length; i < len; i++) {\r\n if (!this.selectionsEqual(a[i], b[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * Test if `obj` is an `ISelection`.\r\n */\r\n Selection.isISelection = function (obj) {\r\n return (obj\r\n && (typeof obj.selectionStartLineNumber === 'number')\r\n && (typeof obj.selectionStartColumn === 'number')\r\n && (typeof obj.positionLineNumber === 'number')\r\n && (typeof obj.positionColumn === 'number'));\r\n };\r\n /**\r\n * Create with a direction.\r\n */\r\n Selection.createWithDirection = function (startLineNumber, startColumn, endLineNumber, endColumn, direction) {\r\n if (direction === 0 /* LTR */) {\r\n return new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\r\n }\r\n return new Selection(endLineNumber, endColumn, startLineNumber, startColumn);\r\n };\r\n return Selection;\r\n}(Range));\r\nexport { Selection };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar Token = /** @class */ (function () {\r\n function Token(offset, type, language) {\r\n this.offset = offset | 0; // @perf\r\n this.type = type;\r\n this.language = language;\r\n }\r\n Token.prototype.toString = function () {\r\n return '(' + this.offset + ', ' + this.type + ')';\r\n };\r\n return Token;\r\n}());\r\nexport { Token };\r\nvar TokenizationResult = /** @class */ (function () {\r\n function TokenizationResult(tokens, endState) {\r\n this.tokens = tokens;\r\n this.endState = endState;\r\n }\r\n return TokenizationResult;\r\n}());\r\nexport { TokenizationResult };\r\nvar TokenizationResult2 = /** @class */ (function () {\r\n function TokenizationResult2(tokens, endState) {\r\n this.tokens = tokens;\r\n this.endState = endState;\r\n }\r\n return TokenizationResult2;\r\n}());\r\nexport { TokenizationResult2 };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport './promise-polyfill/polyfill.js';\r\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { KeyChord } from '../../../base/common/keyCodes.js';\r\nimport { URI } from '../../../base/common/uri.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport { Selection } from '../core/selection.js';\r\nimport { Token } from '../core/token.js';\r\nimport * as standaloneEnums from './standaloneEnums.js';\r\nvar KeyMod = /** @class */ (function () {\r\n function KeyMod() {\r\n }\r\n KeyMod.chord = function (firstPart, secondPart) {\r\n return KeyChord(firstPart, secondPart);\r\n };\r\n KeyMod.CtrlCmd = 2048 /* CtrlCmd */;\r\n KeyMod.Shift = 1024 /* Shift */;\r\n KeyMod.Alt = 512 /* Alt */;\r\n KeyMod.WinCtrl = 256 /* WinCtrl */;\r\n return KeyMod;\r\n}());\r\nexport { KeyMod };\r\nexport function createMonacoBaseAPI() {\r\n return {\r\n editor: undefined,\r\n languages: undefined,\r\n CancellationTokenSource: CancellationTokenSource,\r\n Emitter: Emitter,\r\n KeyCode: standaloneEnums.KeyCode,\r\n KeyMod: KeyMod,\r\n Position: Position,\r\n Range: Range,\r\n Selection: Selection,\r\n SelectionDirection: standaloneEnums.SelectionDirection,\r\n MarkerSeverity: standaloneEnums.MarkerSeverity,\r\n MarkerTag: standaloneEnums.MarkerTag,\r\n Uri: URI,\r\n Token: Token\r\n };\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n// ------ internal util\r\nexport var _util;\r\n(function (_util) {\r\n _util.serviceIds = new Map();\r\n _util.DI_TARGET = '$di$target';\r\n _util.DI_DEPENDENCIES = '$di$dependencies';\r\n function getServiceDependencies(ctor) {\r\n return ctor[_util.DI_DEPENDENCIES] || [];\r\n }\r\n _util.getServiceDependencies = getServiceDependencies;\r\n})(_util || (_util = {}));\r\nexport var IInstantiationService = createDecorator('instantiationService');\r\nfunction storeServiceDependency(id, target, index, optional) {\r\n if (target[_util.DI_TARGET] === target) {\r\n target[_util.DI_DEPENDENCIES].push({ id: id, index: index, optional: optional });\r\n }\r\n else {\r\n target[_util.DI_DEPENDENCIES] = [{ id: id, index: index, optional: optional }];\r\n target[_util.DI_TARGET] = target;\r\n }\r\n}\r\n/**\r\n * A *only* valid way to create a {{ServiceIdentifier}}.\r\n */\r\nexport function createDecorator(serviceId) {\r\n if (_util.serviceIds.has(serviceId)) {\r\n return _util.serviceIds.get(serviceId);\r\n }\r\n var id = function (target, key, index) {\r\n if (arguments.length !== 3) {\r\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\r\n }\r\n storeServiceDependency(id, target, index, false);\r\n };\r\n id.toString = function () { return serviceId; };\r\n _util.serviceIds.set(serviceId, id);\r\n return id;\r\n}\r\n/**\r\n * Mark a service dependency as optional.\r\n */\r\nexport function optional(serviceIdentifier) {\r\n return function (target, key, index) {\r\n if (arguments.length !== 3) {\r\n throw new Error('@optional-decorator can only be used to decorate a parameter');\r\n }\r\n storeServiceDependency(serviceIdentifier, target, index, true);\r\n };\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nexport var ICodeEditorService = createDecorator('codeEditorService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Emitter } from '../common/event.js';\r\nvar WindowManager = /** @class */ (function () {\r\n function WindowManager() {\r\n // --- Zoom Level\r\n this._zoomLevel = 0;\r\n this._lastZoomLevelChangeTime = 0;\r\n this._onDidChangeZoomLevel = new Emitter();\r\n this.onDidChangeZoomLevel = this._onDidChangeZoomLevel.event;\r\n }\r\n WindowManager.prototype.getZoomLevel = function () {\r\n return this._zoomLevel;\r\n };\r\n WindowManager.prototype.getTimeSinceLastZoomLevelChanged = function () {\r\n return Date.now() - this._lastZoomLevelChangeTime;\r\n };\r\n // --- Pixel Ratio\r\n WindowManager.prototype.getPixelRatio = function () {\r\n var ctx = document.createElement('canvas').getContext('2d');\r\n var dpr = window.devicePixelRatio || 1;\r\n var bsr = ctx.webkitBackingStorePixelRatio ||\r\n ctx.mozBackingStorePixelRatio ||\r\n ctx.msBackingStorePixelRatio ||\r\n ctx.oBackingStorePixelRatio ||\r\n ctx.backingStorePixelRatio || 1;\r\n return dpr / bsr;\r\n };\r\n WindowManager.INSTANCE = new WindowManager();\r\n return WindowManager;\r\n}());\r\nexport function getZoomLevel() {\r\n return WindowManager.INSTANCE.getZoomLevel();\r\n}\r\n/** Returns the time (in ms) since the zoom level was changed */\r\nexport function getTimeSinceLastZoomLevelChanged() {\r\n return WindowManager.INSTANCE.getTimeSinceLastZoomLevelChanged();\r\n}\r\nexport function onDidChangeZoomLevel(callback) {\r\n return WindowManager.INSTANCE.onDidChangeZoomLevel(callback);\r\n}\r\nexport function getPixelRatio() {\r\n return WindowManager.INSTANCE.getPixelRatio();\r\n}\r\nvar userAgent = navigator.userAgent;\r\nexport var isIE = (userAgent.indexOf('Trident') >= 0);\r\nexport var isEdge = (userAgent.indexOf('Edge/') >= 0);\r\nexport var isEdgeOrIE = isIE || isEdge;\r\nexport var isFirefox = (userAgent.indexOf('Firefox') >= 0);\r\nexport var isWebKit = (userAgent.indexOf('AppleWebKit') >= 0);\r\nexport var isChrome = (userAgent.indexOf('Chrome') >= 0);\r\nexport var isSafari = (!isChrome && (userAgent.indexOf('Safari') >= 0));\r\nexport var isWebkitWebView = (!isChrome && !isSafari && isWebKit);\r\nexport var isIPad = (userAgent.indexOf('iPad') >= 0);\r\nexport var isEdgeWebView = isEdge && (userAgent.indexOf('WebView/') >= 0);\r\nexport var isStandalone = (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Event as BaseEvent, Emitter } from '../common/event.js';\r\nexport var domEvent = function (element, type, useCapture) {\r\n var fn = function (e) { return emitter.fire(e); };\r\n var emitter = new Emitter({\r\n onFirstListenerAdd: function () {\r\n element.addEventListener(type, fn, useCapture);\r\n },\r\n onLastListenerRemove: function () {\r\n element.removeEventListener(type, fn, useCapture);\r\n }\r\n });\r\n return emitter.event;\r\n};\r\nexport function stop(event) {\r\n return BaseEvent.map(event, function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return e;\r\n });\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as browser from './browser.js';\r\nimport { KeyCodeUtils, SimpleKeybinding } from '../common/keyCodes.js';\r\nimport * as platform from '../common/platform.js';\r\nvar KEY_CODE_MAP = new Array(230);\r\nvar INVERSE_KEY_CODE_MAP = new Array(112 /* MAX_VALUE */);\r\n(function () {\r\n for (var i = 0; i < INVERSE_KEY_CODE_MAP.length; i++) {\r\n INVERSE_KEY_CODE_MAP[i] = -1;\r\n }\r\n function define(code, keyCode) {\r\n KEY_CODE_MAP[code] = keyCode;\r\n INVERSE_KEY_CODE_MAP[keyCode] = code;\r\n }\r\n define(3, 7 /* PauseBreak */); // VK_CANCEL 0x03 Control-break processing\r\n define(8, 1 /* Backspace */);\r\n define(9, 2 /* Tab */);\r\n define(13, 3 /* Enter */);\r\n define(16, 4 /* Shift */);\r\n define(17, 5 /* Ctrl */);\r\n define(18, 6 /* Alt */);\r\n define(19, 7 /* PauseBreak */);\r\n define(20, 8 /* CapsLock */);\r\n define(27, 9 /* Escape */);\r\n define(32, 10 /* Space */);\r\n define(33, 11 /* PageUp */);\r\n define(34, 12 /* PageDown */);\r\n define(35, 13 /* End */);\r\n define(36, 14 /* Home */);\r\n define(37, 15 /* LeftArrow */);\r\n define(38, 16 /* UpArrow */);\r\n define(39, 17 /* RightArrow */);\r\n define(40, 18 /* DownArrow */);\r\n define(45, 19 /* Insert */);\r\n define(46, 20 /* Delete */);\r\n define(48, 21 /* KEY_0 */);\r\n define(49, 22 /* KEY_1 */);\r\n define(50, 23 /* KEY_2 */);\r\n define(51, 24 /* KEY_3 */);\r\n define(52, 25 /* KEY_4 */);\r\n define(53, 26 /* KEY_5 */);\r\n define(54, 27 /* KEY_6 */);\r\n define(55, 28 /* KEY_7 */);\r\n define(56, 29 /* KEY_8 */);\r\n define(57, 30 /* KEY_9 */);\r\n define(65, 31 /* KEY_A */);\r\n define(66, 32 /* KEY_B */);\r\n define(67, 33 /* KEY_C */);\r\n define(68, 34 /* KEY_D */);\r\n define(69, 35 /* KEY_E */);\r\n define(70, 36 /* KEY_F */);\r\n define(71, 37 /* KEY_G */);\r\n define(72, 38 /* KEY_H */);\r\n define(73, 39 /* KEY_I */);\r\n define(74, 40 /* KEY_J */);\r\n define(75, 41 /* KEY_K */);\r\n define(76, 42 /* KEY_L */);\r\n define(77, 43 /* KEY_M */);\r\n define(78, 44 /* KEY_N */);\r\n define(79, 45 /* KEY_O */);\r\n define(80, 46 /* KEY_P */);\r\n define(81, 47 /* KEY_Q */);\r\n define(82, 48 /* KEY_R */);\r\n define(83, 49 /* KEY_S */);\r\n define(84, 50 /* KEY_T */);\r\n define(85, 51 /* KEY_U */);\r\n define(86, 52 /* KEY_V */);\r\n define(87, 53 /* KEY_W */);\r\n define(88, 54 /* KEY_X */);\r\n define(89, 55 /* KEY_Y */);\r\n define(90, 56 /* KEY_Z */);\r\n define(93, 58 /* ContextMenu */);\r\n define(96, 93 /* NUMPAD_0 */);\r\n define(97, 94 /* NUMPAD_1 */);\r\n define(98, 95 /* NUMPAD_2 */);\r\n define(99, 96 /* NUMPAD_3 */);\r\n define(100, 97 /* NUMPAD_4 */);\r\n define(101, 98 /* NUMPAD_5 */);\r\n define(102, 99 /* NUMPAD_6 */);\r\n define(103, 100 /* NUMPAD_7 */);\r\n define(104, 101 /* NUMPAD_8 */);\r\n define(105, 102 /* NUMPAD_9 */);\r\n define(106, 103 /* NUMPAD_MULTIPLY */);\r\n define(107, 104 /* NUMPAD_ADD */);\r\n define(108, 105 /* NUMPAD_SEPARATOR */);\r\n define(109, 106 /* NUMPAD_SUBTRACT */);\r\n define(110, 107 /* NUMPAD_DECIMAL */);\r\n define(111, 108 /* NUMPAD_DIVIDE */);\r\n define(112, 59 /* F1 */);\r\n define(113, 60 /* F2 */);\r\n define(114, 61 /* F3 */);\r\n define(115, 62 /* F4 */);\r\n define(116, 63 /* F5 */);\r\n define(117, 64 /* F6 */);\r\n define(118, 65 /* F7 */);\r\n define(119, 66 /* F8 */);\r\n define(120, 67 /* F9 */);\r\n define(121, 68 /* F10 */);\r\n define(122, 69 /* F11 */);\r\n define(123, 70 /* F12 */);\r\n define(124, 71 /* F13 */);\r\n define(125, 72 /* F14 */);\r\n define(126, 73 /* F15 */);\r\n define(127, 74 /* F16 */);\r\n define(128, 75 /* F17 */);\r\n define(129, 76 /* F18 */);\r\n define(130, 77 /* F19 */);\r\n define(144, 78 /* NumLock */);\r\n define(145, 79 /* ScrollLock */);\r\n define(186, 80 /* US_SEMICOLON */);\r\n define(187, 81 /* US_EQUAL */);\r\n define(188, 82 /* US_COMMA */);\r\n define(189, 83 /* US_MINUS */);\r\n define(190, 84 /* US_DOT */);\r\n define(191, 85 /* US_SLASH */);\r\n define(192, 86 /* US_BACKTICK */);\r\n define(193, 110 /* ABNT_C1 */);\r\n define(194, 111 /* ABNT_C2 */);\r\n define(219, 87 /* US_OPEN_SQUARE_BRACKET */);\r\n define(220, 88 /* US_BACKSLASH */);\r\n define(221, 89 /* US_CLOSE_SQUARE_BRACKET */);\r\n define(222, 90 /* US_QUOTE */);\r\n define(223, 91 /* OEM_8 */);\r\n define(226, 92 /* OEM_102 */);\r\n /**\r\n * https://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\r\n * If an Input Method Editor is processing key input and the event is keydown, return 229.\r\n */\r\n define(229, 109 /* KEY_IN_COMPOSITION */);\r\n if (browser.isIE) {\r\n define(91, 57 /* Meta */);\r\n }\r\n else if (browser.isFirefox) {\r\n define(59, 80 /* US_SEMICOLON */);\r\n define(107, 81 /* US_EQUAL */);\r\n define(109, 83 /* US_MINUS */);\r\n if (platform.isMacintosh) {\r\n define(224, 57 /* Meta */);\r\n }\r\n }\r\n else if (browser.isWebKit) {\r\n define(91, 57 /* Meta */);\r\n if (platform.isMacintosh) {\r\n // the two meta keys in the Mac have different key codes (91 and 93)\r\n define(93, 57 /* Meta */);\r\n }\r\n else {\r\n define(92, 57 /* Meta */);\r\n }\r\n }\r\n})();\r\nfunction extractKeyCode(e) {\r\n if (e.charCode) {\r\n // \"keypress\" events mostly\r\n var char = String.fromCharCode(e.charCode).toUpperCase();\r\n return KeyCodeUtils.fromString(char);\r\n }\r\n return KEY_CODE_MAP[e.keyCode] || 0 /* Unknown */;\r\n}\r\nvar ctrlKeyMod = (platform.isMacintosh ? 256 /* WinCtrl */ : 2048 /* CtrlCmd */);\r\nvar altKeyMod = 512 /* Alt */;\r\nvar shiftKeyMod = 1024 /* Shift */;\r\nvar metaKeyMod = (platform.isMacintosh ? 2048 /* CtrlCmd */ : 256 /* WinCtrl */);\r\nvar StandardKeyboardEvent = /** @class */ (function () {\r\n function StandardKeyboardEvent(source) {\r\n this._standardKeyboardEventBrand = true;\r\n var e = source;\r\n this.browserEvent = e;\r\n this.target = e.target;\r\n this.ctrlKey = e.ctrlKey;\r\n this.shiftKey = e.shiftKey;\r\n this.altKey = e.altKey;\r\n this.metaKey = e.metaKey;\r\n this.keyCode = extractKeyCode(e);\r\n this.code = e.code;\r\n // console.info(e.type + \": keyCode: \" + e.keyCode + \", which: \" + e.which + \", charCode: \" + e.charCode + \", detail: \" + e.detail + \" ====> \" + this.keyCode + ' -- ' + KeyCode[this.keyCode]);\r\n this.ctrlKey = this.ctrlKey || this.keyCode === 5 /* Ctrl */;\r\n this.altKey = this.altKey || this.keyCode === 6 /* Alt */;\r\n this.shiftKey = this.shiftKey || this.keyCode === 4 /* Shift */;\r\n this.metaKey = this.metaKey || this.keyCode === 57 /* Meta */;\r\n this._asKeybinding = this._computeKeybinding();\r\n this._asRuntimeKeybinding = this._computeRuntimeKeybinding();\r\n // console.log(`code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`);\r\n }\r\n StandardKeyboardEvent.prototype.preventDefault = function () {\r\n if (this.browserEvent && this.browserEvent.preventDefault) {\r\n this.browserEvent.preventDefault();\r\n }\r\n };\r\n StandardKeyboardEvent.prototype.stopPropagation = function () {\r\n if (this.browserEvent && this.browserEvent.stopPropagation) {\r\n this.browserEvent.stopPropagation();\r\n }\r\n };\r\n StandardKeyboardEvent.prototype.toKeybinding = function () {\r\n return this._asRuntimeKeybinding;\r\n };\r\n StandardKeyboardEvent.prototype.equals = function (other) {\r\n return this._asKeybinding === other;\r\n };\r\n StandardKeyboardEvent.prototype._computeKeybinding = function () {\r\n var key = 0 /* Unknown */;\r\n if (this.keyCode !== 5 /* Ctrl */ && this.keyCode !== 4 /* Shift */ && this.keyCode !== 6 /* Alt */ && this.keyCode !== 57 /* Meta */) {\r\n key = this.keyCode;\r\n }\r\n var result = 0;\r\n if (this.ctrlKey) {\r\n result |= ctrlKeyMod;\r\n }\r\n if (this.altKey) {\r\n result |= altKeyMod;\r\n }\r\n if (this.shiftKey) {\r\n result |= shiftKeyMod;\r\n }\r\n if (this.metaKey) {\r\n result |= metaKeyMod;\r\n }\r\n result |= key;\r\n return result;\r\n };\r\n StandardKeyboardEvent.prototype._computeRuntimeKeybinding = function () {\r\n var key = 0 /* Unknown */;\r\n if (this.keyCode !== 5 /* Ctrl */ && this.keyCode !== 4 /* Shift */ && this.keyCode !== 6 /* Alt */ && this.keyCode !== 57 /* Meta */) {\r\n key = this.keyCode;\r\n }\r\n return new SimpleKeybinding(this.ctrlKey, this.shiftKey, this.altKey, this.metaKey, key);\r\n };\r\n return StandardKeyboardEvent;\r\n}());\r\nexport { StandardKeyboardEvent };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar hasDifferentOriginAncestorFlag = false;\r\nvar sameOriginWindowChainCache = null;\r\nfunction getParentWindowIfSameOrigin(w) {\r\n if (!w.parent || w.parent === w) {\r\n return null;\r\n }\r\n // Cannot really tell if we have access to the parent window unless we try to access something in it\r\n try {\r\n var location_1 = w.location;\r\n var parentLocation = w.parent.location;\r\n if (location_1.protocol !== parentLocation.protocol || location_1.hostname !== parentLocation.hostname || location_1.port !== parentLocation.port) {\r\n hasDifferentOriginAncestorFlag = true;\r\n return null;\r\n }\r\n }\r\n catch (e) {\r\n hasDifferentOriginAncestorFlag = true;\r\n return null;\r\n }\r\n return w.parent;\r\n}\r\nfunction findIframeElementInParentWindow(parentWindow, childWindow) {\r\n var parentWindowIframes = parentWindow.document.getElementsByTagName('iframe');\r\n var iframe;\r\n for (var i = 0, len = parentWindowIframes.length; i < len; i++) {\r\n iframe = parentWindowIframes[i];\r\n if (iframe.contentWindow === childWindow) {\r\n return iframe;\r\n }\r\n }\r\n return null;\r\n}\r\nvar IframeUtils = /** @class */ (function () {\r\n function IframeUtils() {\r\n }\r\n /**\r\n * Returns a chain of embedded windows with the same origin (which can be accessed programmatically).\r\n * Having a chain of length 1 might mean that the current execution environment is running outside of an iframe or inside an iframe embedded in a window with a different origin.\r\n * To distinguish if at one point the current execution environment is running inside a window with a different origin, see hasDifferentOriginAncestor()\r\n */\r\n IframeUtils.getSameOriginWindowChain = function () {\r\n if (!sameOriginWindowChainCache) {\r\n sameOriginWindowChainCache = [];\r\n var w = window;\r\n var parent_1;\r\n do {\r\n parent_1 = getParentWindowIfSameOrigin(w);\r\n if (parent_1) {\r\n sameOriginWindowChainCache.push({\r\n window: w,\r\n iframeElement: findIframeElementInParentWindow(parent_1, w)\r\n });\r\n }\r\n else {\r\n sameOriginWindowChainCache.push({\r\n window: w,\r\n iframeElement: null\r\n });\r\n }\r\n w = parent_1;\r\n } while (w);\r\n }\r\n return sameOriginWindowChainCache.slice(0);\r\n };\r\n /**\r\n * Returns true if the current execution environment is chained in a list of iframes which at one point ends in a window with a different origin.\r\n * Returns false if the current execution environment is not running inside an iframe or if the entire chain of iframes have the same origin.\r\n */\r\n IframeUtils.hasDifferentOriginAncestor = function () {\r\n if (!sameOriginWindowChainCache) {\r\n this.getSameOriginWindowChain();\r\n }\r\n return hasDifferentOriginAncestorFlag;\r\n };\r\n /**\r\n * Returns the position of `childWindow` relative to `ancestorWindow`\r\n */\r\n IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow = function (childWindow, ancestorWindow) {\r\n if (!ancestorWindow || childWindow === ancestorWindow) {\r\n return {\r\n top: 0,\r\n left: 0\r\n };\r\n }\r\n var top = 0, left = 0;\r\n var windowChain = this.getSameOriginWindowChain();\r\n for (var _i = 0, windowChain_1 = windowChain; _i < windowChain_1.length; _i++) {\r\n var windowChainEl = windowChain_1[_i];\r\n if (windowChainEl.window === ancestorWindow) {\r\n break;\r\n }\r\n if (!windowChainEl.iframeElement) {\r\n break;\r\n }\r\n var boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\r\n top += boundingRect.top;\r\n left += boundingRect.left;\r\n }\r\n return {\r\n top: top,\r\n left: left\r\n };\r\n };\r\n return IframeUtils;\r\n}());\r\nexport { IframeUtils };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as browser from './browser.js';\r\nimport { IframeUtils } from './iframe.js';\r\nimport * as platform from '../common/platform.js';\r\nvar StandardMouseEvent = /** @class */ (function () {\r\n function StandardMouseEvent(e) {\r\n this.timestamp = Date.now();\r\n this.browserEvent = e;\r\n this.leftButton = e.button === 0;\r\n this.middleButton = e.button === 1;\r\n this.rightButton = e.button === 2;\r\n this.target = e.target;\r\n this.detail = e.detail || 1;\r\n if (e.type === 'dblclick') {\r\n this.detail = 2;\r\n }\r\n this.ctrlKey = e.ctrlKey;\r\n this.shiftKey = e.shiftKey;\r\n this.altKey = e.altKey;\r\n this.metaKey = e.metaKey;\r\n if (typeof e.pageX === 'number') {\r\n this.posx = e.pageX;\r\n this.posy = e.pageY;\r\n }\r\n else {\r\n // Probably hit by MSGestureEvent\r\n this.posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\r\n this.posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\r\n }\r\n // Find the position of the iframe this code is executing in relative to the iframe where the event was captured.\r\n var iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(self, e.view);\r\n this.posx -= iframeOffsets.left;\r\n this.posy -= iframeOffsets.top;\r\n }\r\n StandardMouseEvent.prototype.preventDefault = function () {\r\n if (this.browserEvent.preventDefault) {\r\n this.browserEvent.preventDefault();\r\n }\r\n };\r\n StandardMouseEvent.prototype.stopPropagation = function () {\r\n if (this.browserEvent.stopPropagation) {\r\n this.browserEvent.stopPropagation();\r\n }\r\n };\r\n return StandardMouseEvent;\r\n}());\r\nexport { StandardMouseEvent };\r\nvar DragMouseEvent = /** @class */ (function (_super) {\r\n __extends(DragMouseEvent, _super);\r\n function DragMouseEvent(e) {\r\n var _this = _super.call(this, e) || this;\r\n _this.dataTransfer = e.dataTransfer;\r\n return _this;\r\n }\r\n return DragMouseEvent;\r\n}(StandardMouseEvent));\r\nexport { DragMouseEvent };\r\nvar StandardWheelEvent = /** @class */ (function () {\r\n function StandardWheelEvent(e, deltaX, deltaY) {\r\n if (deltaX === void 0) { deltaX = 0; }\r\n if (deltaY === void 0) { deltaY = 0; }\r\n this.browserEvent = e || null;\r\n this.target = e ? (e.target || e.targetNode || e.srcElement) : null;\r\n this.deltaY = deltaY;\r\n this.deltaX = deltaX;\r\n if (e) {\r\n // Old (deprecated) wheel events\r\n var e1 = e;\r\n var e2 = e;\r\n // vertical delta scroll\r\n if (typeof e1.wheelDeltaY !== 'undefined') {\r\n this.deltaY = e1.wheelDeltaY / 120;\r\n }\r\n else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\r\n this.deltaY = -e2.detail / 3;\r\n }\r\n else if (e.type === 'wheel') {\r\n // Modern wheel event\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\r\n var ev = e;\r\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\r\n // the deltas are expressed in lines\r\n this.deltaY = -e.deltaY;\r\n }\r\n else {\r\n this.deltaY = -e.deltaY / 40;\r\n }\r\n }\r\n // horizontal delta scroll\r\n if (typeof e1.wheelDeltaX !== 'undefined') {\r\n if (browser.isSafari && platform.isWindows) {\r\n this.deltaX = -(e1.wheelDeltaX / 120);\r\n }\r\n else {\r\n this.deltaX = e1.wheelDeltaX / 120;\r\n }\r\n }\r\n else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\r\n this.deltaX = -e.detail / 3;\r\n }\r\n else if (e.type === 'wheel') {\r\n // Modern wheel event\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\r\n var ev = e;\r\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\r\n // the deltas are expressed in lines\r\n this.deltaX = -e.deltaX;\r\n }\r\n else {\r\n this.deltaX = -e.deltaX / 40;\r\n }\r\n }\r\n // Assume a vertical scroll if nothing else worked\r\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\r\n this.deltaY = e.wheelDelta / 120;\r\n }\r\n }\r\n }\r\n StandardWheelEvent.prototype.preventDefault = function () {\r\n if (this.browserEvent) {\r\n if (this.browserEvent.preventDefault) {\r\n this.browserEvent.preventDefault();\r\n }\r\n }\r\n };\r\n StandardWheelEvent.prototype.stopPropagation = function () {\r\n if (this.browserEvent) {\r\n if (this.browserEvent.stopPropagation) {\r\n this.browserEvent.stopPropagation();\r\n }\r\n }\r\n };\r\n return StandardWheelEvent;\r\n}());\r\nexport { StandardWheelEvent };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { CancellationTokenSource } from './cancellation.js';\r\nimport * as errors from './errors.js';\r\nimport { toDisposable } from './lifecycle.js';\r\nexport function isThenable(obj) {\r\n return obj && typeof obj.then === 'function';\r\n}\r\nexport function createCancelablePromise(callback) {\r\n var source = new CancellationTokenSource();\r\n var thenable = callback(source.token);\r\n var promise = new Promise(function (resolve, reject) {\r\n source.token.onCancellationRequested(function () {\r\n reject(errors.canceled());\r\n });\r\n Promise.resolve(thenable).then(function (value) {\r\n source.dispose();\r\n resolve(value);\r\n }, function (err) {\r\n source.dispose();\r\n reject(err);\r\n });\r\n });\r\n return new /** @class */ (function () {\r\n function class_1() {\r\n }\r\n class_1.prototype.cancel = function () {\r\n source.cancel();\r\n };\r\n class_1.prototype.then = function (resolve, reject) {\r\n return promise.then(resolve, reject);\r\n };\r\n class_1.prototype.catch = function (reject) {\r\n return this.then(undefined, reject);\r\n };\r\n class_1.prototype.finally = function (onfinally) {\r\n return promise.finally(onfinally);\r\n };\r\n return class_1;\r\n }());\r\n}\r\nexport function raceCancellation(promise, token, defaultValue) {\r\n return Promise.race([promise, new Promise(function (resolve) { return token.onCancellationRequested(function () { return resolve(defaultValue); }); })]);\r\n}\r\n/**\r\n * A helper to delay execution of a task that is being requested often.\r\n *\r\n * Following the throttler, now imagine the mail man wants to optimize the number of\r\n * trips proactively. The trip itself can be long, so he decides not to make the trip\r\n * as soon as a letter is submitted. Instead he waits a while, in case more\r\n * letters are submitted. After said waiting period, if no letters were submitted, he\r\n * decides to make the trip. Imagine that N more letters were submitted after the first\r\n * one, all within a short period of time between each other. Even though N+1\r\n * submissions occurred, only 1 delivery was made.\r\n *\r\n * The delayer offers this behavior via the trigger() method, into which both the task\r\n * to be executed and the waiting period (delay) must be passed in as arguments. Following\r\n * the example:\r\n *\r\n * \t\tconst delayer = new Delayer(WAITING_PERIOD);\r\n * \t\tconst letters = [];\r\n *\r\n * \t\tfunction letterReceived(l) {\r\n * \t\t\tletters.push(l);\r\n * \t\t\tdelayer.trigger(() => { return makeTheTrip(); });\r\n * \t\t}\r\n */\r\nvar Delayer = /** @class */ (function () {\r\n function Delayer(defaultDelay) {\r\n this.defaultDelay = defaultDelay;\r\n this.timeout = null;\r\n this.completionPromise = null;\r\n this.doResolve = null;\r\n this.doReject = null;\r\n this.task = null;\r\n }\r\n Delayer.prototype.trigger = function (task, delay) {\r\n var _this = this;\r\n if (delay === void 0) { delay = this.defaultDelay; }\r\n this.task = task;\r\n this.cancelTimeout();\r\n if (!this.completionPromise) {\r\n this.completionPromise = new Promise(function (c, e) {\r\n _this.doResolve = c;\r\n _this.doReject = e;\r\n }).then(function () {\r\n _this.completionPromise = null;\r\n _this.doResolve = null;\r\n if (_this.task) {\r\n var task_1 = _this.task;\r\n _this.task = null;\r\n return task_1();\r\n }\r\n return undefined;\r\n });\r\n }\r\n this.timeout = setTimeout(function () {\r\n _this.timeout = null;\r\n if (_this.doResolve) {\r\n _this.doResolve(null);\r\n }\r\n }, delay);\r\n return this.completionPromise;\r\n };\r\n Delayer.prototype.isTriggered = function () {\r\n return this.timeout !== null;\r\n };\r\n Delayer.prototype.cancel = function () {\r\n this.cancelTimeout();\r\n if (this.completionPromise) {\r\n if (this.doReject) {\r\n this.doReject(errors.canceled());\r\n }\r\n this.completionPromise = null;\r\n }\r\n };\r\n Delayer.prototype.cancelTimeout = function () {\r\n if (this.timeout !== null) {\r\n clearTimeout(this.timeout);\r\n this.timeout = null;\r\n }\r\n };\r\n Delayer.prototype.dispose = function () {\r\n this.cancelTimeout();\r\n };\r\n return Delayer;\r\n}());\r\nexport { Delayer };\r\nexport function timeout(millis, token) {\r\n if (!token) {\r\n return createCancelablePromise(function (token) { return timeout(millis, token); });\r\n }\r\n return new Promise(function (resolve, reject) {\r\n var handle = setTimeout(resolve, millis);\r\n token.onCancellationRequested(function () {\r\n clearTimeout(handle);\r\n reject(errors.canceled());\r\n });\r\n });\r\n}\r\nexport function disposableTimeout(handler, timeout) {\r\n if (timeout === void 0) { timeout = 0; }\r\n var timer = setTimeout(handler, timeout);\r\n return toDisposable(function () { return clearTimeout(timer); });\r\n}\r\nexport function first(promiseFactories, shouldStop, defaultValue) {\r\n if (shouldStop === void 0) { shouldStop = function (t) { return !!t; }; }\r\n if (defaultValue === void 0) { defaultValue = null; }\r\n var index = 0;\r\n var len = promiseFactories.length;\r\n var loop = function () {\r\n if (index >= len) {\r\n return Promise.resolve(defaultValue);\r\n }\r\n var factory = promiseFactories[index++];\r\n var promise = Promise.resolve(factory());\r\n return promise.then(function (result) {\r\n if (shouldStop(result)) {\r\n return Promise.resolve(result);\r\n }\r\n return loop();\r\n });\r\n };\r\n return loop();\r\n}\r\nvar TimeoutTimer = /** @class */ (function () {\r\n function TimeoutTimer(runner, timeout) {\r\n this._token = -1;\r\n if (typeof runner === 'function' && typeof timeout === 'number') {\r\n this.setIfNotSet(runner, timeout);\r\n }\r\n }\r\n TimeoutTimer.prototype.dispose = function () {\r\n this.cancel();\r\n };\r\n TimeoutTimer.prototype.cancel = function () {\r\n if (this._token !== -1) {\r\n clearTimeout(this._token);\r\n this._token = -1;\r\n }\r\n };\r\n TimeoutTimer.prototype.cancelAndSet = function (runner, timeout) {\r\n var _this = this;\r\n this.cancel();\r\n this._token = setTimeout(function () {\r\n _this._token = -1;\r\n runner();\r\n }, timeout);\r\n };\r\n TimeoutTimer.prototype.setIfNotSet = function (runner, timeout) {\r\n var _this = this;\r\n if (this._token !== -1) {\r\n // timer is already set\r\n return;\r\n }\r\n this._token = setTimeout(function () {\r\n _this._token = -1;\r\n runner();\r\n }, timeout);\r\n };\r\n return TimeoutTimer;\r\n}());\r\nexport { TimeoutTimer };\r\nvar IntervalTimer = /** @class */ (function () {\r\n function IntervalTimer() {\r\n this._token = -1;\r\n }\r\n IntervalTimer.prototype.dispose = function () {\r\n this.cancel();\r\n };\r\n IntervalTimer.prototype.cancel = function () {\r\n if (this._token !== -1) {\r\n clearInterval(this._token);\r\n this._token = -1;\r\n }\r\n };\r\n IntervalTimer.prototype.cancelAndSet = function (runner, interval) {\r\n this.cancel();\r\n this._token = setInterval(function () {\r\n runner();\r\n }, interval);\r\n };\r\n return IntervalTimer;\r\n}());\r\nexport { IntervalTimer };\r\nvar RunOnceScheduler = /** @class */ (function () {\r\n function RunOnceScheduler(runner, timeout) {\r\n this.timeoutToken = -1;\r\n this.runner = runner;\r\n this.timeout = timeout;\r\n this.timeoutHandler = this.onTimeout.bind(this);\r\n }\r\n /**\r\n * Dispose RunOnceScheduler\r\n */\r\n RunOnceScheduler.prototype.dispose = function () {\r\n this.cancel();\r\n this.runner = null;\r\n };\r\n /**\r\n * Cancel current scheduled runner (if any).\r\n */\r\n RunOnceScheduler.prototype.cancel = function () {\r\n if (this.isScheduled()) {\r\n clearTimeout(this.timeoutToken);\r\n this.timeoutToken = -1;\r\n }\r\n };\r\n /**\r\n * Cancel previous runner (if any) & schedule a new runner.\r\n */\r\n RunOnceScheduler.prototype.schedule = function (delay) {\r\n if (delay === void 0) { delay = this.timeout; }\r\n this.cancel();\r\n this.timeoutToken = setTimeout(this.timeoutHandler, delay);\r\n };\r\n /**\r\n * Returns true if scheduled.\r\n */\r\n RunOnceScheduler.prototype.isScheduled = function () {\r\n return this.timeoutToken !== -1;\r\n };\r\n RunOnceScheduler.prototype.onTimeout = function () {\r\n this.timeoutToken = -1;\r\n if (this.runner) {\r\n this.doRun();\r\n }\r\n };\r\n RunOnceScheduler.prototype.doRun = function () {\r\n if (this.runner) {\r\n this.runner();\r\n }\r\n };\r\n return RunOnceScheduler;\r\n}());\r\nexport { RunOnceScheduler };\r\n/**\r\n * Execute the callback the next time the browser is idle\r\n */\r\nexport var runWhenIdle;\r\n(function () {\r\n if (typeof requestIdleCallback !== 'function' || typeof cancelIdleCallback !== 'function') {\r\n var dummyIdle_1 = Object.freeze({\r\n didTimeout: true,\r\n timeRemaining: function () { return 15; }\r\n });\r\n runWhenIdle = function (runner) {\r\n var handle = setTimeout(function () { return runner(dummyIdle_1); });\r\n var disposed = false;\r\n return {\r\n dispose: function () {\r\n if (disposed) {\r\n return;\r\n }\r\n disposed = true;\r\n clearTimeout(handle);\r\n }\r\n };\r\n };\r\n }\r\n else {\r\n runWhenIdle = function (runner, timeout) {\r\n var handle = requestIdleCallback(runner, typeof timeout === 'number' ? { timeout: timeout } : undefined);\r\n var disposed = false;\r\n return {\r\n dispose: function () {\r\n if (disposed) {\r\n return;\r\n }\r\n disposed = true;\r\n cancelIdleCallback(handle);\r\n }\r\n };\r\n };\r\n }\r\n})();\r\n/**\r\n * An implementation of the \"idle-until-urgent\"-strategy as introduced\r\n * here: https://philipwalton.com/articles/idle-until-urgent/\r\n */\r\nvar IdleValue = /** @class */ (function () {\r\n function IdleValue(executor) {\r\n var _this = this;\r\n this._didRun = false;\r\n this._executor = function () {\r\n try {\r\n _this._value = executor();\r\n }\r\n catch (err) {\r\n _this._error = err;\r\n }\r\n finally {\r\n _this._didRun = true;\r\n }\r\n };\r\n this._handle = runWhenIdle(function () { return _this._executor(); });\r\n }\r\n IdleValue.prototype.dispose = function () {\r\n this._handle.dispose();\r\n };\r\n IdleValue.prototype.getValue = function () {\r\n if (!this._didRun) {\r\n this._handle.dispose();\r\n this._executor();\r\n }\r\n if (this._error) {\r\n throw this._error;\r\n }\r\n return this._value;\r\n };\r\n return IdleValue;\r\n}());\r\nexport { IdleValue };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { URI } from './uri.js';\r\nimport * as platform from './platform.js';\r\nexport var Schemas;\r\n(function (Schemas) {\r\n /**\r\n * A schema that is used for models that exist in memory\r\n * only and that have no correspondence on a server or such.\r\n */\r\n Schemas.inMemory = 'inmemory';\r\n /**\r\n * A schema that is used for setting files\r\n */\r\n Schemas.vscode = 'vscode';\r\n /**\r\n * A schema that is used for internal private files\r\n */\r\n Schemas.internal = 'private';\r\n /**\r\n * A walk-through document.\r\n */\r\n Schemas.walkThrough = 'walkThrough';\r\n /**\r\n * An embedded code snippet.\r\n */\r\n Schemas.walkThroughSnippet = 'walkThroughSnippet';\r\n Schemas.http = 'http';\r\n Schemas.https = 'https';\r\n Schemas.file = 'file';\r\n Schemas.mailto = 'mailto';\r\n Schemas.untitled = 'untitled';\r\n Schemas.data = 'data';\r\n Schemas.command = 'command';\r\n Schemas.vscodeRemote = 'vscode-remote';\r\n Schemas.vscodeRemoteResource = 'vscode-remote-resource';\r\n Schemas.userData = 'vscode-userdata';\r\n})(Schemas || (Schemas = {}));\r\nvar RemoteAuthoritiesImpl = /** @class */ (function () {\r\n function RemoteAuthoritiesImpl() {\r\n this._hosts = Object.create(null);\r\n this._ports = Object.create(null);\r\n this._connectionTokens = Object.create(null);\r\n this._preferredWebSchema = 'http';\r\n this._delegate = null;\r\n }\r\n RemoteAuthoritiesImpl.prototype.setPreferredWebSchema = function (schema) {\r\n this._preferredWebSchema = schema;\r\n };\r\n RemoteAuthoritiesImpl.prototype.rewrite = function (uri) {\r\n if (this._delegate) {\r\n return this._delegate(uri);\r\n }\r\n var authority = uri.authority;\r\n var host = this._hosts[authority];\r\n if (host && host.indexOf(':') !== -1) {\r\n host = \"[\" + host + \"]\";\r\n }\r\n var port = this._ports[authority];\r\n var connectionToken = this._connectionTokens[authority];\r\n var query = \"path=\" + encodeURIComponent(uri.path);\r\n if (typeof connectionToken === 'string') {\r\n query += \"&tkn=\" + encodeURIComponent(connectionToken);\r\n }\r\n return URI.from({\r\n scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource,\r\n authority: host + \":\" + port,\r\n path: \"/vscode-remote-resource\",\r\n query: query\r\n });\r\n };\r\n return RemoteAuthoritiesImpl;\r\n}());\r\nexport var RemoteAuthorities = new RemoteAuthoritiesImpl();\r\n","/**\r\n * Returns the last element of an array.\r\n * @param array The array.\r\n * @param n Which element from the end (default is zero).\r\n */\r\nexport function tail(array, n) {\r\n if (n === void 0) { n = 0; }\r\n return array[array.length - (1 + n)];\r\n}\r\nexport function tail2(arr) {\r\n if (arr.length === 0) {\r\n throw new Error('Invalid tail call');\r\n }\r\n return [arr.slice(0, arr.length - 1), arr[arr.length - 1]];\r\n}\r\nexport function equals(one, other, itemEquals) {\r\n if (itemEquals === void 0) { itemEquals = function (a, b) { return a === b; }; }\r\n if (one === other) {\r\n return true;\r\n }\r\n if (!one || !other) {\r\n return false;\r\n }\r\n if (one.length !== other.length) {\r\n return false;\r\n }\r\n for (var i = 0, len = one.length; i < len; i++) {\r\n if (!itemEquals(one[i], other[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nexport function binarySearch(array, key, comparator) {\r\n var low = 0, high = array.length - 1;\r\n while (low <= high) {\r\n var mid = ((low + high) / 2) | 0;\r\n var comp = comparator(array[mid], key);\r\n if (comp < 0) {\r\n low = mid + 1;\r\n }\r\n else if (comp > 0) {\r\n high = mid - 1;\r\n }\r\n else {\r\n return mid;\r\n }\r\n }\r\n return -(low + 1);\r\n}\r\n/**\r\n * Takes a sorted array and a function p. The array is sorted in such a way that all elements where p(x) is false\r\n * are located before all elements where p(x) is true.\r\n * @returns the least x for which p(x) is true or array.length if no element fullfills the given function.\r\n */\r\nexport function findFirstInSorted(array, p) {\r\n var low = 0, high = array.length;\r\n if (high === 0) {\r\n return 0; // no children\r\n }\r\n while (low < high) {\r\n var mid = Math.floor((low + high) / 2);\r\n if (p(array[mid])) {\r\n high = mid;\r\n }\r\n else {\r\n low = mid + 1;\r\n }\r\n }\r\n return low;\r\n}\r\n/**\r\n * Like `Array#sort` but always stable. Usually runs a little slower `than Array#sort`\r\n * so only use this when actually needing stable sort.\r\n */\r\nexport function mergeSort(data, compare) {\r\n _sort(data, compare, 0, data.length - 1, []);\r\n return data;\r\n}\r\nfunction _merge(a, compare, lo, mid, hi, aux) {\r\n var leftIdx = lo, rightIdx = mid + 1;\r\n for (var i = lo; i <= hi; i++) {\r\n aux[i] = a[i];\r\n }\r\n for (var i = lo; i <= hi; i++) {\r\n if (leftIdx > mid) {\r\n // left side consumed\r\n a[i] = aux[rightIdx++];\r\n }\r\n else if (rightIdx > hi) {\r\n // right side consumed\r\n a[i] = aux[leftIdx++];\r\n }\r\n else if (compare(aux[rightIdx], aux[leftIdx]) < 0) {\r\n // right element is less -> comes first\r\n a[i] = aux[rightIdx++];\r\n }\r\n else {\r\n // left element comes first (less or equal)\r\n a[i] = aux[leftIdx++];\r\n }\r\n }\r\n}\r\nfunction _sort(a, compare, lo, hi, aux) {\r\n if (hi <= lo) {\r\n return;\r\n }\r\n var mid = lo + ((hi - lo) / 2) | 0;\r\n _sort(a, compare, lo, mid, aux);\r\n _sort(a, compare, mid + 1, hi, aux);\r\n if (compare(a[mid], a[mid + 1]) <= 0) {\r\n // left and right are sorted and if the last-left element is less\r\n // or equals than the first-right element there is nothing else\r\n // to do\r\n return;\r\n }\r\n _merge(a, compare, lo, mid, hi, aux);\r\n}\r\nexport function groupBy(data, compare) {\r\n var result = [];\r\n var currentGroup = undefined;\r\n for (var _i = 0, _a = mergeSort(data.slice(0), compare); _i < _a.length; _i++) {\r\n var element = _a[_i];\r\n if (!currentGroup || compare(currentGroup[0], element) !== 0) {\r\n currentGroup = [element];\r\n result.push(currentGroup);\r\n }\r\n else {\r\n currentGroup.push(element);\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * @returns New array with all falsy values removed. The original array IS NOT modified.\r\n */\r\nexport function coalesce(array) {\r\n return array.filter(function (e) { return !!e; });\r\n}\r\n/**\r\n * @returns false if the provided object is an array and not empty.\r\n */\r\nexport function isFalsyOrEmpty(obj) {\r\n return !Array.isArray(obj) || obj.length === 0;\r\n}\r\nexport function isNonEmptyArray(obj) {\r\n return Array.isArray(obj) && obj.length > 0;\r\n}\r\n/**\r\n * Removes duplicates from the given array. The optional keyFn allows to specify\r\n * how elements are checked for equalness by returning a unique string for each.\r\n */\r\nexport function distinct(array, keyFn) {\r\n if (!keyFn) {\r\n return array.filter(function (element, position) {\r\n return array.indexOf(element) === position;\r\n });\r\n }\r\n var seen = Object.create(null);\r\n return array.filter(function (elem) {\r\n var key = keyFn(elem);\r\n if (seen[key]) {\r\n return false;\r\n }\r\n seen[key] = true;\r\n return true;\r\n });\r\n}\r\nexport function distinctES6(array) {\r\n var seen = new Set();\r\n return array.filter(function (element) {\r\n if (seen.has(element)) {\r\n return false;\r\n }\r\n seen.add(element);\r\n return true;\r\n });\r\n}\r\nexport function fromSet(set) {\r\n var result = [];\r\n set.forEach(function (o) { return result.push(o); });\r\n return result;\r\n}\r\nexport function firstIndex(array, fn) {\r\n for (var i = 0; i < array.length; i++) {\r\n var element = array[i];\r\n if (fn(element)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function first(array, fn, notFoundValue) {\r\n if (notFoundValue === void 0) { notFoundValue = undefined; }\r\n var index = firstIndex(array, fn);\r\n return index < 0 ? notFoundValue : array[index];\r\n}\r\nexport function firstOrDefault(array, notFoundValue) {\r\n return array.length > 0 ? array[0] : notFoundValue;\r\n}\r\nexport function flatten(arr) {\r\n var _a;\r\n return (_a = []).concat.apply(_a, arr);\r\n}\r\nexport function range(arg, to) {\r\n var from = typeof to === 'number' ? arg : 0;\r\n if (typeof to === 'number') {\r\n from = arg;\r\n }\r\n else {\r\n from = 0;\r\n to = arg;\r\n }\r\n var result = [];\r\n if (from <= to) {\r\n for (var i = from; i < to; i++) {\r\n result.push(i);\r\n }\r\n }\r\n else {\r\n for (var i = from; i > to; i--) {\r\n result.push(i);\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * Insert `insertArr` inside `target` at `insertIndex`.\r\n * Please don't touch unless you understand https://jsperf.com/inserting-an-array-within-an-array\r\n */\r\nexport function arrayInsert(target, insertIndex, insertArr) {\r\n var before = target.slice(0, insertIndex);\r\n var after = target.slice(insertIndex);\r\n return before.concat(insertArr, after);\r\n}\r\n/**\r\n * Pushes an element to the start of the array, if found.\r\n */\r\nexport function pushToStart(arr, value) {\r\n var index = arr.indexOf(value);\r\n if (index > -1) {\r\n arr.splice(index, 1);\r\n arr.unshift(value);\r\n }\r\n}\r\n/**\r\n * Pushes an element to the end of the array, if found.\r\n */\r\nexport function pushToEnd(arr, value) {\r\n var index = arr.indexOf(value);\r\n if (index > -1) {\r\n arr.splice(index, 1);\r\n arr.push(value);\r\n }\r\n}\r\nexport function find(arr, predicate) {\r\n for (var i = 0; i < arr.length; i++) {\r\n var element = arr[i];\r\n if (predicate(element, i, arr)) {\r\n return element;\r\n }\r\n }\r\n return undefined;\r\n}\r\nexport function asArray(x) {\r\n return Array.isArray(x) ? x : [x];\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as browser from './browser.js';\r\nimport * as platform from '../common/platform.js';\r\n/**\r\n * Browser feature we can support in current platform, browser and environment.\r\n */\r\nexport var BrowserFeatures = {\r\n clipboard: {\r\n writeText: (platform.isNative\r\n || (document.queryCommandSupported && document.queryCommandSupported('copy'))\r\n || !!(navigator && navigator.clipboard && navigator.clipboard.writeText)),\r\n readText: (platform.isNative\r\n || !!(navigator && navigator.clipboard && navigator.clipboard.readText)),\r\n richText: (function () {\r\n if (browser.isIE) {\r\n return false;\r\n }\r\n if (browser.isEdge) {\r\n var index = navigator.userAgent.indexOf('Edge/');\r\n var version = parseInt(navigator.userAgent.substring(index + 5, navigator.userAgent.indexOf('.', index)), 10);\r\n if (!version || (version >= 12 && version <= 16)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n })()\r\n },\r\n keyboard: (function () {\r\n if (platform.isNative || browser.isStandalone) {\r\n return 0 /* Always */;\r\n }\r\n if (navigator.keyboard || browser.isSafari) {\r\n return 1 /* FullScreen */;\r\n }\r\n return 2 /* None */;\r\n })(),\r\n touch: 'ontouchstart' in window || navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0,\r\n pointerEvents: window.PointerEvent && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0 || navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0)\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport * as browser from './browser.js';\r\nimport { domEvent } from './event.js';\r\nimport { StandardKeyboardEvent } from './keyboardEvent.js';\r\nimport { StandardMouseEvent } from './mouseEvent.js';\r\nimport { TimeoutTimer } from '../common/async.js';\r\nimport { onUnexpectedError } from '../common/errors.js';\r\nimport { Emitter } from '../common/event.js';\r\nimport { Disposable, toDisposable } from '../common/lifecycle.js';\r\nimport * as platform from '../common/platform.js';\r\nimport { coalesce } from '../common/arrays.js';\r\nimport { Schemas, RemoteAuthorities } from '../common/network.js';\r\nimport { BrowserFeatures } from './canIUse.js';\r\nexport function clearNode(node) {\r\n while (node.firstChild) {\r\n node.removeChild(node.firstChild);\r\n }\r\n}\r\nexport function removeNode(node) {\r\n if (node.parentNode) {\r\n node.parentNode.removeChild(node);\r\n }\r\n}\r\nexport function isInDOM(node) {\r\n while (node) {\r\n if (node === document.body) {\r\n return true;\r\n }\r\n node = node.parentNode || node.host;\r\n }\r\n return false;\r\n}\r\nvar _manualClassList = new /** @class */ (function () {\r\n function class_1() {\r\n this._lastStart = -1;\r\n this._lastEnd = -1;\r\n }\r\n class_1.prototype._findClassName = function (node, className) {\r\n var classes = node.className;\r\n if (!classes) {\r\n this._lastStart = -1;\r\n return;\r\n }\r\n className = className.trim();\r\n var classesLen = classes.length, classLen = className.length;\r\n if (classLen === 0) {\r\n this._lastStart = -1;\r\n return;\r\n }\r\n if (classesLen < classLen) {\r\n this._lastStart = -1;\r\n return;\r\n }\r\n if (classes === className) {\r\n this._lastStart = 0;\r\n this._lastEnd = classesLen;\r\n return;\r\n }\r\n var idx = -1, idxEnd;\r\n while ((idx = classes.indexOf(className, idx + 1)) >= 0) {\r\n idxEnd = idx + classLen;\r\n // a class that is followed by another class\r\n if ((idx === 0 || classes.charCodeAt(idx - 1) === 32 /* Space */) && classes.charCodeAt(idxEnd) === 32 /* Space */) {\r\n this._lastStart = idx;\r\n this._lastEnd = idxEnd + 1;\r\n return;\r\n }\r\n // last class\r\n if (idx > 0 && classes.charCodeAt(idx - 1) === 32 /* Space */ && idxEnd === classesLen) {\r\n this._lastStart = idx - 1;\r\n this._lastEnd = idxEnd;\r\n return;\r\n }\r\n // equal - duplicate of cmp above\r\n if (idx === 0 && idxEnd === classesLen) {\r\n this._lastStart = 0;\r\n this._lastEnd = idxEnd;\r\n return;\r\n }\r\n }\r\n this._lastStart = -1;\r\n };\r\n class_1.prototype.hasClass = function (node, className) {\r\n this._findClassName(node, className);\r\n return this._lastStart !== -1;\r\n };\r\n class_1.prototype.addClasses = function (node) {\r\n var _this = this;\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n classNames.forEach(function (nameValue) { return nameValue.split(' ').forEach(function (name) { return _this.addClass(node, name); }); });\r\n };\r\n class_1.prototype.addClass = function (node, className) {\r\n if (!node.className) { // doesn't have it for sure\r\n node.className = className;\r\n }\r\n else {\r\n this._findClassName(node, className); // see if it's already there\r\n if (this._lastStart === -1) {\r\n node.className = node.className + ' ' + className;\r\n }\r\n }\r\n };\r\n class_1.prototype.removeClass = function (node, className) {\r\n this._findClassName(node, className);\r\n if (this._lastStart === -1) {\r\n return; // Prevent styles invalidation if not necessary\r\n }\r\n else {\r\n node.className = node.className.substring(0, this._lastStart) + node.className.substring(this._lastEnd);\r\n }\r\n };\r\n class_1.prototype.removeClasses = function (node) {\r\n var _this = this;\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n classNames.forEach(function (nameValue) { return nameValue.split(' ').forEach(function (name) { return _this.removeClass(node, name); }); });\r\n };\r\n class_1.prototype.toggleClass = function (node, className, shouldHaveIt) {\r\n this._findClassName(node, className);\r\n if (this._lastStart !== -1 && (shouldHaveIt === undefined || !shouldHaveIt)) {\r\n this.removeClass(node, className);\r\n }\r\n if (this._lastStart === -1 && (shouldHaveIt === undefined || shouldHaveIt)) {\r\n this.addClass(node, className);\r\n }\r\n };\r\n return class_1;\r\n}());\r\nvar _nativeClassList = new /** @class */ (function () {\r\n function class_2() {\r\n }\r\n class_2.prototype.hasClass = function (node, className) {\r\n return Boolean(className) && node.classList && node.classList.contains(className);\r\n };\r\n class_2.prototype.addClasses = function (node) {\r\n var _this = this;\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n classNames.forEach(function (nameValue) { return nameValue.split(' ').forEach(function (name) { return _this.addClass(node, name); }); });\r\n };\r\n class_2.prototype.addClass = function (node, className) {\r\n if (className && node.classList) {\r\n node.classList.add(className);\r\n }\r\n };\r\n class_2.prototype.removeClass = function (node, className) {\r\n if (className && node.classList) {\r\n node.classList.remove(className);\r\n }\r\n };\r\n class_2.prototype.removeClasses = function (node) {\r\n var _this = this;\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n classNames.forEach(function (nameValue) { return nameValue.split(' ').forEach(function (name) { return _this.removeClass(node, name); }); });\r\n };\r\n class_2.prototype.toggleClass = function (node, className, shouldHaveIt) {\r\n if (node.classList) {\r\n node.classList.toggle(className, shouldHaveIt);\r\n }\r\n };\r\n return class_2;\r\n}());\r\n// In IE11 there is only partial support for `classList` which makes us keep our\r\n// custom implementation. Otherwise use the native implementation, see: http://caniuse.com/#search=classlist\r\nvar _classList = browser.isIE ? _manualClassList : _nativeClassList;\r\nexport var hasClass = _classList.hasClass.bind(_classList);\r\nexport var addClass = _classList.addClass.bind(_classList);\r\nexport var addClasses = _classList.addClasses.bind(_classList);\r\nexport var removeClass = _classList.removeClass.bind(_classList);\r\nexport var removeClasses = _classList.removeClasses.bind(_classList);\r\nexport var toggleClass = _classList.toggleClass.bind(_classList);\r\nvar DomListener = /** @class */ (function () {\r\n function DomListener(node, type, handler, options) {\r\n this._node = node;\r\n this._type = type;\r\n this._handler = handler;\r\n this._options = (options || false);\r\n this._node.addEventListener(this._type, this._handler, this._options);\r\n }\r\n DomListener.prototype.dispose = function () {\r\n if (!this._handler) {\r\n // Already disposed\r\n return;\r\n }\r\n this._node.removeEventListener(this._type, this._handler, this._options);\r\n // Prevent leakers from holding on to the dom or handler func\r\n this._node = null;\r\n this._handler = null;\r\n };\r\n return DomListener;\r\n}());\r\nexport function addDisposableListener(node, type, handler, useCaptureOrOptions) {\r\n return new DomListener(node, type, handler, useCaptureOrOptions);\r\n}\r\nfunction _wrapAsStandardMouseEvent(handler) {\r\n return function (e) {\r\n return handler(new StandardMouseEvent(e));\r\n };\r\n}\r\nfunction _wrapAsStandardKeyboardEvent(handler) {\r\n return function (e) {\r\n return handler(new StandardKeyboardEvent(e));\r\n };\r\n}\r\nexport var addStandardDisposableListener = function addStandardDisposableListener(node, type, handler, useCapture) {\r\n var wrapHandler = handler;\r\n if (type === 'click' || type === 'mousedown') {\r\n wrapHandler = _wrapAsStandardMouseEvent(handler);\r\n }\r\n else if (type === 'keydown' || type === 'keypress' || type === 'keyup') {\r\n wrapHandler = _wrapAsStandardKeyboardEvent(handler);\r\n }\r\n return addDisposableListener(node, type, wrapHandler, useCapture);\r\n};\r\nexport var addStandardDisposableGenericMouseDownListner = function addStandardDisposableListener(node, handler, useCapture) {\r\n var wrapHandler = _wrapAsStandardMouseEvent(handler);\r\n return addDisposableGenericMouseDownListner(node, wrapHandler, useCapture);\r\n};\r\nexport function addDisposableGenericMouseDownListner(node, handler, useCapture) {\r\n return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_DOWN : EventType.MOUSE_DOWN, handler, useCapture);\r\n}\r\nexport function addDisposableGenericMouseUpListner(node, handler, useCapture) {\r\n return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_UP : EventType.MOUSE_UP, handler, useCapture);\r\n}\r\nexport function addDisposableNonBubblingMouseOutListener(node, handler) {\r\n return addDisposableListener(node, 'mouseout', function (e) {\r\n // Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements\r\n var toElement = (e.relatedTarget || e.target);\r\n while (toElement && toElement !== node) {\r\n toElement = toElement.parentNode;\r\n }\r\n if (toElement === node) {\r\n return;\r\n }\r\n handler(e);\r\n });\r\n}\r\nexport function addDisposableNonBubblingPointerOutListener(node, handler) {\r\n return addDisposableListener(node, 'pointerout', function (e) {\r\n // Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements\r\n var toElement = (e.relatedTarget || e.target);\r\n while (toElement && toElement !== node) {\r\n toElement = toElement.parentNode;\r\n }\r\n if (toElement === node) {\r\n return;\r\n }\r\n handler(e);\r\n });\r\n}\r\nvar _animationFrame = null;\r\nfunction doRequestAnimationFrame(callback) {\r\n if (!_animationFrame) {\r\n var emulatedRequestAnimationFrame = function (callback) {\r\n return setTimeout(function () { return callback(new Date().getTime()); }, 0);\r\n };\r\n _animationFrame = (self.requestAnimationFrame\r\n || self.msRequestAnimationFrame\r\n || self.webkitRequestAnimationFrame\r\n || self.mozRequestAnimationFrame\r\n || self.oRequestAnimationFrame\r\n || emulatedRequestAnimationFrame);\r\n }\r\n return _animationFrame.call(self, callback);\r\n}\r\n/**\r\n * Schedule a callback to be run at the next animation frame.\r\n * This allows multiple parties to register callbacks that should run at the next animation frame.\r\n * If currently in an animation frame, `runner` will be executed immediately.\r\n * @return token that can be used to cancel the scheduled runner (only if `runner` was not executed immediately).\r\n */\r\nexport var runAtThisOrScheduleAtNextAnimationFrame;\r\n/**\r\n * Schedule a callback to be run at the next animation frame.\r\n * This allows multiple parties to register callbacks that should run at the next animation frame.\r\n * If currently in an animation frame, `runner` will be executed at the next animation frame.\r\n * @return token that can be used to cancel the scheduled runner.\r\n */\r\nexport var scheduleAtNextAnimationFrame;\r\nvar AnimationFrameQueueItem = /** @class */ (function () {\r\n function AnimationFrameQueueItem(runner, priority) {\r\n if (priority === void 0) { priority = 0; }\r\n this._runner = runner;\r\n this.priority = priority;\r\n this._canceled = false;\r\n }\r\n AnimationFrameQueueItem.prototype.dispose = function () {\r\n this._canceled = true;\r\n };\r\n AnimationFrameQueueItem.prototype.execute = function () {\r\n if (this._canceled) {\r\n return;\r\n }\r\n try {\r\n this._runner();\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n }\r\n };\r\n // Sort by priority (largest to lowest)\r\n AnimationFrameQueueItem.sort = function (a, b) {\r\n return b.priority - a.priority;\r\n };\r\n return AnimationFrameQueueItem;\r\n}());\r\n(function () {\r\n /**\r\n * The runners scheduled at the next animation frame\r\n */\r\n var NEXT_QUEUE = [];\r\n /**\r\n * The runners scheduled at the current animation frame\r\n */\r\n var CURRENT_QUEUE = null;\r\n /**\r\n * A flag to keep track if the native requestAnimationFrame was already called\r\n */\r\n var animFrameRequested = false;\r\n /**\r\n * A flag to indicate if currently handling a native requestAnimationFrame callback\r\n */\r\n var inAnimationFrameRunner = false;\r\n var animationFrameRunner = function () {\r\n animFrameRequested = false;\r\n CURRENT_QUEUE = NEXT_QUEUE;\r\n NEXT_QUEUE = [];\r\n inAnimationFrameRunner = true;\r\n while (CURRENT_QUEUE.length > 0) {\r\n CURRENT_QUEUE.sort(AnimationFrameQueueItem.sort);\r\n var top_1 = CURRENT_QUEUE.shift();\r\n top_1.execute();\r\n }\r\n inAnimationFrameRunner = false;\r\n };\r\n scheduleAtNextAnimationFrame = function (runner, priority) {\r\n if (priority === void 0) { priority = 0; }\r\n var item = new AnimationFrameQueueItem(runner, priority);\r\n NEXT_QUEUE.push(item);\r\n if (!animFrameRequested) {\r\n animFrameRequested = true;\r\n doRequestAnimationFrame(animationFrameRunner);\r\n }\r\n return item;\r\n };\r\n runAtThisOrScheduleAtNextAnimationFrame = function (runner, priority) {\r\n if (inAnimationFrameRunner) {\r\n var item = new AnimationFrameQueueItem(runner, priority);\r\n CURRENT_QUEUE.push(item);\r\n return item;\r\n }\r\n else {\r\n return scheduleAtNextAnimationFrame(runner, priority);\r\n }\r\n };\r\n})();\r\nvar MINIMUM_TIME_MS = 16;\r\nvar DEFAULT_EVENT_MERGER = function (lastEvent, currentEvent) {\r\n return currentEvent;\r\n};\r\nvar TimeoutThrottledDomListener = /** @class */ (function (_super) {\r\n __extends(TimeoutThrottledDomListener, _super);\r\n function TimeoutThrottledDomListener(node, type, handler, eventMerger, minimumTimeMs) {\r\n if (eventMerger === void 0) { eventMerger = DEFAULT_EVENT_MERGER; }\r\n if (minimumTimeMs === void 0) { minimumTimeMs = MINIMUM_TIME_MS; }\r\n var _this = _super.call(this) || this;\r\n var lastEvent = null;\r\n var lastHandlerTime = 0;\r\n var timeout = _this._register(new TimeoutTimer());\r\n var invokeHandler = function () {\r\n lastHandlerTime = (new Date()).getTime();\r\n handler(lastEvent);\r\n lastEvent = null;\r\n };\r\n _this._register(addDisposableListener(node, type, function (e) {\r\n lastEvent = eventMerger(lastEvent, e);\r\n var elapsedTime = (new Date()).getTime() - lastHandlerTime;\r\n if (elapsedTime >= minimumTimeMs) {\r\n timeout.cancel();\r\n invokeHandler();\r\n }\r\n else {\r\n timeout.setIfNotSet(invokeHandler, minimumTimeMs - elapsedTime);\r\n }\r\n }));\r\n return _this;\r\n }\r\n return TimeoutThrottledDomListener;\r\n}(Disposable));\r\nexport function addDisposableThrottledListener(node, type, handler, eventMerger, minimumTimeMs) {\r\n return new TimeoutThrottledDomListener(node, type, handler, eventMerger, minimumTimeMs);\r\n}\r\nexport function getComputedStyle(el) {\r\n return document.defaultView.getComputedStyle(el, null);\r\n}\r\nvar SizeUtils = /** @class */ (function () {\r\n function SizeUtils() {\r\n }\r\n // Adapted from WinJS\r\n // Converts a CSS positioning string for the specified element to pixels.\r\n SizeUtils.convertToPixels = function (element, value) {\r\n return parseFloat(value) || 0;\r\n };\r\n SizeUtils.getDimension = function (element, cssPropertyName, jsPropertyName) {\r\n var computedStyle = getComputedStyle(element);\r\n var value = '0';\r\n if (computedStyle) {\r\n if (computedStyle.getPropertyValue) {\r\n value = computedStyle.getPropertyValue(cssPropertyName);\r\n }\r\n else {\r\n // IE8\r\n value = computedStyle.getAttribute(jsPropertyName);\r\n }\r\n }\r\n return SizeUtils.convertToPixels(element, value);\r\n };\r\n SizeUtils.getBorderLeftWidth = function (element) {\r\n return SizeUtils.getDimension(element, 'border-left-width', 'borderLeftWidth');\r\n };\r\n SizeUtils.getBorderRightWidth = function (element) {\r\n return SizeUtils.getDimension(element, 'border-right-width', 'borderRightWidth');\r\n };\r\n SizeUtils.getBorderTopWidth = function (element) {\r\n return SizeUtils.getDimension(element, 'border-top-width', 'borderTopWidth');\r\n };\r\n SizeUtils.getBorderBottomWidth = function (element) {\r\n return SizeUtils.getDimension(element, 'border-bottom-width', 'borderBottomWidth');\r\n };\r\n SizeUtils.getPaddingLeft = function (element) {\r\n return SizeUtils.getDimension(element, 'padding-left', 'paddingLeft');\r\n };\r\n SizeUtils.getPaddingRight = function (element) {\r\n return SizeUtils.getDimension(element, 'padding-right', 'paddingRight');\r\n };\r\n SizeUtils.getPaddingTop = function (element) {\r\n return SizeUtils.getDimension(element, 'padding-top', 'paddingTop');\r\n };\r\n SizeUtils.getPaddingBottom = function (element) {\r\n return SizeUtils.getDimension(element, 'padding-bottom', 'paddingBottom');\r\n };\r\n SizeUtils.getMarginLeft = function (element) {\r\n return SizeUtils.getDimension(element, 'margin-left', 'marginLeft');\r\n };\r\n SizeUtils.getMarginTop = function (element) {\r\n return SizeUtils.getDimension(element, 'margin-top', 'marginTop');\r\n };\r\n SizeUtils.getMarginRight = function (element) {\r\n return SizeUtils.getDimension(element, 'margin-right', 'marginRight');\r\n };\r\n SizeUtils.getMarginBottom = function (element) {\r\n return SizeUtils.getDimension(element, 'margin-bottom', 'marginBottom');\r\n };\r\n return SizeUtils;\r\n}());\r\n// ----------------------------------------------------------------------------------------\r\n// Position & Dimension\r\nvar Dimension = /** @class */ (function () {\r\n function Dimension(width, height) {\r\n this.width = width;\r\n this.height = height;\r\n }\r\n return Dimension;\r\n}());\r\nexport { Dimension };\r\nexport function getTopLeftOffset(element) {\r\n // Adapted from WinJS.Utilities.getPosition\r\n // and added borders to the mix\r\n var offsetParent = element.offsetParent, top = element.offsetTop, left = element.offsetLeft;\r\n while ((element = element.parentNode) !== null && element !== document.body && element !== document.documentElement) {\r\n top -= element.scrollTop;\r\n var c = getComputedStyle(element);\r\n if (c) {\r\n left -= c.direction !== 'rtl' ? element.scrollLeft : -element.scrollLeft;\r\n }\r\n if (element === offsetParent) {\r\n left += SizeUtils.getBorderLeftWidth(element);\r\n top += SizeUtils.getBorderTopWidth(element);\r\n top += element.offsetTop;\r\n left += element.offsetLeft;\r\n offsetParent = element.offsetParent;\r\n }\r\n }\r\n return {\r\n left: left,\r\n top: top\r\n };\r\n}\r\n/**\r\n * Returns the position of a dom node relative to the entire page.\r\n */\r\nexport function getDomNodePagePosition(domNode) {\r\n var bb = domNode.getBoundingClientRect();\r\n return {\r\n left: bb.left + StandardWindow.scrollX,\r\n top: bb.top + StandardWindow.scrollY,\r\n width: bb.width,\r\n height: bb.height\r\n };\r\n}\r\nexport var StandardWindow = new /** @class */ (function () {\r\n function class_3() {\r\n }\r\n Object.defineProperty(class_3.prototype, \"scrollX\", {\r\n get: function () {\r\n if (typeof window.scrollX === 'number') {\r\n // modern browsers\r\n return window.scrollX;\r\n }\r\n else {\r\n return document.body.scrollLeft + document.documentElement.scrollLeft;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(class_3.prototype, \"scrollY\", {\r\n get: function () {\r\n if (typeof window.scrollY === 'number') {\r\n // modern browsers\r\n return window.scrollY;\r\n }\r\n else {\r\n return document.body.scrollTop + document.documentElement.scrollTop;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return class_3;\r\n}());\r\n// Adapted from WinJS\r\n// Gets the width of the element, including margins.\r\nexport function getTotalWidth(element) {\r\n var margin = SizeUtils.getMarginLeft(element) + SizeUtils.getMarginRight(element);\r\n return element.offsetWidth + margin;\r\n}\r\nexport function getContentWidth(element) {\r\n var border = SizeUtils.getBorderLeftWidth(element) + SizeUtils.getBorderRightWidth(element);\r\n var padding = SizeUtils.getPaddingLeft(element) + SizeUtils.getPaddingRight(element);\r\n return element.offsetWidth - border - padding;\r\n}\r\n// Adapted from WinJS\r\n// Gets the height of the content of the specified element. The content height does not include borders or padding.\r\nexport function getContentHeight(element) {\r\n var border = SizeUtils.getBorderTopWidth(element) + SizeUtils.getBorderBottomWidth(element);\r\n var padding = SizeUtils.getPaddingTop(element) + SizeUtils.getPaddingBottom(element);\r\n return element.offsetHeight - border - padding;\r\n}\r\n// Adapted from WinJS\r\n// Gets the height of the element, including its margins.\r\nexport function getTotalHeight(element) {\r\n var margin = SizeUtils.getMarginTop(element) + SizeUtils.getMarginBottom(element);\r\n return element.offsetHeight + margin;\r\n}\r\n// ----------------------------------------------------------------------------------------\r\nexport function isAncestor(testChild, testAncestor) {\r\n while (testChild) {\r\n if (testChild === testAncestor) {\r\n return true;\r\n }\r\n testChild = testChild.parentNode;\r\n }\r\n return false;\r\n}\r\nexport function findParentWithClass(node, clazz, stopAtClazzOrNode) {\r\n while (node) {\r\n if (hasClass(node, clazz)) {\r\n return node;\r\n }\r\n if (stopAtClazzOrNode) {\r\n if (typeof stopAtClazzOrNode === 'string') {\r\n if (hasClass(node, stopAtClazzOrNode)) {\r\n return null;\r\n }\r\n }\r\n else {\r\n if (node === stopAtClazzOrNode) {\r\n return null;\r\n }\r\n }\r\n }\r\n node = node.parentNode;\r\n }\r\n return null;\r\n}\r\nexport function createStyleSheet(container) {\r\n if (container === void 0) { container = document.getElementsByTagName('head')[0]; }\r\n var style = document.createElement('style');\r\n style.type = 'text/css';\r\n style.media = 'screen';\r\n container.appendChild(style);\r\n return style;\r\n}\r\nvar _sharedStyleSheet = null;\r\nfunction getSharedStyleSheet() {\r\n if (!_sharedStyleSheet) {\r\n _sharedStyleSheet = createStyleSheet();\r\n }\r\n return _sharedStyleSheet;\r\n}\r\nfunction getDynamicStyleSheetRules(style) {\r\n if (style && style.sheet && style.sheet.rules) {\r\n // Chrome, IE\r\n return style.sheet.rules;\r\n }\r\n if (style && style.sheet && style.sheet.cssRules) {\r\n // FF\r\n return style.sheet.cssRules;\r\n }\r\n return [];\r\n}\r\nexport function createCSSRule(selector, cssText, style) {\r\n if (style === void 0) { style = getSharedStyleSheet(); }\r\n if (!style || !cssText) {\r\n return;\r\n }\r\n style.sheet.insertRule(selector + '{' + cssText + '}', 0);\r\n}\r\nexport function removeCSSRulesContainingSelector(ruleName, style) {\r\n if (style === void 0) { style = getSharedStyleSheet(); }\r\n if (!style) {\r\n return;\r\n }\r\n var rules = getDynamicStyleSheetRules(style);\r\n var toDelete = [];\r\n for (var i = 0; i < rules.length; i++) {\r\n var rule = rules[i];\r\n if (rule.selectorText.indexOf(ruleName) !== -1) {\r\n toDelete.push(i);\r\n }\r\n }\r\n for (var i = toDelete.length - 1; i >= 0; i--) {\r\n style.sheet.deleteRule(toDelete[i]);\r\n }\r\n}\r\nexport function isHTMLElement(o) {\r\n if (typeof HTMLElement === 'object') {\r\n return o instanceof HTMLElement;\r\n }\r\n return o && typeof o === 'object' && o.nodeType === 1 && typeof o.nodeName === 'string';\r\n}\r\nexport var EventType = {\r\n // Mouse\r\n CLICK: 'click',\r\n DBLCLICK: 'dblclick',\r\n MOUSE_UP: 'mouseup',\r\n MOUSE_DOWN: 'mousedown',\r\n MOUSE_OVER: 'mouseover',\r\n MOUSE_MOVE: 'mousemove',\r\n MOUSE_OUT: 'mouseout',\r\n MOUSE_ENTER: 'mouseenter',\r\n MOUSE_LEAVE: 'mouseleave',\r\n POINTER_UP: 'pointerup',\r\n POINTER_DOWN: 'pointerdown',\r\n POINTER_MOVE: 'pointermove',\r\n CONTEXT_MENU: 'contextmenu',\r\n WHEEL: 'wheel',\r\n // Keyboard\r\n KEY_DOWN: 'keydown',\r\n KEY_PRESS: 'keypress',\r\n KEY_UP: 'keyup',\r\n // HTML Document\r\n LOAD: 'load',\r\n BEFORE_UNLOAD: 'beforeunload',\r\n UNLOAD: 'unload',\r\n ABORT: 'abort',\r\n ERROR: 'error',\r\n RESIZE: 'resize',\r\n SCROLL: 'scroll',\r\n FULLSCREEN_CHANGE: 'fullscreenchange',\r\n WK_FULLSCREEN_CHANGE: 'webkitfullscreenchange',\r\n // Form\r\n SELECT: 'select',\r\n CHANGE: 'change',\r\n SUBMIT: 'submit',\r\n RESET: 'reset',\r\n FOCUS: 'focus',\r\n FOCUS_IN: 'focusin',\r\n FOCUS_OUT: 'focusout',\r\n BLUR: 'blur',\r\n INPUT: 'input',\r\n // Local Storage\r\n STORAGE: 'storage',\r\n // Drag\r\n DRAG_START: 'dragstart',\r\n DRAG: 'drag',\r\n DRAG_ENTER: 'dragenter',\r\n DRAG_LEAVE: 'dragleave',\r\n DRAG_OVER: 'dragover',\r\n DROP: 'drop',\r\n DRAG_END: 'dragend',\r\n // Animation\r\n ANIMATION_START: browser.isWebKit ? 'webkitAnimationStart' : 'animationstart',\r\n ANIMATION_END: browser.isWebKit ? 'webkitAnimationEnd' : 'animationend',\r\n ANIMATION_ITERATION: browser.isWebKit ? 'webkitAnimationIteration' : 'animationiteration'\r\n};\r\nexport var EventHelper = {\r\n stop: function (e, cancelBubble) {\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n }\r\n else {\r\n // IE8\r\n e.returnValue = false;\r\n }\r\n if (cancelBubble) {\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n else {\r\n // IE8\r\n e.cancelBubble = true;\r\n }\r\n }\r\n }\r\n};\r\nexport function saveParentsScrollTop(node) {\r\n var r = [];\r\n for (var i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\r\n r[i] = node.scrollTop;\r\n node = node.parentNode;\r\n }\r\n return r;\r\n}\r\nexport function restoreParentsScrollTop(node, state) {\r\n for (var i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\r\n if (node.scrollTop !== state[i]) {\r\n node.scrollTop = state[i];\r\n }\r\n node = node.parentNode;\r\n }\r\n}\r\nvar FocusTracker = /** @class */ (function (_super) {\r\n __extends(FocusTracker, _super);\r\n function FocusTracker(element) {\r\n var _this = _super.call(this) || this;\r\n _this._onDidFocus = _this._register(new Emitter());\r\n _this.onDidFocus = _this._onDidFocus.event;\r\n _this._onDidBlur = _this._register(new Emitter());\r\n _this.onDidBlur = _this._onDidBlur.event;\r\n var hasFocus = isAncestor(document.activeElement, element);\r\n var loosingFocus = false;\r\n var onFocus = function () {\r\n loosingFocus = false;\r\n if (!hasFocus) {\r\n hasFocus = true;\r\n _this._onDidFocus.fire();\r\n }\r\n };\r\n var onBlur = function () {\r\n if (hasFocus) {\r\n loosingFocus = true;\r\n window.setTimeout(function () {\r\n if (loosingFocus) {\r\n loosingFocus = false;\r\n hasFocus = false;\r\n _this._onDidBlur.fire();\r\n }\r\n }, 0);\r\n }\r\n };\r\n _this._refreshStateHandler = function () {\r\n var currentNodeHasFocus = isAncestor(document.activeElement, element);\r\n if (currentNodeHasFocus !== hasFocus) {\r\n if (hasFocus) {\r\n onBlur();\r\n }\r\n else {\r\n onFocus();\r\n }\r\n }\r\n };\r\n _this._register(domEvent(element, EventType.FOCUS, true)(onFocus));\r\n _this._register(domEvent(element, EventType.BLUR, true)(onBlur));\r\n return _this;\r\n }\r\n return FocusTracker;\r\n}(Disposable));\r\nexport function trackFocus(element) {\r\n return new FocusTracker(element);\r\n}\r\nexport function append(parent) {\r\n var children = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n children[_i - 1] = arguments[_i];\r\n }\r\n children.forEach(function (child) { return parent.appendChild(child); });\r\n return children[children.length - 1];\r\n}\r\nvar SELECTOR_REGEX = /([\\w\\-]+)?(#([\\w\\-]+))?((.([\\w\\-]+))*)/;\r\nexport var Namespace;\r\n(function (Namespace) {\r\n Namespace[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\r\n Namespace[\"SVG\"] = \"http://www.w3.org/2000/svg\";\r\n})(Namespace || (Namespace = {}));\r\nfunction _$(namespace, description, attrs) {\r\n var children = [];\r\n for (var _i = 3; _i < arguments.length; _i++) {\r\n children[_i - 3] = arguments[_i];\r\n }\r\n var match = SELECTOR_REGEX.exec(description);\r\n if (!match) {\r\n throw new Error('Bad use of emmet');\r\n }\r\n attrs = __assign({}, (attrs || {}));\r\n var tagName = match[1] || 'div';\r\n var result;\r\n if (namespace !== Namespace.HTML) {\r\n result = document.createElementNS(namespace, tagName);\r\n }\r\n else {\r\n result = document.createElement(tagName);\r\n }\r\n if (match[3]) {\r\n result.id = match[3];\r\n }\r\n if (match[4]) {\r\n result.className = match[4].replace(/\\./g, ' ').trim();\r\n }\r\n Object.keys(attrs).forEach(function (name) {\r\n var value = attrs[name];\r\n if (typeof value === 'undefined') {\r\n return;\r\n }\r\n if (/^on\\w+$/.test(name)) {\r\n result[name] = value;\r\n }\r\n else if (name === 'selected') {\r\n if (value) {\r\n result.setAttribute(name, 'true');\r\n }\r\n }\r\n else {\r\n result.setAttribute(name, value);\r\n }\r\n });\r\n coalesce(children)\r\n .forEach(function (child) {\r\n if (child instanceof Node) {\r\n result.appendChild(child);\r\n }\r\n else {\r\n result.appendChild(document.createTextNode(child));\r\n }\r\n });\r\n return result;\r\n}\r\nexport function $(description, attrs) {\r\n var children = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n children[_i - 2] = arguments[_i];\r\n }\r\n return _$.apply(void 0, __spreadArrays([Namespace.HTML, description, attrs], children));\r\n}\r\n$.SVG = function (description, attrs) {\r\n var children = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n children[_i - 2] = arguments[_i];\r\n }\r\n return _$.apply(void 0, __spreadArrays([Namespace.SVG, description, attrs], children));\r\n};\r\nexport function show() {\r\n var elements = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n elements[_i] = arguments[_i];\r\n }\r\n for (var _a = 0, elements_1 = elements; _a < elements_1.length; _a++) {\r\n var element = elements_1[_a];\r\n element.style.display = '';\r\n element.removeAttribute('aria-hidden');\r\n }\r\n}\r\nexport function hide() {\r\n var elements = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n elements[_i] = arguments[_i];\r\n }\r\n for (var _a = 0, elements_2 = elements; _a < elements_2.length; _a++) {\r\n var element = elements_2[_a];\r\n element.style.display = 'none';\r\n element.setAttribute('aria-hidden', 'true');\r\n }\r\n}\r\nfunction findParentWithAttribute(node, attribute) {\r\n while (node) {\r\n if (node instanceof HTMLElement && node.hasAttribute(attribute)) {\r\n return node;\r\n }\r\n node = node.parentNode;\r\n }\r\n return null;\r\n}\r\nexport function removeTabIndexAndUpdateFocus(node) {\r\n if (!node || !node.hasAttribute('tabIndex')) {\r\n return;\r\n }\r\n // If we are the currently focused element and tabIndex is removed,\r\n // standard DOM behavior is to move focus to the element. We\r\n // typically never want that, rather put focus to the closest element\r\n // in the hierarchy of the parent DOM nodes.\r\n if (document.activeElement === node) {\r\n var parentFocusable = findParentWithAttribute(node.parentElement, 'tabIndex');\r\n if (parentFocusable) {\r\n parentFocusable.focus();\r\n }\r\n }\r\n node.removeAttribute('tabindex');\r\n}\r\nexport function getElementsByTagName(tag) {\r\n return Array.prototype.slice.call(document.getElementsByTagName(tag), 0);\r\n}\r\n/**\r\n * Find a value usable for a dom node size such that the likelihood that it would be\r\n * displayed with constant screen pixels size is as high as possible.\r\n *\r\n * e.g. We would desire for the cursors to be 2px (CSS px) wide. Under a devicePixelRatio\r\n * of 1.25, the cursor will be 2.5 screen pixels wide. Depending on how the dom node aligns/\"snaps\"\r\n * with the screen pixels, it will sometimes be rendered with 2 screen pixels, and sometimes with 3 screen pixels.\r\n */\r\nexport function computeScreenAwareSize(cssPx) {\r\n var screenPx = window.devicePixelRatio * cssPx;\r\n return Math.max(1, Math.floor(screenPx)) / window.devicePixelRatio;\r\n}\r\n/**\r\n * See https://github.com/Microsoft/monaco-editor/issues/601\r\n * To protect against malicious code in the linked site, particularly phishing attempts,\r\n * the window.opener should be set to null to prevent the linked site from having access\r\n * to change the location of the current page.\r\n * See https://mathiasbynens.github.io/rel-noopener/\r\n */\r\nexport function windowOpenNoOpener(url) {\r\n if (platform.isNative || browser.isEdgeWebView) {\r\n // In VSCode, window.open() always returns null...\r\n // The same is true for a WebView (see https://github.com/Microsoft/monaco-editor/issues/628)\r\n window.open(url);\r\n }\r\n else {\r\n var newTab = window.open();\r\n if (newTab) {\r\n newTab.opener = null;\r\n newTab.location.href = url;\r\n }\r\n }\r\n}\r\nexport function animate(fn) {\r\n var step = function () {\r\n fn();\r\n stepDisposable = scheduleAtNextAnimationFrame(step);\r\n };\r\n var stepDisposable = scheduleAtNextAnimationFrame(step);\r\n return toDisposable(function () { return stepDisposable.dispose(); });\r\n}\r\nRemoteAuthorities.setPreferredWebSchema(/^https:/.test(window.location.href) ? 'https' : 'http');\r\nexport function asDomUri(uri) {\r\n if (!uri) {\r\n return uri;\r\n }\r\n if (Schemas.vscodeRemote === uri.scheme) {\r\n return RemoteAuthorities.rewrite(uri);\r\n }\r\n return uri;\r\n}\r\n/**\r\n * returns url('...')\r\n */\r\nexport function asCSSUrl(uri) {\r\n if (!uri) {\r\n return \"url('')\";\r\n }\r\n return \"url('\" + asDomUri(uri).toString(true).replace(/'/g, '%27') + \"')\";\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { URI } from './uri.js';\r\nexport function parse(text) {\r\n var data = JSON.parse(text);\r\n data = revive(data);\r\n return data;\r\n}\r\nexport function revive(obj, depth) {\r\n if (depth === void 0) { depth = 0; }\r\n if (!obj || depth > 200) {\r\n return obj;\r\n }\r\n if (typeof obj === 'object') {\r\n switch (obj.$mid) {\r\n case 1: return URI.revive(obj);\r\n case 2: return new RegExp(obj.source, obj.flags);\r\n }\r\n // walk object (or array)\r\n for (var key in obj) {\r\n if (Object.hasOwnProperty.call(obj, key)) {\r\n obj[key] = revive(obj[key], depth + 1);\r\n }\r\n }\r\n }\r\n return obj;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport function isFalsyOrWhitespace(str) {\r\n if (!str || typeof str !== 'string') {\r\n return true;\r\n }\r\n return str.trim().length === 0;\r\n}\r\n/**\r\n * @returns the provided number with the given number of preceding zeros.\r\n */\r\nexport function pad(n, l, char) {\r\n if (char === void 0) { char = '0'; }\r\n var str = '' + n;\r\n var r = [str];\r\n for (var i = str.length; i < l; i++) {\r\n r.push(char);\r\n }\r\n return r.reverse().join('');\r\n}\r\nvar _formatRegexp = /{(\\d+)}/g;\r\n/**\r\n * Helper to produce a string with a variable number of arguments. Insert variable segments\r\n * into the string using the {n} notation where N is the index of the argument following the string.\r\n * @param value string to which formatting is applied\r\n * @param args replacements for {n}-entries\r\n */\r\nexport function format(value) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n if (args.length === 0) {\r\n return value;\r\n }\r\n return value.replace(_formatRegexp, function (match, group) {\r\n var idx = parseInt(group, 10);\r\n return isNaN(idx) || idx < 0 || idx >= args.length ?\r\n match :\r\n args[idx];\r\n });\r\n}\r\n/**\r\n * Converts HTML characters inside the string to use entities instead. Makes the string safe from\r\n * being used e.g. in HTMLElement.innerHTML.\r\n */\r\nexport function escape(html) {\r\n return html.replace(/[<>&]/g, function (match) {\r\n switch (match) {\r\n case '<': return '<';\r\n case '>': return '>';\r\n case '&': return '&';\r\n default: return match;\r\n }\r\n });\r\n}\r\n/**\r\n * Escapes regular expression characters in a given string\r\n */\r\nexport function escapeRegExpCharacters(value) {\r\n return value.replace(/[\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\[\\]\\(\\)]/g, '\\\\$&');\r\n}\r\n/**\r\n * Removes all occurrences of needle from the beginning and end of haystack.\r\n * @param haystack string to trim\r\n * @param needle the thing to trim (default is a blank)\r\n */\r\nexport function trim(haystack, needle) {\r\n if (needle === void 0) { needle = ' '; }\r\n var trimmed = ltrim(haystack, needle);\r\n return rtrim(trimmed, needle);\r\n}\r\n/**\r\n * Removes all occurrences of needle from the beginning of haystack.\r\n * @param haystack string to trim\r\n * @param needle the thing to trim\r\n */\r\nexport function ltrim(haystack, needle) {\r\n if (!haystack || !needle) {\r\n return haystack;\r\n }\r\n var needleLen = needle.length;\r\n if (needleLen === 0 || haystack.length === 0) {\r\n return haystack;\r\n }\r\n var offset = 0;\r\n while (haystack.indexOf(needle, offset) === offset) {\r\n offset = offset + needleLen;\r\n }\r\n return haystack.substring(offset);\r\n}\r\n/**\r\n * Removes all occurrences of needle from the end of haystack.\r\n * @param haystack string to trim\r\n * @param needle the thing to trim\r\n */\r\nexport function rtrim(haystack, needle) {\r\n if (!haystack || !needle) {\r\n return haystack;\r\n }\r\n var needleLen = needle.length, haystackLen = haystack.length;\r\n if (needleLen === 0 || haystackLen === 0) {\r\n return haystack;\r\n }\r\n var offset = haystackLen, idx = -1;\r\n while (true) {\r\n idx = haystack.lastIndexOf(needle, offset - 1);\r\n if (idx === -1 || idx + needleLen !== offset) {\r\n break;\r\n }\r\n if (idx === 0) {\r\n return '';\r\n }\r\n offset = idx;\r\n }\r\n return haystack.substring(0, offset);\r\n}\r\nexport function convertSimple2RegExpPattern(pattern) {\r\n return pattern.replace(/[\\-\\\\\\{\\}\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, '\\\\$&').replace(/[\\*]/g, '.*');\r\n}\r\n/**\r\n * Determines if haystack starts with needle.\r\n */\r\nexport function startsWith(haystack, needle) {\r\n if (haystack.length < needle.length) {\r\n return false;\r\n }\r\n if (haystack === needle) {\r\n return true;\r\n }\r\n for (var i = 0; i < needle.length; i++) {\r\n if (haystack[i] !== needle[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Determines if haystack ends with needle.\r\n */\r\nexport function endsWith(haystack, needle) {\r\n var diff = haystack.length - needle.length;\r\n if (diff > 0) {\r\n return haystack.indexOf(needle, diff) === diff;\r\n }\r\n else if (diff === 0) {\r\n return haystack === needle;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\nexport function createRegExp(searchString, isRegex, options) {\r\n if (options === void 0) { options = {}; }\r\n if (!searchString) {\r\n throw new Error('Cannot create regex from empty string');\r\n }\r\n if (!isRegex) {\r\n searchString = escapeRegExpCharacters(searchString);\r\n }\r\n if (options.wholeWord) {\r\n if (!/\\B/.test(searchString.charAt(0))) {\r\n searchString = '\\\\b' + searchString;\r\n }\r\n if (!/\\B/.test(searchString.charAt(searchString.length - 1))) {\r\n searchString = searchString + '\\\\b';\r\n }\r\n }\r\n var modifiers = '';\r\n if (options.global) {\r\n modifiers += 'g';\r\n }\r\n if (!options.matchCase) {\r\n modifiers += 'i';\r\n }\r\n if (options.multiline) {\r\n modifiers += 'm';\r\n }\r\n if (options.unicode) {\r\n modifiers += 'u';\r\n }\r\n return new RegExp(searchString, modifiers);\r\n}\r\nexport function regExpLeadsToEndlessLoop(regexp) {\r\n // Exit early if it's one of these special cases which are meant to match\r\n // against an empty string\r\n if (regexp.source === '^' || regexp.source === '^$' || regexp.source === '$' || regexp.source === '^\\\\s*$') {\r\n return false;\r\n }\r\n // We check against an empty string. If the regular expression doesn't advance\r\n // (e.g. ends in an endless loop) it will match an empty string.\r\n var match = regexp.exec('');\r\n return !!(match && regexp.lastIndex === 0);\r\n}\r\nexport function regExpFlags(regexp) {\r\n return (regexp.global ? 'g' : '')\r\n + (regexp.ignoreCase ? 'i' : '')\r\n + (regexp.multiline ? 'm' : '')\r\n + (regexp.unicode ? 'u' : '');\r\n}\r\n/**\r\n * Returns first index of the string that is not whitespace.\r\n * If string is empty or contains only whitespaces, returns -1\r\n */\r\nexport function firstNonWhitespaceIndex(str) {\r\n for (var i = 0, len = str.length; i < len; i++) {\r\n var chCode = str.charCodeAt(i);\r\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * Returns the leading whitespace of the string.\r\n * If the string contains only whitespaces, returns entire string\r\n */\r\nexport function getLeadingWhitespace(str, start, end) {\r\n if (start === void 0) { start = 0; }\r\n if (end === void 0) { end = str.length; }\r\n for (var i = start; i < end; i++) {\r\n var chCode = str.charCodeAt(i);\r\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\r\n return str.substring(start, i);\r\n }\r\n }\r\n return str.substring(start, end);\r\n}\r\n/**\r\n * Returns last index of the string that is not whitespace.\r\n * If string is empty or contains only whitespaces, returns -1\r\n */\r\nexport function lastNonWhitespaceIndex(str, startIndex) {\r\n if (startIndex === void 0) { startIndex = str.length - 1; }\r\n for (var i = startIndex; i >= 0; i--) {\r\n var chCode = str.charCodeAt(i);\r\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function compare(a, b) {\r\n if (a < b) {\r\n return -1;\r\n }\r\n else if (a > b) {\r\n return 1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\nexport function compareIgnoreCase(a, b) {\r\n var len = Math.min(a.length, b.length);\r\n for (var i = 0; i < len; i++) {\r\n var codeA = a.charCodeAt(i);\r\n var codeB = b.charCodeAt(i);\r\n if (codeA === codeB) {\r\n // equal\r\n continue;\r\n }\r\n if (isUpperAsciiLetter(codeA)) {\r\n codeA += 32;\r\n }\r\n if (isUpperAsciiLetter(codeB)) {\r\n codeB += 32;\r\n }\r\n var diff = codeA - codeB;\r\n if (diff === 0) {\r\n // equal -> ignoreCase\r\n continue;\r\n }\r\n else if (isLowerAsciiLetter(codeA) && isLowerAsciiLetter(codeB)) {\r\n //\r\n return diff;\r\n }\r\n else {\r\n return compare(a.toLowerCase(), b.toLowerCase());\r\n }\r\n }\r\n if (a.length < b.length) {\r\n return -1;\r\n }\r\n else if (a.length > b.length) {\r\n return 1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\nexport function isLowerAsciiLetter(code) {\r\n return code >= 97 /* a */ && code <= 122 /* z */;\r\n}\r\nexport function isUpperAsciiLetter(code) {\r\n return code >= 65 /* A */ && code <= 90 /* Z */;\r\n}\r\nfunction isAsciiLetter(code) {\r\n return isLowerAsciiLetter(code) || isUpperAsciiLetter(code);\r\n}\r\nexport function equalsIgnoreCase(a, b) {\r\n return a.length === b.length && doEqualsIgnoreCase(a, b);\r\n}\r\nfunction doEqualsIgnoreCase(a, b, stopAt) {\r\n if (stopAt === void 0) { stopAt = a.length; }\r\n for (var i = 0; i < stopAt; i++) {\r\n var codeA = a.charCodeAt(i);\r\n var codeB = b.charCodeAt(i);\r\n if (codeA === codeB) {\r\n continue;\r\n }\r\n // a-z A-Z\r\n if (isAsciiLetter(codeA) && isAsciiLetter(codeB)) {\r\n var diff = Math.abs(codeA - codeB);\r\n if (diff !== 0 && diff !== 32) {\r\n return false;\r\n }\r\n }\r\n // Any other charcode\r\n else {\r\n if (String.fromCharCode(codeA).toLowerCase() !== String.fromCharCode(codeB).toLowerCase()) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\nexport function startsWithIgnoreCase(str, candidate) {\r\n var candidateLength = candidate.length;\r\n if (candidate.length > str.length) {\r\n return false;\r\n }\r\n return doEqualsIgnoreCase(str, candidate, candidateLength);\r\n}\r\n/**\r\n * @returns the length of the common prefix of the two strings.\r\n */\r\nexport function commonPrefixLength(a, b) {\r\n var i, len = Math.min(a.length, b.length);\r\n for (i = 0; i < len; i++) {\r\n if (a.charCodeAt(i) !== b.charCodeAt(i)) {\r\n return i;\r\n }\r\n }\r\n return len;\r\n}\r\n/**\r\n * @returns the length of the common suffix of the two strings.\r\n */\r\nexport function commonSuffixLength(a, b) {\r\n var i, len = Math.min(a.length, b.length);\r\n var aLastIndex = a.length - 1;\r\n var bLastIndex = b.length - 1;\r\n for (i = 0; i < len; i++) {\r\n if (a.charCodeAt(aLastIndex - i) !== b.charCodeAt(bLastIndex - i)) {\r\n return i;\r\n }\r\n }\r\n return len;\r\n}\r\n// --- unicode\r\n// http://en.wikipedia.org/wiki/Surrogate_pair\r\n// Returns the code point starting at a specified index in a string\r\n// Code points U+0000 to U+D7FF and U+E000 to U+FFFF are represented on a single character\r\n// Code points U+10000 to U+10FFFF are represented on two consecutive characters\r\n//export function getUnicodePoint(str:string, index:number, len:number):number {\r\n//\tconst chrCode = str.charCodeAt(index);\r\n//\tif (0xD800 <= chrCode && chrCode <= 0xDBFF && index + 1 < len) {\r\n//\t\tconst nextChrCode = str.charCodeAt(index + 1);\r\n//\t\tif (0xDC00 <= nextChrCode && nextChrCode <= 0xDFFF) {\r\n//\t\t\treturn (chrCode - 0xD800) << 10 + (nextChrCode - 0xDC00) + 0x10000;\r\n//\t\t}\r\n//\t}\r\n//\treturn chrCode;\r\n//}\r\nexport function isHighSurrogate(charCode) {\r\n return (0xD800 <= charCode && charCode <= 0xDBFF);\r\n}\r\nexport function isLowSurrogate(charCode) {\r\n return (0xDC00 <= charCode && charCode <= 0xDFFF);\r\n}\r\n/**\r\n * get the code point that begins at offset `offset`\r\n */\r\nexport function getNextCodePoint(str, len, offset) {\r\n var charCode = str.charCodeAt(offset);\r\n if (isHighSurrogate(charCode) && offset + 1 < len) {\r\n var nextCharCode = str.charCodeAt(offset + 1);\r\n if (isLowSurrogate(nextCharCode)) {\r\n return ((charCode - 0xD800) << 10) + (nextCharCode - 0xDC00) + 0x10000;\r\n }\r\n }\r\n return charCode;\r\n}\r\n/**\r\n * get the code point that ends right before offset `offset`\r\n */\r\nfunction getPrevCodePoint(str, offset) {\r\n var charCode = str.charCodeAt(offset - 1);\r\n if (isLowSurrogate(charCode) && offset > 1) {\r\n var prevCharCode = str.charCodeAt(offset - 2);\r\n if (isHighSurrogate(prevCharCode)) {\r\n return ((prevCharCode - 0xD800) << 10) + (charCode - 0xDC00) + 0x10000;\r\n }\r\n }\r\n return charCode;\r\n}\r\nexport function nextCharLength(str, offset) {\r\n var graphemeBreakTree = GraphemeBreakTree.getInstance();\r\n var initialOffset = offset;\r\n var len = str.length;\r\n var initialCodePoint = getNextCodePoint(str, len, offset);\r\n offset += (initialCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n var graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(initialCodePoint);\r\n while (offset < len) {\r\n var nextCodePoint = getNextCodePoint(str, len, offset);\r\n var nextGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(nextCodePoint);\r\n if (breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\r\n break;\r\n }\r\n offset += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n graphemeBreakType = nextGraphemeBreakType;\r\n }\r\n return (offset - initialOffset);\r\n}\r\nexport function prevCharLength(str, offset) {\r\n var graphemeBreakTree = GraphemeBreakTree.getInstance();\r\n var initialOffset = offset;\r\n var initialCodePoint = getPrevCodePoint(str, offset);\r\n offset -= (initialCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n var graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(initialCodePoint);\r\n while (offset > 0) {\r\n var prevCodePoint = getPrevCodePoint(str, offset);\r\n var prevGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(prevCodePoint);\r\n if (breakBetweenGraphemeBreakType(prevGraphemeBreakType, graphemeBreakType)) {\r\n break;\r\n }\r\n offset -= (prevCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n graphemeBreakType = prevGraphemeBreakType;\r\n }\r\n return (initialOffset - offset);\r\n}\r\nfunction _getCharContainingOffset(str, offset) {\r\n var graphemeBreakTree = GraphemeBreakTree.getInstance();\r\n var len = str.length;\r\n var initialOffset = offset;\r\n var initialCodePoint = getNextCodePoint(str, len, offset);\r\n var initialGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(initialCodePoint);\r\n offset += (initialCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n // extend to the right\r\n var graphemeBreakType = initialGraphemeBreakType;\r\n while (offset < len) {\r\n var nextCodePoint = getNextCodePoint(str, len, offset);\r\n var nextGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(nextCodePoint);\r\n if (breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\r\n break;\r\n }\r\n offset += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n graphemeBreakType = nextGraphemeBreakType;\r\n }\r\n var endOffset = offset;\r\n // extend to the left\r\n offset = initialOffset;\r\n graphemeBreakType = initialGraphemeBreakType;\r\n while (offset > 0) {\r\n var prevCodePoint = getPrevCodePoint(str, offset);\r\n var prevGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(prevCodePoint);\r\n if (breakBetweenGraphemeBreakType(prevGraphemeBreakType, graphemeBreakType)) {\r\n break;\r\n }\r\n offset -= (prevCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n graphemeBreakType = prevGraphemeBreakType;\r\n }\r\n return [offset, endOffset];\r\n}\r\nexport function getCharContainingOffset(str, offset) {\r\n if (offset > 0 && isLowSurrogate(str.charCodeAt(offset))) {\r\n return _getCharContainingOffset(str, offset - 1);\r\n }\r\n return _getCharContainingOffset(str, offset);\r\n}\r\n/**\r\n * Generated using https://github.com/alexandrudima/unicode-utils/blob/master/generate-rtl-test.js\r\n */\r\nvar CONTAINS_RTL = /(?:[\\u05BE\\u05C0\\u05C3\\u05C6\\u05D0-\\u05F4\\u0608\\u060B\\u060D\\u061B-\\u064A\\u066D-\\u066F\\u0671-\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1-\\u07EA\\u07F4\\u07F5\\u07FA-\\u0815\\u081A\\u0824\\u0828\\u0830-\\u0858\\u085E-\\u08BD\\u200F\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFD3D\\uFD50-\\uFDFC\\uFE70-\\uFEFC]|\\uD802[\\uDC00-\\uDD1B\\uDD20-\\uDE00\\uDE10-\\uDE33\\uDE40-\\uDEE4\\uDEEB-\\uDF35\\uDF40-\\uDFFF]|\\uD803[\\uDC00-\\uDCFF]|\\uD83A[\\uDC00-\\uDCCF\\uDD00-\\uDD43\\uDD50-\\uDFFF]|\\uD83B[\\uDC00-\\uDEBB])/;\r\n/**\r\n * Returns true if `str` contains any Unicode character that is classified as \"R\" or \"AL\".\r\n */\r\nexport function containsRTL(str) {\r\n return CONTAINS_RTL.test(str);\r\n}\r\n/**\r\n * Generated using https://github.com/alexandrudima/unicode-utils/blob/master/generate-emoji-test.js\r\n */\r\nvar CONTAINS_EMOJI = /(?:[\\u231A\\u231B\\u23F0\\u23F3\\u2600-\\u27BF\\u2B50\\u2B55]|\\uD83C[\\uDDE6-\\uDDFF\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDE4F\\uDE80-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD00-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE82\\uDE90-\\uDE95])/;\r\nexport function containsEmoji(str) {\r\n return CONTAINS_EMOJI.test(str);\r\n}\r\nvar IS_BASIC_ASCII = /^[\\t\\n\\r\\x20-\\x7E]*$/;\r\n/**\r\n * Returns true if `str` contains only basic ASCII characters in the range 32 - 126 (including 32 and 126) or \\n, \\r, \\t\r\n */\r\nexport function isBasicASCII(str) {\r\n return IS_BASIC_ASCII.test(str);\r\n}\r\nexport function containsFullWidthCharacter(str) {\r\n for (var i = 0, len = str.length; i < len; i++) {\r\n if (isFullWidthCharacter(str.charCodeAt(i))) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nexport function isFullWidthCharacter(charCode) {\r\n // Do a cheap trick to better support wrapping of wide characters, treat them as 2 columns\r\n // http://jrgraphix.net/research/unicode_blocks.php\r\n // 2E80 — 2EFF CJK Radicals Supplement\r\n // 2F00 — 2FDF Kangxi Radicals\r\n // 2FF0 — 2FFF Ideographic Description Characters\r\n // 3000 — 303F CJK Symbols and Punctuation\r\n // 3040 — 309F Hiragana\r\n // 30A0 — 30FF Katakana\r\n // 3100 — 312F Bopomofo\r\n // 3130 — 318F Hangul Compatibility Jamo\r\n // 3190 — 319F Kanbun\r\n // 31A0 — 31BF Bopomofo Extended\r\n // 31F0 — 31FF Katakana Phonetic Extensions\r\n // 3200 — 32FF Enclosed CJK Letters and Months\r\n // 3300 — 33FF CJK Compatibility\r\n // 3400 — 4DBF CJK Unified Ideographs Extension A\r\n // 4DC0 — 4DFF Yijing Hexagram Symbols\r\n // 4E00 — 9FFF CJK Unified Ideographs\r\n // A000 — A48F Yi Syllables\r\n // A490 — A4CF Yi Radicals\r\n // AC00 — D7AF Hangul Syllables\r\n // [IGNORE] D800 — DB7F High Surrogates\r\n // [IGNORE] DB80 — DBFF High Private Use Surrogates\r\n // [IGNORE] DC00 — DFFF Low Surrogates\r\n // [IGNORE] E000 — F8FF Private Use Area\r\n // F900 — FAFF CJK Compatibility Ideographs\r\n // [IGNORE] FB00 — FB4F Alphabetic Presentation Forms\r\n // [IGNORE] FB50 — FDFF Arabic Presentation Forms-A\r\n // [IGNORE] FE00 — FE0F Variation Selectors\r\n // [IGNORE] FE20 — FE2F Combining Half Marks\r\n // [IGNORE] FE30 — FE4F CJK Compatibility Forms\r\n // [IGNORE] FE50 — FE6F Small Form Variants\r\n // [IGNORE] FE70 — FEFF Arabic Presentation Forms-B\r\n // FF00 — FFEF Halfwidth and Fullwidth Forms\r\n // [https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms]\r\n // of which FF01 - FF5E fullwidth ASCII of 21 to 7E\r\n // [IGNORE] and FF65 - FFDC halfwidth of Katakana and Hangul\r\n // [IGNORE] FFF0 — FFFF Specials\r\n charCode = +charCode; // @perf\r\n return ((charCode >= 0x2E80 && charCode <= 0xD7AF)\r\n || (charCode >= 0xF900 && charCode <= 0xFAFF)\r\n || (charCode >= 0xFF01 && charCode <= 0xFF5E));\r\n}\r\n/**\r\n * A fast function (therefore imprecise) to check if code points are emojis.\r\n * Generated using https://github.com/alexandrudima/unicode-utils/blob/master/generate-emoji-test.js\r\n */\r\nexport function isEmojiImprecise(x) {\r\n return ((x >= 0x1F1E6 && x <= 0x1F1FF) || (x >= 9728 && x <= 10175) || (x >= 127744 && x <= 128591)\r\n || (x >= 128640 && x <= 128764) || (x >= 128992 && x <= 129003) || (x >= 129280 && x <= 129535)\r\n || (x >= 129648 && x <= 129651) || (x >= 129656 && x <= 129666) || (x >= 129680 && x <= 129685));\r\n}\r\n// -- UTF-8 BOM\r\nexport var UTF8_BOM_CHARACTER = String.fromCharCode(65279 /* UTF8_BOM */);\r\nexport function startsWithUTF8BOM(str) {\r\n return !!(str && str.length > 0 && str.charCodeAt(0) === 65279 /* UTF8_BOM */);\r\n}\r\nexport function safeBtoa(str) {\r\n return btoa(encodeURIComponent(str)); // we use encodeURIComponent because btoa fails for non Latin 1 values\r\n}\r\nexport function repeat(s, count) {\r\n var result = '';\r\n for (var i = 0; i < count; i++) {\r\n result += s;\r\n }\r\n return result;\r\n}\r\nexport function containsUppercaseCharacter(target, ignoreEscapedChars) {\r\n if (ignoreEscapedChars === void 0) { ignoreEscapedChars = false; }\r\n if (!target) {\r\n return false;\r\n }\r\n if (ignoreEscapedChars) {\r\n target = target.replace(/\\\\./g, '');\r\n }\r\n return target.toLowerCase() !== target;\r\n}\r\n/**\r\n * Produces 'a'-'z', followed by 'A'-'Z'... followed by 'a'-'z', etc.\r\n */\r\nexport function singleLetterHash(n) {\r\n var LETTERS_CNT = (90 /* Z */ - 65 /* A */ + 1);\r\n n = n % (2 * LETTERS_CNT);\r\n if (n < LETTERS_CNT) {\r\n return String.fromCharCode(97 /* a */ + n);\r\n }\r\n return String.fromCharCode(65 /* A */ + n - LETTERS_CNT);\r\n}\r\n//#region Unicode Grapheme Break\r\nexport function getGraphemeBreakType(codePoint) {\r\n var graphemeBreakTree = GraphemeBreakTree.getInstance();\r\n return graphemeBreakTree.getGraphemeBreakType(codePoint);\r\n}\r\nexport function breakBetweenGraphemeBreakType(breakTypeA, breakTypeB) {\r\n // http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundary_Rules\r\n // !!! Let's make the common case a bit faster\r\n if (breakTypeA === 0 /* Other */) {\r\n // see https://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakTest-13.0.0d10.html#table\r\n return (breakTypeB !== 5 /* Extend */ && breakTypeB !== 7 /* SpacingMark */);\r\n }\r\n // Do not break between a CR and LF. Otherwise, break before and after controls.\r\n // GB3 CR × LF\r\n // GB4 (Control | CR | LF) ÷\r\n // GB5 ÷ (Control | CR | LF)\r\n if (breakTypeA === 2 /* CR */) {\r\n if (breakTypeB === 3 /* LF */) {\r\n return false; // GB3\r\n }\r\n }\r\n if (breakTypeA === 4 /* Control */ || breakTypeA === 2 /* CR */ || breakTypeA === 3 /* LF */) {\r\n return true; // GB4\r\n }\r\n if (breakTypeB === 4 /* Control */ || breakTypeB === 2 /* CR */ || breakTypeB === 3 /* LF */) {\r\n return true; // GB5\r\n }\r\n // Do not break Hangul syllable sequences.\r\n // GB6 L × (L | V | LV | LVT)\r\n // GB7 (LV | V) × (V | T)\r\n // GB8 (LVT | T) × T\r\n if (breakTypeA === 8 /* L */) {\r\n if (breakTypeB === 8 /* L */ || breakTypeB === 9 /* V */ || breakTypeB === 11 /* LV */ || breakTypeB === 12 /* LVT */) {\r\n return false; // GB6\r\n }\r\n }\r\n if (breakTypeA === 11 /* LV */ || breakTypeA === 9 /* V */) {\r\n if (breakTypeB === 9 /* V */ || breakTypeB === 10 /* T */) {\r\n return false; // GB7\r\n }\r\n }\r\n if (breakTypeA === 12 /* LVT */ || breakTypeA === 10 /* T */) {\r\n if (breakTypeB === 10 /* T */) {\r\n return false; // GB8\r\n }\r\n }\r\n // Do not break before extending characters or ZWJ.\r\n // GB9 × (Extend | ZWJ)\r\n if (breakTypeB === 5 /* Extend */ || breakTypeB === 13 /* ZWJ */) {\r\n return false; // GB9\r\n }\r\n // The GB9a and GB9b rules only apply to extended grapheme clusters:\r\n // Do not break before SpacingMarks, or after Prepend characters.\r\n // GB9a × SpacingMark\r\n // GB9b Prepend ×\r\n if (breakTypeB === 7 /* SpacingMark */) {\r\n return false; // GB9a\r\n }\r\n if (breakTypeA === 1 /* Prepend */) {\r\n return false; // GB9b\r\n }\r\n // Do not break within emoji modifier sequences or emoji zwj sequences.\r\n // GB11 \\p{Extended_Pictographic} Extend* ZWJ × \\p{Extended_Pictographic}\r\n if (breakTypeA === 13 /* ZWJ */ && breakTypeB === 14 /* Extended_Pictographic */) {\r\n // Note: we are not implementing the rule entirely here to avoid introducing states\r\n return false; // GB11\r\n }\r\n // GB12 sot (RI RI)* RI × RI\r\n // GB13 [^RI] (RI RI)* RI × RI\r\n if (breakTypeA === 6 /* Regional_Indicator */ && breakTypeB === 6 /* Regional_Indicator */) {\r\n // Note: we are not implementing the rule entirely here to avoid introducing states\r\n return false; // GB12 & GB13\r\n }\r\n // GB999 Any ÷ Any\r\n return true;\r\n}\r\nvar GraphemeBreakTree = /** @class */ (function () {\r\n function GraphemeBreakTree() {\r\n this._data = getGraphemeBreakRawData();\r\n }\r\n GraphemeBreakTree.getInstance = function () {\r\n if (!GraphemeBreakTree._INSTANCE) {\r\n GraphemeBreakTree._INSTANCE = new GraphemeBreakTree();\r\n }\r\n return GraphemeBreakTree._INSTANCE;\r\n };\r\n GraphemeBreakTree.prototype.getGraphemeBreakType = function (codePoint) {\r\n // !!! Let's make 7bit ASCII a bit faster: 0..31\r\n if (codePoint < 32) {\r\n if (codePoint === 10 /* LineFeed */) {\r\n return 3 /* LF */;\r\n }\r\n if (codePoint === 13 /* CarriageReturn */) {\r\n return 2 /* CR */;\r\n }\r\n return 4 /* Control */;\r\n }\r\n // !!! Let's make 7bit ASCII a bit faster: 32..126\r\n if (codePoint < 127) {\r\n return 0 /* Other */;\r\n }\r\n var data = this._data;\r\n var nodeCount = data.length / 3;\r\n var nodeIndex = 1;\r\n while (nodeIndex <= nodeCount) {\r\n if (codePoint < data[3 * nodeIndex]) {\r\n // go left\r\n nodeIndex = 2 * nodeIndex;\r\n }\r\n else if (codePoint > data[3 * nodeIndex + 1]) {\r\n // go right\r\n nodeIndex = 2 * nodeIndex + 1;\r\n }\r\n else {\r\n // hit\r\n return data[3 * nodeIndex + 2];\r\n }\r\n }\r\n return 0 /* Other */;\r\n };\r\n GraphemeBreakTree._INSTANCE = null;\r\n return GraphemeBreakTree;\r\n}());\r\nfunction getGraphemeBreakRawData() {\r\n // generated using https://github.com/alexandrudima/unicode-utils/blob/master/generate-grapheme-break.js\r\n return JSON.parse('[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]');\r\n}\r\n//#endregion\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\n// NOTE: VSCode's copy of nodejs path library to be usable in common (non-node) namespace\r\n// Copied from: https://github.com/nodejs/node/tree/43dd49c9782848c25e5b03448c8a0f923f13c158\r\n/**\r\n * Copyright Joyent, Inc. and other Node contributors.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a\r\n * copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to permit\r\n * persons to whom the Software is furnished to do so, subject to the\r\n * following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included\r\n * in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n */\r\nimport * as process from './process.js';\r\nvar CHAR_UPPERCASE_A = 65; /* A */\r\nvar CHAR_LOWERCASE_A = 97; /* a */\r\nvar CHAR_UPPERCASE_Z = 90; /* Z */\r\nvar CHAR_LOWERCASE_Z = 122; /* z */\r\nvar CHAR_DOT = 46; /* . */\r\nvar CHAR_FORWARD_SLASH = 47; /* / */\r\nvar CHAR_BACKWARD_SLASH = 92; /* \\ */\r\nvar CHAR_COLON = 58; /* : */\r\nvar CHAR_QUESTION_MARK = 63; /* ? */\r\nvar ErrorInvalidArgType = /** @class */ (function (_super) {\r\n __extends(ErrorInvalidArgType, _super);\r\n function ErrorInvalidArgType(name, expected, actual) {\r\n var _this = this;\r\n // determiner: 'must be' or 'must not be'\r\n var determiner;\r\n if (typeof expected === 'string' && expected.indexOf('not ') === 0) {\r\n determiner = 'must not be';\r\n expected = expected.replace(/^not /, '');\r\n }\r\n else {\r\n determiner = 'must be';\r\n }\r\n var type = name.indexOf('.') !== -1 ? 'property' : 'argument';\r\n var msg = \"The \\\"\" + name + \"\\\" \" + type + \" \" + determiner + \" of type \" + expected;\r\n msg += \". Received type \" + typeof actual;\r\n _this = _super.call(this, msg) || this;\r\n _this.code = 'ERR_INVALID_ARG_TYPE';\r\n return _this;\r\n }\r\n return ErrorInvalidArgType;\r\n}(Error));\r\nfunction validateString(value, name) {\r\n if (typeof value !== 'string') {\r\n throw new ErrorInvalidArgType(name, 'string', value);\r\n }\r\n}\r\nfunction isPathSeparator(code) {\r\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\r\n}\r\nfunction isPosixPathSeparator(code) {\r\n return code === CHAR_FORWARD_SLASH;\r\n}\r\nfunction isWindowsDeviceRoot(code) {\r\n return code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z ||\r\n code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z;\r\n}\r\n// Resolves . and .. elements in a path with directory names\r\nfunction normalizeString(path, allowAboveRoot, separator, isPathSeparator) {\r\n var res = '';\r\n var lastSegmentLength = 0;\r\n var lastSlash = -1;\r\n var dots = 0;\r\n var code;\r\n for (var i = 0; i <= path.length; ++i) {\r\n if (i < path.length) {\r\n code = path.charCodeAt(i);\r\n }\r\n else if (isPathSeparator(code)) {\r\n break;\r\n }\r\n else {\r\n code = CHAR_FORWARD_SLASH;\r\n }\r\n if (isPathSeparator(code)) {\r\n if (lastSlash === i - 1 || dots === 1) {\r\n // NOOP\r\n }\r\n else if (lastSlash !== i - 1 && dots === 2) {\r\n if (res.length < 2 || lastSegmentLength !== 2 ||\r\n res.charCodeAt(res.length - 1) !== CHAR_DOT ||\r\n res.charCodeAt(res.length - 2) !== CHAR_DOT) {\r\n if (res.length > 2) {\r\n var lastSlashIndex = res.lastIndexOf(separator);\r\n if (lastSlashIndex === -1) {\r\n res = '';\r\n lastSegmentLength = 0;\r\n }\r\n else {\r\n res = res.slice(0, lastSlashIndex);\r\n lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);\r\n }\r\n lastSlash = i;\r\n dots = 0;\r\n continue;\r\n }\r\n else if (res.length === 2 || res.length === 1) {\r\n res = '';\r\n lastSegmentLength = 0;\r\n lastSlash = i;\r\n dots = 0;\r\n continue;\r\n }\r\n }\r\n if (allowAboveRoot) {\r\n if (res.length > 0) {\r\n res += separator + \"..\";\r\n }\r\n else {\r\n res = '..';\r\n }\r\n lastSegmentLength = 2;\r\n }\r\n }\r\n else {\r\n if (res.length > 0) {\r\n res += separator + path.slice(lastSlash + 1, i);\r\n }\r\n else {\r\n res = path.slice(lastSlash + 1, i);\r\n }\r\n lastSegmentLength = i - lastSlash - 1;\r\n }\r\n lastSlash = i;\r\n dots = 0;\r\n }\r\n else if (code === CHAR_DOT && dots !== -1) {\r\n ++dots;\r\n }\r\n else {\r\n dots = -1;\r\n }\r\n }\r\n return res;\r\n}\r\nfunction _format(sep, pathObject) {\r\n var dir = pathObject.dir || pathObject.root;\r\n var base = pathObject.base ||\r\n ((pathObject.name || '') + (pathObject.ext || ''));\r\n if (!dir) {\r\n return base;\r\n }\r\n if (dir === pathObject.root) {\r\n return dir + base;\r\n }\r\n return dir + sep + base;\r\n}\r\nexport var win32 = {\r\n // path.resolve([from ...], to)\r\n resolve: function () {\r\n var pathSegments = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n pathSegments[_i] = arguments[_i];\r\n }\r\n var resolvedDevice = '';\r\n var resolvedTail = '';\r\n var resolvedAbsolute = false;\r\n for (var i = pathSegments.length - 1; i >= -1; i--) {\r\n var path = void 0;\r\n if (i >= 0) {\r\n path = pathSegments[i];\r\n }\r\n else if (!resolvedDevice) {\r\n path = process.cwd();\r\n }\r\n else {\r\n // Windows has the concept of drive-specific current working\r\n // directories. If we've resolved a drive letter but not yet an\r\n // absolute path, get cwd for that drive, or the process cwd if\r\n // the drive cwd is not available. We're sure the device is not\r\n // a UNC path at this points, because UNC paths are always absolute.\r\n path = process.env['=' + resolvedDevice] || process.cwd();\r\n // Verify that a cwd was found and that it actually points\r\n // to our drive. If not, default to the drive's root.\r\n if (path === undefined ||\r\n path.slice(0, 3).toLowerCase() !==\r\n resolvedDevice.toLowerCase() + '\\\\') {\r\n path = resolvedDevice + '\\\\';\r\n }\r\n }\r\n validateString(path, 'path');\r\n // Skip empty entries\r\n if (path.length === 0) {\r\n continue;\r\n }\r\n var len = path.length;\r\n var rootEnd = 0;\r\n var device = '';\r\n var isAbsolute = false;\r\n var code = path.charCodeAt(0);\r\n // Try to match a root\r\n if (len > 1) {\r\n if (isPathSeparator(code)) {\r\n // Possible UNC root\r\n // If we started with a separator, we know we at least have an\r\n // absolute path of some kind (UNC or otherwise)\r\n isAbsolute = true;\r\n if (isPathSeparator(path.charCodeAt(1))) {\r\n // Matched double path separator at beginning\r\n var j = 2;\r\n var last = j;\r\n // Match 1 or more non-path separators\r\n for (; j < len; ++j) {\r\n if (isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j < len && j !== last) {\r\n var firstPart = path.slice(last, j);\r\n // Matched!\r\n last = j;\r\n // Match 1 or more path separators\r\n for (; j < len; ++j) {\r\n if (!isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j < len && j !== last) {\r\n // Matched!\r\n last = j;\r\n // Match 1 or more non-path separators\r\n for (; j < len; ++j) {\r\n if (isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j === len) {\r\n // We matched a UNC root only\r\n device = '\\\\\\\\' + firstPart + '\\\\' + path.slice(last);\r\n rootEnd = j;\r\n }\r\n else if (j !== last) {\r\n // We matched a UNC root with leftovers\r\n device = '\\\\\\\\' + firstPart + '\\\\' + path.slice(last, j);\r\n rootEnd = j;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n rootEnd = 1;\r\n }\r\n }\r\n else if (isWindowsDeviceRoot(code)) {\r\n // Possible device root\r\n if (path.charCodeAt(1) === CHAR_COLON) {\r\n device = path.slice(0, 2);\r\n rootEnd = 2;\r\n if (len > 2) {\r\n if (isPathSeparator(path.charCodeAt(2))) {\r\n // Treat separator following drive name as an absolute path\r\n // indicator\r\n isAbsolute = true;\r\n rootEnd = 3;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (isPathSeparator(code)) {\r\n // `path` contains just a path separator\r\n rootEnd = 1;\r\n isAbsolute = true;\r\n }\r\n if (device.length > 0 &&\r\n resolvedDevice.length > 0 &&\r\n device.toLowerCase() !== resolvedDevice.toLowerCase()) {\r\n // This path points to another device so it is not applicable\r\n continue;\r\n }\r\n if (resolvedDevice.length === 0 && device.length > 0) {\r\n resolvedDevice = device;\r\n }\r\n if (!resolvedAbsolute) {\r\n resolvedTail = path.slice(rootEnd) + '\\\\' + resolvedTail;\r\n resolvedAbsolute = isAbsolute;\r\n }\r\n if (resolvedDevice.length > 0 && resolvedAbsolute) {\r\n break;\r\n }\r\n }\r\n // At this point the path should be resolved to a full absolute path,\r\n // but handle relative paths to be safe (might happen when process.cwd()\r\n // fails)\r\n // Normalize the tail path\r\n resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, '\\\\', isPathSeparator);\r\n return (resolvedDevice + (resolvedAbsolute ? '\\\\' : '') + resolvedTail) ||\r\n '.';\r\n },\r\n normalize: function (path) {\r\n validateString(path, 'path');\r\n var len = path.length;\r\n if (len === 0) {\r\n return '.';\r\n }\r\n var rootEnd = 0;\r\n var device;\r\n var isAbsolute = false;\r\n var code = path.charCodeAt(0);\r\n // Try to match a root\r\n if (len > 1) {\r\n if (isPathSeparator(code)) {\r\n // Possible UNC root\r\n // If we started with a separator, we know we at least have an absolute\r\n // path of some kind (UNC or otherwise)\r\n isAbsolute = true;\r\n if (isPathSeparator(path.charCodeAt(1))) {\r\n // Matched double path separator at beginning\r\n var j = 2;\r\n var last = j;\r\n // Match 1 or more non-path separators\r\n for (; j < len; ++j) {\r\n if (isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j < len && j !== last) {\r\n var firstPart = path.slice(last, j);\r\n // Matched!\r\n last = j;\r\n // Match 1 or more path separators\r\n for (; j < len; ++j) {\r\n if (!isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j < len && j !== last) {\r\n // Matched!\r\n last = j;\r\n // Match 1 or more non-path separators\r\n for (; j < len; ++j) {\r\n if (isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j === len) {\r\n // We matched a UNC root only\r\n // Return the normalized version of the UNC root since there\r\n // is nothing left to process\r\n return '\\\\\\\\' + firstPart + '\\\\' + path.slice(last) + '\\\\';\r\n }\r\n else if (j !== last) {\r\n // We matched a UNC root with leftovers\r\n device = '\\\\\\\\' + firstPart + '\\\\' + path.slice(last, j);\r\n rootEnd = j;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n rootEnd = 1;\r\n }\r\n }\r\n else if (isWindowsDeviceRoot(code)) {\r\n // Possible device root\r\n if (path.charCodeAt(1) === CHAR_COLON) {\r\n device = path.slice(0, 2);\r\n rootEnd = 2;\r\n if (len > 2) {\r\n if (isPathSeparator(path.charCodeAt(2))) {\r\n // Treat separator following drive name as an absolute path\r\n // indicator\r\n isAbsolute = true;\r\n rootEnd = 3;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (isPathSeparator(code)) {\r\n // `path` contains just a path separator, exit early to avoid unnecessary\r\n // work\r\n return '\\\\';\r\n }\r\n var tail;\r\n if (rootEnd < len) {\r\n tail = normalizeString(path.slice(rootEnd), !isAbsolute, '\\\\', isPathSeparator);\r\n }\r\n else {\r\n tail = '';\r\n }\r\n if (tail.length === 0 && !isAbsolute) {\r\n tail = '.';\r\n }\r\n if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {\r\n tail += '\\\\';\r\n }\r\n if (device === undefined) {\r\n if (isAbsolute) {\r\n if (tail.length > 0) {\r\n return '\\\\' + tail;\r\n }\r\n else {\r\n return '\\\\';\r\n }\r\n }\r\n else if (tail.length > 0) {\r\n return tail;\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n else if (isAbsolute) {\r\n if (tail.length > 0) {\r\n return device + '\\\\' + tail;\r\n }\r\n else {\r\n return device + '\\\\';\r\n }\r\n }\r\n else if (tail.length > 0) {\r\n return device + tail;\r\n }\r\n else {\r\n return device;\r\n }\r\n },\r\n isAbsolute: function (path) {\r\n validateString(path, 'path');\r\n var len = path.length;\r\n if (len === 0) {\r\n return false;\r\n }\r\n var code = path.charCodeAt(0);\r\n if (isPathSeparator(code)) {\r\n return true;\r\n }\r\n else if (isWindowsDeviceRoot(code)) {\r\n // Possible device root\r\n if (len > 2 && path.charCodeAt(1) === CHAR_COLON) {\r\n if (isPathSeparator(path.charCodeAt(2))) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n join: function () {\r\n var paths = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n paths[_i] = arguments[_i];\r\n }\r\n if (paths.length === 0) {\r\n return '.';\r\n }\r\n var joined;\r\n var firstPart;\r\n for (var i = 0; i < paths.length; ++i) {\r\n var arg = paths[i];\r\n validateString(arg, 'path');\r\n if (arg.length > 0) {\r\n if (joined === undefined) {\r\n joined = firstPart = arg;\r\n }\r\n else {\r\n joined += '\\\\' + arg;\r\n }\r\n }\r\n }\r\n if (joined === undefined) {\r\n return '.';\r\n }\r\n // Make sure that the joined path doesn't start with two slashes, because\r\n // normalize() will mistake it for an UNC path then.\r\n //\r\n // This step is skipped when it is very clear that the user actually\r\n // intended to point at an UNC path. This is assumed when the first\r\n // non-empty string arguments starts with exactly two slashes followed by\r\n // at least one more non-slash character.\r\n //\r\n // Note that for normalize() to treat a path as an UNC path it needs to\r\n // have at least 2 components, so we don't filter for that here.\r\n // This means that the user can use join to construct UNC paths from\r\n // a server name and a share name; for example:\r\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\\\')\r\n var needsReplace = true;\r\n var slashCount = 0;\r\n if (typeof firstPart === 'string' && isPathSeparator(firstPart.charCodeAt(0))) {\r\n ++slashCount;\r\n var firstLen = firstPart.length;\r\n if (firstLen > 1) {\r\n if (isPathSeparator(firstPart.charCodeAt(1))) {\r\n ++slashCount;\r\n if (firstLen > 2) {\r\n if (isPathSeparator(firstPart.charCodeAt(2))) {\r\n ++slashCount;\r\n }\r\n else {\r\n // We matched a UNC path in the first part\r\n needsReplace = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (needsReplace) {\r\n // Find any more consecutive slashes we need to replace\r\n for (; slashCount < joined.length; ++slashCount) {\r\n if (!isPathSeparator(joined.charCodeAt(slashCount))) {\r\n break;\r\n }\r\n }\r\n // Replace the slashes if needed\r\n if (slashCount >= 2) {\r\n joined = '\\\\' + joined.slice(slashCount);\r\n }\r\n }\r\n return win32.normalize(joined);\r\n },\r\n // It will solve the relative path from `from` to `to`, for instance:\r\n // from = 'C:\\\\orandea\\\\test\\\\aaa'\r\n // to = 'C:\\\\orandea\\\\impl\\\\bbb'\r\n // The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\r\n relative: function (from, to) {\r\n validateString(from, 'from');\r\n validateString(to, 'to');\r\n if (from === to) {\r\n return '';\r\n }\r\n var fromOrig = win32.resolve(from);\r\n var toOrig = win32.resolve(to);\r\n if (fromOrig === toOrig) {\r\n return '';\r\n }\r\n from = fromOrig.toLowerCase();\r\n to = toOrig.toLowerCase();\r\n if (from === to) {\r\n return '';\r\n }\r\n // Trim any leading backslashes\r\n var fromStart = 0;\r\n for (; fromStart < from.length; ++fromStart) {\r\n if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) {\r\n break;\r\n }\r\n }\r\n // Trim trailing backslashes (applicable to UNC paths only)\r\n var fromEnd = from.length;\r\n for (; fromEnd - 1 > fromStart; --fromEnd) {\r\n if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) {\r\n break;\r\n }\r\n }\r\n var fromLen = (fromEnd - fromStart);\r\n // Trim any leading backslashes\r\n var toStart = 0;\r\n for (; toStart < to.length; ++toStart) {\r\n if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) {\r\n break;\r\n }\r\n }\r\n // Trim trailing backslashes (applicable to UNC paths only)\r\n var toEnd = to.length;\r\n for (; toEnd - 1 > toStart; --toEnd) {\r\n if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) {\r\n break;\r\n }\r\n }\r\n var toLen = (toEnd - toStart);\r\n // Compare paths to find the longest common path from root\r\n var length = (fromLen < toLen ? fromLen : toLen);\r\n var lastCommonSep = -1;\r\n var i = 0;\r\n for (; i <= length; ++i) {\r\n if (i === length) {\r\n if (toLen > length) {\r\n if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {\r\n // We get here if `from` is the exact base path for `to`.\r\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\foo\\\\bar\\\\baz'\r\n return toOrig.slice(toStart + i + 1);\r\n }\r\n else if (i === 2) {\r\n // We get here if `from` is the device root.\r\n // For example: from='C:\\\\'; to='C:\\\\foo'\r\n return toOrig.slice(toStart + i);\r\n }\r\n }\r\n if (fromLen > length) {\r\n if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {\r\n // We get here if `to` is the exact base path for `from`.\r\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\foo'\r\n lastCommonSep = i;\r\n }\r\n else if (i === 2) {\r\n // We get here if `to` is the device root.\r\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\'\r\n lastCommonSep = 3;\r\n }\r\n }\r\n break;\r\n }\r\n var fromCode = from.charCodeAt(fromStart + i);\r\n var toCode = to.charCodeAt(toStart + i);\r\n if (fromCode !== toCode) {\r\n break;\r\n }\r\n else if (fromCode === CHAR_BACKWARD_SLASH) {\r\n lastCommonSep = i;\r\n }\r\n }\r\n // We found a mismatch before the first common path separator was seen, so\r\n // return the original `to`.\r\n if (i !== length && lastCommonSep === -1) {\r\n return toOrig;\r\n }\r\n var out = '';\r\n if (lastCommonSep === -1) {\r\n lastCommonSep = 0;\r\n }\r\n // Generate the relative path based on the path difference between `to` and\r\n // `from`\r\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\r\n if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {\r\n if (out.length === 0) {\r\n out += '..';\r\n }\r\n else {\r\n out += '\\\\..';\r\n }\r\n }\r\n }\r\n // Lastly, append the rest of the destination (`to`) path that comes after\r\n // the common path parts\r\n if (out.length > 0) {\r\n return out + toOrig.slice(toStart + lastCommonSep, toEnd);\r\n }\r\n else {\r\n toStart += lastCommonSep;\r\n if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) {\r\n ++toStart;\r\n }\r\n return toOrig.slice(toStart, toEnd);\r\n }\r\n },\r\n toNamespacedPath: function (path) {\r\n // Note: this will *probably* throw somewhere.\r\n if (typeof path !== 'string') {\r\n return path;\r\n }\r\n if (path.length === 0) {\r\n return '';\r\n }\r\n var resolvedPath = win32.resolve(path);\r\n if (resolvedPath.length >= 3) {\r\n if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {\r\n // Possible UNC root\r\n if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {\r\n var code = resolvedPath.charCodeAt(2);\r\n if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) {\r\n // Matched non-long UNC root, convert the path to a long UNC path\r\n return '\\\\\\\\?\\\\UNC\\\\' + resolvedPath.slice(2);\r\n }\r\n }\r\n }\r\n else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) {\r\n // Possible device root\r\n if (resolvedPath.charCodeAt(1) === CHAR_COLON &&\r\n resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH) {\r\n // Matched device root, convert the path to a long UNC path\r\n return '\\\\\\\\?\\\\' + resolvedPath;\r\n }\r\n }\r\n }\r\n return path;\r\n },\r\n dirname: function (path) {\r\n validateString(path, 'path');\r\n var len = path.length;\r\n if (len === 0) {\r\n return '.';\r\n }\r\n var rootEnd = -1;\r\n var end = -1;\r\n var matchedSlash = true;\r\n var offset = 0;\r\n var code = path.charCodeAt(0);\r\n // Try to match a root\r\n if (len > 1) {\r\n if (isPathSeparator(code)) {\r\n // Possible UNC root\r\n rootEnd = offset = 1;\r\n if (isPathSeparator(path.charCodeAt(1))) {\r\n // Matched double path separator at beginning\r\n var j = 2;\r\n var last = j;\r\n // Match 1 or more non-path separators\r\n for (; j < len; ++j) {\r\n if (isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j < len && j !== last) {\r\n // Matched!\r\n last = j;\r\n // Match 1 or more path separators\r\n for (; j < len; ++j) {\r\n if (!isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j < len && j !== last) {\r\n // Matched!\r\n last = j;\r\n // Match 1 or more non-path separators\r\n for (; j < len; ++j) {\r\n if (isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j === len) {\r\n // We matched a UNC root only\r\n return path;\r\n }\r\n if (j !== last) {\r\n // We matched a UNC root with leftovers\r\n // Offset by 1 to include the separator after the UNC root to\r\n // treat it as a \"normal root\" on top of a (UNC) root\r\n rootEnd = offset = j + 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (isWindowsDeviceRoot(code)) {\r\n // Possible device root\r\n if (path.charCodeAt(1) === CHAR_COLON) {\r\n rootEnd = offset = 2;\r\n if (len > 2) {\r\n if (isPathSeparator(path.charCodeAt(2))) {\r\n rootEnd = offset = 3;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (isPathSeparator(code)) {\r\n // `path` contains just a path separator, exit early to avoid\r\n // unnecessary work\r\n return path;\r\n }\r\n for (var i = len - 1; i >= offset; --i) {\r\n if (isPathSeparator(path.charCodeAt(i))) {\r\n if (!matchedSlash) {\r\n end = i;\r\n break;\r\n }\r\n }\r\n else {\r\n // We saw the first non-path separator\r\n matchedSlash = false;\r\n }\r\n }\r\n if (end === -1) {\r\n if (rootEnd === -1) {\r\n return '.';\r\n }\r\n else {\r\n end = rootEnd;\r\n }\r\n }\r\n return path.slice(0, end);\r\n },\r\n basename: function (path, ext) {\r\n if (ext !== undefined) {\r\n validateString(ext, 'ext');\r\n }\r\n validateString(path, 'path');\r\n var start = 0;\r\n var end = -1;\r\n var matchedSlash = true;\r\n var i;\r\n // Check for a drive letter prefix so as not to mistake the following\r\n // path separator as an extra separator at the end of the path that can be\r\n // disregarded\r\n if (path.length >= 2) {\r\n var drive = path.charCodeAt(0);\r\n if (isWindowsDeviceRoot(drive)) {\r\n if (path.charCodeAt(1) === CHAR_COLON) {\r\n start = 2;\r\n }\r\n }\r\n }\r\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\r\n if (ext.length === path.length && ext === path) {\r\n return '';\r\n }\r\n var extIdx = ext.length - 1;\r\n var firstNonSlashEnd = -1;\r\n for (i = path.length - 1; i >= start; --i) {\r\n var code = path.charCodeAt(i);\r\n if (isPathSeparator(code)) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n start = i + 1;\r\n break;\r\n }\r\n }\r\n else {\r\n if (firstNonSlashEnd === -1) {\r\n // We saw the first non-path separator, remember this index in case\r\n // we need it if the extension ends up not matching\r\n matchedSlash = false;\r\n firstNonSlashEnd = i + 1;\r\n }\r\n if (extIdx >= 0) {\r\n // Try to match the explicit extension\r\n if (code === ext.charCodeAt(extIdx)) {\r\n if (--extIdx === -1) {\r\n // We matched the extension, so mark this as the end of our path\r\n // component\r\n end = i;\r\n }\r\n }\r\n else {\r\n // Extension does not match, so our result is the entire path\r\n // component\r\n extIdx = -1;\r\n end = firstNonSlashEnd;\r\n }\r\n }\r\n }\r\n }\r\n if (start === end) {\r\n end = firstNonSlashEnd;\r\n }\r\n else if (end === -1) {\r\n end = path.length;\r\n }\r\n return path.slice(start, end);\r\n }\r\n else {\r\n for (i = path.length - 1; i >= start; --i) {\r\n if (isPathSeparator(path.charCodeAt(i))) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n start = i + 1;\r\n break;\r\n }\r\n }\r\n else if (end === -1) {\r\n // We saw the first non-path separator, mark this as the end of our\r\n // path component\r\n matchedSlash = false;\r\n end = i + 1;\r\n }\r\n }\r\n if (end === -1) {\r\n return '';\r\n }\r\n return path.slice(start, end);\r\n }\r\n },\r\n extname: function (path) {\r\n validateString(path, 'path');\r\n var start = 0;\r\n var startDot = -1;\r\n var startPart = 0;\r\n var end = -1;\r\n var matchedSlash = true;\r\n // Track the state of characters (if any) we see before our first dot and\r\n // after any path separator we find\r\n var preDotState = 0;\r\n // Check for a drive letter prefix so as not to mistake the following\r\n // path separator as an extra separator at the end of the path that can be\r\n // disregarded\r\n if (path.length >= 2 &&\r\n path.charCodeAt(1) === CHAR_COLON &&\r\n isWindowsDeviceRoot(path.charCodeAt(0))) {\r\n start = startPart = 2;\r\n }\r\n for (var i = path.length - 1; i >= start; --i) {\r\n var code = path.charCodeAt(i);\r\n if (isPathSeparator(code)) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n startPart = i + 1;\r\n break;\r\n }\r\n continue;\r\n }\r\n if (end === -1) {\r\n // We saw the first non-path separator, mark this as the end of our\r\n // extension\r\n matchedSlash = false;\r\n end = i + 1;\r\n }\r\n if (code === CHAR_DOT) {\r\n // If this is our first dot, mark it as the start of our extension\r\n if (startDot === -1) {\r\n startDot = i;\r\n }\r\n else if (preDotState !== 1) {\r\n preDotState = 1;\r\n }\r\n }\r\n else if (startDot !== -1) {\r\n // We saw a non-dot and non-path separator before our dot, so we should\r\n // have a good chance at having a non-empty extension\r\n preDotState = -1;\r\n }\r\n }\r\n if (startDot === -1 ||\r\n end === -1 ||\r\n // We saw a non-dot character immediately before the dot\r\n preDotState === 0 ||\r\n // The (right-most) trimmed path component is exactly '..'\r\n (preDotState === 1 &&\r\n startDot === end - 1 &&\r\n startDot === startPart + 1)) {\r\n return '';\r\n }\r\n return path.slice(startDot, end);\r\n },\r\n format: function (pathObject) {\r\n if (pathObject === null || typeof pathObject !== 'object') {\r\n throw new ErrorInvalidArgType('pathObject', 'Object', pathObject);\r\n }\r\n return _format('\\\\', pathObject);\r\n },\r\n parse: function (path) {\r\n validateString(path, 'path');\r\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\r\n if (path.length === 0) {\r\n return ret;\r\n }\r\n var len = path.length;\r\n var rootEnd = 0;\r\n var code = path.charCodeAt(0);\r\n // Try to match a root\r\n if (len > 1) {\r\n if (isPathSeparator(code)) {\r\n // Possible UNC root\r\n rootEnd = 1;\r\n if (isPathSeparator(path.charCodeAt(1))) {\r\n // Matched double path separator at beginning\r\n var j = 2;\r\n var last = j;\r\n // Match 1 or more non-path separators\r\n for (; j < len; ++j) {\r\n if (isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j < len && j !== last) {\r\n // Matched!\r\n last = j;\r\n // Match 1 or more path separators\r\n for (; j < len; ++j) {\r\n if (!isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j < len && j !== last) {\r\n // Matched!\r\n last = j;\r\n // Match 1 or more non-path separators\r\n for (; j < len; ++j) {\r\n if (isPathSeparator(path.charCodeAt(j))) {\r\n break;\r\n }\r\n }\r\n if (j === len) {\r\n // We matched a UNC root only\r\n rootEnd = j;\r\n }\r\n else if (j !== last) {\r\n // We matched a UNC root with leftovers\r\n rootEnd = j + 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (isWindowsDeviceRoot(code)) {\r\n // Possible device root\r\n if (path.charCodeAt(1) === CHAR_COLON) {\r\n rootEnd = 2;\r\n if (len > 2) {\r\n if (isPathSeparator(path.charCodeAt(2))) {\r\n if (len === 3) {\r\n // `path` contains just a drive root, exit early to avoid\r\n // unnecessary work\r\n ret.root = ret.dir = path;\r\n return ret;\r\n }\r\n rootEnd = 3;\r\n }\r\n }\r\n else {\r\n // `path` contains just a drive root, exit early to avoid\r\n // unnecessary work\r\n ret.root = ret.dir = path;\r\n return ret;\r\n }\r\n }\r\n }\r\n }\r\n else if (isPathSeparator(code)) {\r\n // `path` contains just a path separator, exit early to avoid\r\n // unnecessary work\r\n ret.root = ret.dir = path;\r\n return ret;\r\n }\r\n if (rootEnd > 0) {\r\n ret.root = path.slice(0, rootEnd);\r\n }\r\n var startDot = -1;\r\n var startPart = rootEnd;\r\n var end = -1;\r\n var matchedSlash = true;\r\n var i = path.length - 1;\r\n // Track the state of characters (if any) we see before our first dot and\r\n // after any path separator we find\r\n var preDotState = 0;\r\n // Get non-dir info\r\n for (; i >= rootEnd; --i) {\r\n code = path.charCodeAt(i);\r\n if (isPathSeparator(code)) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n startPart = i + 1;\r\n break;\r\n }\r\n continue;\r\n }\r\n if (end === -1) {\r\n // We saw the first non-path separator, mark this as the end of our\r\n // extension\r\n matchedSlash = false;\r\n end = i + 1;\r\n }\r\n if (code === CHAR_DOT) {\r\n // If this is our first dot, mark it as the start of our extension\r\n if (startDot === -1) {\r\n startDot = i;\r\n }\r\n else if (preDotState !== 1) {\r\n preDotState = 1;\r\n }\r\n }\r\n else if (startDot !== -1) {\r\n // We saw a non-dot and non-path separator before our dot, so we should\r\n // have a good chance at having a non-empty extension\r\n preDotState = -1;\r\n }\r\n }\r\n if (startDot === -1 ||\r\n end === -1 ||\r\n // We saw a non-dot character immediately before the dot\r\n preDotState === 0 ||\r\n // The (right-most) trimmed path component is exactly '..'\r\n (preDotState === 1 &&\r\n startDot === end - 1 &&\r\n startDot === startPart + 1)) {\r\n if (end !== -1) {\r\n ret.base = ret.name = path.slice(startPart, end);\r\n }\r\n }\r\n else {\r\n ret.name = path.slice(startPart, startDot);\r\n ret.base = path.slice(startPart, end);\r\n ret.ext = path.slice(startDot, end);\r\n }\r\n // If the directory is the root, use the entire root as the `dir` including\r\n // the trailing slash if any (`C:\\abc` -> `C:\\`). Otherwise, strip out the\r\n // trailing slash (`C:\\abc\\def` -> `C:\\abc`).\r\n if (startPart > 0 && startPart !== rootEnd) {\r\n ret.dir = path.slice(0, startPart - 1);\r\n }\r\n else {\r\n ret.dir = ret.root;\r\n }\r\n return ret;\r\n },\r\n sep: '\\\\',\r\n delimiter: ';',\r\n win32: null,\r\n posix: null\r\n};\r\nexport var posix = {\r\n // path.resolve([from ...], to)\r\n resolve: function () {\r\n var pathSegments = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n pathSegments[_i] = arguments[_i];\r\n }\r\n var resolvedPath = '';\r\n var resolvedAbsolute = false;\r\n for (var i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\r\n var path = void 0;\r\n if (i >= 0) {\r\n path = pathSegments[i];\r\n }\r\n else {\r\n path = process.cwd();\r\n }\r\n validateString(path, 'path');\r\n // Skip empty entries\r\n if (path.length === 0) {\r\n continue;\r\n }\r\n resolvedPath = path + '/' + resolvedPath;\r\n resolvedAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\r\n }\r\n // At this point the path should be resolved to a full absolute path, but\r\n // handle relative paths to be safe (might happen when process.cwd() fails)\r\n // Normalize the path\r\n resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, '/', isPosixPathSeparator);\r\n if (resolvedAbsolute) {\r\n if (resolvedPath.length > 0) {\r\n return '/' + resolvedPath;\r\n }\r\n else {\r\n return '/';\r\n }\r\n }\r\n else if (resolvedPath.length > 0) {\r\n return resolvedPath;\r\n }\r\n else {\r\n return '.';\r\n }\r\n },\r\n normalize: function (path) {\r\n validateString(path, 'path');\r\n if (path.length === 0) {\r\n return '.';\r\n }\r\n var isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\r\n var trailingSeparator = path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH;\r\n // Normalize the path\r\n path = normalizeString(path, !isAbsolute, '/', isPosixPathSeparator);\r\n if (path.length === 0 && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path.length > 0 && trailingSeparator) {\r\n path += '/';\r\n }\r\n if (isAbsolute) {\r\n return '/' + path;\r\n }\r\n return path;\r\n },\r\n isAbsolute: function (path) {\r\n validateString(path, 'path');\r\n return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH;\r\n },\r\n join: function () {\r\n var paths = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n paths[_i] = arguments[_i];\r\n }\r\n if (paths.length === 0) {\r\n return '.';\r\n }\r\n var joined;\r\n for (var i = 0; i < paths.length; ++i) {\r\n var arg = arguments[i];\r\n validateString(arg, 'path');\r\n if (arg.length > 0) {\r\n if (joined === undefined) {\r\n joined = arg;\r\n }\r\n else {\r\n joined += '/' + arg;\r\n }\r\n }\r\n }\r\n if (joined === undefined) {\r\n return '.';\r\n }\r\n return posix.normalize(joined);\r\n },\r\n relative: function (from, to) {\r\n validateString(from, 'from');\r\n validateString(to, 'to');\r\n if (from === to) {\r\n return '';\r\n }\r\n from = posix.resolve(from);\r\n to = posix.resolve(to);\r\n if (from === to) {\r\n return '';\r\n }\r\n // Trim any leading backslashes\r\n var fromStart = 1;\r\n for (; fromStart < from.length; ++fromStart) {\r\n if (from.charCodeAt(fromStart) !== CHAR_FORWARD_SLASH) {\r\n break;\r\n }\r\n }\r\n var fromEnd = from.length;\r\n var fromLen = (fromEnd - fromStart);\r\n // Trim any leading backslashes\r\n var toStart = 1;\r\n for (; toStart < to.length; ++toStart) {\r\n if (to.charCodeAt(toStart) !== CHAR_FORWARD_SLASH) {\r\n break;\r\n }\r\n }\r\n var toEnd = to.length;\r\n var toLen = (toEnd - toStart);\r\n // Compare paths to find the longest common path from root\r\n var length = (fromLen < toLen ? fromLen : toLen);\r\n var lastCommonSep = -1;\r\n var i = 0;\r\n for (; i <= length; ++i) {\r\n if (i === length) {\r\n if (toLen > length) {\r\n if (to.charCodeAt(toStart + i) === CHAR_FORWARD_SLASH) {\r\n // We get here if `from` is the exact base path for `to`.\r\n // For example: from='/foo/bar'; to='/foo/bar/baz'\r\n return to.slice(toStart + i + 1);\r\n }\r\n else if (i === 0) {\r\n // We get here if `from` is the root\r\n // For example: from='/'; to='/foo'\r\n return to.slice(toStart + i);\r\n }\r\n }\r\n else if (fromLen > length) {\r\n if (from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) {\r\n // We get here if `to` is the exact base path for `from`.\r\n // For example: from='/foo/bar/baz'; to='/foo/bar'\r\n lastCommonSep = i;\r\n }\r\n else if (i === 0) {\r\n // We get here if `to` is the root.\r\n // For example: from='/foo'; to='/'\r\n lastCommonSep = 0;\r\n }\r\n }\r\n break;\r\n }\r\n var fromCode = from.charCodeAt(fromStart + i);\r\n var toCode = to.charCodeAt(toStart + i);\r\n if (fromCode !== toCode) {\r\n break;\r\n }\r\n else if (fromCode === CHAR_FORWARD_SLASH) {\r\n lastCommonSep = i;\r\n }\r\n }\r\n var out = '';\r\n // Generate the relative path based on the path difference between `to`\r\n // and `from`\r\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\r\n if (i === fromEnd || from.charCodeAt(i) === CHAR_FORWARD_SLASH) {\r\n if (out.length === 0) {\r\n out += '..';\r\n }\r\n else {\r\n out += '/..';\r\n }\r\n }\r\n }\r\n // Lastly, append the rest of the destination (`to`) path that comes after\r\n // the common path parts\r\n if (out.length > 0) {\r\n return out + to.slice(toStart + lastCommonSep);\r\n }\r\n else {\r\n toStart += lastCommonSep;\r\n if (to.charCodeAt(toStart) === CHAR_FORWARD_SLASH) {\r\n ++toStart;\r\n }\r\n return to.slice(toStart);\r\n }\r\n },\r\n toNamespacedPath: function (path) {\r\n // Non-op on posix systems\r\n return path;\r\n },\r\n dirname: function (path) {\r\n validateString(path, 'path');\r\n if (path.length === 0) {\r\n return '.';\r\n }\r\n var hasRoot = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\r\n var end = -1;\r\n var matchedSlash = true;\r\n for (var i = path.length - 1; i >= 1; --i) {\r\n if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\r\n if (!matchedSlash) {\r\n end = i;\r\n break;\r\n }\r\n }\r\n else {\r\n // We saw the first non-path separator\r\n matchedSlash = false;\r\n }\r\n }\r\n if (end === -1) {\r\n return hasRoot ? '/' : '.';\r\n }\r\n if (hasRoot && end === 1) {\r\n return '//';\r\n }\r\n return path.slice(0, end);\r\n },\r\n basename: function (path, ext) {\r\n if (ext !== undefined) {\r\n validateString(ext, 'ext');\r\n }\r\n validateString(path, 'path');\r\n var start = 0;\r\n var end = -1;\r\n var matchedSlash = true;\r\n var i;\r\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\r\n if (ext.length === path.length && ext === path) {\r\n return '';\r\n }\r\n var extIdx = ext.length - 1;\r\n var firstNonSlashEnd = -1;\r\n for (i = path.length - 1; i >= 0; --i) {\r\n var code = path.charCodeAt(i);\r\n if (code === CHAR_FORWARD_SLASH) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n start = i + 1;\r\n break;\r\n }\r\n }\r\n else {\r\n if (firstNonSlashEnd === -1) {\r\n // We saw the first non-path separator, remember this index in case\r\n // we need it if the extension ends up not matching\r\n matchedSlash = false;\r\n firstNonSlashEnd = i + 1;\r\n }\r\n if (extIdx >= 0) {\r\n // Try to match the explicit extension\r\n if (code === ext.charCodeAt(extIdx)) {\r\n if (--extIdx === -1) {\r\n // We matched the extension, so mark this as the end of our path\r\n // component\r\n end = i;\r\n }\r\n }\r\n else {\r\n // Extension does not match, so our result is the entire path\r\n // component\r\n extIdx = -1;\r\n end = firstNonSlashEnd;\r\n }\r\n }\r\n }\r\n }\r\n if (start === end) {\r\n end = firstNonSlashEnd;\r\n }\r\n else if (end === -1) {\r\n end = path.length;\r\n }\r\n return path.slice(start, end);\r\n }\r\n else {\r\n for (i = path.length - 1; i >= 0; --i) {\r\n if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n start = i + 1;\r\n break;\r\n }\r\n }\r\n else if (end === -1) {\r\n // We saw the first non-path separator, mark this as the end of our\r\n // path component\r\n matchedSlash = false;\r\n end = i + 1;\r\n }\r\n }\r\n if (end === -1) {\r\n return '';\r\n }\r\n return path.slice(start, end);\r\n }\r\n },\r\n extname: function (path) {\r\n validateString(path, 'path');\r\n var startDot = -1;\r\n var startPart = 0;\r\n var end = -1;\r\n var matchedSlash = true;\r\n // Track the state of characters (if any) we see before our first dot and\r\n // after any path separator we find\r\n var preDotState = 0;\r\n for (var i = path.length - 1; i >= 0; --i) {\r\n var code = path.charCodeAt(i);\r\n if (code === CHAR_FORWARD_SLASH) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n startPart = i + 1;\r\n break;\r\n }\r\n continue;\r\n }\r\n if (end === -1) {\r\n // We saw the first non-path separator, mark this as the end of our\r\n // extension\r\n matchedSlash = false;\r\n end = i + 1;\r\n }\r\n if (code === CHAR_DOT) {\r\n // If this is our first dot, mark it as the start of our extension\r\n if (startDot === -1) {\r\n startDot = i;\r\n }\r\n else if (preDotState !== 1) {\r\n preDotState = 1;\r\n }\r\n }\r\n else if (startDot !== -1) {\r\n // We saw a non-dot and non-path separator before our dot, so we should\r\n // have a good chance at having a non-empty extension\r\n preDotState = -1;\r\n }\r\n }\r\n if (startDot === -1 ||\r\n end === -1 ||\r\n // We saw a non-dot character immediately before the dot\r\n preDotState === 0 ||\r\n // The (right-most) trimmed path component is exactly '..'\r\n (preDotState === 1 &&\r\n startDot === end - 1 &&\r\n startDot === startPart + 1)) {\r\n return '';\r\n }\r\n return path.slice(startDot, end);\r\n },\r\n format: function (pathObject) {\r\n if (pathObject === null || typeof pathObject !== 'object') {\r\n throw new ErrorInvalidArgType('pathObject', 'Object', pathObject);\r\n }\r\n return _format('/', pathObject);\r\n },\r\n parse: function (path) {\r\n validateString(path, 'path');\r\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\r\n if (path.length === 0) {\r\n return ret;\r\n }\r\n var isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\r\n var start;\r\n if (isAbsolute) {\r\n ret.root = '/';\r\n start = 1;\r\n }\r\n else {\r\n start = 0;\r\n }\r\n var startDot = -1;\r\n var startPart = 0;\r\n var end = -1;\r\n var matchedSlash = true;\r\n var i = path.length - 1;\r\n // Track the state of characters (if any) we see before our first dot and\r\n // after any path separator we find\r\n var preDotState = 0;\r\n // Get non-dir info\r\n for (; i >= start; --i) {\r\n var code = path.charCodeAt(i);\r\n if (code === CHAR_FORWARD_SLASH) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n startPart = i + 1;\r\n break;\r\n }\r\n continue;\r\n }\r\n if (end === -1) {\r\n // We saw the first non-path separator, mark this as the end of our\r\n // extension\r\n matchedSlash = false;\r\n end = i + 1;\r\n }\r\n if (code === CHAR_DOT) {\r\n // If this is our first dot, mark it as the start of our extension\r\n if (startDot === -1) {\r\n startDot = i;\r\n }\r\n else if (preDotState !== 1) {\r\n preDotState = 1;\r\n }\r\n }\r\n else if (startDot !== -1) {\r\n // We saw a non-dot and non-path separator before our dot, so we should\r\n // have a good chance at having a non-empty extension\r\n preDotState = -1;\r\n }\r\n }\r\n if (startDot === -1 ||\r\n end === -1 ||\r\n // We saw a non-dot character immediately before the dot\r\n preDotState === 0 ||\r\n // The (right-most) trimmed path component is exactly '..'\r\n (preDotState === 1 &&\r\n startDot === end - 1 &&\r\n startDot === startPart + 1)) {\r\n if (end !== -1) {\r\n if (startPart === 0 && isAbsolute) {\r\n ret.base = ret.name = path.slice(1, end);\r\n }\r\n else {\r\n ret.base = ret.name = path.slice(startPart, end);\r\n }\r\n }\r\n }\r\n else {\r\n if (startPart === 0 && isAbsolute) {\r\n ret.name = path.slice(1, startDot);\r\n ret.base = path.slice(1, end);\r\n }\r\n else {\r\n ret.name = path.slice(startPart, startDot);\r\n ret.base = path.slice(startPart, end);\r\n }\r\n ret.ext = path.slice(startDot, end);\r\n }\r\n if (startPart > 0) {\r\n ret.dir = path.slice(0, startPart - 1);\r\n }\r\n else if (isAbsolute) {\r\n ret.dir = '/';\r\n }\r\n return ret;\r\n },\r\n sep: '/',\r\n delimiter: ':',\r\n win32: null,\r\n posix: null\r\n};\r\nposix.win32 = win32.win32 = win32;\r\nposix.posix = win32.posix = posix;\r\nexport var normalize = (process.platform === 'win32' ? win32.normalize : posix.normalize);\r\nexport var join = (process.platform === 'win32' ? win32.join : posix.join);\r\nexport var relative = (process.platform === 'win32' ? win32.relative : posix.relative);\r\nexport var dirname = (process.platform === 'win32' ? win32.dirname : posix.dirname);\r\nexport var basename = (process.platform === 'win32' ? win32.basename : posix.basename);\r\nexport var extname = (process.platform === 'win32' ? win32.extname : posix.extname);\r\nexport var sep = (process.platform === 'win32' ? win32.sep : posix.sep);\r\n","import { startsWithIgnoreCase } from './strings.js';\r\nimport { sep, posix } from './path.js';\r\n/**\r\n * Takes a Windows OS path and changes backward slashes to forward slashes.\r\n * This should only be done for OS paths from Windows (or user provided paths potentially from Windows).\r\n * Using it on a Linux or MaxOS path might change it.\r\n */\r\nexport function toSlashes(osPath) {\r\n return osPath.replace(/[\\\\/]/g, posix.sep);\r\n}\r\nexport function isEqualOrParent(path, candidate, ignoreCase, separator) {\r\n if (separator === void 0) { separator = sep; }\r\n if (path === candidate) {\r\n return true;\r\n }\r\n if (!path || !candidate) {\r\n return false;\r\n }\r\n if (candidate.length > path.length) {\r\n return false;\r\n }\r\n if (ignoreCase) {\r\n var beginsWith = startsWithIgnoreCase(path, candidate);\r\n if (!beginsWith) {\r\n return false;\r\n }\r\n if (candidate.length === path.length) {\r\n return true; // same path, different casing\r\n }\r\n var sepOffset = candidate.length;\r\n if (candidate.charAt(candidate.length - 1) === separator) {\r\n sepOffset--; // adjust the expected sep offset in case our candidate already ends in separator character\r\n }\r\n return path.charAt(sepOffset) === separator;\r\n }\r\n if (candidate.charAt(candidate.length - 1) !== separator) {\r\n candidate += separator;\r\n }\r\n return path.indexOf(candidate) === 0;\r\n}\r\nexport function isWindowsDriveLetter(char0) {\r\n return char0 >= 65 /* A */ && char0 <= 90 /* Z */ || char0 >= 97 /* a */ && char0 <= 122 /* z */;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport * as extpath from './extpath.js';\r\nimport * as paths from './path.js';\r\nimport { URI } from './uri.js';\r\nimport { equalsIgnoreCase } from './strings.js';\r\nimport { Schemas } from './network.js';\r\nimport { isLinux, isWindows } from './platform.js';\r\nexport function hasToIgnoreCase(resource) {\r\n // A file scheme resource is in the same platform as code, so ignore case for non linux platforms\r\n // Resource can be from another platform. Lowering the case as an hack. Should come from File system provider\r\n return resource && resource.scheme === Schemas.file ? !isLinux : true;\r\n}\r\nexport function basenameOrAuthority(resource) {\r\n return basename(resource) || resource.authority;\r\n}\r\n/**\r\n * Tests wheter the two authorities are the same\r\n */\r\nexport function isEqualAuthority(a1, a2) {\r\n return a1 === a2 || equalsIgnoreCase(a1, a2);\r\n}\r\nexport function isEqual(first, second, ignoreCase) {\r\n if (ignoreCase === void 0) { ignoreCase = hasToIgnoreCase(first); }\r\n if (first === second) {\r\n return true;\r\n }\r\n if (!first || !second) {\r\n return false;\r\n }\r\n if (first.scheme !== second.scheme || !isEqualAuthority(first.authority, second.authority)) {\r\n return false;\r\n }\r\n var p1 = first.path || '/', p2 = second.path || '/';\r\n return p1 === p2 || ignoreCase && equalsIgnoreCase(p1 || '/', p2 || '/');\r\n}\r\nexport function basename(resource) {\r\n return paths.posix.basename(resource.path);\r\n}\r\n/**\r\n * Return a URI representing the directory of a URI path.\r\n *\r\n * @param resource The input URI.\r\n * @returns The URI representing the directory of the input URI.\r\n */\r\nexport function dirname(resource) {\r\n if (resource.path.length === 0) {\r\n return resource;\r\n }\r\n if (resource.scheme === Schemas.file) {\r\n return URI.file(paths.dirname(originalFSPath(resource)));\r\n }\r\n var dirname = paths.posix.dirname(resource.path);\r\n if (resource.authority && dirname.length && dirname.charCodeAt(0) !== 47 /* Slash */) {\r\n console.error(\"dirname(\\\"\" + resource.toString + \")) resulted in a relative path\");\r\n dirname = '/'; // If a URI contains an authority component, then the path component must either be empty or begin with a CharCode.Slash (\"/\") character\r\n }\r\n return resource.with({\r\n path: dirname\r\n });\r\n}\r\n/**\r\n * Join a URI path with path fragments and normalizes the resulting path.\r\n *\r\n * @param resource The input URI.\r\n * @param pathFragment The path fragment to add to the URI path.\r\n * @returns The resulting URI.\r\n */\r\nexport function joinPath(resource) {\r\n var _a;\r\n var pathFragment = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n pathFragment[_i - 1] = arguments[_i];\r\n }\r\n var joinedPath;\r\n if (resource.scheme === Schemas.file) {\r\n joinedPath = URI.file(paths.join.apply(paths, __spreadArrays([originalFSPath(resource)], pathFragment))).path;\r\n }\r\n else {\r\n joinedPath = (_a = paths.posix).join.apply(_a, __spreadArrays([resource.path || '/'], pathFragment));\r\n }\r\n return resource.with({\r\n path: joinedPath\r\n });\r\n}\r\n/**\r\n * Normalizes the path part of a URI: Resolves `.` and `..` elements with directory names.\r\n *\r\n * @param resource The URI to normalize the path.\r\n * @returns The URI with the normalized path.\r\n */\r\nexport function normalizePath(resource) {\r\n if (!resource.path.length) {\r\n return resource;\r\n }\r\n var normalizedPath;\r\n if (resource.scheme === Schemas.file) {\r\n normalizedPath = URI.file(paths.normalize(originalFSPath(resource))).path;\r\n }\r\n else {\r\n normalizedPath = paths.posix.normalize(resource.path);\r\n }\r\n return resource.with({\r\n path: normalizedPath\r\n });\r\n}\r\n/**\r\n * Returns the fsPath of an URI where the drive letter is not normalized.\r\n * See #56403.\r\n */\r\nexport function originalFSPath(uri) {\r\n var value;\r\n var uriPath = uri.path;\r\n if (uri.authority && uriPath.length > 1 && uri.scheme === Schemas.file) {\r\n // unc path: file://shares/c$/far/boo\r\n value = \"//\" + uri.authority + uriPath;\r\n }\r\n else if (isWindows\r\n && uriPath.charCodeAt(0) === 47 /* Slash */\r\n && extpath.isWindowsDriveLetter(uriPath.charCodeAt(1))\r\n && uriPath.charCodeAt(2) === 58 /* Colon */) {\r\n value = uriPath.substr(1);\r\n }\r\n else {\r\n // other path\r\n value = uriPath;\r\n }\r\n if (isWindows) {\r\n value = value.replace(/\\//g, '\\\\');\r\n }\r\n return value;\r\n}\r\n/**\r\n * Returns a relative path between two URIs. If the URIs don't have the same schema or authority, `undefined` is returned.\r\n * The returned relative path always uses forward slashes.\r\n */\r\nexport function relativePath(from, to, ignoreCase) {\r\n if (ignoreCase === void 0) { ignoreCase = hasToIgnoreCase(from); }\r\n if (from.scheme !== to.scheme || !isEqualAuthority(from.authority, to.authority)) {\r\n return undefined;\r\n }\r\n if (from.scheme === Schemas.file) {\r\n var relativePath_1 = paths.relative(from.path, to.path);\r\n return isWindows ? extpath.toSlashes(relativePath_1) : relativePath_1;\r\n }\r\n var fromPath = from.path || '/', toPath = to.path || '/';\r\n if (ignoreCase) {\r\n // make casing of fromPath match toPath\r\n var i = 0;\r\n for (var len = Math.min(fromPath.length, toPath.length); i < len; i++) {\r\n if (fromPath.charCodeAt(i) !== toPath.charCodeAt(i)) {\r\n if (fromPath.charAt(i).toLowerCase() !== toPath.charAt(i).toLowerCase()) {\r\n break;\r\n }\r\n }\r\n }\r\n fromPath = toPath.substr(0, i) + fromPath.substr(i);\r\n }\r\n return paths.posix.relative(fromPath, toPath);\r\n}\r\n/**\r\n * Data URI related helpers.\r\n */\r\nexport var DataUri;\r\n(function (DataUri) {\r\n DataUri.META_DATA_LABEL = 'label';\r\n DataUri.META_DATA_DESCRIPTION = 'description';\r\n DataUri.META_DATA_SIZE = 'size';\r\n DataUri.META_DATA_MIME = 'mime';\r\n function parseMetaData(dataUri) {\r\n var metadata = new Map();\r\n // Given a URI of: data:image/png;size:2313;label:SomeLabel;description:SomeDescription;base64,77+9UE5...\r\n // the metadata is: size:2313;label:SomeLabel;description:SomeDescription\r\n var meta = dataUri.path.substring(dataUri.path.indexOf(';') + 1, dataUri.path.lastIndexOf(';'));\r\n meta.split(';').forEach(function (property) {\r\n var _a = property.split(':'), key = _a[0], value = _a[1];\r\n if (key && value) {\r\n metadata.set(key, value);\r\n }\r\n });\r\n // Given a URI of: data:image/png;size:2313;label:SomeLabel;description:SomeDescription;base64,77+9UE5...\r\n // the mime is: image/png\r\n var mime = dataUri.path.substring(0, dataUri.path.indexOf(';'));\r\n if (mime) {\r\n metadata.set(DataUri.META_DATA_MIME, mime);\r\n }\r\n return metadata;\r\n }\r\n DataUri.parseMetaData = parseMetaData;\r\n})(DataUri || (DataUri = {}));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar _typeof = {\r\n number: 'number',\r\n string: 'string',\r\n undefined: 'undefined',\r\n object: 'object',\r\n function: 'function'\r\n};\r\n/**\r\n * @returns whether the provided parameter is a JavaScript Array or not.\r\n */\r\nexport function isArray(array) {\r\n if (Array.isArray) {\r\n return Array.isArray(array);\r\n }\r\n if (array && typeof (array.length) === _typeof.number && array.constructor === Array) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * @returns whether the provided parameter is a JavaScript String or not.\r\n */\r\nexport function isString(str) {\r\n if (typeof (str) === _typeof.string || str instanceof String) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n *\r\n * @returns whether the provided parameter is of type `object` but **not**\r\n *\t`null`, an `array`, a `regexp`, nor a `date`.\r\n */\r\nexport function isObject(obj) {\r\n // The method can't do a type cast since there are type (like strings) which\r\n // are subclasses of any put not positvely matched by the function. Hence type\r\n // narrowing results in wrong results.\r\n return typeof obj === _typeof.object\r\n && obj !== null\r\n && !Array.isArray(obj)\r\n && !(obj instanceof RegExp)\r\n && !(obj instanceof Date);\r\n}\r\n/**\r\n * In **contrast** to just checking `typeof` this will return `false` for `NaN`.\r\n * @returns whether the provided parameter is a JavaScript Number or not.\r\n */\r\nexport function isNumber(obj) {\r\n if ((typeof (obj) === _typeof.number || obj instanceof Number) && !isNaN(obj)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * @returns whether the provided parameter is a JavaScript Boolean or not.\r\n */\r\nexport function isBoolean(obj) {\r\n return obj === true || obj === false;\r\n}\r\n/**\r\n * @returns whether the provided parameter is undefined.\r\n */\r\nexport function isUndefined(obj) {\r\n return typeof (obj) === _typeof.undefined;\r\n}\r\n/**\r\n * @returns whether the provided parameter is undefined or null.\r\n */\r\nexport function isUndefinedOrNull(obj) {\r\n return isUndefined(obj) || obj === null;\r\n}\r\nexport function assertType(condition, type) {\r\n if (!condition) {\r\n throw new Error(type ? \"Unexpected type, expected '\" + type + \"'\" : 'Unexpected type');\r\n }\r\n}\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n/**\r\n * @returns whether the provided parameter is an empty JavaScript Object or not.\r\n */\r\nexport function isEmptyObject(obj) {\r\n if (!isObject(obj)) {\r\n return false;\r\n }\r\n for (var key in obj) {\r\n if (hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * @returns whether the provided parameter is a JavaScript Function or not.\r\n */\r\nexport function isFunction(obj) {\r\n return typeof obj === _typeof.function;\r\n}\r\nexport function validateConstraints(args, constraints) {\r\n var len = Math.min(args.length, constraints.length);\r\n for (var i = 0; i < len; i++) {\r\n validateConstraint(args[i], constraints[i]);\r\n }\r\n}\r\nexport function validateConstraint(arg, constraint) {\r\n if (isString(constraint)) {\r\n if (typeof arg !== constraint) {\r\n throw new Error(\"argument does not match constraint: typeof \" + constraint);\r\n }\r\n }\r\n else if (isFunction(constraint)) {\r\n try {\r\n if (arg instanceof constraint) {\r\n return;\r\n }\r\n }\r\n catch (_a) {\r\n // ignore\r\n }\r\n if (!isUndefinedOrNull(arg) && arg.constructor === constraint) {\r\n return;\r\n }\r\n if (constraint.length === 1 && constraint.call(undefined, arg) === true) {\r\n return;\r\n }\r\n throw new Error(\"argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true\");\r\n }\r\n}\r\nexport function getAllPropertyNames(obj) {\r\n var res = [];\r\n var proto = Object.getPrototypeOf(obj);\r\n while (Object.prototype !== proto) {\r\n res = res.concat(Object.getOwnPropertyNames(proto));\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n return res;\r\n}\r\nexport function getAllMethodNames(obj) {\r\n var methods = [];\r\n for (var _i = 0, _a = getAllPropertyNames(obj); _i < _a.length; _i++) {\r\n var prop = _a[_i];\r\n if (typeof obj[prop] === 'function') {\r\n methods.push(prop);\r\n }\r\n }\r\n return methods;\r\n}\r\nexport function createProxyObject(methodNames, invoke) {\r\n var createProxyMethod = function (method) {\r\n return function () {\r\n var args = Array.prototype.slice.call(arguments, 0);\r\n return invoke(method, args);\r\n };\r\n };\r\n var result = {};\r\n for (var _i = 0, methodNames_1 = methodNames; _i < methodNames_1.length; _i++) {\r\n var methodName = methodNames_1[_i];\r\n result[methodName] = createProxyMethod(methodName);\r\n }\r\n return result;\r\n}\r\n/**\r\n * Converts null to undefined, passes all other values through.\r\n */\r\nexport function withNullAsUndefined(x) {\r\n return x === null ? undefined : x;\r\n}\r\n/**\r\n * Converts undefined to null, passes all other values through.\r\n */\r\nexport function withUndefinedAsNull(x) {\r\n return typeof x === 'undefined' ? null : x;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nexport function values(forEachable) {\r\n var result = [];\r\n forEachable.forEach(function (value) { return result.push(value); });\r\n return result;\r\n}\r\nexport function keys(map) {\r\n var result = [];\r\n map.forEach(function (_value, key) { return result.push(key); });\r\n return result;\r\n}\r\nvar StringIterator = /** @class */ (function () {\r\n function StringIterator() {\r\n this._value = '';\r\n this._pos = 0;\r\n }\r\n StringIterator.prototype.reset = function (key) {\r\n this._value = key;\r\n this._pos = 0;\r\n return this;\r\n };\r\n StringIterator.prototype.next = function () {\r\n this._pos += 1;\r\n return this;\r\n };\r\n StringIterator.prototype.hasNext = function () {\r\n return this._pos < this._value.length - 1;\r\n };\r\n StringIterator.prototype.cmp = function (a) {\r\n var aCode = a.charCodeAt(0);\r\n var thisCode = this._value.charCodeAt(this._pos);\r\n return aCode - thisCode;\r\n };\r\n StringIterator.prototype.value = function () {\r\n return this._value[this._pos];\r\n };\r\n return StringIterator;\r\n}());\r\nexport { StringIterator };\r\nvar PathIterator = /** @class */ (function () {\r\n function PathIterator(_splitOnBackslash) {\r\n if (_splitOnBackslash === void 0) { _splitOnBackslash = true; }\r\n this._splitOnBackslash = _splitOnBackslash;\r\n }\r\n PathIterator.prototype.reset = function (key) {\r\n this._value = key.replace(/\\\\$|\\/$/, '');\r\n this._from = 0;\r\n this._to = 0;\r\n return this.next();\r\n };\r\n PathIterator.prototype.hasNext = function () {\r\n return this._to < this._value.length;\r\n };\r\n PathIterator.prototype.next = function () {\r\n // this._data = key.split(/[\\\\/]/).filter(s => !!s);\r\n this._from = this._to;\r\n var justSeps = true;\r\n for (; this._to < this._value.length; this._to++) {\r\n var ch = this._value.charCodeAt(this._to);\r\n if (ch === 47 /* Slash */ || this._splitOnBackslash && ch === 92 /* Backslash */) {\r\n if (justSeps) {\r\n this._from++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n else {\r\n justSeps = false;\r\n }\r\n }\r\n return this;\r\n };\r\n PathIterator.prototype.cmp = function (a) {\r\n var aPos = 0;\r\n var aLen = a.length;\r\n var thisPos = this._from;\r\n while (aPos < aLen && thisPos < this._to) {\r\n var cmp = a.charCodeAt(aPos) - this._value.charCodeAt(thisPos);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n aPos += 1;\r\n thisPos += 1;\r\n }\r\n if (aLen === this._to - this._from) {\r\n return 0;\r\n }\r\n else if (aPos < aLen) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n };\r\n PathIterator.prototype.value = function () {\r\n return this._value.substring(this._from, this._to);\r\n };\r\n return PathIterator;\r\n}());\r\nexport { PathIterator };\r\nvar TernarySearchTreeNode = /** @class */ (function () {\r\n function TernarySearchTreeNode() {\r\n }\r\n return TernarySearchTreeNode;\r\n}());\r\nvar TernarySearchTree = /** @class */ (function () {\r\n function TernarySearchTree(segments) {\r\n this._iter = segments;\r\n }\r\n TernarySearchTree.forPaths = function () {\r\n return new TernarySearchTree(new PathIterator());\r\n };\r\n TernarySearchTree.forStrings = function () {\r\n return new TernarySearchTree(new StringIterator());\r\n };\r\n TernarySearchTree.prototype.clear = function () {\r\n this._root = undefined;\r\n };\r\n TernarySearchTree.prototype.set = function (key, element) {\r\n var iter = this._iter.reset(key);\r\n var node;\r\n if (!this._root) {\r\n this._root = new TernarySearchTreeNode();\r\n this._root.segment = iter.value();\r\n }\r\n node = this._root;\r\n while (true) {\r\n var val = iter.cmp(node.segment);\r\n if (val > 0) {\r\n // left\r\n if (!node.left) {\r\n node.left = new TernarySearchTreeNode();\r\n node.left.segment = iter.value();\r\n }\r\n node = node.left;\r\n }\r\n else if (val < 0) {\r\n // right\r\n if (!node.right) {\r\n node.right = new TernarySearchTreeNode();\r\n node.right.segment = iter.value();\r\n }\r\n node = node.right;\r\n }\r\n else if (iter.hasNext()) {\r\n // mid\r\n iter.next();\r\n if (!node.mid) {\r\n node.mid = new TernarySearchTreeNode();\r\n node.mid.segment = iter.value();\r\n }\r\n node = node.mid;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n var oldElement = node.value;\r\n node.value = element;\r\n node.key = key;\r\n return oldElement;\r\n };\r\n TernarySearchTree.prototype.get = function (key) {\r\n var iter = this._iter.reset(key);\r\n var node = this._root;\r\n while (node) {\r\n var val = iter.cmp(node.segment);\r\n if (val > 0) {\r\n // left\r\n node = node.left;\r\n }\r\n else if (val < 0) {\r\n // right\r\n node = node.right;\r\n }\r\n else if (iter.hasNext()) {\r\n // mid\r\n iter.next();\r\n node = node.mid;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n return node ? node.value : undefined;\r\n };\r\n TernarySearchTree.prototype.findSubstr = function (key) {\r\n var iter = this._iter.reset(key);\r\n var node = this._root;\r\n var candidate = undefined;\r\n while (node) {\r\n var val = iter.cmp(node.segment);\r\n if (val > 0) {\r\n // left\r\n node = node.left;\r\n }\r\n else if (val < 0) {\r\n // right\r\n node = node.right;\r\n }\r\n else if (iter.hasNext()) {\r\n // mid\r\n iter.next();\r\n candidate = node.value || candidate;\r\n node = node.mid;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n return node && node.value || candidate;\r\n };\r\n TernarySearchTree.prototype.forEach = function (callback) {\r\n this._forEach(this._root, callback);\r\n };\r\n TernarySearchTree.prototype._forEach = function (node, callback) {\r\n if (node) {\r\n // left\r\n this._forEach(node.left, callback);\r\n // node\r\n if (node.value) {\r\n // callback(node.value, this._iter.join(parts));\r\n callback(node.value, node.key);\r\n }\r\n // mid\r\n this._forEach(node.mid, callback);\r\n // right\r\n this._forEach(node.right, callback);\r\n }\r\n };\r\n return TernarySearchTree;\r\n}());\r\nexport { TernarySearchTree };\r\nvar ResourceMap = /** @class */ (function () {\r\n function ResourceMap() {\r\n this.map = new Map();\r\n this.ignoreCase = false; // in the future this should be an uri-comparator\r\n }\r\n ResourceMap.prototype.set = function (resource, value) {\r\n this.map.set(this.toKey(resource), value);\r\n };\r\n ResourceMap.prototype.get = function (resource) {\r\n return this.map.get(this.toKey(resource));\r\n };\r\n ResourceMap.prototype.toKey = function (resource) {\r\n var key = resource.toString();\r\n if (this.ignoreCase) {\r\n key = key.toLowerCase();\r\n }\r\n return key;\r\n };\r\n return ResourceMap;\r\n}());\r\nexport { ResourceMap };\r\nvar LinkedMap = /** @class */ (function () {\r\n function LinkedMap() {\r\n this._map = new Map();\r\n this._head = undefined;\r\n this._tail = undefined;\r\n this._size = 0;\r\n }\r\n LinkedMap.prototype.clear = function () {\r\n this._map.clear();\r\n this._head = undefined;\r\n this._tail = undefined;\r\n this._size = 0;\r\n };\r\n Object.defineProperty(LinkedMap.prototype, \"size\", {\r\n get: function () {\r\n return this._size;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n LinkedMap.prototype.get = function (key, touch) {\r\n if (touch === void 0) { touch = 0 /* None */; }\r\n var item = this._map.get(key);\r\n if (!item) {\r\n return undefined;\r\n }\r\n if (touch !== 0 /* None */) {\r\n this.touch(item, touch);\r\n }\r\n return item.value;\r\n };\r\n LinkedMap.prototype.set = function (key, value, touch) {\r\n if (touch === void 0) { touch = 0 /* None */; }\r\n var item = this._map.get(key);\r\n if (item) {\r\n item.value = value;\r\n if (touch !== 0 /* None */) {\r\n this.touch(item, touch);\r\n }\r\n }\r\n else {\r\n item = { key: key, value: value, next: undefined, previous: undefined };\r\n switch (touch) {\r\n case 0 /* None */:\r\n this.addItemLast(item);\r\n break;\r\n case 1 /* AsOld */:\r\n this.addItemFirst(item);\r\n break;\r\n case 2 /* AsNew */:\r\n this.addItemLast(item);\r\n break;\r\n default:\r\n this.addItemLast(item);\r\n break;\r\n }\r\n this._map.set(key, item);\r\n this._size++;\r\n }\r\n };\r\n LinkedMap.prototype.delete = function (key) {\r\n return !!this.remove(key);\r\n };\r\n LinkedMap.prototype.remove = function (key) {\r\n var item = this._map.get(key);\r\n if (!item) {\r\n return undefined;\r\n }\r\n this._map.delete(key);\r\n this.removeItem(item);\r\n this._size--;\r\n return item.value;\r\n };\r\n LinkedMap.prototype.forEach = function (callbackfn, thisArg) {\r\n var current = this._head;\r\n while (current) {\r\n if (thisArg) {\r\n callbackfn.bind(thisArg)(current.value, current.key, this);\r\n }\r\n else {\r\n callbackfn(current.value, current.key, this);\r\n }\r\n current = current.next;\r\n }\r\n };\r\n /* VS Code / Monaco editor runs on es5 which has no Symbol.iterator\r\n keys(): IterableIterator {\r\n const current = this._head;\r\n const iterator: IterableIterator = {\r\n [Symbol.iterator]() {\r\n return iterator;\r\n },\r\n next():IteratorResult {\r\n if (current) {\r\n const result = { value: current.key, done: false };\r\n current = current.next;\r\n return result;\r\n } else {\r\n return { value: undefined, done: true };\r\n }\r\n }\r\n };\r\n return iterator;\r\n }\r\n\r\n values(): IterableIterator {\r\n const current = this._head;\r\n const iterator: IterableIterator = {\r\n [Symbol.iterator]() {\r\n return iterator;\r\n },\r\n next():IteratorResult {\r\n if (current) {\r\n const result = { value: current.value, done: false };\r\n current = current.next;\r\n return result;\r\n } else {\r\n return { value: undefined, done: true };\r\n }\r\n }\r\n };\r\n return iterator;\r\n }\r\n */\r\n LinkedMap.prototype.trimOld = function (newSize) {\r\n if (newSize >= this.size) {\r\n return;\r\n }\r\n if (newSize === 0) {\r\n this.clear();\r\n return;\r\n }\r\n var current = this._head;\r\n var currentSize = this.size;\r\n while (current && currentSize > newSize) {\r\n this._map.delete(current.key);\r\n current = current.next;\r\n currentSize--;\r\n }\r\n this._head = current;\r\n this._size = currentSize;\r\n if (current) {\r\n current.previous = undefined;\r\n }\r\n };\r\n LinkedMap.prototype.addItemFirst = function (item) {\r\n // First time Insert\r\n if (!this._head && !this._tail) {\r\n this._tail = item;\r\n }\r\n else if (!this._head) {\r\n throw new Error('Invalid list');\r\n }\r\n else {\r\n item.next = this._head;\r\n this._head.previous = item;\r\n }\r\n this._head = item;\r\n };\r\n LinkedMap.prototype.addItemLast = function (item) {\r\n // First time Insert\r\n if (!this._head && !this._tail) {\r\n this._head = item;\r\n }\r\n else if (!this._tail) {\r\n throw new Error('Invalid list');\r\n }\r\n else {\r\n item.previous = this._tail;\r\n this._tail.next = item;\r\n }\r\n this._tail = item;\r\n };\r\n LinkedMap.prototype.removeItem = function (item) {\r\n if (item === this._head && item === this._tail) {\r\n this._head = undefined;\r\n this._tail = undefined;\r\n }\r\n else if (item === this._head) {\r\n // This can only happend if size === 1 which is handle\r\n // by the case above.\r\n if (!item.next) {\r\n throw new Error('Invalid list');\r\n }\r\n item.next.previous = undefined;\r\n this._head = item.next;\r\n }\r\n else if (item === this._tail) {\r\n // This can only happend if size === 1 which is handle\r\n // by the case above.\r\n if (!item.previous) {\r\n throw new Error('Invalid list');\r\n }\r\n item.previous.next = undefined;\r\n this._tail = item.previous;\r\n }\r\n else {\r\n var next = item.next;\r\n var previous = item.previous;\r\n if (!next || !previous) {\r\n throw new Error('Invalid list');\r\n }\r\n next.previous = previous;\r\n previous.next = next;\r\n }\r\n item.next = undefined;\r\n item.previous = undefined;\r\n };\r\n LinkedMap.prototype.touch = function (item, touch) {\r\n if (!this._head || !this._tail) {\r\n throw new Error('Invalid list');\r\n }\r\n if ((touch !== 1 /* AsOld */ && touch !== 2 /* AsNew */)) {\r\n return;\r\n }\r\n if (touch === 1 /* AsOld */) {\r\n if (item === this._head) {\r\n return;\r\n }\r\n var next = item.next;\r\n var previous = item.previous;\r\n // Unlink the item\r\n if (item === this._tail) {\r\n // previous must be defined since item was not head but is tail\r\n // So there are more than on item in the map\r\n previous.next = undefined;\r\n this._tail = previous;\r\n }\r\n else {\r\n // Both next and previous are not undefined since item was neither head nor tail.\r\n next.previous = previous;\r\n previous.next = next;\r\n }\r\n // Insert the node at head\r\n item.previous = undefined;\r\n item.next = this._head;\r\n this._head.previous = item;\r\n this._head = item;\r\n }\r\n else if (touch === 2 /* AsNew */) {\r\n if (item === this._tail) {\r\n return;\r\n }\r\n var next = item.next;\r\n var previous = item.previous;\r\n // Unlink the item.\r\n if (item === this._head) {\r\n // next must be defined since item was not tail but is head\r\n // So there are more than on item in the map\r\n next.previous = undefined;\r\n this._head = next;\r\n }\r\n else {\r\n // Both next and previous are not undefined since item was neither head nor tail.\r\n next.previous = previous;\r\n previous.next = next;\r\n }\r\n item.next = undefined;\r\n item.previous = this._tail;\r\n this._tail.next = item;\r\n this._tail = item;\r\n }\r\n };\r\n LinkedMap.prototype.toJSON = function () {\r\n var data = [];\r\n this.forEach(function (value, key) {\r\n data.push([key, value]);\r\n });\r\n return data;\r\n };\r\n return LinkedMap;\r\n}());\r\nexport { LinkedMap };\r\nvar LRUCache = /** @class */ (function (_super) {\r\n __extends(LRUCache, _super);\r\n function LRUCache(limit, ratio) {\r\n if (ratio === void 0) { ratio = 1; }\r\n var _this = _super.call(this) || this;\r\n _this._limit = limit;\r\n _this._ratio = Math.min(Math.max(0, ratio), 1);\r\n return _this;\r\n }\r\n LRUCache.prototype.get = function (key) {\r\n return _super.prototype.get.call(this, key, 2 /* AsNew */);\r\n };\r\n LRUCache.prototype.peek = function (key) {\r\n return _super.prototype.get.call(this, key, 0 /* None */);\r\n };\r\n LRUCache.prototype.set = function (key, value) {\r\n _super.prototype.set.call(this, key, value, 2 /* AsNew */);\r\n this.checkTrim();\r\n };\r\n LRUCache.prototype.checkTrim = function () {\r\n if (this.size > this._limit) {\r\n this.trimOld(Math.round(this._limit * this._ratio));\r\n }\r\n };\r\n return LRUCache;\r\n}(LinkedMap));\r\nexport { LRUCache };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport var EditorOpenContext;\r\n(function (EditorOpenContext) {\r\n /**\r\n * Default: the editor is opening via a programmatic call\r\n * to the editor service API.\r\n */\r\n EditorOpenContext[EditorOpenContext[\"API\"] = 0] = \"API\";\r\n /**\r\n * Indicates that a user action triggered the opening, e.g.\r\n * via mouse or keyboard use.\r\n */\r\n EditorOpenContext[EditorOpenContext[\"USER\"] = 1] = \"USER\";\r\n})(EditorOpenContext || (EditorOpenContext = {}));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { toDisposable } from '../../../base/common/lifecycle.js';\r\nimport { validateConstraints } from '../../../base/common/types.js';\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { LinkedList } from '../../../base/common/linkedList.js';\r\nimport { keys } from '../../../base/common/map.js';\r\nexport var ICommandService = createDecorator('commandService');\r\nexport var CommandsRegistry = new /** @class */ (function () {\r\n function class_1() {\r\n this._commands = new Map();\r\n this._onDidRegisterCommand = new Emitter();\r\n this.onDidRegisterCommand = this._onDidRegisterCommand.event;\r\n }\r\n class_1.prototype.registerCommand = function (idOrCommand, handler) {\r\n var _this = this;\r\n if (!idOrCommand) {\r\n throw new Error(\"invalid command\");\r\n }\r\n if (typeof idOrCommand === 'string') {\r\n if (!handler) {\r\n throw new Error(\"invalid command\");\r\n }\r\n return this.registerCommand({ id: idOrCommand, handler: handler });\r\n }\r\n // add argument validation if rich command metadata is provided\r\n if (idOrCommand.description) {\r\n var constraints_1 = [];\r\n for (var _i = 0, _a = idOrCommand.description.args; _i < _a.length; _i++) {\r\n var arg = _a[_i];\r\n constraints_1.push(arg.constraint);\r\n }\r\n var actualHandler_1 = idOrCommand.handler;\r\n idOrCommand.handler = function (accessor) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n validateConstraints(args, constraints_1);\r\n return actualHandler_1.apply(void 0, __spreadArrays([accessor], args));\r\n };\r\n }\r\n // find a place to store the command\r\n var id = idOrCommand.id;\r\n var commands = this._commands.get(id);\r\n if (!commands) {\r\n commands = new LinkedList();\r\n this._commands.set(id, commands);\r\n }\r\n var removeFn = commands.unshift(idOrCommand);\r\n var ret = toDisposable(function () {\r\n var _a;\r\n removeFn();\r\n var command = _this._commands.get(id);\r\n if ((_a = command) === null || _a === void 0 ? void 0 : _a.isEmpty()) {\r\n _this._commands.delete(id);\r\n }\r\n });\r\n // tell the world about this command\r\n this._onDidRegisterCommand.fire(id);\r\n return ret;\r\n };\r\n class_1.prototype.registerCommandAlias = function (oldId, newId) {\r\n return CommandsRegistry.registerCommand(oldId, function (accessor) {\r\n var _a;\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n return (_a = accessor.get(ICommandService)).executeCommand.apply(_a, __spreadArrays([newId], args));\r\n });\r\n };\r\n class_1.prototype.getCommand = function (id) {\r\n var list = this._commands.get(id);\r\n if (!list || list.isEmpty()) {\r\n return undefined;\r\n }\r\n return list.iterator().next().value;\r\n };\r\n class_1.prototype.getCommands = function () {\r\n var result = new Map();\r\n for (var _i = 0, _a = keys(this._commands); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n var command = this.getCommand(key);\r\n if (command) {\r\n result.set(key, command);\r\n }\r\n }\r\n return result;\r\n };\r\n return class_1;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { URI } from '../../../base/common/uri.js';\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { equalsIgnoreCase, startsWithIgnoreCase } from '../../../base/common/strings.js';\r\nexport var IOpenerService = createDecorator('openerService');\r\nexport var NullOpenerService = Object.freeze({\r\n _serviceBrand: undefined,\r\n registerOpener: function () { return Disposable.None; },\r\n registerValidator: function () { return Disposable.None; },\r\n registerExternalUriResolver: function () { return Disposable.None; },\r\n setExternalOpener: function () { },\r\n open: function () {\r\n return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {\r\n return [2 /*return*/, false];\r\n }); });\r\n },\r\n resolveExternalUri: function (uri) {\r\n return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {\r\n return [2 /*return*/, { resolved: uri, dispose: function () { } }];\r\n }); });\r\n },\r\n});\r\nexport function matchesScheme(target, scheme) {\r\n if (URI.isUri(target)) {\r\n return equalsIgnoreCase(target.scheme, scheme);\r\n }\r\n else {\r\n return startsWithIgnoreCase(target, scheme + ':');\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { LinkedList } from '../../../base/common/linkedList.js';\r\nimport { parse } from '../../../base/common/marshalling.js';\r\nimport { Schemas } from '../../../base/common/network.js';\r\nimport { normalizePath } from '../../../base/common/resources.js';\r\nimport { URI } from '../../../base/common/uri.js';\r\nimport { ICodeEditorService } from './codeEditorService.js';\r\nimport { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';\r\nimport { matchesScheme } from '../../../platform/opener/common/opener.js';\r\nimport { EditorOpenContext } from '../../../platform/editor/common/editor.js';\r\nvar CommandOpener = /** @class */ (function () {\r\n function CommandOpener(_commandService) {\r\n this._commandService = _commandService;\r\n }\r\n CommandOpener.prototype.open = function (target) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var args;\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n if (!matchesScheme(target, Schemas.command)) {\r\n return [2 /*return*/, false];\r\n }\r\n // run command or bail out if command isn't known\r\n if (typeof target === 'string') {\r\n target = URI.parse(target);\r\n }\r\n if (!CommandsRegistry.getCommand(target.path)) {\r\n throw new Error(\"command '\" + target.path + \"' NOT known\");\r\n }\r\n args = [];\r\n try {\r\n args = parse(decodeURIComponent(target.query));\r\n }\r\n catch (_c) {\r\n // ignore and retry\r\n try {\r\n args = parse(target.query);\r\n }\r\n catch (_d) {\r\n // ignore error\r\n }\r\n }\r\n if (!Array.isArray(args)) {\r\n args = [args];\r\n }\r\n return [4 /*yield*/, (_a = this._commandService).executeCommand.apply(_a, __spreadArrays([target.path], args))];\r\n case 1:\r\n _b.sent();\r\n return [2 /*return*/, true];\r\n }\r\n });\r\n });\r\n };\r\n CommandOpener = __decorate([\r\n __param(0, ICommandService)\r\n ], CommandOpener);\r\n return CommandOpener;\r\n}());\r\nvar EditorOpener = /** @class */ (function () {\r\n function EditorOpener(_editorService) {\r\n this._editorService = _editorService;\r\n }\r\n EditorOpener.prototype.open = function (target, options) {\r\n var _a, _b;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var selection, match;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n if (typeof target === 'string') {\r\n target = URI.parse(target);\r\n }\r\n selection = undefined;\r\n match = /^L?(\\d+)(?:,(\\d+))?/.exec(target.fragment);\r\n if (match) {\r\n // support file:///some/file.js#73,84\r\n // support file:///some/file.js#L73\r\n selection = {\r\n startLineNumber: parseInt(match[1]),\r\n startColumn: match[2] ? parseInt(match[2]) : 1\r\n };\r\n // remove fragment\r\n target = target.with({ fragment: '' });\r\n }\r\n if (target.scheme === Schemas.file) {\r\n target = normalizePath(target); // workaround for non-normalized paths (https://github.com/Microsoft/vscode/issues/12954)\r\n }\r\n return [4 /*yield*/, this._editorService.openCodeEditor({ resource: target, options: { selection: selection, context: ((_a = options) === null || _a === void 0 ? void 0 : _a.fromUserGesture) ? EditorOpenContext.USER : EditorOpenContext.API } }, this._editorService.getFocusedCodeEditor(), (_b = options) === null || _b === void 0 ? void 0 : _b.openToSide)];\r\n case 1:\r\n _c.sent();\r\n return [2 /*return*/, true];\r\n }\r\n });\r\n });\r\n };\r\n EditorOpener = __decorate([\r\n __param(0, ICodeEditorService)\r\n ], EditorOpener);\r\n return EditorOpener;\r\n}());\r\nvar OpenerService = /** @class */ (function () {\r\n function OpenerService(editorService, commandService) {\r\n var _this = this;\r\n this._openers = new LinkedList();\r\n this._validators = new LinkedList();\r\n this._resolvers = new LinkedList();\r\n // Default external opener is going through window.open()\r\n this._externalOpener = {\r\n openExternal: function (href) {\r\n dom.windowOpenNoOpener(href);\r\n return Promise.resolve(true);\r\n }\r\n };\r\n // Default opener: maito, http(s), command, and catch-all-editors\r\n this._openers.push({\r\n open: function (target, options) { return __awaiter(_this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n if (!(((_a = options) === null || _a === void 0 ? void 0 : _a.openExternal) || matchesScheme(target, Schemas.mailto) || matchesScheme(target, Schemas.http) || matchesScheme(target, Schemas.https))) return [3 /*break*/, 2];\r\n // open externally\r\n return [4 /*yield*/, this._doOpenExternal(target, options)];\r\n case 1:\r\n // open externally\r\n _b.sent();\r\n return [2 /*return*/, true];\r\n case 2: return [2 /*return*/, false];\r\n }\r\n });\r\n }); }\r\n });\r\n this._openers.push(new CommandOpener(commandService));\r\n this._openers.push(new EditorOpener(editorService));\r\n }\r\n OpenerService.prototype.open = function (target, options) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _i, _a, validator, _b, _c, opener_1, handled;\r\n return __generator(this, function (_d) {\r\n switch (_d.label) {\r\n case 0:\r\n _i = 0, _a = this._validators.toArray();\r\n _d.label = 1;\r\n case 1:\r\n if (!(_i < _a.length)) return [3 /*break*/, 4];\r\n validator = _a[_i];\r\n return [4 /*yield*/, validator.shouldOpen(target)];\r\n case 2:\r\n if (!(_d.sent())) {\r\n return [2 /*return*/, false];\r\n }\r\n _d.label = 3;\r\n case 3:\r\n _i++;\r\n return [3 /*break*/, 1];\r\n case 4:\r\n _b = 0, _c = this._openers.toArray();\r\n _d.label = 5;\r\n case 5:\r\n if (!(_b < _c.length)) return [3 /*break*/, 8];\r\n opener_1 = _c[_b];\r\n return [4 /*yield*/, opener_1.open(target, options)];\r\n case 6:\r\n handled = _d.sent();\r\n if (handled) {\r\n return [2 /*return*/, true];\r\n }\r\n _d.label = 7;\r\n case 7:\r\n _b++;\r\n return [3 /*break*/, 5];\r\n case 8: return [2 /*return*/, false];\r\n }\r\n });\r\n });\r\n };\r\n OpenerService.prototype.resolveExternalUri = function (resource, options) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _i, _a, resolver, result;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _i = 0, _a = this._resolvers.toArray();\r\n _b.label = 1;\r\n case 1:\r\n if (!(_i < _a.length)) return [3 /*break*/, 4];\r\n resolver = _a[_i];\r\n return [4 /*yield*/, resolver.resolveExternalUri(resource, options)];\r\n case 2:\r\n result = _b.sent();\r\n if (result) {\r\n return [2 /*return*/, result];\r\n }\r\n _b.label = 3;\r\n case 3:\r\n _i++;\r\n return [3 /*break*/, 1];\r\n case 4: return [2 /*return*/, { resolved: resource, dispose: function () { } }];\r\n }\r\n });\r\n });\r\n };\r\n OpenerService.prototype._doOpenExternal = function (resource, options) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var uri, resolved;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n uri = typeof resource === 'string' ? URI.parse(resource) : resource;\r\n return [4 /*yield*/, this.resolveExternalUri(uri, options)];\r\n case 1:\r\n resolved = (_a.sent()).resolved;\r\n if (typeof resource === 'string' && uri.toString() === resolved.toString()) {\r\n // open the url-string AS IS\r\n return [2 /*return*/, this._externalOpener.openExternal(resource)];\r\n }\r\n else {\r\n // open URI using the toString(noEncode)+encodeURI-trick\r\n return [2 /*return*/, this._externalOpener.openExternal(encodeURI(resolved.toString(true)))];\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n OpenerService.prototype.dispose = function () {\r\n this._validators.clear();\r\n };\r\n OpenerService = __decorate([\r\n __param(0, ICodeEditorService),\r\n __param(1, ICommandService)\r\n ], OpenerService);\r\n return OpenerService;\r\n}());\r\nexport { OpenerService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * Throws an error with the provided message if the provided value does not evaluate to a true Javascript value.\r\n */\r\nexport function ok(value, message) {\r\n if (!value) {\r\n throw new Error(message ? 'Assertion failed (' + message + ')' : 'Assertion Failed');\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { isObject, isUndefinedOrNull, isArray } from './types.js';\r\nexport function deepClone(obj) {\r\n if (!obj || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n if (obj instanceof RegExp) {\r\n // See https://github.com/Microsoft/TypeScript/issues/10990\r\n return obj;\r\n }\r\n var result = Array.isArray(obj) ? [] : {};\r\n Object.keys(obj).forEach(function (key) {\r\n if (obj[key] && typeof obj[key] === 'object') {\r\n result[key] = deepClone(obj[key]);\r\n }\r\n else {\r\n result[key] = obj[key];\r\n }\r\n });\r\n return result;\r\n}\r\nexport function deepFreeze(obj) {\r\n if (!obj || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n var stack = [obj];\r\n while (stack.length > 0) {\r\n var obj_1 = stack.shift();\r\n Object.freeze(obj_1);\r\n for (var key in obj_1) {\r\n if (_hasOwnProperty.call(obj_1, key)) {\r\n var prop = obj_1[key];\r\n if (typeof prop === 'object' && !Object.isFrozen(prop)) {\r\n stack.push(prop);\r\n }\r\n }\r\n }\r\n }\r\n return obj;\r\n}\r\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\r\nexport function cloneAndChange(obj, changer) {\r\n return _cloneAndChange(obj, changer, new Set());\r\n}\r\nfunction _cloneAndChange(obj, changer, seen) {\r\n if (isUndefinedOrNull(obj)) {\r\n return obj;\r\n }\r\n var changed = changer(obj);\r\n if (typeof changed !== 'undefined') {\r\n return changed;\r\n }\r\n if (isArray(obj)) {\r\n var r1 = [];\r\n for (var _i = 0, obj_2 = obj; _i < obj_2.length; _i++) {\r\n var e = obj_2[_i];\r\n r1.push(_cloneAndChange(e, changer, seen));\r\n }\r\n return r1;\r\n }\r\n if (isObject(obj)) {\r\n if (seen.has(obj)) {\r\n throw new Error('Cannot clone recursive data-structure');\r\n }\r\n seen.add(obj);\r\n var r2 = {};\r\n for (var i2 in obj) {\r\n if (_hasOwnProperty.call(obj, i2)) {\r\n r2[i2] = _cloneAndChange(obj[i2], changer, seen);\r\n }\r\n }\r\n seen.delete(obj);\r\n return r2;\r\n }\r\n return obj;\r\n}\r\n/**\r\n * Copies all properties of source into destination. The optional parameter \"overwrite\" allows to control\r\n * if existing properties on the destination should be overwritten or not. Defaults to true (overwrite).\r\n */\r\nexport function mixin(destination, source, overwrite) {\r\n if (overwrite === void 0) { overwrite = true; }\r\n if (!isObject(destination)) {\r\n return source;\r\n }\r\n if (isObject(source)) {\r\n Object.keys(source).forEach(function (key) {\r\n if (key in destination) {\r\n if (overwrite) {\r\n if (isObject(destination[key]) && isObject(source[key])) {\r\n mixin(destination[key], source[key], overwrite);\r\n }\r\n else {\r\n destination[key] = source[key];\r\n }\r\n }\r\n }\r\n else {\r\n destination[key] = source[key];\r\n }\r\n });\r\n }\r\n return destination;\r\n}\r\nexport function assign(destination) {\r\n var sources = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n sources[_i - 1] = arguments[_i];\r\n }\r\n sources.forEach(function (source) { return Object.keys(source).forEach(function (key) { return destination[key] = source[key]; }); });\r\n return destination;\r\n}\r\nexport function equals(one, other) {\r\n if (one === other) {\r\n return true;\r\n }\r\n if (one === null || one === undefined || other === null || other === undefined) {\r\n return false;\r\n }\r\n if (typeof one !== typeof other) {\r\n return false;\r\n }\r\n if (typeof one !== 'object') {\r\n return false;\r\n }\r\n if ((Array.isArray(one)) !== (Array.isArray(other))) {\r\n return false;\r\n }\r\n var i;\r\n var key;\r\n if (Array.isArray(one)) {\r\n if (one.length !== other.length) {\r\n return false;\r\n }\r\n for (i = 0; i < one.length; i++) {\r\n if (!equals(one[i], other[i])) {\r\n return false;\r\n }\r\n }\r\n }\r\n else {\r\n var oneKeys = [];\r\n for (key in one) {\r\n oneKeys.push(key);\r\n }\r\n oneKeys.sort();\r\n var otherKeys = [];\r\n for (key in other) {\r\n otherKeys.push(key);\r\n }\r\n otherKeys.sort();\r\n if (!equals(oneKeys, otherKeys)) {\r\n return false;\r\n }\r\n for (i = 0; i < oneKeys.length; i++) {\r\n if (!equals(one[oneKeys[i]], other[oneKeys[i]])) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\nexport function getOrDefault(obj, fn, defaultValue) {\r\n var result = fn(obj);\r\n return typeof result === 'undefined' ? defaultValue : result;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as assert from '../../../base/common/assert.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport * as objects from '../../../base/common/objects.js';\r\nimport { Range } from '../../common/core/range.js';\r\nvar defaultOptions = {\r\n followsCaret: true,\r\n ignoreCharChanges: true,\r\n alwaysRevealFirst: true\r\n};\r\n/**\r\n * Create a new diff navigator for the provided diff editor.\r\n */\r\nvar DiffNavigator = /** @class */ (function (_super) {\r\n __extends(DiffNavigator, _super);\r\n function DiffNavigator(editor, options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this) || this;\r\n _this._onDidUpdate = _this._register(new Emitter());\r\n _this._editor = editor;\r\n _this._options = objects.mixin(options, defaultOptions, false);\r\n _this.disposed = false;\r\n _this.nextIdx = -1;\r\n _this.ranges = [];\r\n _this.ignoreSelectionChange = false;\r\n _this.revealFirst = Boolean(_this._options.alwaysRevealFirst);\r\n // hook up to diff editor for diff, disposal, and caret move\r\n _this._register(_this._editor.onDidDispose(function () { return _this.dispose(); }));\r\n _this._register(_this._editor.onDidUpdateDiff(function () { return _this._onDiffUpdated(); }));\r\n if (_this._options.followsCaret) {\r\n _this._register(_this._editor.getModifiedEditor().onDidChangeCursorPosition(function (e) {\r\n if (_this.ignoreSelectionChange) {\r\n return;\r\n }\r\n _this.nextIdx = -1;\r\n }));\r\n }\r\n if (_this._options.alwaysRevealFirst) {\r\n _this._register(_this._editor.getModifiedEditor().onDidChangeModel(function (e) {\r\n _this.revealFirst = true;\r\n }));\r\n }\r\n // init things\r\n _this._init();\r\n return _this;\r\n }\r\n DiffNavigator.prototype._init = function () {\r\n var changes = this._editor.getLineChanges();\r\n if (!changes) {\r\n return;\r\n }\r\n };\r\n DiffNavigator.prototype._onDiffUpdated = function () {\r\n this._init();\r\n this._compute(this._editor.getLineChanges());\r\n if (this.revealFirst) {\r\n // Only reveal first on first non-null changes\r\n if (this._editor.getLineChanges() !== null) {\r\n this.revealFirst = false;\r\n this.nextIdx = -1;\r\n this.next(1 /* Immediate */);\r\n }\r\n }\r\n };\r\n DiffNavigator.prototype._compute = function (lineChanges) {\r\n var _this = this;\r\n // new ranges\r\n this.ranges = [];\r\n if (lineChanges) {\r\n // create ranges from changes\r\n lineChanges.forEach(function (lineChange) {\r\n if (!_this._options.ignoreCharChanges && lineChange.charChanges) {\r\n lineChange.charChanges.forEach(function (charChange) {\r\n _this.ranges.push({\r\n rhs: true,\r\n range: new Range(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn)\r\n });\r\n });\r\n }\r\n else {\r\n _this.ranges.push({\r\n rhs: true,\r\n range: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedStartLineNumber, 1)\r\n });\r\n }\r\n });\r\n }\r\n // sort\r\n this.ranges.sort(function (left, right) {\r\n if (left.range.getStartPosition().isBeforeOrEqual(right.range.getStartPosition())) {\r\n return -1;\r\n }\r\n else if (right.range.getStartPosition().isBeforeOrEqual(left.range.getStartPosition())) {\r\n return 1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n this._onDidUpdate.fire(this);\r\n };\r\n DiffNavigator.prototype._initIdx = function (fwd) {\r\n var found = false;\r\n var position = this._editor.getPosition();\r\n if (!position) {\r\n this.nextIdx = 0;\r\n return;\r\n }\r\n for (var i = 0, len = this.ranges.length; i < len && !found; i++) {\r\n var range = this.ranges[i].range;\r\n if (position.isBeforeOrEqual(range.getStartPosition())) {\r\n this.nextIdx = i + (fwd ? 0 : -1);\r\n found = true;\r\n }\r\n }\r\n if (!found) {\r\n // after the last change\r\n this.nextIdx = fwd ? 0 : this.ranges.length - 1;\r\n }\r\n if (this.nextIdx < 0) {\r\n this.nextIdx = this.ranges.length - 1;\r\n }\r\n };\r\n DiffNavigator.prototype._move = function (fwd, scrollType) {\r\n assert.ok(!this.disposed, 'Illegal State - diff navigator has been disposed');\r\n if (!this.canNavigate()) {\r\n return;\r\n }\r\n if (this.nextIdx === -1) {\r\n this._initIdx(fwd);\r\n }\r\n else if (fwd) {\r\n this.nextIdx += 1;\r\n if (this.nextIdx >= this.ranges.length) {\r\n this.nextIdx = 0;\r\n }\r\n }\r\n else {\r\n this.nextIdx -= 1;\r\n if (this.nextIdx < 0) {\r\n this.nextIdx = this.ranges.length - 1;\r\n }\r\n }\r\n var info = this.ranges[this.nextIdx];\r\n this.ignoreSelectionChange = true;\r\n try {\r\n var pos = info.range.getStartPosition();\r\n this._editor.setPosition(pos);\r\n this._editor.revealPositionInCenter(pos, scrollType);\r\n }\r\n finally {\r\n this.ignoreSelectionChange = false;\r\n }\r\n };\r\n DiffNavigator.prototype.canNavigate = function () {\r\n return this.ranges && this.ranges.length > 0;\r\n };\r\n DiffNavigator.prototype.next = function (scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._move(true, scrollType);\r\n };\r\n DiffNavigator.prototype.previous = function (scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._move(false, scrollType);\r\n };\r\n DiffNavigator.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this.ranges = [];\r\n this.disposed = true;\r\n };\r\n return DiffNavigator;\r\n}(Disposable));\r\nexport { DiffNavigator };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Emitter } from '../../../base/common/event.js';\r\nexport var EditorZoom = new /** @class */ (function () {\r\n function class_1() {\r\n this._zoomLevel = 0;\r\n this._onDidChangeZoomLevel = new Emitter();\r\n this.onDidChangeZoomLevel = this._onDidChangeZoomLevel.event;\r\n }\r\n class_1.prototype.getZoomLevel = function () {\r\n return this._zoomLevel;\r\n };\r\n class_1.prototype.setZoomLevel = function (zoomLevel) {\r\n zoomLevel = Math.min(Math.max(-5, zoomLevel), 20);\r\n if (this._zoomLevel === zoomLevel) {\r\n return;\r\n }\r\n this._zoomLevel = zoomLevel;\r\n this._onDidChangeZoomLevel.fire(this._zoomLevel);\r\n };\r\n return class_1;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as platform from '../../../base/common/platform.js';\r\nimport { EditorZoom } from './editorZoom.js';\r\n/**\r\n * Determined from empirical observations.\r\n * @internal\r\n */\r\nvar GOLDEN_LINE_HEIGHT_RATIO = platform.isMacintosh ? 1.5 : 1.35;\r\n/**\r\n * @internal\r\n */\r\nvar MINIMUM_LINE_HEIGHT = 8;\r\nvar BareFontInfo = /** @class */ (function () {\r\n /**\r\n * @internal\r\n */\r\n function BareFontInfo(opts) {\r\n this.zoomLevel = opts.zoomLevel;\r\n this.fontFamily = String(opts.fontFamily);\r\n this.fontWeight = String(opts.fontWeight);\r\n this.fontSize = opts.fontSize;\r\n this.fontFeatureSettings = opts.fontFeatureSettings;\r\n this.lineHeight = opts.lineHeight | 0;\r\n this.letterSpacing = opts.letterSpacing;\r\n }\r\n /**\r\n * @internal\r\n */\r\n BareFontInfo.createFromValidatedSettings = function (options, zoomLevel, ignoreEditorZoom) {\r\n var fontFamily = options.get(31 /* fontFamily */);\r\n var fontWeight = options.get(35 /* fontWeight */);\r\n var fontSize = options.get(34 /* fontSize */);\r\n var fontFeatureSettings = options.get(33 /* fontLigatures */);\r\n var lineHeight = options.get(47 /* lineHeight */);\r\n var letterSpacing = options.get(44 /* letterSpacing */);\r\n return BareFontInfo._create(fontFamily, fontWeight, fontSize, fontFeatureSettings, lineHeight, letterSpacing, zoomLevel, ignoreEditorZoom);\r\n };\r\n /**\r\n * @internal\r\n */\r\n BareFontInfo._create = function (fontFamily, fontWeight, fontSize, fontFeatureSettings, lineHeight, letterSpacing, zoomLevel, ignoreEditorZoom) {\r\n if (lineHeight === 0) {\r\n lineHeight = Math.round(GOLDEN_LINE_HEIGHT_RATIO * fontSize);\r\n }\r\n else if (lineHeight < MINIMUM_LINE_HEIGHT) {\r\n lineHeight = MINIMUM_LINE_HEIGHT;\r\n }\r\n var editorZoomLevelMultiplier = 1 + (ignoreEditorZoom ? 0 : EditorZoom.getZoomLevel() * 0.1);\r\n fontSize *= editorZoomLevelMultiplier;\r\n lineHeight *= editorZoomLevelMultiplier;\r\n return new BareFontInfo({\r\n zoomLevel: zoomLevel,\r\n fontFamily: fontFamily,\r\n fontWeight: fontWeight,\r\n fontSize: fontSize,\r\n fontFeatureSettings: fontFeatureSettings,\r\n lineHeight: lineHeight,\r\n letterSpacing: letterSpacing\r\n });\r\n };\r\n /**\r\n * @internal\r\n */\r\n BareFontInfo.prototype.getId = function () {\r\n return this.zoomLevel + '-' + this.fontFamily + '-' + this.fontWeight + '-' + this.fontSize + '-' + this.fontFeatureSettings + '-' + this.lineHeight + '-' + this.letterSpacing;\r\n };\r\n /**\r\n * @internal\r\n */\r\n BareFontInfo.prototype.getMassagedFontFamily = function () {\r\n if (/[,\"']/.test(this.fontFamily)) {\r\n // Looks like the font family might be already escaped\r\n return this.fontFamily;\r\n }\r\n if (/[+ ]/.test(this.fontFamily)) {\r\n // Wrap a font family using + or with quotes\r\n return \"\\\"\" + this.fontFamily + \"\\\"\";\r\n }\r\n return this.fontFamily;\r\n };\r\n return BareFontInfo;\r\n}());\r\nexport { BareFontInfo };\r\nvar FontInfo = /** @class */ (function (_super) {\r\n __extends(FontInfo, _super);\r\n /**\r\n * @internal\r\n */\r\n function FontInfo(opts, isTrusted) {\r\n var _this = _super.call(this, opts) || this;\r\n _this.isTrusted = isTrusted;\r\n _this.isMonospace = opts.isMonospace;\r\n _this.typicalHalfwidthCharacterWidth = opts.typicalHalfwidthCharacterWidth;\r\n _this.typicalFullwidthCharacterWidth = opts.typicalFullwidthCharacterWidth;\r\n _this.canUseHalfwidthRightwardsArrow = opts.canUseHalfwidthRightwardsArrow;\r\n _this.spaceWidth = opts.spaceWidth;\r\n _this.maxDigitWidth = opts.maxDigitWidth;\r\n return _this;\r\n }\r\n return FontInfo;\r\n}(BareFontInfo));\r\nexport { FontInfo };\r\n","/**\r\n * @internal\r\n */\r\nexport function isThemeColor(o) {\r\n return o && typeof o.id === 'string';\r\n}\r\n/**\r\n * The type of the `IEditor`.\r\n */\r\nexport var EditorType = {\r\n ICodeEditor: 'vs.editor.ICodeEditor',\r\n IDiffEditor: 'vs.editor.IDiffEditor'\r\n};\r\n/**\r\n * Built-in commands.\r\n * @internal\r\n */\r\nexport var Handler = {\r\n ExecuteCommand: 'executeCommand',\r\n ExecuteCommands: 'executeCommands',\r\n Type: 'type',\r\n ReplacePreviousChar: 'replacePreviousChar',\r\n CompositionStart: 'compositionStart',\r\n CompositionEnd: 'compositionEnd',\r\n Paste: 'paste',\r\n Cut: 'cut',\r\n Undo: 'undo',\r\n Redo: 'redo',\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * Vertical Lane in the overview ruler of the editor.\r\n */\r\nexport var OverviewRulerLane;\r\n(function (OverviewRulerLane) {\r\n OverviewRulerLane[OverviewRulerLane[\"Left\"] = 1] = \"Left\";\r\n OverviewRulerLane[OverviewRulerLane[\"Center\"] = 2] = \"Center\";\r\n OverviewRulerLane[OverviewRulerLane[\"Right\"] = 4] = \"Right\";\r\n OverviewRulerLane[OverviewRulerLane[\"Full\"] = 7] = \"Full\";\r\n})(OverviewRulerLane || (OverviewRulerLane = {}));\r\n/**\r\n * Position in the minimap to render the decoration.\r\n */\r\nexport var MinimapPosition;\r\n(function (MinimapPosition) {\r\n MinimapPosition[MinimapPosition[\"Inline\"] = 1] = \"Inline\";\r\n MinimapPosition[MinimapPosition[\"Gutter\"] = 2] = \"Gutter\";\r\n})(MinimapPosition || (MinimapPosition = {}));\r\nvar TextModelResolvedOptions = /** @class */ (function () {\r\n /**\r\n * @internal\r\n */\r\n function TextModelResolvedOptions(src) {\r\n this.tabSize = Math.max(1, src.tabSize | 0);\r\n this.indentSize = src.tabSize | 0;\r\n this.insertSpaces = Boolean(src.insertSpaces);\r\n this.defaultEOL = src.defaultEOL | 0;\r\n this.trimAutoWhitespace = Boolean(src.trimAutoWhitespace);\r\n }\r\n /**\r\n * @internal\r\n */\r\n TextModelResolvedOptions.prototype.equals = function (other) {\r\n return (this.tabSize === other.tabSize\r\n && this.indentSize === other.indentSize\r\n && this.insertSpaces === other.insertSpaces\r\n && this.defaultEOL === other.defaultEOL\r\n && this.trimAutoWhitespace === other.trimAutoWhitespace);\r\n };\r\n /**\r\n * @internal\r\n */\r\n TextModelResolvedOptions.prototype.createChangeEvent = function (newOpts) {\r\n return {\r\n tabSize: this.tabSize !== newOpts.tabSize,\r\n indentSize: this.indentSize !== newOpts.indentSize,\r\n insertSpaces: this.insertSpaces !== newOpts.insertSpaces,\r\n trimAutoWhitespace: this.trimAutoWhitespace !== newOpts.trimAutoWhitespace,\r\n };\r\n };\r\n return TextModelResolvedOptions;\r\n}());\r\nexport { TextModelResolvedOptions };\r\nvar FindMatch = /** @class */ (function () {\r\n /**\r\n * @internal\r\n */\r\n function FindMatch(range, matches) {\r\n this.range = range;\r\n this.matches = matches;\r\n }\r\n return FindMatch;\r\n}());\r\nexport { FindMatch };\r\n/**\r\n * @internal\r\n */\r\nvar ApplyEditsResult = /** @class */ (function () {\r\n function ApplyEditsResult(reverseEdits, changes, trimAutoWhitespaceLineNumbers) {\r\n this.reverseEdits = reverseEdits;\r\n this.changes = changes;\r\n this.trimAutoWhitespaceLineNumbers = trimAutoWhitespaceLineNumbers;\r\n }\r\n return ApplyEditsResult;\r\n}());\r\nexport { ApplyEditsResult };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as arrays from './arrays.js';\r\nimport * as strings from './strings.js';\r\nimport * as extpath from './extpath.js';\r\nimport * as paths from './path.js';\r\nimport { LRUCache } from './map.js';\r\nimport { isThenable } from './async.js';\r\nvar GLOBSTAR = '**';\r\nvar GLOB_SPLIT = '/';\r\nvar PATH_REGEX = '[/\\\\\\\\]'; // any slash or backslash\r\nvar NO_PATH_REGEX = '[^/\\\\\\\\]'; // any non-slash and non-backslash\r\nvar ALL_FORWARD_SLASHES = /\\//g;\r\nfunction starsToRegExp(starCount) {\r\n switch (starCount) {\r\n case 0:\r\n return '';\r\n case 1:\r\n return NO_PATH_REGEX + \"*?\"; // 1 star matches any number of characters except path separator (/ and \\) - non greedy (?)\r\n default:\r\n // Matches: (Path Sep OR Path Val followed by Path Sep OR Path Sep followed by Path Val) 0-many times\r\n // Group is non capturing because we don't need to capture at all (?:...)\r\n // Overall we use non-greedy matching because it could be that we match too much\r\n return \"(?:\" + PATH_REGEX + \"|\" + NO_PATH_REGEX + \"+\" + PATH_REGEX + \"|\" + PATH_REGEX + NO_PATH_REGEX + \"+)*?\";\r\n }\r\n}\r\nexport function splitGlobAware(pattern, splitChar) {\r\n if (!pattern) {\r\n return [];\r\n }\r\n var segments = [];\r\n var inBraces = false;\r\n var inBrackets = false;\r\n var curVal = '';\r\n for (var _i = 0, pattern_1 = pattern; _i < pattern_1.length; _i++) {\r\n var char = pattern_1[_i];\r\n switch (char) {\r\n case splitChar:\r\n if (!inBraces && !inBrackets) {\r\n segments.push(curVal);\r\n curVal = '';\r\n continue;\r\n }\r\n break;\r\n case '{':\r\n inBraces = true;\r\n break;\r\n case '}':\r\n inBraces = false;\r\n break;\r\n case '[':\r\n inBrackets = true;\r\n break;\r\n case ']':\r\n inBrackets = false;\r\n break;\r\n }\r\n curVal += char;\r\n }\r\n // Tail\r\n if (curVal) {\r\n segments.push(curVal);\r\n }\r\n return segments;\r\n}\r\nfunction parseRegExp(pattern) {\r\n if (!pattern) {\r\n return '';\r\n }\r\n var regEx = '';\r\n // Split up into segments for each slash found\r\n var segments = splitGlobAware(pattern, GLOB_SPLIT);\r\n // Special case where we only have globstars\r\n if (segments.every(function (s) { return s === GLOBSTAR; })) {\r\n regEx = '.*';\r\n }\r\n // Build regex over segments\r\n else {\r\n var previousSegmentWasGlobStar_1 = false;\r\n segments.forEach(function (segment, index) {\r\n // Globstar is special\r\n if (segment === GLOBSTAR) {\r\n // if we have more than one globstar after another, just ignore it\r\n if (!previousSegmentWasGlobStar_1) {\r\n regEx += starsToRegExp(2);\r\n previousSegmentWasGlobStar_1 = true;\r\n }\r\n return;\r\n }\r\n // States\r\n var inBraces = false;\r\n var braceVal = '';\r\n var inBrackets = false;\r\n var bracketVal = '';\r\n for (var _i = 0, segment_1 = segment; _i < segment_1.length; _i++) {\r\n var char = segment_1[_i];\r\n // Support brace expansion\r\n if (char !== '}' && inBraces) {\r\n braceVal += char;\r\n continue;\r\n }\r\n // Support brackets\r\n if (inBrackets && (char !== ']' || !bracketVal) /* ] is literally only allowed as first character in brackets to match it */) {\r\n var res = void 0;\r\n // range operator\r\n if (char === '-') {\r\n res = char;\r\n }\r\n // negation operator (only valid on first index in bracket)\r\n else if ((char === '^' || char === '!') && !bracketVal) {\r\n res = '^';\r\n }\r\n // glob split matching is not allowed within character ranges\r\n // see http://man7.org/linux/man-pages/man7/glob.7.html\r\n else if (char === GLOB_SPLIT) {\r\n res = '';\r\n }\r\n // anything else gets escaped\r\n else {\r\n res = strings.escapeRegExpCharacters(char);\r\n }\r\n bracketVal += res;\r\n continue;\r\n }\r\n switch (char) {\r\n case '{':\r\n inBraces = true;\r\n continue;\r\n case '[':\r\n inBrackets = true;\r\n continue;\r\n case '}':\r\n var choices = splitGlobAware(braceVal, ',');\r\n // Converts {foo,bar} => [foo|bar]\r\n var braceRegExp = \"(?:\" + choices.map(function (c) { return parseRegExp(c); }).join('|') + \")\";\r\n regEx += braceRegExp;\r\n inBraces = false;\r\n braceVal = '';\r\n break;\r\n case ']':\r\n regEx += ('[' + bracketVal + ']');\r\n inBrackets = false;\r\n bracketVal = '';\r\n break;\r\n case '?':\r\n regEx += NO_PATH_REGEX; // 1 ? matches any single character except path separator (/ and \\)\r\n continue;\r\n case '*':\r\n regEx += starsToRegExp(1);\r\n continue;\r\n default:\r\n regEx += strings.escapeRegExpCharacters(char);\r\n }\r\n }\r\n // Tail: Add the slash we had split on if there is more to come and the remaining pattern is not a globstar\r\n // For example if pattern: some/**/*.js we want the \"/\" after some to be included in the RegEx to prevent\r\n // a folder called \"something\" to match as well.\r\n // However, if pattern: some/**, we tolerate that we also match on \"something\" because our globstar behaviour\r\n // is to match 0-N segments.\r\n if (index < segments.length - 1 && (segments[index + 1] !== GLOBSTAR || index + 2 < segments.length)) {\r\n regEx += PATH_REGEX;\r\n }\r\n // reset state\r\n previousSegmentWasGlobStar_1 = false;\r\n });\r\n }\r\n return regEx;\r\n}\r\n// regexes to check for trival glob patterns that just check for String#endsWith\r\nvar T1 = /^\\*\\*\\/\\*\\.[\\w\\.-]+$/; // **/*.something\r\nvar T2 = /^\\*\\*\\/([\\w\\.-]+)\\/?$/; // **/something\r\nvar T3 = /^{\\*\\*\\/[\\*\\.]?[\\w\\.-]+\\/?(,\\*\\*\\/[\\*\\.]?[\\w\\.-]+\\/?)*}$/; // {**/*.something,**/*.else} or {**/package.json,**/project.json}\r\nvar T3_2 = /^{\\*\\*\\/[\\*\\.]?[\\w\\.-]+(\\/(\\*\\*)?)?(,\\*\\*\\/[\\*\\.]?[\\w\\.-]+(\\/(\\*\\*)?)?)*}$/; // Like T3, with optional trailing /**\r\nvar T4 = /^\\*\\*((\\/[\\w\\.-]+)+)\\/?$/; // **/something/else\r\nvar T5 = /^([\\w\\.-]+(\\/[\\w\\.-]+)*)\\/?$/; // something/else\r\nvar CACHE = new LRUCache(10000); // bounded to 10000 elements\r\nvar FALSE = function () {\r\n return false;\r\n};\r\nvar NULL = function () {\r\n return null;\r\n};\r\nfunction parsePattern(arg1, options) {\r\n if (!arg1) {\r\n return NULL;\r\n }\r\n // Handle IRelativePattern\r\n var pattern;\r\n if (typeof arg1 !== 'string') {\r\n pattern = arg1.pattern;\r\n }\r\n else {\r\n pattern = arg1;\r\n }\r\n // Whitespace trimming\r\n pattern = pattern.trim();\r\n // Check cache\r\n var patternKey = pattern + \"_\" + !!options.trimForExclusions;\r\n var parsedPattern = CACHE.get(patternKey);\r\n if (parsedPattern) {\r\n return wrapRelativePattern(parsedPattern, arg1);\r\n }\r\n // Check for Trivias\r\n var match;\r\n if (T1.test(pattern)) { // common pattern: **/*.txt just need endsWith check\r\n var base_1 = pattern.substr(4); // '**/*'.length === 4\r\n parsedPattern = function (path, basename) {\r\n return typeof path === 'string' && strings.endsWith(path, base_1) ? pattern : null;\r\n };\r\n }\r\n else if (match = T2.exec(trimForExclusions(pattern, options))) { // common pattern: **/some.txt just need basename check\r\n parsedPattern = trivia2(match[1], pattern);\r\n }\r\n else if ((options.trimForExclusions ? T3_2 : T3).test(pattern)) { // repetition of common patterns (see above) {**/*.txt,**/*.png}\r\n parsedPattern = trivia3(pattern, options);\r\n }\r\n else if (match = T4.exec(trimForExclusions(pattern, options))) { // common pattern: **/something/else just need endsWith check\r\n parsedPattern = trivia4and5(match[1].substr(1), pattern, true);\r\n }\r\n else if (match = T5.exec(trimForExclusions(pattern, options))) { // common pattern: something/else just need equals check\r\n parsedPattern = trivia4and5(match[1], pattern, false);\r\n }\r\n // Otherwise convert to pattern\r\n else {\r\n parsedPattern = toRegExp(pattern);\r\n }\r\n // Cache\r\n CACHE.set(patternKey, parsedPattern);\r\n return wrapRelativePattern(parsedPattern, arg1);\r\n}\r\nfunction wrapRelativePattern(parsedPattern, arg2) {\r\n if (typeof arg2 === 'string') {\r\n return parsedPattern;\r\n }\r\n return function (path, basename) {\r\n if (!extpath.isEqualOrParent(path, arg2.base)) {\r\n return null;\r\n }\r\n return parsedPattern(paths.relative(arg2.base, path), basename);\r\n };\r\n}\r\nfunction trimForExclusions(pattern, options) {\r\n return options.trimForExclusions && strings.endsWith(pattern, '/**') ? pattern.substr(0, pattern.length - 2) : pattern; // dropping **, tailing / is dropped later\r\n}\r\n// common pattern: **/some.txt just need basename check\r\nfunction trivia2(base, originalPattern) {\r\n var slashBase = \"/\" + base;\r\n var backslashBase = \"\\\\\" + base;\r\n var parsedPattern = function (path, basename) {\r\n if (typeof path !== 'string') {\r\n return null;\r\n }\r\n if (basename) {\r\n return basename === base ? originalPattern : null;\r\n }\r\n return path === base || strings.endsWith(path, slashBase) || strings.endsWith(path, backslashBase) ? originalPattern : null;\r\n };\r\n var basenames = [base];\r\n parsedPattern.basenames = basenames;\r\n parsedPattern.patterns = [originalPattern];\r\n parsedPattern.allBasenames = basenames;\r\n return parsedPattern;\r\n}\r\n// repetition of common patterns (see above) {**/*.txt,**/*.png}\r\nfunction trivia3(pattern, options) {\r\n var parsedPatterns = aggregateBasenameMatches(pattern.slice(1, -1).split(',')\r\n .map(function (pattern) { return parsePattern(pattern, options); })\r\n .filter(function (pattern) { return pattern !== NULL; }), pattern);\r\n var n = parsedPatterns.length;\r\n if (!n) {\r\n return NULL;\r\n }\r\n if (n === 1) {\r\n return parsedPatterns[0];\r\n }\r\n var parsedPattern = function (path, basename) {\r\n for (var i = 0, n_1 = parsedPatterns.length; i < n_1; i++) {\r\n if (parsedPatterns[i](path, basename)) {\r\n return pattern;\r\n }\r\n }\r\n return null;\r\n };\r\n var withBasenames = arrays.first(parsedPatterns, function (pattern) { return !!pattern.allBasenames; });\r\n if (withBasenames) {\r\n parsedPattern.allBasenames = withBasenames.allBasenames;\r\n }\r\n var allPaths = parsedPatterns.reduce(function (all, current) { return current.allPaths ? all.concat(current.allPaths) : all; }, []);\r\n if (allPaths.length) {\r\n parsedPattern.allPaths = allPaths;\r\n }\r\n return parsedPattern;\r\n}\r\n// common patterns: **/something/else just need endsWith check, something/else just needs and equals check\r\nfunction trivia4and5(path, pattern, matchPathEnds) {\r\n var nativePath = paths.sep !== paths.posix.sep ? path.replace(ALL_FORWARD_SLASHES, paths.sep) : path;\r\n var nativePathEnd = paths.sep + nativePath;\r\n var parsedPattern = matchPathEnds ? function (path, basename) {\r\n return typeof path === 'string' && (path === nativePath || strings.endsWith(path, nativePathEnd)) ? pattern : null;\r\n } : function (path, basename) {\r\n return typeof path === 'string' && path === nativePath ? pattern : null;\r\n };\r\n parsedPattern.allPaths = [(matchPathEnds ? '*/' : './') + path];\r\n return parsedPattern;\r\n}\r\nfunction toRegExp(pattern) {\r\n try {\r\n var regExp_1 = new RegExp(\"^\" + parseRegExp(pattern) + \"$\");\r\n return function (path, basename) {\r\n regExp_1.lastIndex = 0; // reset RegExp to its initial state to reuse it!\r\n return typeof path === 'string' && regExp_1.test(path) ? pattern : null;\r\n };\r\n }\r\n catch (error) {\r\n return NULL;\r\n }\r\n}\r\nexport function match(arg1, path, hasSibling) {\r\n if (!arg1 || typeof path !== 'string') {\r\n return false;\r\n }\r\n return parse(arg1)(path, undefined, hasSibling);\r\n}\r\nexport function parse(arg1, options) {\r\n if (options === void 0) { options = {}; }\r\n if (!arg1) {\r\n return FALSE;\r\n }\r\n // Glob with String\r\n if (typeof arg1 === 'string' || isRelativePattern(arg1)) {\r\n var parsedPattern_1 = parsePattern(arg1, options);\r\n if (parsedPattern_1 === NULL) {\r\n return FALSE;\r\n }\r\n var resultPattern = function (path, basename) {\r\n return !!parsedPattern_1(path, basename);\r\n };\r\n if (parsedPattern_1.allBasenames) {\r\n resultPattern.allBasenames = parsedPattern_1.allBasenames;\r\n }\r\n if (parsedPattern_1.allPaths) {\r\n resultPattern.allPaths = parsedPattern_1.allPaths;\r\n }\r\n return resultPattern;\r\n }\r\n // Glob with Expression\r\n return parsedExpression(arg1, options);\r\n}\r\nexport function isRelativePattern(obj) {\r\n var rp = obj;\r\n return rp && typeof rp.base === 'string' && typeof rp.pattern === 'string';\r\n}\r\nfunction parsedExpression(expression, options) {\r\n var parsedPatterns = aggregateBasenameMatches(Object.getOwnPropertyNames(expression)\r\n .map(function (pattern) { return parseExpressionPattern(pattern, expression[pattern], options); })\r\n .filter(function (pattern) { return pattern !== NULL; }));\r\n var n = parsedPatterns.length;\r\n if (!n) {\r\n return NULL;\r\n }\r\n if (!parsedPatterns.some(function (parsedPattern) { return !!parsedPattern.requiresSiblings; })) {\r\n if (n === 1) {\r\n return parsedPatterns[0];\r\n }\r\n var resultExpression_1 = function (path, basename) {\r\n for (var i = 0, n_2 = parsedPatterns.length; i < n_2; i++) {\r\n // Pattern matches path\r\n var result = parsedPatterns[i](path, basename);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n return null;\r\n };\r\n var withBasenames_1 = arrays.first(parsedPatterns, function (pattern) { return !!pattern.allBasenames; });\r\n if (withBasenames_1) {\r\n resultExpression_1.allBasenames = withBasenames_1.allBasenames;\r\n }\r\n var allPaths_1 = parsedPatterns.reduce(function (all, current) { return current.allPaths ? all.concat(current.allPaths) : all; }, []);\r\n if (allPaths_1.length) {\r\n resultExpression_1.allPaths = allPaths_1;\r\n }\r\n return resultExpression_1;\r\n }\r\n var resultExpression = function (path, basename, hasSibling) {\r\n var name = undefined;\r\n for (var i = 0, n_3 = parsedPatterns.length; i < n_3; i++) {\r\n // Pattern matches path\r\n var parsedPattern = parsedPatterns[i];\r\n if (parsedPattern.requiresSiblings && hasSibling) {\r\n if (!basename) {\r\n basename = paths.basename(path);\r\n }\r\n if (!name) {\r\n name = basename.substr(0, basename.length - paths.extname(path).length);\r\n }\r\n }\r\n var result = parsedPattern(path, basename, name, hasSibling);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n return null;\r\n };\r\n var withBasenames = arrays.first(parsedPatterns, function (pattern) { return !!pattern.allBasenames; });\r\n if (withBasenames) {\r\n resultExpression.allBasenames = withBasenames.allBasenames;\r\n }\r\n var allPaths = parsedPatterns.reduce(function (all, current) { return current.allPaths ? all.concat(current.allPaths) : all; }, []);\r\n if (allPaths.length) {\r\n resultExpression.allPaths = allPaths;\r\n }\r\n return resultExpression;\r\n}\r\nfunction parseExpressionPattern(pattern, value, options) {\r\n if (value === false) {\r\n return NULL; // pattern is disabled\r\n }\r\n var parsedPattern = parsePattern(pattern, options);\r\n if (parsedPattern === NULL) {\r\n return NULL;\r\n }\r\n // Expression Pattern is \r\n if (typeof value === 'boolean') {\r\n return parsedPattern;\r\n }\r\n // Expression Pattern is \r\n if (value) {\r\n var when_1 = value.when;\r\n if (typeof when_1 === 'string') {\r\n var result = function (path, basename, name, hasSibling) {\r\n if (!hasSibling || !parsedPattern(path, basename)) {\r\n return null;\r\n }\r\n var clausePattern = when_1.replace('$(basename)', name);\r\n var matched = hasSibling(clausePattern);\r\n return isThenable(matched) ?\r\n matched.then(function (m) { return m ? pattern : null; }) :\r\n matched ? pattern : null;\r\n };\r\n result.requiresSiblings = true;\r\n return result;\r\n }\r\n }\r\n // Expression is Anything\r\n return parsedPattern;\r\n}\r\nfunction aggregateBasenameMatches(parsedPatterns, result) {\r\n var basenamePatterns = parsedPatterns.filter(function (parsedPattern) { return !!parsedPattern.basenames; });\r\n if (basenamePatterns.length < 2) {\r\n return parsedPatterns;\r\n }\r\n var basenames = basenamePatterns.reduce(function (all, current) {\r\n var basenames = current.basenames;\r\n return basenames ? all.concat(basenames) : all;\r\n }, []);\r\n var patterns;\r\n if (result) {\r\n patterns = [];\r\n for (var i = 0, n = basenames.length; i < n; i++) {\r\n patterns.push(result);\r\n }\r\n }\r\n else {\r\n patterns = basenamePatterns.reduce(function (all, current) {\r\n var patterns = current.patterns;\r\n return patterns ? all.concat(patterns) : all;\r\n }, []);\r\n }\r\n var aggregate = function (path, basename) {\r\n if (typeof path !== 'string') {\r\n return null;\r\n }\r\n if (!basename) {\r\n var i = void 0;\r\n for (i = path.length; i > 0; i--) {\r\n var ch = path.charCodeAt(i - 1);\r\n if (ch === 47 /* Slash */ || ch === 92 /* Backslash */) {\r\n break;\r\n }\r\n }\r\n basename = path.substr(i);\r\n }\r\n var index = basenames.indexOf(basename);\r\n return index !== -1 ? patterns[index] : null;\r\n };\r\n aggregate.basenames = basenames;\r\n aggregate.patterns = patterns;\r\n aggregate.allBasenames = basenames;\r\n var aggregatedPatterns = parsedPatterns.filter(function (parsedPattern) { return !parsedPattern.basenames; });\r\n aggregatedPatterns.push(aggregate);\r\n return aggregatedPatterns;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { match as matchGlobPattern } from '../../../base/common/glob.js';\r\nexport function score(selector, candidateUri, candidateLanguage, candidateIsSynchronized) {\r\n if (Array.isArray(selector)) {\r\n // array -> take max individual value\r\n var ret = 0;\r\n for (var _i = 0, selector_1 = selector; _i < selector_1.length; _i++) {\r\n var filter = selector_1[_i];\r\n var value = score(filter, candidateUri, candidateLanguage, candidateIsSynchronized);\r\n if (value === 10) {\r\n return value; // already at the highest\r\n }\r\n if (value > ret) {\r\n ret = value;\r\n }\r\n }\r\n return ret;\r\n }\r\n else if (typeof selector === 'string') {\r\n if (!candidateIsSynchronized) {\r\n return 0;\r\n }\r\n // short-hand notion, desugars to\r\n // 'fooLang' -> { language: 'fooLang'}\r\n // '*' -> { language: '*' }\r\n if (selector === '*') {\r\n return 5;\r\n }\r\n else if (selector === candidateLanguage) {\r\n return 10;\r\n }\r\n else {\r\n return 0;\r\n }\r\n }\r\n else if (selector) {\r\n // filter -> select accordingly, use defaults for scheme\r\n var language = selector.language, pattern = selector.pattern, scheme = selector.scheme, hasAccessToAllModels = selector.hasAccessToAllModels;\r\n if (!candidateIsSynchronized && !hasAccessToAllModels) {\r\n return 0;\r\n }\r\n var ret = 0;\r\n if (scheme) {\r\n if (scheme === candidateUri.scheme) {\r\n ret = 10;\r\n }\r\n else if (scheme === '*') {\r\n ret = 5;\r\n }\r\n else {\r\n return 0;\r\n }\r\n }\r\n if (language) {\r\n if (language === candidateLanguage) {\r\n ret = 10;\r\n }\r\n else if (language === '*') {\r\n ret = Math.max(ret, 5);\r\n }\r\n else {\r\n return 0;\r\n }\r\n }\r\n if (pattern) {\r\n if (pattern === candidateUri.fsPath || matchGlobPattern(pattern, candidateUri.fsPath)) {\r\n ret = 10;\r\n }\r\n else {\r\n return 0;\r\n }\r\n }\r\n return ret;\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nexport var IModelService = createDecorator('modelService');\r\nexport function shouldSynchronizeModel(model) {\r\n return (!model.isTooLargeForSyncing() && !model.isForSimpleWidget);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { toDisposable } from '../../../base/common/lifecycle.js';\r\nimport { score } from './languageSelector.js';\r\nimport { shouldSynchronizeModel } from '../services/modelService.js';\r\nfunction isExclusive(selector) {\r\n if (typeof selector === 'string') {\r\n return false;\r\n }\r\n else if (Array.isArray(selector)) {\r\n return selector.every(isExclusive);\r\n }\r\n else {\r\n return !!selector.exclusive;\r\n }\r\n}\r\nvar LanguageFeatureRegistry = /** @class */ (function () {\r\n function LanguageFeatureRegistry() {\r\n this._clock = 0;\r\n this._entries = [];\r\n this._onDidChange = new Emitter();\r\n }\r\n Object.defineProperty(LanguageFeatureRegistry.prototype, \"onDidChange\", {\r\n get: function () {\r\n return this._onDidChange.event;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n LanguageFeatureRegistry.prototype.register = function (selector, provider) {\r\n var _this = this;\r\n var entry = {\r\n selector: selector,\r\n provider: provider,\r\n _score: -1,\r\n _time: this._clock++\r\n };\r\n this._entries.push(entry);\r\n this._lastCandidate = undefined;\r\n this._onDidChange.fire(this._entries.length);\r\n return toDisposable(function () {\r\n if (entry) {\r\n var idx = _this._entries.indexOf(entry);\r\n if (idx >= 0) {\r\n _this._entries.splice(idx, 1);\r\n _this._lastCandidate = undefined;\r\n _this._onDidChange.fire(_this._entries.length);\r\n entry = undefined;\r\n }\r\n }\r\n });\r\n };\r\n LanguageFeatureRegistry.prototype.has = function (model) {\r\n return this.all(model).length > 0;\r\n };\r\n LanguageFeatureRegistry.prototype.all = function (model) {\r\n if (!model) {\r\n return [];\r\n }\r\n this._updateScores(model);\r\n var result = [];\r\n // from registry\r\n for (var _i = 0, _a = this._entries; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n if (entry._score > 0) {\r\n result.push(entry.provider);\r\n }\r\n }\r\n return result;\r\n };\r\n LanguageFeatureRegistry.prototype.ordered = function (model) {\r\n var result = [];\r\n this._orderedForEach(model, function (entry) { return result.push(entry.provider); });\r\n return result;\r\n };\r\n LanguageFeatureRegistry.prototype.orderedGroups = function (model) {\r\n var result = [];\r\n var lastBucket;\r\n var lastBucketScore;\r\n this._orderedForEach(model, function (entry) {\r\n if (lastBucket && lastBucketScore === entry._score) {\r\n lastBucket.push(entry.provider);\r\n }\r\n else {\r\n lastBucketScore = entry._score;\r\n lastBucket = [entry.provider];\r\n result.push(lastBucket);\r\n }\r\n });\r\n return result;\r\n };\r\n LanguageFeatureRegistry.prototype._orderedForEach = function (model, callback) {\r\n if (!model) {\r\n return;\r\n }\r\n this._updateScores(model);\r\n for (var _i = 0, _a = this._entries; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n if (entry._score > 0) {\r\n callback(entry);\r\n }\r\n }\r\n };\r\n LanguageFeatureRegistry.prototype._updateScores = function (model) {\r\n var candidate = {\r\n uri: model.uri.toString(),\r\n language: model.getLanguageIdentifier().language\r\n };\r\n if (this._lastCandidate\r\n && this._lastCandidate.language === candidate.language\r\n && this._lastCandidate.uri === candidate.uri) {\r\n // nothing has changed\r\n return;\r\n }\r\n this._lastCandidate = candidate;\r\n for (var _i = 0, _a = this._entries; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n entry._score = score(entry.selector, model.uri, model.getLanguageIdentifier().language, shouldSynchronizeModel(model));\r\n if (isExclusive(entry.selector) && entry._score > 0) {\r\n // support for one exclusive selector that overwrites\r\n // any other selector\r\n for (var _b = 0, _c = this._entries; _b < _c.length; _b++) {\r\n var entry_1 = _c[_b];\r\n entry_1._score = 0;\r\n }\r\n entry._score = 1000;\r\n break;\r\n }\r\n }\r\n // needs sorting\r\n this._entries.sort(LanguageFeatureRegistry._compareByScoreAndTime);\r\n };\r\n LanguageFeatureRegistry._compareByScoreAndTime = function (a, b) {\r\n if (a._score < b._score) {\r\n return 1;\r\n }\r\n else if (a._score > b._score) {\r\n return -1;\r\n }\r\n else if (a._time < b._time) {\r\n return 1;\r\n }\r\n else if (a._time > b._time) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n };\r\n return LanguageFeatureRegistry;\r\n}());\r\nexport { LanguageFeatureRegistry };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { isObject } from '../../base/common/types.js';\r\nimport { URI } from '../../base/common/uri.js';\r\nimport { Range } from './core/range.js';\r\nimport { LanguageFeatureRegistry } from './modes/languageFeatureRegistry.js';\r\nimport { TokenizationRegistryImpl } from './modes/tokenizationRegistry.js';\r\n/**\r\n * @internal\r\n */\r\nvar LanguageIdentifier = /** @class */ (function () {\r\n function LanguageIdentifier(language, id) {\r\n this.language = language;\r\n this.id = id;\r\n }\r\n return LanguageIdentifier;\r\n}());\r\nexport { LanguageIdentifier };\r\n/**\r\n * @internal\r\n */\r\nvar TokenMetadata = /** @class */ (function () {\r\n function TokenMetadata() {\r\n }\r\n TokenMetadata.getLanguageId = function (metadata) {\r\n return (metadata & 255 /* LANGUAGEID_MASK */) >>> 0 /* LANGUAGEID_OFFSET */;\r\n };\r\n TokenMetadata.getTokenType = function (metadata) {\r\n return (metadata & 1792 /* TOKEN_TYPE_MASK */) >>> 8 /* TOKEN_TYPE_OFFSET */;\r\n };\r\n TokenMetadata.getFontStyle = function (metadata) {\r\n return (metadata & 14336 /* FONT_STYLE_MASK */) >>> 11 /* FONT_STYLE_OFFSET */;\r\n };\r\n TokenMetadata.getForeground = function (metadata) {\r\n return (metadata & 8372224 /* FOREGROUND_MASK */) >>> 14 /* FOREGROUND_OFFSET */;\r\n };\r\n TokenMetadata.getBackground = function (metadata) {\r\n return (metadata & 4286578688 /* BACKGROUND_MASK */) >>> 23 /* BACKGROUND_OFFSET */;\r\n };\r\n TokenMetadata.getClassNameFromMetadata = function (metadata) {\r\n var foreground = this.getForeground(metadata);\r\n var className = 'mtk' + foreground;\r\n var fontStyle = this.getFontStyle(metadata);\r\n if (fontStyle & 1 /* Italic */) {\r\n className += ' mtki';\r\n }\r\n if (fontStyle & 2 /* Bold */) {\r\n className += ' mtkb';\r\n }\r\n if (fontStyle & 4 /* Underline */) {\r\n className += ' mtku';\r\n }\r\n return className;\r\n };\r\n TokenMetadata.getInlineStyleFromMetadata = function (metadata, colorMap) {\r\n var foreground = this.getForeground(metadata);\r\n var fontStyle = this.getFontStyle(metadata);\r\n var result = \"color: \" + colorMap[foreground] + \";\";\r\n if (fontStyle & 1 /* Italic */) {\r\n result += 'font-style: italic;';\r\n }\r\n if (fontStyle & 2 /* Bold */) {\r\n result += 'font-weight: bold;';\r\n }\r\n if (fontStyle & 4 /* Underline */) {\r\n result += 'text-decoration: underline;';\r\n }\r\n return result;\r\n };\r\n return TokenMetadata;\r\n}());\r\nexport { TokenMetadata };\r\n/**\r\n * @internal\r\n */\r\nexport var completionKindToCssClass = (function () {\r\n var data = Object.create(null);\r\n data[0 /* Method */] = 'method';\r\n data[1 /* Function */] = 'function';\r\n data[2 /* Constructor */] = 'constructor';\r\n data[3 /* Field */] = 'field';\r\n data[4 /* Variable */] = 'variable';\r\n data[5 /* Class */] = 'class';\r\n data[6 /* Struct */] = 'struct';\r\n data[7 /* Interface */] = 'interface';\r\n data[8 /* Module */] = 'module';\r\n data[9 /* Property */] = 'property';\r\n data[10 /* Event */] = 'event';\r\n data[11 /* Operator */] = 'operator';\r\n data[12 /* Unit */] = 'unit';\r\n data[13 /* Value */] = 'value';\r\n data[14 /* Constant */] = 'constant';\r\n data[15 /* Enum */] = 'enum';\r\n data[16 /* EnumMember */] = 'enum-member';\r\n data[17 /* Keyword */] = 'keyword';\r\n data[25 /* Snippet */] = 'snippet';\r\n data[18 /* Text */] = 'text';\r\n data[19 /* Color */] = 'color';\r\n data[20 /* File */] = 'file';\r\n data[21 /* Reference */] = 'reference';\r\n data[22 /* Customcolor */] = 'customcolor';\r\n data[23 /* Folder */] = 'folder';\r\n data[24 /* TypeParameter */] = 'type-parameter';\r\n return function (kind) {\r\n return data[kind] || 'property';\r\n };\r\n})();\r\n/**\r\n * @internal\r\n */\r\nexport var completionKindFromString = (function () {\r\n var data = Object.create(null);\r\n data['method'] = 0 /* Method */;\r\n data['function'] = 1 /* Function */;\r\n data['constructor'] = 2 /* Constructor */;\r\n data['field'] = 3 /* Field */;\r\n data['variable'] = 4 /* Variable */;\r\n data['class'] = 5 /* Class */;\r\n data['struct'] = 6 /* Struct */;\r\n data['interface'] = 7 /* Interface */;\r\n data['module'] = 8 /* Module */;\r\n data['property'] = 9 /* Property */;\r\n data['event'] = 10 /* Event */;\r\n data['operator'] = 11 /* Operator */;\r\n data['unit'] = 12 /* Unit */;\r\n data['value'] = 13 /* Value */;\r\n data['constant'] = 14 /* Constant */;\r\n data['enum'] = 15 /* Enum */;\r\n data['enum-member'] = 16 /* EnumMember */;\r\n data['enumMember'] = 16 /* EnumMember */;\r\n data['keyword'] = 17 /* Keyword */;\r\n data['snippet'] = 25 /* Snippet */;\r\n data['text'] = 18 /* Text */;\r\n data['color'] = 19 /* Color */;\r\n data['file'] = 20 /* File */;\r\n data['reference'] = 21 /* Reference */;\r\n data['customcolor'] = 22 /* Customcolor */;\r\n data['folder'] = 23 /* Folder */;\r\n data['type-parameter'] = 24 /* TypeParameter */;\r\n data['typeParameter'] = 24 /* TypeParameter */;\r\n return function (value, strict) {\r\n var res = data[value];\r\n if (typeof res === 'undefined' && !strict) {\r\n res = 9 /* Property */;\r\n }\r\n return res;\r\n };\r\n})();\r\nexport var SignatureHelpTriggerKind;\r\n(function (SignatureHelpTriggerKind) {\r\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"Invoke\"] = 1] = \"Invoke\";\r\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\r\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"ContentChange\"] = 3] = \"ContentChange\";\r\n})(SignatureHelpTriggerKind || (SignatureHelpTriggerKind = {}));\r\n/**\r\n * A document highlight kind.\r\n */\r\nexport var DocumentHighlightKind;\r\n(function (DocumentHighlightKind) {\r\n /**\r\n * A textual occurrence.\r\n */\r\n DocumentHighlightKind[DocumentHighlightKind[\"Text\"] = 0] = \"Text\";\r\n /**\r\n * Read-access of a symbol, like reading a variable.\r\n */\r\n DocumentHighlightKind[DocumentHighlightKind[\"Read\"] = 1] = \"Read\";\r\n /**\r\n * Write-access of a symbol, like writing to a variable.\r\n */\r\n DocumentHighlightKind[DocumentHighlightKind[\"Write\"] = 2] = \"Write\";\r\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\r\n/**\r\n * @internal\r\n */\r\nexport function isLocationLink(thing) {\r\n return thing\r\n && URI.isUri(thing.uri)\r\n && Range.isIRange(thing.range)\r\n && (Range.isIRange(thing.originSelectionRange) || Range.isIRange(thing.targetSelectionRange));\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport var SymbolKinds;\r\n(function (SymbolKinds) {\r\n var byName = new Map();\r\n byName.set('file', 0 /* File */);\r\n byName.set('module', 1 /* Module */);\r\n byName.set('namespace', 2 /* Namespace */);\r\n byName.set('package', 3 /* Package */);\r\n byName.set('class', 4 /* Class */);\r\n byName.set('method', 5 /* Method */);\r\n byName.set('property', 6 /* Property */);\r\n byName.set('field', 7 /* Field */);\r\n byName.set('constructor', 8 /* Constructor */);\r\n byName.set('enum', 9 /* Enum */);\r\n byName.set('interface', 10 /* Interface */);\r\n byName.set('function', 11 /* Function */);\r\n byName.set('variable', 12 /* Variable */);\r\n byName.set('constant', 13 /* Constant */);\r\n byName.set('string', 14 /* String */);\r\n byName.set('number', 15 /* Number */);\r\n byName.set('boolean', 16 /* Boolean */);\r\n byName.set('array', 17 /* Array */);\r\n byName.set('object', 18 /* Object */);\r\n byName.set('key', 19 /* Key */);\r\n byName.set('null', 20 /* Null */);\r\n byName.set('enum-member', 21 /* EnumMember */);\r\n byName.set('struct', 22 /* Struct */);\r\n byName.set('event', 23 /* Event */);\r\n byName.set('operator', 24 /* Operator */);\r\n byName.set('type-parameter', 25 /* TypeParameter */);\r\n var byKind = new Map();\r\n byKind.set(0 /* File */, 'file');\r\n byKind.set(1 /* Module */, 'module');\r\n byKind.set(2 /* Namespace */, 'namespace');\r\n byKind.set(3 /* Package */, 'package');\r\n byKind.set(4 /* Class */, 'class');\r\n byKind.set(5 /* Method */, 'method');\r\n byKind.set(6 /* Property */, 'property');\r\n byKind.set(7 /* Field */, 'field');\r\n byKind.set(8 /* Constructor */, 'constructor');\r\n byKind.set(9 /* Enum */, 'enum');\r\n byKind.set(10 /* Interface */, 'interface');\r\n byKind.set(11 /* Function */, 'function');\r\n byKind.set(12 /* Variable */, 'variable');\r\n byKind.set(13 /* Constant */, 'constant');\r\n byKind.set(14 /* String */, 'string');\r\n byKind.set(15 /* Number */, 'number');\r\n byKind.set(16 /* Boolean */, 'boolean');\r\n byKind.set(17 /* Array */, 'array');\r\n byKind.set(18 /* Object */, 'object');\r\n byKind.set(19 /* Key */, 'key');\r\n byKind.set(20 /* Null */, 'null');\r\n byKind.set(21 /* EnumMember */, 'enum-member');\r\n byKind.set(22 /* Struct */, 'struct');\r\n byKind.set(23 /* Event */, 'event');\r\n byKind.set(24 /* Operator */, 'operator');\r\n byKind.set(25 /* TypeParameter */, 'type-parameter');\r\n /**\r\n * @internal\r\n */\r\n function fromString(value) {\r\n return byName.get(value);\r\n }\r\n SymbolKinds.fromString = fromString;\r\n /**\r\n * @internal\r\n */\r\n function toString(kind) {\r\n return byKind.get(kind);\r\n }\r\n SymbolKinds.toString = toString;\r\n /**\r\n * @internal\r\n */\r\n function toCssClassName(kind, inline) {\r\n return \"codicon \" + (inline ? 'inline' : 'block') + \" codicon-symbol-\" + (byKind.get(kind) || 'property');\r\n }\r\n SymbolKinds.toCssClassName = toCssClassName;\r\n})(SymbolKinds || (SymbolKinds = {}));\r\nvar FoldingRangeKind = /** @class */ (function () {\r\n /**\r\n * Creates a new [FoldingRangeKind](#FoldingRangeKind).\r\n *\r\n * @param value of the kind.\r\n */\r\n function FoldingRangeKind(value) {\r\n this.value = value;\r\n }\r\n /**\r\n * Kind for folding range representing a comment. The value of the kind is 'comment'.\r\n */\r\n FoldingRangeKind.Comment = new FoldingRangeKind('comment');\r\n /**\r\n * Kind for folding range representing a import. The value of the kind is 'imports'.\r\n */\r\n FoldingRangeKind.Imports = new FoldingRangeKind('imports');\r\n /**\r\n * Kind for folding range representing regions (for example marked by `#region`, `#endregion`).\r\n * The value of the kind is 'region'.\r\n */\r\n FoldingRangeKind.Region = new FoldingRangeKind('region');\r\n return FoldingRangeKind;\r\n}());\r\nexport { FoldingRangeKind };\r\n/**\r\n * @internal\r\n */\r\nexport function isResourceTextEdit(thing) {\r\n return isObject(thing) && thing.resource && Array.isArray(thing.edits);\r\n}\r\n// --- feature registries ------\r\n/**\r\n * @internal\r\n */\r\nexport var ReferenceProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var RenameProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var CompletionProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var SignatureHelpProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var HoverProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var DocumentSymbolProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var DocumentHighlightProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var DefinitionProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var DeclarationProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var ImplementationProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var TypeDefinitionProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var CodeLensProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var CodeActionProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var DocumentFormattingEditProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var DocumentRangeFormattingEditProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var OnTypeFormattingEditProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var LinkProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var ColorProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var SelectionRangeRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var FoldingRangeProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var SemanticTokensProviderRegistry = new LanguageFeatureRegistry();\r\n/**\r\n * @internal\r\n */\r\nexport var TokenizationRegistry = new TokenizationRegistryImpl();\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { toDisposable } from '../../../base/common/lifecycle.js';\r\nimport { withUndefinedAsNull } from '../../../base/common/types.js';\r\nimport { keys } from '../../../base/common/map.js';\r\nvar TokenizationRegistryImpl = /** @class */ (function () {\r\n function TokenizationRegistryImpl() {\r\n this._map = new Map();\r\n this._promises = new Map();\r\n this._onDidChange = new Emitter();\r\n this.onDidChange = this._onDidChange.event;\r\n this._colorMap = null;\r\n }\r\n TokenizationRegistryImpl.prototype.fire = function (languages) {\r\n this._onDidChange.fire({\r\n changedLanguages: languages,\r\n changedColorMap: false\r\n });\r\n };\r\n TokenizationRegistryImpl.prototype.register = function (language, support) {\r\n var _this = this;\r\n this._map.set(language, support);\r\n this.fire([language]);\r\n return toDisposable(function () {\r\n if (_this._map.get(language) !== support) {\r\n return;\r\n }\r\n _this._map.delete(language);\r\n _this.fire([language]);\r\n });\r\n };\r\n TokenizationRegistryImpl.prototype.registerPromise = function (language, supportPromise) {\r\n var _this = this;\r\n var registration = null;\r\n var isDisposed = false;\r\n this._promises.set(language, supportPromise.then(function (support) {\r\n _this._promises.delete(language);\r\n if (isDisposed || !support) {\r\n return;\r\n }\r\n registration = _this.register(language, support);\r\n }));\r\n return toDisposable(function () {\r\n isDisposed = true;\r\n if (registration) {\r\n registration.dispose();\r\n }\r\n });\r\n };\r\n TokenizationRegistryImpl.prototype.getPromise = function (language) {\r\n var _this = this;\r\n var support = this.get(language);\r\n if (support) {\r\n return Promise.resolve(support);\r\n }\r\n var promise = this._promises.get(language);\r\n if (promise) {\r\n return promise.then(function (_) { return _this.get(language); });\r\n }\r\n return null;\r\n };\r\n TokenizationRegistryImpl.prototype.get = function (language) {\r\n return withUndefinedAsNull(this._map.get(language));\r\n };\r\n TokenizationRegistryImpl.prototype.setColorMap = function (colorMap) {\r\n this._colorMap = colorMap;\r\n this._onDidChange.fire({\r\n changedLanguages: keys(this._map),\r\n changedColorMap: true\r\n });\r\n };\r\n TokenizationRegistryImpl.prototype.getColorMap = function () {\r\n return this._colorMap;\r\n };\r\n TokenizationRegistryImpl.prototype.getDefaultBackground = function () {\r\n if (this._colorMap && this._colorMap.length > 2 /* DefaultBackground */) {\r\n return this._colorMap[2 /* DefaultBackground */];\r\n }\r\n return null;\r\n };\r\n return TokenizationRegistryImpl;\r\n}());\r\nexport { TokenizationRegistryImpl };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Token, TokenizationResult, TokenizationResult2 } from '../core/token.js';\r\nimport { LanguageIdentifier } from '../modes.js';\r\nvar NullStateImpl = /** @class */ (function () {\r\n function NullStateImpl() {\r\n }\r\n NullStateImpl.prototype.clone = function () {\r\n return this;\r\n };\r\n NullStateImpl.prototype.equals = function (other) {\r\n return (this === other);\r\n };\r\n return NullStateImpl;\r\n}());\r\nexport var NULL_STATE = new NullStateImpl();\r\nexport var NULL_MODE_ID = 'vs.editor.nullMode';\r\nexport var NULL_LANGUAGE_IDENTIFIER = new LanguageIdentifier(NULL_MODE_ID, 0 /* Null */);\r\nexport function nullTokenize(modeId, buffer, state, deltaOffset) {\r\n return new TokenizationResult([new Token(deltaOffset, '', modeId)], state);\r\n}\r\nexport function nullTokenize2(languageId, buffer, state, deltaOffset) {\r\n var tokens = new Uint32Array(2);\r\n tokens[0] = deltaOffset;\r\n tokens[1] = ((languageId << 0 /* LANGUAGEID_OFFSET */)\r\n | (0 /* Other */ << 8 /* TOKEN_TYPE_OFFSET */)\r\n | (0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\r\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\r\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\r\n return new TokenizationResult2(tokens, state === null ? NULL_STATE : state);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nexport var ID_EDITOR_WORKER_SERVICE = 'editorWorkerService';\r\nexport var IEditorWorkerService = createDecorator(ID_EDITOR_WORKER_SERVICE);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nexport var ITextModelService = createDecorator('textModelService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { transformErrorForSerialization } from '../errors.js';\r\nimport { Disposable } from '../lifecycle.js';\r\nimport { isWeb } from '../platform.js';\r\nimport * as types from '../types.js';\r\nvar INITIALIZE = '$initialize';\r\nvar webWorkerWarningLogged = false;\r\nexport function logOnceWebWorkerWarning(err) {\r\n if (!isWeb) {\r\n // running tests\r\n return;\r\n }\r\n if (!webWorkerWarningLogged) {\r\n webWorkerWarningLogged = true;\r\n console.warn('Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/Microsoft/monaco-editor#faq');\r\n }\r\n console.warn(err.message);\r\n}\r\nvar SimpleWorkerProtocol = /** @class */ (function () {\r\n function SimpleWorkerProtocol(handler) {\r\n this._workerId = -1;\r\n this._handler = handler;\r\n this._lastSentReq = 0;\r\n this._pendingReplies = Object.create(null);\r\n }\r\n SimpleWorkerProtocol.prototype.setWorkerId = function (workerId) {\r\n this._workerId = workerId;\r\n };\r\n SimpleWorkerProtocol.prototype.sendMessage = function (method, args) {\r\n var _this = this;\r\n var req = String(++this._lastSentReq);\r\n return new Promise(function (resolve, reject) {\r\n _this._pendingReplies[req] = {\r\n resolve: resolve,\r\n reject: reject\r\n };\r\n _this._send({\r\n vsWorker: _this._workerId,\r\n req: req,\r\n method: method,\r\n args: args\r\n });\r\n });\r\n };\r\n SimpleWorkerProtocol.prototype.handleMessage = function (message) {\r\n if (!message || !message.vsWorker) {\r\n return;\r\n }\r\n if (this._workerId !== -1 && message.vsWorker !== this._workerId) {\r\n return;\r\n }\r\n this._handleMessage(message);\r\n };\r\n SimpleWorkerProtocol.prototype._handleMessage = function (msg) {\r\n var _this = this;\r\n if (msg.seq) {\r\n var replyMessage = msg;\r\n if (!this._pendingReplies[replyMessage.seq]) {\r\n console.warn('Got reply to unknown seq');\r\n return;\r\n }\r\n var reply = this._pendingReplies[replyMessage.seq];\r\n delete this._pendingReplies[replyMessage.seq];\r\n if (replyMessage.err) {\r\n var err = replyMessage.err;\r\n if (replyMessage.err.$isError) {\r\n err = new Error();\r\n err.name = replyMessage.err.name;\r\n err.message = replyMessage.err.message;\r\n err.stack = replyMessage.err.stack;\r\n }\r\n reply.reject(err);\r\n return;\r\n }\r\n reply.resolve(replyMessage.res);\r\n return;\r\n }\r\n var requestMessage = msg;\r\n var req = requestMessage.req;\r\n var result = this._handler.handleMessage(requestMessage.method, requestMessage.args);\r\n result.then(function (r) {\r\n _this._send({\r\n vsWorker: _this._workerId,\r\n seq: req,\r\n res: r,\r\n err: undefined\r\n });\r\n }, function (e) {\r\n if (e.detail instanceof Error) {\r\n // Loading errors have a detail property that points to the actual error\r\n e.detail = transformErrorForSerialization(e.detail);\r\n }\r\n _this._send({\r\n vsWorker: _this._workerId,\r\n seq: req,\r\n res: undefined,\r\n err: transformErrorForSerialization(e)\r\n });\r\n });\r\n };\r\n SimpleWorkerProtocol.prototype._send = function (msg) {\r\n var transfer = [];\r\n if (msg.req) {\r\n var m = msg;\r\n for (var i = 0; i < m.args.length; i++) {\r\n if (m.args[i] instanceof ArrayBuffer) {\r\n transfer.push(m.args[i]);\r\n }\r\n }\r\n }\r\n else {\r\n var m = msg;\r\n if (m.res instanceof ArrayBuffer) {\r\n transfer.push(m.res);\r\n }\r\n }\r\n this._handler.sendMessage(msg, transfer);\r\n };\r\n return SimpleWorkerProtocol;\r\n}());\r\n/**\r\n * Main thread side\r\n */\r\nvar SimpleWorkerClient = /** @class */ (function (_super) {\r\n __extends(SimpleWorkerClient, _super);\r\n function SimpleWorkerClient(workerFactory, moduleId, host) {\r\n var _this = _super.call(this) || this;\r\n var lazyProxyReject = null;\r\n _this._worker = _this._register(workerFactory.create('vs/base/common/worker/simpleWorker', function (msg) {\r\n _this._protocol.handleMessage(msg);\r\n }, function (err) {\r\n // in Firefox, web workers fail lazily :(\r\n // we will reject the proxy\r\n if (lazyProxyReject) {\r\n lazyProxyReject(err);\r\n }\r\n }));\r\n _this._protocol = new SimpleWorkerProtocol({\r\n sendMessage: function (msg, transfer) {\r\n _this._worker.postMessage(msg, transfer);\r\n },\r\n handleMessage: function (method, args) {\r\n if (typeof host[method] !== 'function') {\r\n return Promise.reject(new Error('Missing method ' + method + ' on main thread host.'));\r\n }\r\n try {\r\n return Promise.resolve(host[method].apply(host, args));\r\n }\r\n catch (e) {\r\n return Promise.reject(e);\r\n }\r\n }\r\n });\r\n _this._protocol.setWorkerId(_this._worker.getId());\r\n // Gather loader configuration\r\n var loaderConfiguration = null;\r\n if (typeof self.require !== 'undefined' && typeof self.require.getConfig === 'function') {\r\n // Get the configuration from the Monaco AMD Loader\r\n loaderConfiguration = self.require.getConfig();\r\n }\r\n else if (typeof self.requirejs !== 'undefined') {\r\n // Get the configuration from requirejs\r\n loaderConfiguration = self.requirejs.s.contexts._.config;\r\n }\r\n var hostMethods = types.getAllMethodNames(host);\r\n // Send initialize message\r\n _this._onModuleLoaded = _this._protocol.sendMessage(INITIALIZE, [\r\n _this._worker.getId(),\r\n JSON.parse(JSON.stringify(loaderConfiguration)),\r\n moduleId,\r\n hostMethods,\r\n ]);\r\n // Create proxy to loaded code\r\n var proxyMethodRequest = function (method, args) {\r\n return _this._request(method, args);\r\n };\r\n _this._lazyProxy = new Promise(function (resolve, reject) {\r\n lazyProxyReject = reject;\r\n _this._onModuleLoaded.then(function (availableMethods) {\r\n resolve(types.createProxyObject(availableMethods, proxyMethodRequest));\r\n }, function (e) {\r\n reject(e);\r\n _this._onError('Worker failed to load ' + moduleId, e);\r\n });\r\n });\r\n return _this;\r\n }\r\n SimpleWorkerClient.prototype.getProxyObject = function () {\r\n return this._lazyProxy;\r\n };\r\n SimpleWorkerClient.prototype._request = function (method, args) {\r\n var _this = this;\r\n return new Promise(function (resolve, reject) {\r\n _this._onModuleLoaded.then(function () {\r\n _this._protocol.sendMessage(method, args).then(resolve, reject);\r\n }, reject);\r\n });\r\n };\r\n SimpleWorkerClient.prototype._onError = function (message, error) {\r\n console.error(message);\r\n console.info(error);\r\n };\r\n return SimpleWorkerClient;\r\n}(Disposable));\r\nexport { SimpleWorkerClient };\r\n/**\r\n * Worker side\r\n */\r\nvar SimpleWorkerServer = /** @class */ (function () {\r\n function SimpleWorkerServer(postMessage, requestHandlerFactory) {\r\n var _this = this;\r\n this._requestHandlerFactory = requestHandlerFactory;\r\n this._requestHandler = null;\r\n this._protocol = new SimpleWorkerProtocol({\r\n sendMessage: function (msg, transfer) {\r\n postMessage(msg, transfer);\r\n },\r\n handleMessage: function (method, args) { return _this._handleMessage(method, args); }\r\n });\r\n }\r\n SimpleWorkerServer.prototype.onmessage = function (msg) {\r\n this._protocol.handleMessage(msg);\r\n };\r\n SimpleWorkerServer.prototype._handleMessage = function (method, args) {\r\n if (method === INITIALIZE) {\r\n return this.initialize(args[0], args[1], args[2], args[3]);\r\n }\r\n if (!this._requestHandler || typeof this._requestHandler[method] !== 'function') {\r\n return Promise.reject(new Error('Missing requestHandler or method: ' + method));\r\n }\r\n try {\r\n return Promise.resolve(this._requestHandler[method].apply(this._requestHandler, args));\r\n }\r\n catch (e) {\r\n return Promise.reject(e);\r\n }\r\n };\r\n SimpleWorkerServer.prototype.initialize = function (workerId, loaderConfig, moduleId, hostMethods) {\r\n var _this = this;\r\n this._protocol.setWorkerId(workerId);\r\n var proxyMethodRequest = function (method, args) {\r\n return _this._protocol.sendMessage(method, args);\r\n };\r\n var hostProxy = types.createProxyObject(hostMethods, proxyMethodRequest);\r\n if (this._requestHandlerFactory) {\r\n // static request handler\r\n this._requestHandler = this._requestHandlerFactory(hostProxy);\r\n return Promise.resolve(types.getAllMethodNames(this._requestHandler));\r\n }\r\n if (loaderConfig) {\r\n // Remove 'baseUrl', handling it is beyond scope for now\r\n if (typeof loaderConfig.baseUrl !== 'undefined') {\r\n delete loaderConfig['baseUrl'];\r\n }\r\n if (typeof loaderConfig.paths !== 'undefined') {\r\n if (typeof loaderConfig.paths.vs !== 'undefined') {\r\n delete loaderConfig.paths['vs'];\r\n }\r\n }\r\n // Since this is in a web worker, enable catching errors\r\n loaderConfig.catchError = true;\r\n self.require.config(loaderConfig);\r\n }\r\n return new Promise(function (resolve, reject) {\r\n // Use the global require to be sure to get the global config\r\n self.require([moduleId], function (module) {\r\n _this._requestHandler = module.create(hostProxy);\r\n if (!_this._requestHandler) {\r\n reject(new Error(\"No RequestHandler!\"));\r\n return;\r\n }\r\n resolve(types.getAllMethodNames(_this._requestHandler));\r\n }, reject);\r\n });\r\n };\r\n return SimpleWorkerServer;\r\n}());\r\nexport { SimpleWorkerServer };\r\n/**\r\n * Called on the worker side\r\n */\r\nexport function create(postMessage) {\r\n return new SimpleWorkerServer(postMessage, null);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { globals } from '../common/platform.js';\r\nimport { logOnceWebWorkerWarning } from '../common/worker/simpleWorker.js';\r\nfunction getWorker(workerId, label) {\r\n // Option for hosts to overwrite the worker script (used in the standalone editor)\r\n if (globals.MonacoEnvironment) {\r\n if (typeof globals.MonacoEnvironment.getWorker === 'function') {\r\n return globals.MonacoEnvironment.getWorker(workerId, label);\r\n }\r\n if (typeof globals.MonacoEnvironment.getWorkerUrl === 'function') {\r\n return new Worker(globals.MonacoEnvironment.getWorkerUrl(workerId, label));\r\n }\r\n }\r\n // ESM-comment-begin\r\n // \tif (typeof require === 'function') {\r\n // \t\t// check if the JS lives on a different origin\r\n // \t\tconst workerMain = require.toUrl('./' + workerId);\r\n // \t\tconst workerUrl = getWorkerBootstrapUrl(workerMain, label);\r\n // \t\treturn new Worker(workerUrl, { name: label });\r\n // \t}\r\n // ESM-comment-end\r\n throw new Error(\"You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker\");\r\n}\r\n// ESM-comment-begin\r\n// export function getWorkerBootstrapUrl(scriptPath: string, label: string): string {\r\n// \tif (/^(http:)|(https:)|(file:)/.test(scriptPath)) {\r\n// \t\tconst currentUrl = String(window.location);\r\n// \t\tconst currentOrigin = currentUrl.substr(0, currentUrl.length - window.location.hash.length - window.location.search.length - window.location.pathname.length);\r\n// \t\tif (scriptPath.substring(0, currentOrigin.length) !== currentOrigin) {\r\n// \t\t\t// this is the cross-origin case\r\n// \t\t\t// i.e. the webpage is running at a different origin than where the scripts are loaded from\r\n// \t\t\tconst myPath = 'vs/base/worker/defaultWorkerFactory.js';\r\n// \t\t\tconst workerBaseUrl = require.toUrl(myPath).slice(0, -myPath.length);\r\n// \t\t\tconst js = `/*${label}*/self.MonacoEnvironment={baseUrl: '${workerBaseUrl}'};importScripts('${scriptPath}');/*${label}*/`;\r\n// \t\t\tconst url = `data:text/javascript;charset=utf-8,${encodeURIComponent(js)}`;\r\n// \t\t\treturn url;\r\n// \t\t}\r\n// \t}\r\n// \treturn scriptPath + '#' + label;\r\n// }\r\n// ESM-comment-end\r\nfunction isPromiseLike(obj) {\r\n if (typeof obj.then === 'function') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * A worker that uses HTML5 web workers so that is has\r\n * its own global scope and its own thread.\r\n */\r\nvar WebWorker = /** @class */ (function () {\r\n function WebWorker(moduleId, id, label, onMessageCallback, onErrorCallback) {\r\n this.id = id;\r\n var workerOrPromise = getWorker('workerMain.js', label);\r\n if (isPromiseLike(workerOrPromise)) {\r\n this.worker = workerOrPromise;\r\n }\r\n else {\r\n this.worker = Promise.resolve(workerOrPromise);\r\n }\r\n this.postMessage(moduleId, []);\r\n this.worker.then(function (w) {\r\n w.onmessage = function (ev) {\r\n onMessageCallback(ev.data);\r\n };\r\n w.onmessageerror = onErrorCallback;\r\n if (typeof w.addEventListener === 'function') {\r\n w.addEventListener('error', onErrorCallback);\r\n }\r\n });\r\n }\r\n WebWorker.prototype.getId = function () {\r\n return this.id;\r\n };\r\n WebWorker.prototype.postMessage = function (message, transfer) {\r\n if (this.worker) {\r\n this.worker.then(function (w) { return w.postMessage(message, transfer); });\r\n }\r\n };\r\n WebWorker.prototype.dispose = function () {\r\n if (this.worker) {\r\n this.worker.then(function (w) { return w.terminate(); });\r\n }\r\n this.worker = null;\r\n };\r\n return WebWorker;\r\n}());\r\nvar DefaultWorkerFactory = /** @class */ (function () {\r\n function DefaultWorkerFactory(label) {\r\n this._label = label;\r\n this._webWorkerFailedBeforeError = false;\r\n }\r\n DefaultWorkerFactory.prototype.create = function (moduleId, onMessageCallback, onErrorCallback) {\r\n var _this = this;\r\n var workerId = (++DefaultWorkerFactory.LAST_WORKER_ID);\r\n if (this._webWorkerFailedBeforeError) {\r\n throw this._webWorkerFailedBeforeError;\r\n }\r\n return new WebWorker(moduleId, workerId, this._label || 'anonymous' + workerId, onMessageCallback, function (err) {\r\n logOnceWebWorkerWarning(err);\r\n _this._webWorkerFailedBeforeError = err;\r\n onErrorCallback(err);\r\n });\r\n };\r\n DefaultWorkerFactory.LAST_WORKER_ID = 0;\r\n return DefaultWorkerFactory;\r\n}());\r\nexport { DefaultWorkerFactory };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * Describes what to do with the indentation when pressing Enter.\r\n */\r\nexport var IndentAction;\r\n(function (IndentAction) {\r\n /**\r\n * Insert new line and copy the previous line's indentation.\r\n */\r\n IndentAction[IndentAction[\"None\"] = 0] = \"None\";\r\n /**\r\n * Insert new line and indent once (relative to the previous line's indentation).\r\n */\r\n IndentAction[IndentAction[\"Indent\"] = 1] = \"Indent\";\r\n /**\r\n * Insert two new lines:\r\n * - the first one indented which will hold the cursor\r\n * - the second one at the same indentation level\r\n */\r\n IndentAction[IndentAction[\"IndentOutdent\"] = 2] = \"IndentOutdent\";\r\n /**\r\n * Insert new line and outdent once (relative to the previous line's indentation).\r\n */\r\n IndentAction[IndentAction[\"Outdent\"] = 3] = \"Outdent\";\r\n})(IndentAction || (IndentAction = {}));\r\n/**\r\n * @internal\r\n */\r\nvar StandardAutoClosingPairConditional = /** @class */ (function () {\r\n function StandardAutoClosingPairConditional(source) {\r\n this.open = source.open;\r\n this.close = source.close;\r\n // initially allowed in all tokens\r\n this._standardTokenMask = 0;\r\n if (Array.isArray(source.notIn)) {\r\n for (var i = 0, len = source.notIn.length; i < len; i++) {\r\n var notIn = source.notIn[i];\r\n switch (notIn) {\r\n case 'string':\r\n this._standardTokenMask |= 2 /* String */;\r\n break;\r\n case 'comment':\r\n this._standardTokenMask |= 1 /* Comment */;\r\n break;\r\n case 'regex':\r\n this._standardTokenMask |= 4 /* RegEx */;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n StandardAutoClosingPairConditional.prototype.isOK = function (standardToken) {\r\n return (this._standardTokenMask & standardToken) === 0;\r\n };\r\n return StandardAutoClosingPairConditional;\r\n}());\r\nexport { StandardAutoClosingPairConditional };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport function createScopedLineTokens(context, offset) {\r\n var tokenCount = context.getCount();\r\n var tokenIndex = context.findTokenIndexAtOffset(offset);\r\n var desiredLanguageId = context.getLanguageId(tokenIndex);\r\n var lastTokenIndex = tokenIndex;\r\n while (lastTokenIndex + 1 < tokenCount && context.getLanguageId(lastTokenIndex + 1) === desiredLanguageId) {\r\n lastTokenIndex++;\r\n }\r\n var firstTokenIndex = tokenIndex;\r\n while (firstTokenIndex > 0 && context.getLanguageId(firstTokenIndex - 1) === desiredLanguageId) {\r\n firstTokenIndex--;\r\n }\r\n return new ScopedLineTokens(context, desiredLanguageId, firstTokenIndex, lastTokenIndex + 1, context.getStartOffset(firstTokenIndex), context.getEndOffset(lastTokenIndex));\r\n}\r\nvar ScopedLineTokens = /** @class */ (function () {\r\n function ScopedLineTokens(actual, languageId, firstTokenIndex, lastTokenIndex, firstCharOffset, lastCharOffset) {\r\n this._actual = actual;\r\n this.languageId = languageId;\r\n this._firstTokenIndex = firstTokenIndex;\r\n this._lastTokenIndex = lastTokenIndex;\r\n this.firstCharOffset = firstCharOffset;\r\n this._lastCharOffset = lastCharOffset;\r\n }\r\n ScopedLineTokens.prototype.getLineContent = function () {\r\n var actualLineContent = this._actual.getLineContent();\r\n return actualLineContent.substring(this.firstCharOffset, this._lastCharOffset);\r\n };\r\n ScopedLineTokens.prototype.getTokenCount = function () {\r\n return this._lastTokenIndex - this._firstTokenIndex;\r\n };\r\n ScopedLineTokens.prototype.findTokenIndexAtOffset = function (offset) {\r\n return this._actual.findTokenIndexAtOffset(offset + this.firstCharOffset) - this._firstTokenIndex;\r\n };\r\n ScopedLineTokens.prototype.getStandardTokenType = function (tokenIndex) {\r\n return this._actual.getStandardTokenType(tokenIndex + this._firstTokenIndex);\r\n };\r\n return ScopedLineTokens;\r\n}());\r\nexport { ScopedLineTokens };\r\nexport function ignoreBracketsInToken(standardTokenType) {\r\n return (standardTokenType & 7 /* value */) !== 0;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { StandardAutoClosingPairConditional } from '../languageConfiguration.js';\r\nvar CharacterPairSupport = /** @class */ (function () {\r\n function CharacterPairSupport(config) {\r\n if (config.autoClosingPairs) {\r\n this._autoClosingPairs = config.autoClosingPairs.map(function (el) { return new StandardAutoClosingPairConditional(el); });\r\n }\r\n else if (config.brackets) {\r\n this._autoClosingPairs = config.brackets.map(function (b) { return new StandardAutoClosingPairConditional({ open: b[0], close: b[1] }); });\r\n }\r\n else {\r\n this._autoClosingPairs = [];\r\n }\r\n if (config.__electricCharacterSupport && config.__electricCharacterSupport.docComment) {\r\n var docComment = config.__electricCharacterSupport.docComment;\r\n // IDocComment is legacy, only partially supported\r\n this._autoClosingPairs.push(new StandardAutoClosingPairConditional({ open: docComment.open, close: docComment.close || '' }));\r\n }\r\n this._autoCloseBefore = typeof config.autoCloseBefore === 'string' ? config.autoCloseBefore : CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED;\r\n this._surroundingPairs = config.surroundingPairs || this._autoClosingPairs;\r\n }\r\n CharacterPairSupport.prototype.getAutoClosingPairs = function () {\r\n return this._autoClosingPairs;\r\n };\r\n CharacterPairSupport.prototype.getAutoCloseBeforeSet = function () {\r\n return this._autoCloseBefore;\r\n };\r\n CharacterPairSupport.shouldAutoClosePair = function (autoClosingPair, context, column) {\r\n // Always complete on empty line\r\n if (context.getTokenCount() === 0) {\r\n return true;\r\n }\r\n var tokenIndex = context.findTokenIndexAtOffset(column - 2);\r\n var standardTokenType = context.getStandardTokenType(tokenIndex);\r\n return autoClosingPair.isOK(standardTokenType);\r\n };\r\n CharacterPairSupport.prototype.getSurroundingPairs = function () {\r\n return this._surroundingPairs;\r\n };\r\n CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED = ';:.,=}])> \\n\\t';\r\n return CharacterPairSupport;\r\n}());\r\nexport { CharacterPairSupport };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../../base/common/strings.js';\r\nimport { Range } from '../../core/range.js';\r\nvar RichEditBracket = /** @class */ (function () {\r\n function RichEditBracket(languageIdentifier, index, open, close, forwardRegex, reversedRegex) {\r\n this.languageIdentifier = languageIdentifier;\r\n this.index = index;\r\n this.open = open;\r\n this.close = close;\r\n this.forwardRegex = forwardRegex;\r\n this.reversedRegex = reversedRegex;\r\n this._openSet = RichEditBracket._toSet(this.open);\r\n this._closeSet = RichEditBracket._toSet(this.close);\r\n }\r\n RichEditBracket.prototype.isOpen = function (text) {\r\n return this._openSet.has(text);\r\n };\r\n RichEditBracket.prototype.isClose = function (text) {\r\n return this._closeSet.has(text);\r\n };\r\n RichEditBracket._toSet = function (arr) {\r\n var result = new Set();\r\n for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\r\n var element = arr_1[_i];\r\n result.add(element);\r\n }\r\n return result;\r\n };\r\n return RichEditBracket;\r\n}());\r\nexport { RichEditBracket };\r\nfunction groupFuzzyBrackets(brackets) {\r\n var N = brackets.length;\r\n brackets = brackets.map(function (b) { return [b[0].toLowerCase(), b[1].toLowerCase()]; });\r\n var group = [];\r\n for (var i = 0; i < N; i++) {\r\n group[i] = i;\r\n }\r\n var areOverlapping = function (a, b) {\r\n var aOpen = a[0], aClose = a[1];\r\n var bOpen = b[0], bClose = b[1];\r\n return (aOpen === bOpen || aOpen === bClose || aClose === bOpen || aClose === bClose);\r\n };\r\n var mergeGroups = function (g1, g2) {\r\n var newG = Math.min(g1, g2);\r\n var oldG = Math.max(g1, g2);\r\n for (var i = 0; i < N; i++) {\r\n if (group[i] === oldG) {\r\n group[i] = newG;\r\n }\r\n }\r\n };\r\n // group together brackets that have the same open or the same close sequence\r\n for (var i = 0; i < N; i++) {\r\n var a = brackets[i];\r\n for (var j = i + 1; j < N; j++) {\r\n var b = brackets[j];\r\n if (areOverlapping(a, b)) {\r\n mergeGroups(group[i], group[j]);\r\n }\r\n }\r\n }\r\n var result = [];\r\n for (var g = 0; g < N; g++) {\r\n var currentOpen = [];\r\n var currentClose = [];\r\n for (var i = 0; i < N; i++) {\r\n if (group[i] === g) {\r\n var _a = brackets[i], open_1 = _a[0], close_1 = _a[1];\r\n currentOpen.push(open_1);\r\n currentClose.push(close_1);\r\n }\r\n }\r\n if (currentOpen.length > 0) {\r\n result.push({\r\n open: currentOpen,\r\n close: currentClose\r\n });\r\n }\r\n }\r\n return result;\r\n}\r\nvar RichEditBrackets = /** @class */ (function () {\r\n function RichEditBrackets(languageIdentifier, _brackets) {\r\n var brackets = groupFuzzyBrackets(_brackets);\r\n this.brackets = brackets.map(function (b, index) {\r\n return new RichEditBracket(languageIdentifier, index, b.open, b.close, getRegexForBracketPair(b.open, b.close, brackets, index), getReversedRegexForBracketPair(b.open, b.close, brackets, index));\r\n });\r\n this.forwardRegex = getRegexForBrackets(this.brackets);\r\n this.reversedRegex = getReversedRegexForBrackets(this.brackets);\r\n this.textIsBracket = {};\r\n this.textIsOpenBracket = {};\r\n this.maxBracketLength = 0;\r\n for (var _i = 0, _a = this.brackets; _i < _a.length; _i++) {\r\n var bracket = _a[_i];\r\n for (var _b = 0, _c = bracket.open; _b < _c.length; _b++) {\r\n var open_2 = _c[_b];\r\n this.textIsBracket[open_2] = bracket;\r\n this.textIsOpenBracket[open_2] = true;\r\n this.maxBracketLength = Math.max(this.maxBracketLength, open_2.length);\r\n }\r\n for (var _d = 0, _e = bracket.close; _d < _e.length; _d++) {\r\n var close_2 = _e[_d];\r\n this.textIsBracket[close_2] = bracket;\r\n this.textIsOpenBracket[close_2] = false;\r\n this.maxBracketLength = Math.max(this.maxBracketLength, close_2.length);\r\n }\r\n }\r\n }\r\n return RichEditBrackets;\r\n}());\r\nexport { RichEditBrackets };\r\nfunction collectSuperstrings(str, brackets, currentIndex, dest) {\r\n for (var i = 0, len = brackets.length; i < len; i++) {\r\n if (i === currentIndex) {\r\n continue;\r\n }\r\n var bracket = brackets[i];\r\n for (var _i = 0, _a = bracket.open; _i < _a.length; _i++) {\r\n var open_3 = _a[_i];\r\n if (open_3.indexOf(str) >= 0) {\r\n dest.push(open_3);\r\n }\r\n }\r\n for (var _b = 0, _c = bracket.close; _b < _c.length; _b++) {\r\n var close_3 = _c[_b];\r\n if (close_3.indexOf(str) >= 0) {\r\n dest.push(close_3);\r\n }\r\n }\r\n }\r\n}\r\nfunction lengthcmp(a, b) {\r\n return a.length - b.length;\r\n}\r\nfunction unique(arr) {\r\n if (arr.length <= 1) {\r\n return arr;\r\n }\r\n var result = [];\r\n var seen = new Set();\r\n for (var _i = 0, arr_2 = arr; _i < arr_2.length; _i++) {\r\n var element = arr_2[_i];\r\n if (seen.has(element)) {\r\n continue;\r\n }\r\n result.push(element);\r\n seen.add(element);\r\n }\r\n return result;\r\n}\r\nfunction getRegexForBracketPair(open, close, brackets, currentIndex) {\r\n // search in all brackets for other brackets that are a superstring of these brackets\r\n var pieces = [];\r\n pieces = pieces.concat(open);\r\n pieces = pieces.concat(close);\r\n for (var i = 0, len = pieces.length; i < len; i++) {\r\n collectSuperstrings(pieces[i], brackets, currentIndex, pieces);\r\n }\r\n pieces = unique(pieces);\r\n pieces.sort(lengthcmp);\r\n pieces.reverse();\r\n return createBracketOrRegExp(pieces);\r\n}\r\nfunction getReversedRegexForBracketPair(open, close, brackets, currentIndex) {\r\n // search in all brackets for other brackets that are a superstring of these brackets\r\n var pieces = [];\r\n pieces = pieces.concat(open);\r\n pieces = pieces.concat(close);\r\n for (var i = 0, len = pieces.length; i < len; i++) {\r\n collectSuperstrings(pieces[i], brackets, currentIndex, pieces);\r\n }\r\n pieces = unique(pieces);\r\n pieces.sort(lengthcmp);\r\n pieces.reverse();\r\n return createBracketOrRegExp(pieces.map(toReversedString));\r\n}\r\nfunction getRegexForBrackets(brackets) {\r\n var pieces = [];\r\n for (var _i = 0, brackets_1 = brackets; _i < brackets_1.length; _i++) {\r\n var bracket = brackets_1[_i];\r\n for (var _a = 0, _b = bracket.open; _a < _b.length; _a++) {\r\n var open_4 = _b[_a];\r\n pieces.push(open_4);\r\n }\r\n for (var _c = 0, _d = bracket.close; _c < _d.length; _c++) {\r\n var close_4 = _d[_c];\r\n pieces.push(close_4);\r\n }\r\n }\r\n pieces = unique(pieces);\r\n return createBracketOrRegExp(pieces);\r\n}\r\nfunction getReversedRegexForBrackets(brackets) {\r\n var pieces = [];\r\n for (var _i = 0, brackets_2 = brackets; _i < brackets_2.length; _i++) {\r\n var bracket = brackets_2[_i];\r\n for (var _a = 0, _b = bracket.open; _a < _b.length; _a++) {\r\n var open_5 = _b[_a];\r\n pieces.push(open_5);\r\n }\r\n for (var _c = 0, _d = bracket.close; _c < _d.length; _c++) {\r\n var close_5 = _d[_c];\r\n pieces.push(close_5);\r\n }\r\n }\r\n pieces = unique(pieces);\r\n return createBracketOrRegExp(pieces.map(toReversedString));\r\n}\r\nfunction prepareBracketForRegExp(str) {\r\n // This bracket pair uses letters like e.g. \"begin\" - \"end\"\r\n var insertWordBoundaries = (/^[\\w ]+$/.test(str));\r\n str = strings.escapeRegExpCharacters(str);\r\n return (insertWordBoundaries ? \"\\\\b\" + str + \"\\\\b\" : str);\r\n}\r\nfunction createBracketOrRegExp(pieces) {\r\n var regexStr = \"(\" + pieces.map(prepareBracketForRegExp).join(')|(') + \")\";\r\n return strings.createRegExp(regexStr, true);\r\n}\r\nvar toReversedString = (function () {\r\n function reverse(str) {\r\n var reversedStr = '';\r\n for (var i = str.length - 1; i >= 0; i--) {\r\n reversedStr += str.charAt(i);\r\n }\r\n return reversedStr;\r\n }\r\n var lastInput = null;\r\n var lastOutput = null;\r\n return function toReversedString(str) {\r\n if (lastInput !== str) {\r\n lastInput = str;\r\n lastOutput = reverse(lastInput);\r\n }\r\n return lastOutput;\r\n };\r\n})();\r\nvar BracketsUtils = /** @class */ (function () {\r\n function BracketsUtils() {\r\n }\r\n BracketsUtils._findPrevBracketInText = function (reversedBracketRegex, lineNumber, reversedText, offset) {\r\n var m = reversedText.match(reversedBracketRegex);\r\n if (!m) {\r\n return null;\r\n }\r\n var matchOffset = reversedText.length - (m.index || 0);\r\n var matchLength = m[0].length;\r\n var absoluteMatchOffset = offset + matchOffset;\r\n return new Range(lineNumber, absoluteMatchOffset - matchLength + 1, lineNumber, absoluteMatchOffset + 1);\r\n };\r\n BracketsUtils.findPrevBracketInRange = function (reversedBracketRegex, lineNumber, lineText, startOffset, endOffset) {\r\n // Because JS does not support backwards regex search, we search forwards in a reversed string with a reversed regex ;)\r\n var reversedLineText = toReversedString(lineText);\r\n var reversedSubstr = reversedLineText.substring(lineText.length - endOffset, lineText.length - startOffset);\r\n return this._findPrevBracketInText(reversedBracketRegex, lineNumber, reversedSubstr, startOffset);\r\n };\r\n BracketsUtils.findNextBracketInText = function (bracketRegex, lineNumber, text, offset) {\r\n var m = text.match(bracketRegex);\r\n if (!m) {\r\n return null;\r\n }\r\n var matchOffset = m.index || 0;\r\n var matchLength = m[0].length;\r\n if (matchLength === 0) {\r\n return null;\r\n }\r\n var absoluteMatchOffset = offset + matchOffset;\r\n return new Range(lineNumber, absoluteMatchOffset + 1, lineNumber, absoluteMatchOffset + 1 + matchLength);\r\n };\r\n BracketsUtils.findNextBracketInRange = function (bracketRegex, lineNumber, lineText, startOffset, endOffset) {\r\n var substr = lineText.substring(startOffset, endOffset);\r\n return this.findNextBracketInText(bracketRegex, lineNumber, substr, startOffset);\r\n };\r\n return BracketsUtils;\r\n}());\r\nexport { BracketsUtils };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { ignoreBracketsInToken } from '../supports.js';\r\nimport { BracketsUtils } from './richEditBrackets.js';\r\nvar BracketElectricCharacterSupport = /** @class */ (function () {\r\n function BracketElectricCharacterSupport(richEditBrackets) {\r\n this._richEditBrackets = richEditBrackets;\r\n }\r\n BracketElectricCharacterSupport.prototype.getElectricCharacters = function () {\r\n var result = [];\r\n if (this._richEditBrackets) {\r\n for (var _i = 0, _a = this._richEditBrackets.brackets; _i < _a.length; _i++) {\r\n var bracket = _a[_i];\r\n for (var _b = 0, _c = bracket.close; _b < _c.length; _b++) {\r\n var close_1 = _c[_b];\r\n var lastChar = close_1.charAt(close_1.length - 1);\r\n result.push(lastChar);\r\n }\r\n }\r\n }\r\n // Filter duplicate entries\r\n result = result.filter(function (item, pos, array) {\r\n return array.indexOf(item) === pos;\r\n });\r\n return result;\r\n };\r\n BracketElectricCharacterSupport.prototype.onElectricCharacter = function (character, context, column) {\r\n if (!this._richEditBrackets || this._richEditBrackets.brackets.length === 0) {\r\n return null;\r\n }\r\n var tokenIndex = context.findTokenIndexAtOffset(column - 1);\r\n if (ignoreBracketsInToken(context.getStandardTokenType(tokenIndex))) {\r\n return null;\r\n }\r\n var reversedBracketRegex = this._richEditBrackets.reversedRegex;\r\n var text = context.getLineContent().substring(0, column - 1) + character;\r\n var r = BracketsUtils.findPrevBracketInRange(reversedBracketRegex, 1, text, 0, text.length);\r\n if (!r) {\r\n return null;\r\n }\r\n var bracketText = text.substring(r.startColumn - 1, r.endColumn - 1);\r\n bracketText = bracketText.toLowerCase();\r\n var isOpen = this._richEditBrackets.textIsOpenBracket[bracketText];\r\n if (isOpen) {\r\n return null;\r\n }\r\n var textBeforeBracket = text.substring(0, r.startColumn - 1);\r\n if (!/^\\s*$/.test(textBeforeBracket)) {\r\n // There is other text on the line before the bracket\r\n return null;\r\n }\r\n return {\r\n matchOpenBracket: bracketText\r\n };\r\n };\r\n return BracketElectricCharacterSupport;\r\n}());\r\nexport { BracketElectricCharacterSupport };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar IndentRulesSupport = /** @class */ (function () {\r\n function IndentRulesSupport(indentationRules) {\r\n this._indentationRules = indentationRules;\r\n }\r\n IndentRulesSupport.prototype.shouldIncrease = function (text) {\r\n if (this._indentationRules) {\r\n if (this._indentationRules.increaseIndentPattern && this._indentationRules.increaseIndentPattern.test(text)) {\r\n return true;\r\n }\r\n // if (this._indentationRules.indentNextLinePattern && this._indentationRules.indentNextLinePattern.test(text)) {\r\n // \treturn true;\r\n // }\r\n }\r\n return false;\r\n };\r\n IndentRulesSupport.prototype.shouldDecrease = function (text) {\r\n if (this._indentationRules && this._indentationRules.decreaseIndentPattern && this._indentationRules.decreaseIndentPattern.test(text)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n IndentRulesSupport.prototype.shouldIndentNextLine = function (text) {\r\n if (this._indentationRules && this._indentationRules.indentNextLinePattern && this._indentationRules.indentNextLinePattern.test(text)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n IndentRulesSupport.prototype.shouldIgnore = function (text) {\r\n // the text matches `unIndentedLinePattern`\r\n if (this._indentationRules && this._indentationRules.unIndentedLinePattern && this._indentationRules.unIndentedLinePattern.test(text)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n IndentRulesSupport.prototype.getIndentMetadata = function (text) {\r\n var ret = 0;\r\n if (this.shouldIncrease(text)) {\r\n ret += 1 /* INCREASE_MASK */;\r\n }\r\n if (this.shouldDecrease(text)) {\r\n ret += 2 /* DECREASE_MASK */;\r\n }\r\n if (this.shouldIndentNextLine(text)) {\r\n ret += 4 /* INDENT_NEXTLINE_MASK */;\r\n }\r\n if (this.shouldIgnore(text)) {\r\n ret += 8 /* UNINDENT_MASK */;\r\n }\r\n return ret;\r\n };\r\n return IndentRulesSupport;\r\n}());\r\nexport { IndentRulesSupport };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\r\nimport * as strings from '../../../../base/common/strings.js';\r\nimport { IndentAction } from '../languageConfiguration.js';\r\nvar OnEnterSupport = /** @class */ (function () {\r\n function OnEnterSupport(opts) {\r\n var _this = this;\r\n opts = opts || {};\r\n opts.brackets = opts.brackets || [\r\n ['(', ')'],\r\n ['{', '}'],\r\n ['[', ']']\r\n ];\r\n this._brackets = [];\r\n opts.brackets.forEach(function (bracket) {\r\n var openRegExp = OnEnterSupport._createOpenBracketRegExp(bracket[0]);\r\n var closeRegExp = OnEnterSupport._createCloseBracketRegExp(bracket[1]);\r\n if (openRegExp && closeRegExp) {\r\n _this._brackets.push({\r\n open: bracket[0],\r\n openRegExp: openRegExp,\r\n close: bracket[1],\r\n closeRegExp: closeRegExp,\r\n });\r\n }\r\n });\r\n this._regExpRules = opts.onEnterRules || [];\r\n }\r\n OnEnterSupport.prototype.onEnter = function (autoIndent, oneLineAboveText, beforeEnterText, afterEnterText) {\r\n // (1): `regExpRules`\r\n if (autoIndent >= 3 /* Advanced */) {\r\n for (var i = 0, len = this._regExpRules.length; i < len; i++) {\r\n var rule = this._regExpRules[i];\r\n var regResult = [{\r\n reg: rule.beforeText,\r\n text: beforeEnterText\r\n }, {\r\n reg: rule.afterText,\r\n text: afterEnterText\r\n }, {\r\n reg: rule.oneLineAboveText,\r\n text: oneLineAboveText\r\n }].every(function (obj) {\r\n return obj.reg ? obj.reg.test(obj.text) : true;\r\n });\r\n if (regResult) {\r\n return rule.action;\r\n }\r\n }\r\n }\r\n // (2): Special indent-outdent\r\n if (autoIndent >= 2 /* Brackets */) {\r\n if (beforeEnterText.length > 0 && afterEnterText.length > 0) {\r\n for (var i = 0, len = this._brackets.length; i < len; i++) {\r\n var bracket = this._brackets[i];\r\n if (bracket.openRegExp.test(beforeEnterText) && bracket.closeRegExp.test(afterEnterText)) {\r\n return { indentAction: IndentAction.IndentOutdent };\r\n }\r\n }\r\n }\r\n }\r\n // (4): Open bracket based logic\r\n if (autoIndent >= 2 /* Brackets */) {\r\n if (beforeEnterText.length > 0) {\r\n for (var i = 0, len = this._brackets.length; i < len; i++) {\r\n var bracket = this._brackets[i];\r\n if (bracket.openRegExp.test(beforeEnterText)) {\r\n return { indentAction: IndentAction.Indent };\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n OnEnterSupport._createOpenBracketRegExp = function (bracket) {\r\n var str = strings.escapeRegExpCharacters(bracket);\r\n if (!/\\B/.test(str.charAt(0))) {\r\n str = '\\\\b' + str;\r\n }\r\n str += '\\\\s*$';\r\n return OnEnterSupport._safeRegExp(str);\r\n };\r\n OnEnterSupport._createCloseBracketRegExp = function (bracket) {\r\n var str = strings.escapeRegExpCharacters(bracket);\r\n if (!/\\B/.test(str.charAt(str.length - 1))) {\r\n str = str + '\\\\b';\r\n }\r\n str = '^\\\\s*' + str;\r\n return OnEnterSupport._safeRegExp(str);\r\n };\r\n OnEnterSupport._safeRegExp = function (def) {\r\n try {\r\n return new RegExp(def);\r\n }\r\n catch (err) {\r\n onUnexpectedError(err);\r\n return null;\r\n }\r\n };\r\n return OnEnterSupport;\r\n}());\r\nexport { OnEnterSupport };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { toDisposable } from '../../../base/common/lifecycle.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { DEFAULT_WORD_REGEXP, ensureValidWordDefinition } from '../model/wordHelper.js';\r\nimport { IndentAction } from './languageConfiguration.js';\r\nimport { createScopedLineTokens } from './supports.js';\r\nimport { CharacterPairSupport } from './supports/characterPair.js';\r\nimport { BracketElectricCharacterSupport } from './supports/electricCharacter.js';\r\nimport { IndentRulesSupport } from './supports/indentRules.js';\r\nimport { OnEnterSupport } from './supports/onEnter.js';\r\nimport { RichEditBrackets } from './supports/richEditBrackets.js';\r\nvar RichEditSupport = /** @class */ (function () {\r\n function RichEditSupport(languageIdentifier, previous, rawConf) {\r\n this._languageIdentifier = languageIdentifier;\r\n this._brackets = null;\r\n this._electricCharacter = null;\r\n var prev = null;\r\n if (previous) {\r\n prev = previous._conf;\r\n }\r\n this._conf = RichEditSupport._mergeConf(prev, rawConf);\r\n this._onEnterSupport = (this._conf.brackets || this._conf.indentationRules || this._conf.onEnterRules ? new OnEnterSupport(this._conf) : null);\r\n this.comments = RichEditSupport._handleComments(this._conf);\r\n this.characterPair = new CharacterPairSupport(this._conf);\r\n this.wordDefinition = this._conf.wordPattern || DEFAULT_WORD_REGEXP;\r\n this.indentationRules = this._conf.indentationRules;\r\n if (this._conf.indentationRules) {\r\n this.indentRulesSupport = new IndentRulesSupport(this._conf.indentationRules);\r\n }\r\n else {\r\n this.indentRulesSupport = null;\r\n }\r\n this.foldingRules = this._conf.folding || {};\r\n }\r\n Object.defineProperty(RichEditSupport.prototype, \"brackets\", {\r\n get: function () {\r\n if (!this._brackets && this._conf.brackets) {\r\n this._brackets = new RichEditBrackets(this._languageIdentifier, this._conf.brackets);\r\n }\r\n return this._brackets;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RichEditSupport.prototype, \"electricCharacter\", {\r\n get: function () {\r\n if (!this._electricCharacter) {\r\n this._electricCharacter = new BracketElectricCharacterSupport(this.brackets);\r\n }\r\n return this._electricCharacter;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n RichEditSupport.prototype.onEnter = function (autoIndent, oneLineAboveText, beforeEnterText, afterEnterText) {\r\n if (!this._onEnterSupport) {\r\n return null;\r\n }\r\n return this._onEnterSupport.onEnter(autoIndent, oneLineAboveText, beforeEnterText, afterEnterText);\r\n };\r\n RichEditSupport._mergeConf = function (prev, current) {\r\n return {\r\n comments: (prev ? current.comments || prev.comments : current.comments),\r\n brackets: (prev ? current.brackets || prev.brackets : current.brackets),\r\n wordPattern: (prev ? current.wordPattern || prev.wordPattern : current.wordPattern),\r\n indentationRules: (prev ? current.indentationRules || prev.indentationRules : current.indentationRules),\r\n onEnterRules: (prev ? current.onEnterRules || prev.onEnterRules : current.onEnterRules),\r\n autoClosingPairs: (prev ? current.autoClosingPairs || prev.autoClosingPairs : current.autoClosingPairs),\r\n surroundingPairs: (prev ? current.surroundingPairs || prev.surroundingPairs : current.surroundingPairs),\r\n autoCloseBefore: (prev ? current.autoCloseBefore || prev.autoCloseBefore : current.autoCloseBefore),\r\n folding: (prev ? current.folding || prev.folding : current.folding),\r\n __electricCharacterSupport: (prev ? current.__electricCharacterSupport || prev.__electricCharacterSupport : current.__electricCharacterSupport),\r\n };\r\n };\r\n RichEditSupport._handleComments = function (conf) {\r\n var commentRule = conf.comments;\r\n if (!commentRule) {\r\n return null;\r\n }\r\n // comment configuration\r\n var comments = {};\r\n if (commentRule.lineComment) {\r\n comments.lineCommentToken = commentRule.lineComment;\r\n }\r\n if (commentRule.blockComment) {\r\n var _a = commentRule.blockComment, blockStart = _a[0], blockEnd = _a[1];\r\n comments.blockCommentStartToken = blockStart;\r\n comments.blockCommentEndToken = blockEnd;\r\n }\r\n return comments;\r\n };\r\n return RichEditSupport;\r\n}());\r\nexport { RichEditSupport };\r\nvar LanguageConfigurationChangeEvent = /** @class */ (function () {\r\n function LanguageConfigurationChangeEvent(languageIdentifier) {\r\n this.languageIdentifier = languageIdentifier;\r\n }\r\n return LanguageConfigurationChangeEvent;\r\n}());\r\nexport { LanguageConfigurationChangeEvent };\r\nvar LanguageConfigurationRegistryImpl = /** @class */ (function () {\r\n function LanguageConfigurationRegistryImpl() {\r\n this._entries = new Map();\r\n this._onDidChange = new Emitter();\r\n this.onDidChange = this._onDidChange.event;\r\n }\r\n LanguageConfigurationRegistryImpl.prototype.register = function (languageIdentifier, configuration) {\r\n var _this = this;\r\n var previous = this._getRichEditSupport(languageIdentifier.id);\r\n var current = new RichEditSupport(languageIdentifier, previous, configuration);\r\n this._entries.set(languageIdentifier.id, current);\r\n this._onDidChange.fire(new LanguageConfigurationChangeEvent(languageIdentifier));\r\n return toDisposable(function () {\r\n if (_this._entries.get(languageIdentifier.id) === current) {\r\n _this._entries.set(languageIdentifier.id, previous);\r\n _this._onDidChange.fire(new LanguageConfigurationChangeEvent(languageIdentifier));\r\n }\r\n });\r\n };\r\n LanguageConfigurationRegistryImpl.prototype._getRichEditSupport = function (languageId) {\r\n return this._entries.get(languageId);\r\n };\r\n // begin electricCharacter\r\n LanguageConfigurationRegistryImpl.prototype._getElectricCharacterSupport = function (languageId) {\r\n var value = this._getRichEditSupport(languageId);\r\n if (!value) {\r\n return null;\r\n }\r\n return value.electricCharacter || null;\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getElectricCharacters = function (languageId) {\r\n var electricCharacterSupport = this._getElectricCharacterSupport(languageId);\r\n if (!electricCharacterSupport) {\r\n return [];\r\n }\r\n return electricCharacterSupport.getElectricCharacters();\r\n };\r\n /**\r\n * Should return opening bracket type to match indentation with\r\n */\r\n LanguageConfigurationRegistryImpl.prototype.onElectricCharacter = function (character, context, column) {\r\n var scopedLineTokens = createScopedLineTokens(context, column - 1);\r\n var electricCharacterSupport = this._getElectricCharacterSupport(scopedLineTokens.languageId);\r\n if (!electricCharacterSupport) {\r\n return null;\r\n }\r\n return electricCharacterSupport.onElectricCharacter(character, scopedLineTokens, column - scopedLineTokens.firstCharOffset);\r\n };\r\n // end electricCharacter\r\n LanguageConfigurationRegistryImpl.prototype.getComments = function (languageId) {\r\n var value = this._getRichEditSupport(languageId);\r\n if (!value) {\r\n return null;\r\n }\r\n return value.comments || null;\r\n };\r\n // begin characterPair\r\n LanguageConfigurationRegistryImpl.prototype._getCharacterPairSupport = function (languageId) {\r\n var value = this._getRichEditSupport(languageId);\r\n if (!value) {\r\n return null;\r\n }\r\n return value.characterPair || null;\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getAutoClosingPairs = function (languageId) {\r\n var characterPairSupport = this._getCharacterPairSupport(languageId);\r\n if (!characterPairSupport) {\r\n return [];\r\n }\r\n return characterPairSupport.getAutoClosingPairs();\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getAutoCloseBeforeSet = function (languageId) {\r\n var characterPairSupport = this._getCharacterPairSupport(languageId);\r\n if (!characterPairSupport) {\r\n return CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED;\r\n }\r\n return characterPairSupport.getAutoCloseBeforeSet();\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getSurroundingPairs = function (languageId) {\r\n var characterPairSupport = this._getCharacterPairSupport(languageId);\r\n if (!characterPairSupport) {\r\n return [];\r\n }\r\n return characterPairSupport.getSurroundingPairs();\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.shouldAutoClosePair = function (autoClosingPair, context, column) {\r\n var scopedLineTokens = createScopedLineTokens(context, column - 1);\r\n return CharacterPairSupport.shouldAutoClosePair(autoClosingPair, scopedLineTokens, column - scopedLineTokens.firstCharOffset);\r\n };\r\n // end characterPair\r\n LanguageConfigurationRegistryImpl.prototype.getWordDefinition = function (languageId) {\r\n var value = this._getRichEditSupport(languageId);\r\n if (!value) {\r\n return ensureValidWordDefinition(null);\r\n }\r\n return ensureValidWordDefinition(value.wordDefinition || null);\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getFoldingRules = function (languageId) {\r\n var value = this._getRichEditSupport(languageId);\r\n if (!value) {\r\n return {};\r\n }\r\n return value.foldingRules;\r\n };\r\n // begin Indent Rules\r\n LanguageConfigurationRegistryImpl.prototype.getIndentRulesSupport = function (languageId) {\r\n var value = this._getRichEditSupport(languageId);\r\n if (!value) {\r\n return null;\r\n }\r\n return value.indentRulesSupport || null;\r\n };\r\n /**\r\n * Get nearest preceiding line which doesn't match unIndentPattern or contains all whitespace.\r\n * Result:\r\n * -1: run into the boundary of embedded languages\r\n * 0: every line above are invalid\r\n * else: nearest preceding line of the same language\r\n */\r\n LanguageConfigurationRegistryImpl.prototype.getPrecedingValidLine = function (model, lineNumber, indentRulesSupport) {\r\n var languageID = model.getLanguageIdAtPosition(lineNumber, 0);\r\n if (lineNumber > 1) {\r\n var lastLineNumber = void 0;\r\n var resultLineNumber = -1;\r\n for (lastLineNumber = lineNumber - 1; lastLineNumber >= 1; lastLineNumber--) {\r\n if (model.getLanguageIdAtPosition(lastLineNumber, 0) !== languageID) {\r\n return resultLineNumber;\r\n }\r\n var text = model.getLineContent(lastLineNumber);\r\n if (indentRulesSupport.shouldIgnore(text) || /^\\s+$/.test(text) || text === '') {\r\n resultLineNumber = lastLineNumber;\r\n continue;\r\n }\r\n return lastLineNumber;\r\n }\r\n }\r\n return -1;\r\n };\r\n /**\r\n * Get inherited indentation from above lines.\r\n * 1. Find the nearest preceding line which doesn't match unIndentedLinePattern.\r\n * 2. If this line matches indentNextLinePattern or increaseIndentPattern, it means that the indent level of `lineNumber` should be 1 greater than this line.\r\n * 3. If this line doesn't match any indent rules\r\n * a. check whether the line above it matches indentNextLinePattern\r\n * b. If not, the indent level of this line is the result\r\n * c. If so, it means the indent of this line is *temporary*, go upward utill we find a line whose indent is not temporary (the same workflow a -> b -> c).\r\n * 4. Otherwise, we fail to get an inherited indent from aboves. Return null and we should not touch the indent of `lineNumber`\r\n *\r\n * This function only return the inherited indent based on above lines, it doesn't check whether current line should decrease or not.\r\n */\r\n LanguageConfigurationRegistryImpl.prototype.getInheritIndentForLine = function (autoIndent, model, lineNumber, honorIntentialIndent) {\r\n if (honorIntentialIndent === void 0) { honorIntentialIndent = true; }\r\n if (autoIndent < 4 /* Full */) {\r\n return null;\r\n }\r\n var indentRulesSupport = this.getIndentRulesSupport(model.getLanguageIdentifier().id);\r\n if (!indentRulesSupport) {\r\n return null;\r\n }\r\n if (lineNumber <= 1) {\r\n return {\r\n indentation: '',\r\n action: null\r\n };\r\n }\r\n var precedingUnIgnoredLine = this.getPrecedingValidLine(model, lineNumber, indentRulesSupport);\r\n if (precedingUnIgnoredLine < 0) {\r\n return null;\r\n }\r\n else if (precedingUnIgnoredLine < 1) {\r\n return {\r\n indentation: '',\r\n action: null\r\n };\r\n }\r\n var precedingUnIgnoredLineContent = model.getLineContent(precedingUnIgnoredLine);\r\n if (indentRulesSupport.shouldIncrease(precedingUnIgnoredLineContent) || indentRulesSupport.shouldIndentNextLine(precedingUnIgnoredLineContent)) {\r\n return {\r\n indentation: strings.getLeadingWhitespace(precedingUnIgnoredLineContent),\r\n action: IndentAction.Indent,\r\n line: precedingUnIgnoredLine\r\n };\r\n }\r\n else if (indentRulesSupport.shouldDecrease(precedingUnIgnoredLineContent)) {\r\n return {\r\n indentation: strings.getLeadingWhitespace(precedingUnIgnoredLineContent),\r\n action: null,\r\n line: precedingUnIgnoredLine\r\n };\r\n }\r\n else {\r\n // precedingUnIgnoredLine can not be ignored.\r\n // it doesn't increase indent of following lines\r\n // it doesn't increase just next line\r\n // so current line is not affect by precedingUnIgnoredLine\r\n // and then we should get a correct inheritted indentation from above lines\r\n if (precedingUnIgnoredLine === 1) {\r\n return {\r\n indentation: strings.getLeadingWhitespace(model.getLineContent(precedingUnIgnoredLine)),\r\n action: null,\r\n line: precedingUnIgnoredLine\r\n };\r\n }\r\n var previousLine = precedingUnIgnoredLine - 1;\r\n var previousLineIndentMetadata = indentRulesSupport.getIndentMetadata(model.getLineContent(previousLine));\r\n if (!(previousLineIndentMetadata & (1 /* INCREASE_MASK */ | 2 /* DECREASE_MASK */)) &&\r\n (previousLineIndentMetadata & 4 /* INDENT_NEXTLINE_MASK */)) {\r\n var stopLine = 0;\r\n for (var i = previousLine - 1; i > 0; i--) {\r\n if (indentRulesSupport.shouldIndentNextLine(model.getLineContent(i))) {\r\n continue;\r\n }\r\n stopLine = i;\r\n break;\r\n }\r\n return {\r\n indentation: strings.getLeadingWhitespace(model.getLineContent(stopLine + 1)),\r\n action: null,\r\n line: stopLine + 1\r\n };\r\n }\r\n if (honorIntentialIndent) {\r\n return {\r\n indentation: strings.getLeadingWhitespace(model.getLineContent(precedingUnIgnoredLine)),\r\n action: null,\r\n line: precedingUnIgnoredLine\r\n };\r\n }\r\n else {\r\n // search from precedingUnIgnoredLine until we find one whose indent is not temporary\r\n for (var i = precedingUnIgnoredLine; i > 0; i--) {\r\n var lineContent = model.getLineContent(i);\r\n if (indentRulesSupport.shouldIncrease(lineContent)) {\r\n return {\r\n indentation: strings.getLeadingWhitespace(lineContent),\r\n action: IndentAction.Indent,\r\n line: i\r\n };\r\n }\r\n else if (indentRulesSupport.shouldIndentNextLine(lineContent)) {\r\n var stopLine = 0;\r\n for (var j = i - 1; j > 0; j--) {\r\n if (indentRulesSupport.shouldIndentNextLine(model.getLineContent(i))) {\r\n continue;\r\n }\r\n stopLine = j;\r\n break;\r\n }\r\n return {\r\n indentation: strings.getLeadingWhitespace(model.getLineContent(stopLine + 1)),\r\n action: null,\r\n line: stopLine + 1\r\n };\r\n }\r\n else if (indentRulesSupport.shouldDecrease(lineContent)) {\r\n return {\r\n indentation: strings.getLeadingWhitespace(lineContent),\r\n action: null,\r\n line: i\r\n };\r\n }\r\n }\r\n return {\r\n indentation: strings.getLeadingWhitespace(model.getLineContent(1)),\r\n action: null,\r\n line: 1\r\n };\r\n }\r\n }\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getGoodIndentForLine = function (autoIndent, virtualModel, languageId, lineNumber, indentConverter) {\r\n if (autoIndent < 4 /* Full */) {\r\n return null;\r\n }\r\n var richEditSupport = this._getRichEditSupport(languageId);\r\n if (!richEditSupport) {\r\n return null;\r\n }\r\n var indentRulesSupport = this.getIndentRulesSupport(languageId);\r\n if (!indentRulesSupport) {\r\n return null;\r\n }\r\n var indent = this.getInheritIndentForLine(autoIndent, virtualModel, lineNumber);\r\n var lineContent = virtualModel.getLineContent(lineNumber);\r\n if (indent) {\r\n var inheritLine = indent.line;\r\n if (inheritLine !== undefined) {\r\n var enterResult = richEditSupport.onEnter(autoIndent, '', virtualModel.getLineContent(inheritLine), '');\r\n if (enterResult) {\r\n var indentation = strings.getLeadingWhitespace(virtualModel.getLineContent(inheritLine));\r\n if (enterResult.removeText) {\r\n indentation = indentation.substring(0, indentation.length - enterResult.removeText);\r\n }\r\n if ((enterResult.indentAction === IndentAction.Indent) ||\r\n (enterResult.indentAction === IndentAction.IndentOutdent)) {\r\n indentation = indentConverter.shiftIndent(indentation);\r\n }\r\n else if (enterResult.indentAction === IndentAction.Outdent) {\r\n indentation = indentConverter.unshiftIndent(indentation);\r\n }\r\n if (indentRulesSupport.shouldDecrease(lineContent)) {\r\n indentation = indentConverter.unshiftIndent(indentation);\r\n }\r\n if (enterResult.appendText) {\r\n indentation += enterResult.appendText;\r\n }\r\n return strings.getLeadingWhitespace(indentation);\r\n }\r\n }\r\n if (indentRulesSupport.shouldDecrease(lineContent)) {\r\n if (indent.action === IndentAction.Indent) {\r\n return indent.indentation;\r\n }\r\n else {\r\n return indentConverter.unshiftIndent(indent.indentation);\r\n }\r\n }\r\n else {\r\n if (indent.action === IndentAction.Indent) {\r\n return indentConverter.shiftIndent(indent.indentation);\r\n }\r\n else {\r\n return indent.indentation;\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getIndentForEnter = function (autoIndent, model, range, indentConverter) {\r\n if (autoIndent < 4 /* Full */) {\r\n return null;\r\n }\r\n model.forceTokenization(range.startLineNumber);\r\n var lineTokens = model.getLineTokens(range.startLineNumber);\r\n var scopedLineTokens = createScopedLineTokens(lineTokens, range.startColumn - 1);\r\n var scopedLineText = scopedLineTokens.getLineContent();\r\n var embeddedLanguage = false;\r\n var beforeEnterText;\r\n if (scopedLineTokens.firstCharOffset > 0 && lineTokens.getLanguageId(0) !== scopedLineTokens.languageId) {\r\n // we are in the embeded language content\r\n embeddedLanguage = true; // if embeddedLanguage is true, then we don't touch the indentation of current line\r\n beforeEnterText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\r\n }\r\n else {\r\n beforeEnterText = lineTokens.getLineContent().substring(0, range.startColumn - 1);\r\n }\r\n var afterEnterText;\r\n if (range.isEmpty()) {\r\n afterEnterText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\r\n }\r\n else {\r\n var endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\r\n afterEnterText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\r\n }\r\n var indentRulesSupport = this.getIndentRulesSupport(scopedLineTokens.languageId);\r\n if (!indentRulesSupport) {\r\n return null;\r\n }\r\n var beforeEnterResult = beforeEnterText;\r\n var beforeEnterIndent = strings.getLeadingWhitespace(beforeEnterText);\r\n var virtualModel = {\r\n getLineTokens: function (lineNumber) {\r\n return model.getLineTokens(lineNumber);\r\n },\r\n getLanguageIdentifier: function () {\r\n return model.getLanguageIdentifier();\r\n },\r\n getLanguageIdAtPosition: function (lineNumber, column) {\r\n return model.getLanguageIdAtPosition(lineNumber, column);\r\n },\r\n getLineContent: function (lineNumber) {\r\n if (lineNumber === range.startLineNumber) {\r\n return beforeEnterResult;\r\n }\r\n else {\r\n return model.getLineContent(lineNumber);\r\n }\r\n }\r\n };\r\n var currentLineIndent = strings.getLeadingWhitespace(lineTokens.getLineContent());\r\n var afterEnterAction = this.getInheritIndentForLine(autoIndent, virtualModel, range.startLineNumber + 1);\r\n if (!afterEnterAction) {\r\n var beforeEnter = embeddedLanguage ? currentLineIndent : beforeEnterIndent;\r\n return {\r\n beforeEnter: beforeEnter,\r\n afterEnter: beforeEnter\r\n };\r\n }\r\n var afterEnterIndent = embeddedLanguage ? currentLineIndent : afterEnterAction.indentation;\r\n if (afterEnterAction.action === IndentAction.Indent) {\r\n afterEnterIndent = indentConverter.shiftIndent(afterEnterIndent);\r\n }\r\n if (indentRulesSupport.shouldDecrease(afterEnterText)) {\r\n afterEnterIndent = indentConverter.unshiftIndent(afterEnterIndent);\r\n }\r\n return {\r\n beforeEnter: embeddedLanguage ? currentLineIndent : beforeEnterIndent,\r\n afterEnter: afterEnterIndent\r\n };\r\n };\r\n /**\r\n * We should always allow intentional indentation. It means, if users change the indentation of `lineNumber` and the content of\r\n * this line doesn't match decreaseIndentPattern, we should not adjust the indentation.\r\n */\r\n LanguageConfigurationRegistryImpl.prototype.getIndentActionForType = function (autoIndent, model, range, ch, indentConverter) {\r\n if (autoIndent < 4 /* Full */) {\r\n return null;\r\n }\r\n var scopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber, range.startColumn);\r\n var indentRulesSupport = this.getIndentRulesSupport(scopedLineTokens.languageId);\r\n if (!indentRulesSupport) {\r\n return null;\r\n }\r\n var scopedLineText = scopedLineTokens.getLineContent();\r\n var beforeTypeText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\r\n // selection support\r\n var afterTypeText;\r\n if (range.isEmpty()) {\r\n afterTypeText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\r\n }\r\n else {\r\n var endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\r\n afterTypeText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\r\n }\r\n // If previous content already matches decreaseIndentPattern, it means indentation of this line should already be adjusted\r\n // Users might change the indentation by purpose and we should honor that instead of readjusting.\r\n if (!indentRulesSupport.shouldDecrease(beforeTypeText + afterTypeText) && indentRulesSupport.shouldDecrease(beforeTypeText + ch + afterTypeText)) {\r\n // after typing `ch`, the content matches decreaseIndentPattern, we should adjust the indent to a good manner.\r\n // 1. Get inherited indent action\r\n var r = this.getInheritIndentForLine(autoIndent, model, range.startLineNumber, false);\r\n if (!r) {\r\n return null;\r\n }\r\n var indentation = r.indentation;\r\n if (r.action !== IndentAction.Indent) {\r\n indentation = indentConverter.unshiftIndent(indentation);\r\n }\r\n return indentation;\r\n }\r\n return null;\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getIndentMetadata = function (model, lineNumber) {\r\n var indentRulesSupport = this.getIndentRulesSupport(model.getLanguageIdentifier().id);\r\n if (!indentRulesSupport) {\r\n return null;\r\n }\r\n if (lineNumber < 1 || lineNumber > model.getLineCount()) {\r\n return null;\r\n }\r\n return indentRulesSupport.getIndentMetadata(model.getLineContent(lineNumber));\r\n };\r\n // end Indent Rules\r\n // begin onEnter\r\n LanguageConfigurationRegistryImpl.prototype.getEnterAction = function (autoIndent, model, range) {\r\n var scopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber, range.startColumn);\r\n var richEditSupport = this._getRichEditSupport(scopedLineTokens.languageId);\r\n if (!richEditSupport) {\r\n return null;\r\n }\r\n var scopedLineText = scopedLineTokens.getLineContent();\r\n var beforeEnterText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\r\n // selection support\r\n var afterEnterText;\r\n if (range.isEmpty()) {\r\n afterEnterText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\r\n }\r\n else {\r\n var endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\r\n afterEnterText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\r\n }\r\n var oneLineAboveText = '';\r\n if (range.startLineNumber > 1 && scopedLineTokens.firstCharOffset === 0) {\r\n // This is not the first line and the entire line belongs to this mode\r\n var oneLineAboveScopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber - 1);\r\n if (oneLineAboveScopedLineTokens.languageId === scopedLineTokens.languageId) {\r\n // The line above ends with text belonging to the same mode\r\n oneLineAboveText = oneLineAboveScopedLineTokens.getLineContent();\r\n }\r\n }\r\n var enterResult = richEditSupport.onEnter(autoIndent, oneLineAboveText, beforeEnterText, afterEnterText);\r\n if (!enterResult) {\r\n return null;\r\n }\r\n var indentAction = enterResult.indentAction;\r\n var appendText = enterResult.appendText;\r\n var removeText = enterResult.removeText || 0;\r\n // Here we add `\\t` to appendText first because enterAction is leveraging appendText and removeText to change indentation.\r\n if (!appendText) {\r\n if ((indentAction === IndentAction.Indent) ||\r\n (indentAction === IndentAction.IndentOutdent)) {\r\n appendText = '\\t';\r\n }\r\n else {\r\n appendText = '';\r\n }\r\n }\r\n var indentation = this.getIndentationAtPosition(model, range.startLineNumber, range.startColumn);\r\n if (removeText) {\r\n indentation = indentation.substring(0, indentation.length - removeText);\r\n }\r\n return {\r\n indentAction: indentAction,\r\n appendText: appendText,\r\n removeText: removeText,\r\n indentation: indentation\r\n };\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getIndentationAtPosition = function (model, lineNumber, column) {\r\n var lineText = model.getLineContent(lineNumber);\r\n var indentation = strings.getLeadingWhitespace(lineText);\r\n if (indentation.length > column - 1) {\r\n indentation = indentation.substring(0, column - 1);\r\n }\r\n return indentation;\r\n };\r\n LanguageConfigurationRegistryImpl.prototype.getScopedLineTokens = function (model, lineNumber, columnNumber) {\r\n model.forceTokenization(lineNumber);\r\n var lineTokens = model.getLineTokens(lineNumber);\r\n var column = (typeof columnNumber === 'undefined' ? model.getLineMaxColumn(lineNumber) - 1 : columnNumber - 1);\r\n return createScopedLineTokens(lineTokens, column);\r\n };\r\n // end onEnter\r\n LanguageConfigurationRegistryImpl.prototype.getBracketsSupport = function (languageId) {\r\n var value = this._getRichEditSupport(languageId);\r\n if (!value) {\r\n return null;\r\n }\r\n return value.brackets || null;\r\n };\r\n return LanguageConfigurationRegistryImpl;\r\n}());\r\nexport { LanguageConfigurationRegistryImpl };\r\nexport var LanguageConfigurationRegistry = new LanguageConfigurationRegistryImpl();\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * Represents information about a specific difference between two sequences.\r\n */\r\nvar DiffChange = /** @class */ (function () {\r\n /**\r\n * Constructs a new DiffChange with the given sequence information\r\n * and content.\r\n */\r\n function DiffChange(originalStart, originalLength, modifiedStart, modifiedLength) {\r\n //Debug.Assert(originalLength > 0 || modifiedLength > 0, \"originalLength and modifiedLength cannot both be <= 0\");\r\n this.originalStart = originalStart;\r\n this.originalLength = originalLength;\r\n this.modifiedStart = modifiedStart;\r\n this.modifiedLength = modifiedLength;\r\n }\r\n /**\r\n * The end point (exclusive) of the change in the original sequence.\r\n */\r\n DiffChange.prototype.getOriginalEnd = function () {\r\n return this.originalStart + this.originalLength;\r\n };\r\n /**\r\n * The end point (exclusive) of the change in the modified sequence.\r\n */\r\n DiffChange.prototype.getModifiedEnd = function () {\r\n return this.modifiedStart + this.modifiedLength;\r\n };\r\n return DiffChange;\r\n}());\r\nexport { DiffChange };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * Return a hash value for an object.\r\n */\r\nexport function hash(obj, hashVal) {\r\n if (hashVal === void 0) { hashVal = 0; }\r\n switch (typeof obj) {\r\n case 'object':\r\n if (obj === null) {\r\n return numberHash(349, hashVal);\r\n }\r\n else if (Array.isArray(obj)) {\r\n return arrayHash(obj, hashVal);\r\n }\r\n return objectHash(obj, hashVal);\r\n case 'string':\r\n return stringHash(obj, hashVal);\r\n case 'boolean':\r\n return booleanHash(obj, hashVal);\r\n case 'number':\r\n return numberHash(obj, hashVal);\r\n case 'undefined':\r\n return numberHash(0, 937);\r\n default:\r\n return numberHash(0, 617);\r\n }\r\n}\r\nfunction numberHash(val, initialHashVal) {\r\n return (((initialHashVal << 5) - initialHashVal) + val) | 0; // hashVal * 31 + ch, keep as int32\r\n}\r\nfunction booleanHash(b, initialHashVal) {\r\n return numberHash(b ? 433 : 863, initialHashVal);\r\n}\r\nexport function stringHash(s, hashVal) {\r\n hashVal = numberHash(149417, hashVal);\r\n for (var i = 0, length_1 = s.length; i < length_1; i++) {\r\n hashVal = numberHash(s.charCodeAt(i), hashVal);\r\n }\r\n return hashVal;\r\n}\r\nfunction arrayHash(arr, initialHashVal) {\r\n initialHashVal = numberHash(104579, initialHashVal);\r\n return arr.reduce(function (hashVal, item) { return hash(item, hashVal); }, initialHashVal);\r\n}\r\nfunction objectHash(obj, initialHashVal) {\r\n initialHashVal = numberHash(181387, initialHashVal);\r\n return Object.keys(obj).sort().reduce(function (hashVal, key) {\r\n hashVal = stringHash(key, hashVal);\r\n return hash(obj[key], hashVal);\r\n }, initialHashVal);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { DiffChange } from './diffChange.js';\r\nimport { stringHash } from '../hash.js';\r\nvar StringDiffSequence = /** @class */ (function () {\r\n function StringDiffSequence(source) {\r\n this.source = source;\r\n }\r\n StringDiffSequence.prototype.getElements = function () {\r\n var source = this.source;\r\n var characters = new Int32Array(source.length);\r\n for (var i = 0, len = source.length; i < len; i++) {\r\n characters[i] = source.charCodeAt(i);\r\n }\r\n return characters;\r\n };\r\n return StringDiffSequence;\r\n}());\r\nexport { StringDiffSequence };\r\nexport function stringDiff(original, modified, pretty) {\r\n return new LcsDiff(new StringDiffSequence(original), new StringDiffSequence(modified)).ComputeDiff(pretty).changes;\r\n}\r\n//\r\n// The code below has been ported from a C# implementation in VS\r\n//\r\nvar Debug = /** @class */ (function () {\r\n function Debug() {\r\n }\r\n Debug.Assert = function (condition, message) {\r\n if (!condition) {\r\n throw new Error(message);\r\n }\r\n };\r\n return Debug;\r\n}());\r\nexport { Debug };\r\nvar MyArray = /** @class */ (function () {\r\n function MyArray() {\r\n }\r\n /**\r\n * Copies a range of elements from an Array starting at the specified source index and pastes\r\n * them to another Array starting at the specified destination index. The length and the indexes\r\n * are specified as 64-bit integers.\r\n * sourceArray:\r\n *\t\tThe Array that contains the data to copy.\r\n * sourceIndex:\r\n *\t\tA 64-bit integer that represents the index in the sourceArray at which copying begins.\r\n * destinationArray:\r\n *\t\tThe Array that receives the data.\r\n * destinationIndex:\r\n *\t\tA 64-bit integer that represents the index in the destinationArray at which storing begins.\r\n * length:\r\n *\t\tA 64-bit integer that represents the number of elements to copy.\r\n */\r\n MyArray.Copy = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\r\n for (var i = 0; i < length; i++) {\r\n destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\r\n }\r\n };\r\n MyArray.Copy2 = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\r\n for (var i = 0; i < length; i++) {\r\n destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\r\n }\r\n };\r\n return MyArray;\r\n}());\r\nexport { MyArray };\r\n/**\r\n * A utility class which helps to create the set of DiffChanges from\r\n * a difference operation. This class accepts original DiffElements and\r\n * modified DiffElements that are involved in a particular change. The\r\n * MarktNextChange() method can be called to mark the separation between\r\n * distinct changes. At the end, the Changes property can be called to retrieve\r\n * the constructed changes.\r\n */\r\nvar DiffChangeHelper = /** @class */ (function () {\r\n /**\r\n * Constructs a new DiffChangeHelper for the given DiffSequences.\r\n */\r\n function DiffChangeHelper() {\r\n this.m_changes = [];\r\n this.m_originalStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n this.m_modifiedStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n this.m_originalCount = 0;\r\n this.m_modifiedCount = 0;\r\n }\r\n /**\r\n * Marks the beginning of the next change in the set of differences.\r\n */\r\n DiffChangeHelper.prototype.MarkNextChange = function () {\r\n // Only add to the list if there is something to add\r\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\r\n // Add the new change to our list\r\n this.m_changes.push(new DiffChange(this.m_originalStart, this.m_originalCount, this.m_modifiedStart, this.m_modifiedCount));\r\n }\r\n // Reset for the next change\r\n this.m_originalCount = 0;\r\n this.m_modifiedCount = 0;\r\n this.m_originalStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n this.m_modifiedStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n };\r\n /**\r\n * Adds the original element at the given position to the elements\r\n * affected by the current change. The modified index gives context\r\n * to the change position with respect to the original sequence.\r\n * @param originalIndex The index of the original element to add.\r\n * @param modifiedIndex The index of the modified element that provides corresponding position in the modified sequence.\r\n */\r\n DiffChangeHelper.prototype.AddOriginalElement = function (originalIndex, modifiedIndex) {\r\n // The 'true' start index is the smallest of the ones we've seen\r\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\r\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\r\n this.m_originalCount++;\r\n };\r\n /**\r\n * Adds the modified element at the given position to the elements\r\n * affected by the current change. The original index gives context\r\n * to the change position with respect to the modified sequence.\r\n * @param originalIndex The index of the original element that provides corresponding position in the original sequence.\r\n * @param modifiedIndex The index of the modified element to add.\r\n */\r\n DiffChangeHelper.prototype.AddModifiedElement = function (originalIndex, modifiedIndex) {\r\n // The 'true' start index is the smallest of the ones we've seen\r\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\r\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\r\n this.m_modifiedCount++;\r\n };\r\n /**\r\n * Retrieves all of the changes marked by the class.\r\n */\r\n DiffChangeHelper.prototype.getChanges = function () {\r\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\r\n // Finish up on whatever is left\r\n this.MarkNextChange();\r\n }\r\n return this.m_changes;\r\n };\r\n /**\r\n * Retrieves all of the changes marked by the class in the reverse order\r\n */\r\n DiffChangeHelper.prototype.getReverseChanges = function () {\r\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\r\n // Finish up on whatever is left\r\n this.MarkNextChange();\r\n }\r\n this.m_changes.reverse();\r\n return this.m_changes;\r\n };\r\n return DiffChangeHelper;\r\n}());\r\n/**\r\n * An implementation of the difference algorithm described in\r\n * \"An O(ND) Difference Algorithm and its variations\" by Eugene W. Myers\r\n */\r\nvar LcsDiff = /** @class */ (function () {\r\n /**\r\n * Constructs the DiffFinder\r\n */\r\n function LcsDiff(originalSequence, modifiedSequence, continueProcessingPredicate) {\r\n if (continueProcessingPredicate === void 0) { continueProcessingPredicate = null; }\r\n this.ContinueProcessingPredicate = continueProcessingPredicate;\r\n var _a = LcsDiff._getElements(originalSequence), originalStringElements = _a[0], originalElementsOrHash = _a[1], originalHasStrings = _a[2];\r\n var _b = LcsDiff._getElements(modifiedSequence), modifiedStringElements = _b[0], modifiedElementsOrHash = _b[1], modifiedHasStrings = _b[2];\r\n this._hasStrings = (originalHasStrings && modifiedHasStrings);\r\n this._originalStringElements = originalStringElements;\r\n this._originalElementsOrHash = originalElementsOrHash;\r\n this._modifiedStringElements = modifiedStringElements;\r\n this._modifiedElementsOrHash = modifiedElementsOrHash;\r\n this.m_forwardHistory = [];\r\n this.m_reverseHistory = [];\r\n }\r\n LcsDiff._isStringArray = function (arr) {\r\n return (arr.length > 0 && typeof arr[0] === 'string');\r\n };\r\n LcsDiff._getElements = function (sequence) {\r\n var elements = sequence.getElements();\r\n if (LcsDiff._isStringArray(elements)) {\r\n var hashes = new Int32Array(elements.length);\r\n for (var i = 0, len = elements.length; i < len; i++) {\r\n hashes[i] = stringHash(elements[i], 0);\r\n }\r\n return [elements, hashes, true];\r\n }\r\n if (elements instanceof Int32Array) {\r\n return [[], elements, false];\r\n }\r\n return [[], new Int32Array(elements), false];\r\n };\r\n LcsDiff.prototype.ElementsAreEqual = function (originalIndex, newIndex) {\r\n if (this._originalElementsOrHash[originalIndex] !== this._modifiedElementsOrHash[newIndex]) {\r\n return false;\r\n }\r\n return (this._hasStrings ? this._originalStringElements[originalIndex] === this._modifiedStringElements[newIndex] : true);\r\n };\r\n LcsDiff.prototype.OriginalElementsAreEqual = function (index1, index2) {\r\n if (this._originalElementsOrHash[index1] !== this._originalElementsOrHash[index2]) {\r\n return false;\r\n }\r\n return (this._hasStrings ? this._originalStringElements[index1] === this._originalStringElements[index2] : true);\r\n };\r\n LcsDiff.prototype.ModifiedElementsAreEqual = function (index1, index2) {\r\n if (this._modifiedElementsOrHash[index1] !== this._modifiedElementsOrHash[index2]) {\r\n return false;\r\n }\r\n return (this._hasStrings ? this._modifiedStringElements[index1] === this._modifiedStringElements[index2] : true);\r\n };\r\n LcsDiff.prototype.ComputeDiff = function (pretty) {\r\n return this._ComputeDiff(0, this._originalElementsOrHash.length - 1, 0, this._modifiedElementsOrHash.length - 1, pretty);\r\n };\r\n /**\r\n * Computes the differences between the original and modified input\r\n * sequences on the bounded range.\r\n * @returns An array of the differences between the two input sequences.\r\n */\r\n LcsDiff.prototype._ComputeDiff = function (originalStart, originalEnd, modifiedStart, modifiedEnd, pretty) {\r\n var quitEarlyArr = [false];\r\n var changes = this.ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr);\r\n if (pretty) {\r\n // We have to clean up the computed diff to be more intuitive\r\n // but it turns out this cannot be done correctly until the entire set\r\n // of diffs have been computed\r\n changes = this.PrettifyChanges(changes);\r\n }\r\n return {\r\n quitEarly: quitEarlyArr[0],\r\n changes: changes\r\n };\r\n };\r\n /**\r\n * Private helper method which computes the differences on the bounded range\r\n * recursively.\r\n * @returns An array of the differences between the two input sequences.\r\n */\r\n LcsDiff.prototype.ComputeDiffRecursive = function (originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr) {\r\n quitEarlyArr[0] = false;\r\n // Find the start of the differences\r\n while (originalStart <= originalEnd && modifiedStart <= modifiedEnd && this.ElementsAreEqual(originalStart, modifiedStart)) {\r\n originalStart++;\r\n modifiedStart++;\r\n }\r\n // Find the end of the differences\r\n while (originalEnd >= originalStart && modifiedEnd >= modifiedStart && this.ElementsAreEqual(originalEnd, modifiedEnd)) {\r\n originalEnd--;\r\n modifiedEnd--;\r\n }\r\n // In the special case where we either have all insertions or all deletions or the sequences are identical\r\n if (originalStart > originalEnd || modifiedStart > modifiedEnd) {\r\n var changes = void 0;\r\n if (modifiedStart <= modifiedEnd) {\r\n Debug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\r\n // All insertions\r\n changes = [\r\n new DiffChange(originalStart, 0, modifiedStart, modifiedEnd - modifiedStart + 1)\r\n ];\r\n }\r\n else if (originalStart <= originalEnd) {\r\n Debug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\r\n // All deletions\r\n changes = [\r\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, 0)\r\n ];\r\n }\r\n else {\r\n Debug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\r\n Debug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\r\n // Identical sequences - No differences\r\n changes = [];\r\n }\r\n return changes;\r\n }\r\n // This problem can be solved using the Divide-And-Conquer technique.\r\n var midOriginalArr = [0];\r\n var midModifiedArr = [0];\r\n var result = this.ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr);\r\n var midOriginal = midOriginalArr[0];\r\n var midModified = midModifiedArr[0];\r\n if (result !== null) {\r\n // Result is not-null when there was enough memory to compute the changes while\r\n // searching for the recursion point\r\n return result;\r\n }\r\n else if (!quitEarlyArr[0]) {\r\n // We can break the problem down recursively by finding the changes in the\r\n // First Half: (originalStart, modifiedStart) to (midOriginal, midModified)\r\n // Second Half: (midOriginal + 1, minModified + 1) to (originalEnd, modifiedEnd)\r\n // NOTE: ComputeDiff() is inclusive, therefore the second range starts on the next point\r\n var leftChanges = this.ComputeDiffRecursive(originalStart, midOriginal, modifiedStart, midModified, quitEarlyArr);\r\n var rightChanges = [];\r\n if (!quitEarlyArr[0]) {\r\n rightChanges = this.ComputeDiffRecursive(midOriginal + 1, originalEnd, midModified + 1, modifiedEnd, quitEarlyArr);\r\n }\r\n else {\r\n // We did't have time to finish the first half, so we don't have time to compute this half.\r\n // Consider the entire rest of the sequence different.\r\n rightChanges = [\r\n new DiffChange(midOriginal + 1, originalEnd - (midOriginal + 1) + 1, midModified + 1, modifiedEnd - (midModified + 1) + 1)\r\n ];\r\n }\r\n return this.ConcatenateChanges(leftChanges, rightChanges);\r\n }\r\n // If we hit here, we quit early, and so can't return anything meaningful\r\n return [\r\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)\r\n ];\r\n };\r\n LcsDiff.prototype.WALKTRACE = function (diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr) {\r\n var forwardChanges = null;\r\n var reverseChanges = null;\r\n // First, walk backward through the forward diagonals history\r\n var changeHelper = new DiffChangeHelper();\r\n var diagonalMin = diagonalForwardStart;\r\n var diagonalMax = diagonalForwardEnd;\r\n var diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalForwardOffset;\r\n var lastOriginalIndex = -1073741824 /* MIN_SAFE_SMALL_INTEGER */;\r\n var historyIndex = this.m_forwardHistory.length - 1;\r\n do {\r\n // Get the diagonal index from the relative diagonal number\r\n var diagonal = diagonalRelative + diagonalForwardBase;\r\n // Figure out where we came from\r\n if (diagonal === diagonalMin || (diagonal < diagonalMax && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\r\n // Vertical line (the element is an insert)\r\n originalIndex = forwardPoints[diagonal + 1];\r\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\r\n if (originalIndex < lastOriginalIndex) {\r\n changeHelper.MarkNextChange();\r\n }\r\n lastOriginalIndex = originalIndex;\r\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex);\r\n diagonalRelative = (diagonal + 1) - diagonalForwardBase; //Setup for the next iteration\r\n }\r\n else {\r\n // Horizontal line (the element is a deletion)\r\n originalIndex = forwardPoints[diagonal - 1] + 1;\r\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\r\n if (originalIndex < lastOriginalIndex) {\r\n changeHelper.MarkNextChange();\r\n }\r\n lastOriginalIndex = originalIndex - 1;\r\n changeHelper.AddOriginalElement(originalIndex, modifiedIndex + 1);\r\n diagonalRelative = (diagonal - 1) - diagonalForwardBase; //Setup for the next iteration\r\n }\r\n if (historyIndex >= 0) {\r\n forwardPoints = this.m_forwardHistory[historyIndex];\r\n diagonalForwardBase = forwardPoints[0]; //We stored this in the first spot\r\n diagonalMin = 1;\r\n diagonalMax = forwardPoints.length - 1;\r\n }\r\n } while (--historyIndex >= -1);\r\n // Ironically, we get the forward changes as the reverse of the\r\n // order we added them since we technically added them backwards\r\n forwardChanges = changeHelper.getReverseChanges();\r\n if (quitEarlyArr[0]) {\r\n // TODO: Calculate a partial from the reverse diagonals.\r\n // For now, just assume everything after the midOriginal/midModified point is a diff\r\n var originalStartPoint = midOriginalArr[0] + 1;\r\n var modifiedStartPoint = midModifiedArr[0] + 1;\r\n if (forwardChanges !== null && forwardChanges.length > 0) {\r\n var lastForwardChange = forwardChanges[forwardChanges.length - 1];\r\n originalStartPoint = Math.max(originalStartPoint, lastForwardChange.getOriginalEnd());\r\n modifiedStartPoint = Math.max(modifiedStartPoint, lastForwardChange.getModifiedEnd());\r\n }\r\n reverseChanges = [\r\n new DiffChange(originalStartPoint, originalEnd - originalStartPoint + 1, modifiedStartPoint, modifiedEnd - modifiedStartPoint + 1)\r\n ];\r\n }\r\n else {\r\n // Now walk backward through the reverse diagonals history\r\n changeHelper = new DiffChangeHelper();\r\n diagonalMin = diagonalReverseStart;\r\n diagonalMax = diagonalReverseEnd;\r\n diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalReverseOffset;\r\n lastOriginalIndex = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n historyIndex = (deltaIsEven) ? this.m_reverseHistory.length - 1 : this.m_reverseHistory.length - 2;\r\n do {\r\n // Get the diagonal index from the relative diagonal number\r\n var diagonal = diagonalRelative + diagonalReverseBase;\r\n // Figure out where we came from\r\n if (diagonal === diagonalMin || (diagonal < diagonalMax && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\r\n // Horizontal line (the element is a deletion))\r\n originalIndex = reversePoints[diagonal + 1] - 1;\r\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\r\n if (originalIndex > lastOriginalIndex) {\r\n changeHelper.MarkNextChange();\r\n }\r\n lastOriginalIndex = originalIndex + 1;\r\n changeHelper.AddOriginalElement(originalIndex + 1, modifiedIndex + 1);\r\n diagonalRelative = (diagonal + 1) - diagonalReverseBase; //Setup for the next iteration\r\n }\r\n else {\r\n // Vertical line (the element is an insertion)\r\n originalIndex = reversePoints[diagonal - 1];\r\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\r\n if (originalIndex > lastOriginalIndex) {\r\n changeHelper.MarkNextChange();\r\n }\r\n lastOriginalIndex = originalIndex;\r\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex + 1);\r\n diagonalRelative = (diagonal - 1) - diagonalReverseBase; //Setup for the next iteration\r\n }\r\n if (historyIndex >= 0) {\r\n reversePoints = this.m_reverseHistory[historyIndex];\r\n diagonalReverseBase = reversePoints[0]; //We stored this in the first spot\r\n diagonalMin = 1;\r\n diagonalMax = reversePoints.length - 1;\r\n }\r\n } while (--historyIndex >= -1);\r\n // There are cases where the reverse history will find diffs that\r\n // are correct, but not intuitive, so we need shift them.\r\n reverseChanges = changeHelper.getChanges();\r\n }\r\n return this.ConcatenateChanges(forwardChanges, reverseChanges);\r\n };\r\n /**\r\n * Given the range to compute the diff on, this method finds the point:\r\n * (midOriginal, midModified)\r\n * that exists in the middle of the LCS of the two sequences and\r\n * is the point at which the LCS problem may be broken down recursively.\r\n * This method will try to keep the LCS trace in memory. If the LCS recursion\r\n * point is calculated and the full trace is available in memory, then this method\r\n * will return the change list.\r\n * @param originalStart The start bound of the original sequence range\r\n * @param originalEnd The end bound of the original sequence range\r\n * @param modifiedStart The start bound of the modified sequence range\r\n * @param modifiedEnd The end bound of the modified sequence range\r\n * @param midOriginal The middle point of the original sequence range\r\n * @param midModified The middle point of the modified sequence range\r\n * @returns The diff changes, if available, otherwise null\r\n */\r\n LcsDiff.prototype.ComputeRecursionPoint = function (originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr) {\r\n var originalIndex = 0, modifiedIndex = 0;\r\n var diagonalForwardStart = 0, diagonalForwardEnd = 0;\r\n var diagonalReverseStart = 0, diagonalReverseEnd = 0;\r\n // To traverse the edit graph and produce the proper LCS, our actual\r\n // start position is just outside the given boundary\r\n originalStart--;\r\n modifiedStart--;\r\n // We set these up to make the compiler happy, but they will\r\n // be replaced before we return with the actual recursion point\r\n midOriginalArr[0] = 0;\r\n midModifiedArr[0] = 0;\r\n // Clear out the history\r\n this.m_forwardHistory = [];\r\n this.m_reverseHistory = [];\r\n // Each cell in the two arrays corresponds to a diagonal in the edit graph.\r\n // The integer value in the cell represents the originalIndex of the furthest\r\n // reaching point found so far that ends in that diagonal.\r\n // The modifiedIndex can be computed mathematically from the originalIndex and the diagonal number.\r\n var maxDifferences = (originalEnd - originalStart) + (modifiedEnd - modifiedStart);\r\n var numDiagonals = maxDifferences + 1;\r\n var forwardPoints = new Int32Array(numDiagonals);\r\n var reversePoints = new Int32Array(numDiagonals);\r\n // diagonalForwardBase: Index into forwardPoints of the diagonal which passes through (originalStart, modifiedStart)\r\n // diagonalReverseBase: Index into reversePoints of the diagonal which passes through (originalEnd, modifiedEnd)\r\n var diagonalForwardBase = (modifiedEnd - modifiedStart);\r\n var diagonalReverseBase = (originalEnd - originalStart);\r\n // diagonalForwardOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\r\n // diagonal number (relative to diagonalForwardBase)\r\n // diagonalReverseOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\r\n // diagonal number (relative to diagonalReverseBase)\r\n var diagonalForwardOffset = (originalStart - modifiedStart);\r\n var diagonalReverseOffset = (originalEnd - modifiedEnd);\r\n // delta: The difference between the end diagonal and the start diagonal. This is used to relate diagonal numbers\r\n // relative to the start diagonal with diagonal numbers relative to the end diagonal.\r\n // The Even/Oddn-ness of this delta is important for determining when we should check for overlap\r\n var delta = diagonalReverseBase - diagonalForwardBase;\r\n var deltaIsEven = (delta % 2 === 0);\r\n // Here we set up the start and end points as the furthest points found so far\r\n // in both the forward and reverse directions, respectively\r\n forwardPoints[diagonalForwardBase] = originalStart;\r\n reversePoints[diagonalReverseBase] = originalEnd;\r\n // Remember if we quit early, and thus need to do a best-effort result instead of a real result.\r\n quitEarlyArr[0] = false;\r\n // A couple of points:\r\n // --With this method, we iterate on the number of differences between the two sequences.\r\n // The more differences there actually are, the longer this will take.\r\n // --Also, as the number of differences increases, we have to search on diagonals further\r\n // away from the reference diagonal (which is diagonalForwardBase for forward, diagonalReverseBase for reverse).\r\n // --We extend on even diagonals (relative to the reference diagonal) only when numDifferences\r\n // is even and odd diagonals only when numDifferences is odd.\r\n for (var numDifferences = 1; numDifferences <= (maxDifferences / 2) + 1; numDifferences++) {\r\n var furthestOriginalIndex = 0;\r\n var furthestModifiedIndex = 0;\r\n // Run the algorithm in the forward direction\r\n diagonalForwardStart = this.ClipDiagonalBound(diagonalForwardBase - numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\r\n diagonalForwardEnd = this.ClipDiagonalBound(diagonalForwardBase + numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\r\n for (var diagonal = diagonalForwardStart; diagonal <= diagonalForwardEnd; diagonal += 2) {\r\n // STEP 1: We extend the furthest reaching point in the present diagonal\r\n // by looking at the diagonals above and below and picking the one whose point\r\n // is further away from the start point (originalStart, modifiedStart)\r\n if (diagonal === diagonalForwardStart || (diagonal < diagonalForwardEnd && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\r\n originalIndex = forwardPoints[diagonal + 1];\r\n }\r\n else {\r\n originalIndex = forwardPoints[diagonal - 1] + 1;\r\n }\r\n modifiedIndex = originalIndex - (diagonal - diagonalForwardBase) - diagonalForwardOffset;\r\n // Save the current originalIndex so we can test for false overlap in step 3\r\n var tempOriginalIndex = originalIndex;\r\n // STEP 2: We can continue to extend the furthest reaching point in the present diagonal\r\n // so long as the elements are equal.\r\n while (originalIndex < originalEnd && modifiedIndex < modifiedEnd && this.ElementsAreEqual(originalIndex + 1, modifiedIndex + 1)) {\r\n originalIndex++;\r\n modifiedIndex++;\r\n }\r\n forwardPoints[diagonal] = originalIndex;\r\n if (originalIndex + modifiedIndex > furthestOriginalIndex + furthestModifiedIndex) {\r\n furthestOriginalIndex = originalIndex;\r\n furthestModifiedIndex = modifiedIndex;\r\n }\r\n // STEP 3: If delta is odd (overlap first happens on forward when delta is odd)\r\n // and diagonal is in the range of reverse diagonals computed for numDifferences-1\r\n // (the previous iteration; we haven't computed reverse diagonals for numDifferences yet)\r\n // then check for overlap.\r\n if (!deltaIsEven && Math.abs(diagonal - diagonalReverseBase) <= (numDifferences - 1)) {\r\n if (originalIndex >= reversePoints[diagonal]) {\r\n midOriginalArr[0] = originalIndex;\r\n midModifiedArr[0] = modifiedIndex;\r\n if (tempOriginalIndex <= reversePoints[diagonal] && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\r\n // BINGO! We overlapped, and we have the full trace in memory!\r\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\r\n }\r\n else {\r\n // Either false overlap, or we didn't have enough memory for the full trace\r\n // Just return the recursion point\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n // Check to see if we should be quitting early, before moving on to the next iteration.\r\n var matchLengthOfLongest = ((furthestOriginalIndex - originalStart) + (furthestModifiedIndex - modifiedStart) - numDifferences) / 2;\r\n if (this.ContinueProcessingPredicate !== null && !this.ContinueProcessingPredicate(furthestOriginalIndex, matchLengthOfLongest)) {\r\n // We can't finish, so skip ahead to generating a result from what we have.\r\n quitEarlyArr[0] = true;\r\n // Use the furthest distance we got in the forward direction.\r\n midOriginalArr[0] = furthestOriginalIndex;\r\n midModifiedArr[0] = furthestModifiedIndex;\r\n if (matchLengthOfLongest > 0 && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\r\n // Enough of the history is in memory to walk it backwards\r\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\r\n }\r\n else {\r\n // We didn't actually remember enough of the history.\r\n //Since we are quiting the diff early, we need to shift back the originalStart and modified start\r\n //back into the boundary limits since we decremented their value above beyond the boundary limit.\r\n originalStart++;\r\n modifiedStart++;\r\n return [\r\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)\r\n ];\r\n }\r\n }\r\n // Run the algorithm in the reverse direction\r\n diagonalReverseStart = this.ClipDiagonalBound(diagonalReverseBase - numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\r\n diagonalReverseEnd = this.ClipDiagonalBound(diagonalReverseBase + numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\r\n for (var diagonal = diagonalReverseStart; diagonal <= diagonalReverseEnd; diagonal += 2) {\r\n // STEP 1: We extend the furthest reaching point in the present diagonal\r\n // by looking at the diagonals above and below and picking the one whose point\r\n // is further away from the start point (originalEnd, modifiedEnd)\r\n if (diagonal === diagonalReverseStart || (diagonal < diagonalReverseEnd && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\r\n originalIndex = reversePoints[diagonal + 1] - 1;\r\n }\r\n else {\r\n originalIndex = reversePoints[diagonal - 1];\r\n }\r\n modifiedIndex = originalIndex - (diagonal - diagonalReverseBase) - diagonalReverseOffset;\r\n // Save the current originalIndex so we can test for false overlap\r\n var tempOriginalIndex = originalIndex;\r\n // STEP 2: We can continue to extend the furthest reaching point in the present diagonal\r\n // as long as the elements are equal.\r\n while (originalIndex > originalStart && modifiedIndex > modifiedStart && this.ElementsAreEqual(originalIndex, modifiedIndex)) {\r\n originalIndex--;\r\n modifiedIndex--;\r\n }\r\n reversePoints[diagonal] = originalIndex;\r\n // STEP 4: If delta is even (overlap first happens on reverse when delta is even)\r\n // and diagonal is in the range of forward diagonals computed for numDifferences\r\n // then check for overlap.\r\n if (deltaIsEven && Math.abs(diagonal - diagonalForwardBase) <= numDifferences) {\r\n if (originalIndex <= forwardPoints[diagonal]) {\r\n midOriginalArr[0] = originalIndex;\r\n midModifiedArr[0] = modifiedIndex;\r\n if (tempOriginalIndex >= forwardPoints[diagonal] && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\r\n // BINGO! We overlapped, and we have the full trace in memory!\r\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\r\n }\r\n else {\r\n // Either false overlap, or we didn't have enough memory for the full trace\r\n // Just return the recursion point\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n // Save current vectors to history before the next iteration\r\n if (numDifferences <= 1447 /* MaxDifferencesHistory */) {\r\n // We are allocating space for one extra int, which we fill with\r\n // the index of the diagonal base index\r\n var temp = new Int32Array(diagonalForwardEnd - diagonalForwardStart + 2);\r\n temp[0] = diagonalForwardBase - diagonalForwardStart + 1;\r\n MyArray.Copy2(forwardPoints, diagonalForwardStart, temp, 1, diagonalForwardEnd - diagonalForwardStart + 1);\r\n this.m_forwardHistory.push(temp);\r\n temp = new Int32Array(diagonalReverseEnd - diagonalReverseStart + 2);\r\n temp[0] = diagonalReverseBase - diagonalReverseStart + 1;\r\n MyArray.Copy2(reversePoints, diagonalReverseStart, temp, 1, diagonalReverseEnd - diagonalReverseStart + 1);\r\n this.m_reverseHistory.push(temp);\r\n }\r\n }\r\n // If we got here, then we have the full trace in history. We just have to convert it to a change list\r\n // NOTE: This part is a bit messy\r\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\r\n };\r\n /**\r\n * Shifts the given changes to provide a more intuitive diff.\r\n * While the first element in a diff matches the first element after the diff,\r\n * we shift the diff down.\r\n *\r\n * @param changes The list of changes to shift\r\n * @returns The shifted changes\r\n */\r\n LcsDiff.prototype.PrettifyChanges = function (changes) {\r\n // Shift all the changes down first\r\n for (var i = 0; i < changes.length; i++) {\r\n var change = changes[i];\r\n var originalStop = (i < changes.length - 1) ? changes[i + 1].originalStart : this._originalElementsOrHash.length;\r\n var modifiedStop = (i < changes.length - 1) ? changes[i + 1].modifiedStart : this._modifiedElementsOrHash.length;\r\n var checkOriginal = change.originalLength > 0;\r\n var checkModified = change.modifiedLength > 0;\r\n while (change.originalStart + change.originalLength < originalStop &&\r\n change.modifiedStart + change.modifiedLength < modifiedStop &&\r\n (!checkOriginal || this.OriginalElementsAreEqual(change.originalStart, change.originalStart + change.originalLength)) &&\r\n (!checkModified || this.ModifiedElementsAreEqual(change.modifiedStart, change.modifiedStart + change.modifiedLength))) {\r\n change.originalStart++;\r\n change.modifiedStart++;\r\n }\r\n var mergedChangeArr = [null];\r\n if (i < changes.length - 1 && this.ChangesOverlap(changes[i], changes[i + 1], mergedChangeArr)) {\r\n changes[i] = mergedChangeArr[0];\r\n changes.splice(i + 1, 1);\r\n i--;\r\n continue;\r\n }\r\n }\r\n // Shift changes back up until we hit empty or whitespace-only lines\r\n for (var i = changes.length - 1; i >= 0; i--) {\r\n var change = changes[i];\r\n var originalStop = 0;\r\n var modifiedStop = 0;\r\n if (i > 0) {\r\n var prevChange = changes[i - 1];\r\n if (prevChange.originalLength > 0) {\r\n originalStop = prevChange.originalStart + prevChange.originalLength;\r\n }\r\n if (prevChange.modifiedLength > 0) {\r\n modifiedStop = prevChange.modifiedStart + prevChange.modifiedLength;\r\n }\r\n }\r\n var checkOriginal = change.originalLength > 0;\r\n var checkModified = change.modifiedLength > 0;\r\n var bestDelta = 0;\r\n var bestScore = this._boundaryScore(change.originalStart, change.originalLength, change.modifiedStart, change.modifiedLength);\r\n for (var delta = 1;; delta++) {\r\n var originalStart = change.originalStart - delta;\r\n var modifiedStart = change.modifiedStart - delta;\r\n if (originalStart < originalStop || modifiedStart < modifiedStop) {\r\n break;\r\n }\r\n if (checkOriginal && !this.OriginalElementsAreEqual(originalStart, originalStart + change.originalLength)) {\r\n break;\r\n }\r\n if (checkModified && !this.ModifiedElementsAreEqual(modifiedStart, modifiedStart + change.modifiedLength)) {\r\n break;\r\n }\r\n var score = this._boundaryScore(originalStart, change.originalLength, modifiedStart, change.modifiedLength);\r\n if (score > bestScore) {\r\n bestScore = score;\r\n bestDelta = delta;\r\n }\r\n }\r\n change.originalStart -= bestDelta;\r\n change.modifiedStart -= bestDelta;\r\n }\r\n return changes;\r\n };\r\n LcsDiff.prototype._OriginalIsBoundary = function (index) {\r\n if (index <= 0 || index >= this._originalElementsOrHash.length - 1) {\r\n return true;\r\n }\r\n return (this._hasStrings && /^\\s*$/.test(this._originalStringElements[index]));\r\n };\r\n LcsDiff.prototype._OriginalRegionIsBoundary = function (originalStart, originalLength) {\r\n if (this._OriginalIsBoundary(originalStart) || this._OriginalIsBoundary(originalStart - 1)) {\r\n return true;\r\n }\r\n if (originalLength > 0) {\r\n var originalEnd = originalStart + originalLength;\r\n if (this._OriginalIsBoundary(originalEnd - 1) || this._OriginalIsBoundary(originalEnd)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n LcsDiff.prototype._ModifiedIsBoundary = function (index) {\r\n if (index <= 0 || index >= this._modifiedElementsOrHash.length - 1) {\r\n return true;\r\n }\r\n return (this._hasStrings && /^\\s*$/.test(this._modifiedStringElements[index]));\r\n };\r\n LcsDiff.prototype._ModifiedRegionIsBoundary = function (modifiedStart, modifiedLength) {\r\n if (this._ModifiedIsBoundary(modifiedStart) || this._ModifiedIsBoundary(modifiedStart - 1)) {\r\n return true;\r\n }\r\n if (modifiedLength > 0) {\r\n var modifiedEnd = modifiedStart + modifiedLength;\r\n if (this._ModifiedIsBoundary(modifiedEnd - 1) || this._ModifiedIsBoundary(modifiedEnd)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n LcsDiff.prototype._boundaryScore = function (originalStart, originalLength, modifiedStart, modifiedLength) {\r\n var originalScore = (this._OriginalRegionIsBoundary(originalStart, originalLength) ? 1 : 0);\r\n var modifiedScore = (this._ModifiedRegionIsBoundary(modifiedStart, modifiedLength) ? 1 : 0);\r\n return (originalScore + modifiedScore);\r\n };\r\n /**\r\n * Concatenates the two input DiffChange lists and returns the resulting\r\n * list.\r\n * @param The left changes\r\n * @param The right changes\r\n * @returns The concatenated list\r\n */\r\n LcsDiff.prototype.ConcatenateChanges = function (left, right) {\r\n var mergedChangeArr = [];\r\n if (left.length === 0 || right.length === 0) {\r\n return (right.length > 0) ? right : left;\r\n }\r\n else if (this.ChangesOverlap(left[left.length - 1], right[0], mergedChangeArr)) {\r\n // Since we break the problem down recursively, it is possible that we\r\n // might recurse in the middle of a change thereby splitting it into\r\n // two changes. Here in the combining stage, we detect and fuse those\r\n // changes back together\r\n var result = new Array(left.length + right.length - 1);\r\n MyArray.Copy(left, 0, result, 0, left.length - 1);\r\n result[left.length - 1] = mergedChangeArr[0];\r\n MyArray.Copy(right, 1, result, left.length, right.length - 1);\r\n return result;\r\n }\r\n else {\r\n var result = new Array(left.length + right.length);\r\n MyArray.Copy(left, 0, result, 0, left.length);\r\n MyArray.Copy(right, 0, result, left.length, right.length);\r\n return result;\r\n }\r\n };\r\n /**\r\n * Returns true if the two changes overlap and can be merged into a single\r\n * change\r\n * @param left The left change\r\n * @param right The right change\r\n * @param mergedChange The merged change if the two overlap, null otherwise\r\n * @returns True if the two changes overlap\r\n */\r\n LcsDiff.prototype.ChangesOverlap = function (left, right, mergedChangeArr) {\r\n Debug.Assert(left.originalStart <= right.originalStart, 'Left change is not less than or equal to right change');\r\n Debug.Assert(left.modifiedStart <= right.modifiedStart, 'Left change is not less than or equal to right change');\r\n if (left.originalStart + left.originalLength >= right.originalStart || left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\r\n var originalStart = left.originalStart;\r\n var originalLength = left.originalLength;\r\n var modifiedStart = left.modifiedStart;\r\n var modifiedLength = left.modifiedLength;\r\n if (left.originalStart + left.originalLength >= right.originalStart) {\r\n originalLength = right.originalStart + right.originalLength - left.originalStart;\r\n }\r\n if (left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\r\n modifiedLength = right.modifiedStart + right.modifiedLength - left.modifiedStart;\r\n }\r\n mergedChangeArr[0] = new DiffChange(originalStart, originalLength, modifiedStart, modifiedLength);\r\n return true;\r\n }\r\n else {\r\n mergedChangeArr[0] = null;\r\n return false;\r\n }\r\n };\r\n /**\r\n * Helper method used to clip a diagonal index to the range of valid\r\n * diagonals. This also decides whether or not the diagonal index,\r\n * if it exceeds the boundary, should be clipped to the boundary or clipped\r\n * one inside the boundary depending on the Even/Odd status of the boundary\r\n * and numDifferences.\r\n * @param diagonal The index of the diagonal to clip.\r\n * @param numDifferences The current number of differences being iterated upon.\r\n * @param diagonalBaseIndex The base reference diagonal.\r\n * @param numDiagonals The total number of diagonals.\r\n * @returns The clipped diagonal index.\r\n */\r\n LcsDiff.prototype.ClipDiagonalBound = function (diagonal, numDifferences, diagonalBaseIndex, numDiagonals) {\r\n if (diagonal >= 0 && diagonal < numDiagonals) {\r\n // Nothing to clip, its in range\r\n return diagonal;\r\n }\r\n // diagonalsBelow: The number of diagonals below the reference diagonal\r\n // diagonalsAbove: The number of diagonals above the reference diagonal\r\n var diagonalsBelow = diagonalBaseIndex;\r\n var diagonalsAbove = numDiagonals - diagonalBaseIndex - 1;\r\n var diffEven = (numDifferences % 2 === 0);\r\n if (diagonal < 0) {\r\n var lowerBoundEven = (diagonalsBelow % 2 === 0);\r\n return (diffEven === lowerBoundEven) ? 0 : 1;\r\n }\r\n else {\r\n var upperBoundEven = (diagonalsAbove % 2 === 0);\r\n return (diffEven === upperBoundEven) ? numDiagonals - 1 : numDiagonals - 2;\r\n }\r\n };\r\n return LcsDiff;\r\n}());\r\nexport { LcsDiff };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { LcsDiff } from '../../../base/common/diff/diff.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nvar MINIMUM_MATCHING_CHARACTER_LENGTH = 3;\r\nfunction computeDiff(originalSequence, modifiedSequence, continueProcessingPredicate, pretty) {\r\n var diffAlgo = new LcsDiff(originalSequence, modifiedSequence, continueProcessingPredicate);\r\n return diffAlgo.ComputeDiff(pretty);\r\n}\r\nvar LineSequence = /** @class */ (function () {\r\n function LineSequence(lines) {\r\n var startColumns = [];\r\n var endColumns = [];\r\n for (var i = 0, length_1 = lines.length; i < length_1; i++) {\r\n startColumns[i] = getFirstNonBlankColumn(lines[i], 1);\r\n endColumns[i] = getLastNonBlankColumn(lines[i], 1);\r\n }\r\n this.lines = lines;\r\n this._startColumns = startColumns;\r\n this._endColumns = endColumns;\r\n }\r\n LineSequence.prototype.getElements = function () {\r\n var elements = [];\r\n for (var i = 0, len = this.lines.length; i < len; i++) {\r\n elements[i] = this.lines[i].substring(this._startColumns[i] - 1, this._endColumns[i] - 1);\r\n }\r\n return elements;\r\n };\r\n LineSequence.prototype.getStartLineNumber = function (i) {\r\n return i + 1;\r\n };\r\n LineSequence.prototype.getEndLineNumber = function (i) {\r\n return i + 1;\r\n };\r\n LineSequence.prototype.createCharSequence = function (shouldIgnoreTrimWhitespace, startIndex, endIndex) {\r\n var charCodes = [];\r\n var lineNumbers = [];\r\n var columns = [];\r\n var len = 0;\r\n for (var index = startIndex; index <= endIndex; index++) {\r\n var lineContent = this.lines[index];\r\n var startColumn = (shouldIgnoreTrimWhitespace ? this._startColumns[index] : 1);\r\n var endColumn = (shouldIgnoreTrimWhitespace ? this._endColumns[index] : lineContent.length + 1);\r\n for (var col = startColumn; col < endColumn; col++) {\r\n charCodes[len] = lineContent.charCodeAt(col - 1);\r\n lineNumbers[len] = index + 1;\r\n columns[len] = col;\r\n len++;\r\n }\r\n }\r\n return new CharSequence(charCodes, lineNumbers, columns);\r\n };\r\n return LineSequence;\r\n}());\r\nvar CharSequence = /** @class */ (function () {\r\n function CharSequence(charCodes, lineNumbers, columns) {\r\n this._charCodes = charCodes;\r\n this._lineNumbers = lineNumbers;\r\n this._columns = columns;\r\n }\r\n CharSequence.prototype.getElements = function () {\r\n return this._charCodes;\r\n };\r\n CharSequence.prototype.getStartLineNumber = function (i) {\r\n return this._lineNumbers[i];\r\n };\r\n CharSequence.prototype.getStartColumn = function (i) {\r\n return this._columns[i];\r\n };\r\n CharSequence.prototype.getEndLineNumber = function (i) {\r\n return this._lineNumbers[i];\r\n };\r\n CharSequence.prototype.getEndColumn = function (i) {\r\n return this._columns[i] + 1;\r\n };\r\n return CharSequence;\r\n}());\r\nvar CharChange = /** @class */ (function () {\r\n function CharChange(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn) {\r\n this.originalStartLineNumber = originalStartLineNumber;\r\n this.originalStartColumn = originalStartColumn;\r\n this.originalEndLineNumber = originalEndLineNumber;\r\n this.originalEndColumn = originalEndColumn;\r\n this.modifiedStartLineNumber = modifiedStartLineNumber;\r\n this.modifiedStartColumn = modifiedStartColumn;\r\n this.modifiedEndLineNumber = modifiedEndLineNumber;\r\n this.modifiedEndColumn = modifiedEndColumn;\r\n }\r\n CharChange.createFromDiffChange = function (diffChange, originalCharSequence, modifiedCharSequence) {\r\n var originalStartLineNumber;\r\n var originalStartColumn;\r\n var originalEndLineNumber;\r\n var originalEndColumn;\r\n var modifiedStartLineNumber;\r\n var modifiedStartColumn;\r\n var modifiedEndLineNumber;\r\n var modifiedEndColumn;\r\n if (diffChange.originalLength === 0) {\r\n originalStartLineNumber = 0;\r\n originalStartColumn = 0;\r\n originalEndLineNumber = 0;\r\n originalEndColumn = 0;\r\n }\r\n else {\r\n originalStartLineNumber = originalCharSequence.getStartLineNumber(diffChange.originalStart);\r\n originalStartColumn = originalCharSequence.getStartColumn(diffChange.originalStart);\r\n originalEndLineNumber = originalCharSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\r\n originalEndColumn = originalCharSequence.getEndColumn(diffChange.originalStart + diffChange.originalLength - 1);\r\n }\r\n if (diffChange.modifiedLength === 0) {\r\n modifiedStartLineNumber = 0;\r\n modifiedStartColumn = 0;\r\n modifiedEndLineNumber = 0;\r\n modifiedEndColumn = 0;\r\n }\r\n else {\r\n modifiedStartLineNumber = modifiedCharSequence.getStartLineNumber(diffChange.modifiedStart);\r\n modifiedStartColumn = modifiedCharSequence.getStartColumn(diffChange.modifiedStart);\r\n modifiedEndLineNumber = modifiedCharSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\r\n modifiedEndColumn = modifiedCharSequence.getEndColumn(diffChange.modifiedStart + diffChange.modifiedLength - 1);\r\n }\r\n return new CharChange(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn);\r\n };\r\n return CharChange;\r\n}());\r\nfunction postProcessCharChanges(rawChanges) {\r\n if (rawChanges.length <= 1) {\r\n return rawChanges;\r\n }\r\n var result = [rawChanges[0]];\r\n var prevChange = result[0];\r\n for (var i = 1, len = rawChanges.length; i < len; i++) {\r\n var currChange = rawChanges[i];\r\n var originalMatchingLength = currChange.originalStart - (prevChange.originalStart + prevChange.originalLength);\r\n var modifiedMatchingLength = currChange.modifiedStart - (prevChange.modifiedStart + prevChange.modifiedLength);\r\n // Both of the above should be equal, but the continueProcessingPredicate may prevent this from being true\r\n var matchingLength = Math.min(originalMatchingLength, modifiedMatchingLength);\r\n if (matchingLength < MINIMUM_MATCHING_CHARACTER_LENGTH) {\r\n // Merge the current change into the previous one\r\n prevChange.originalLength = (currChange.originalStart + currChange.originalLength) - prevChange.originalStart;\r\n prevChange.modifiedLength = (currChange.modifiedStart + currChange.modifiedLength) - prevChange.modifiedStart;\r\n }\r\n else {\r\n // Add the current change\r\n result.push(currChange);\r\n prevChange = currChange;\r\n }\r\n }\r\n return result;\r\n}\r\nvar LineChange = /** @class */ (function () {\r\n function LineChange(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges) {\r\n this.originalStartLineNumber = originalStartLineNumber;\r\n this.originalEndLineNumber = originalEndLineNumber;\r\n this.modifiedStartLineNumber = modifiedStartLineNumber;\r\n this.modifiedEndLineNumber = modifiedEndLineNumber;\r\n this.charChanges = charChanges;\r\n }\r\n LineChange.createFromDiffResult = function (shouldIgnoreTrimWhitespace, diffChange, originalLineSequence, modifiedLineSequence, continueCharDiff, shouldComputeCharChanges, shouldPostProcessCharChanges) {\r\n var originalStartLineNumber;\r\n var originalEndLineNumber;\r\n var modifiedStartLineNumber;\r\n var modifiedEndLineNumber;\r\n var charChanges = undefined;\r\n if (diffChange.originalLength === 0) {\r\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart) - 1;\r\n originalEndLineNumber = 0;\r\n }\r\n else {\r\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart);\r\n originalEndLineNumber = originalLineSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\r\n }\r\n if (diffChange.modifiedLength === 0) {\r\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart) - 1;\r\n modifiedEndLineNumber = 0;\r\n }\r\n else {\r\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart);\r\n modifiedEndLineNumber = modifiedLineSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\r\n }\r\n if (shouldComputeCharChanges && diffChange.originalLength > 0 && diffChange.originalLength < 20 && diffChange.modifiedLength > 0 && diffChange.modifiedLength < 20 && continueCharDiff()) {\r\n // Compute character changes for diff chunks of at most 20 lines...\r\n var originalCharSequence = originalLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.originalStart, diffChange.originalStart + diffChange.originalLength - 1);\r\n var modifiedCharSequence = modifiedLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.modifiedStart, diffChange.modifiedStart + diffChange.modifiedLength - 1);\r\n var rawChanges = computeDiff(originalCharSequence, modifiedCharSequence, continueCharDiff, true).changes;\r\n if (shouldPostProcessCharChanges) {\r\n rawChanges = postProcessCharChanges(rawChanges);\r\n }\r\n charChanges = [];\r\n for (var i = 0, length_2 = rawChanges.length; i < length_2; i++) {\r\n charChanges.push(CharChange.createFromDiffChange(rawChanges[i], originalCharSequence, modifiedCharSequence));\r\n }\r\n }\r\n return new LineChange(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges);\r\n };\r\n return LineChange;\r\n}());\r\nvar DiffComputer = /** @class */ (function () {\r\n function DiffComputer(originalLines, modifiedLines, opts) {\r\n this.shouldComputeCharChanges = opts.shouldComputeCharChanges;\r\n this.shouldPostProcessCharChanges = opts.shouldPostProcessCharChanges;\r\n this.shouldIgnoreTrimWhitespace = opts.shouldIgnoreTrimWhitespace;\r\n this.shouldMakePrettyDiff = opts.shouldMakePrettyDiff;\r\n this.originalLines = originalLines;\r\n this.modifiedLines = modifiedLines;\r\n this.original = new LineSequence(originalLines);\r\n this.modified = new LineSequence(modifiedLines);\r\n this.continueLineDiff = createContinueProcessingPredicate(opts.maxComputationTime);\r\n this.continueCharDiff = createContinueProcessingPredicate(opts.maxComputationTime === 0 ? 0 : Math.min(opts.maxComputationTime, 5000)); // never run after 5s for character changes...\r\n }\r\n DiffComputer.prototype.computeDiff = function () {\r\n if (this.original.lines.length === 1 && this.original.lines[0].length === 0) {\r\n // empty original => fast path\r\n return {\r\n quitEarly: false,\r\n changes: [{\r\n originalStartLineNumber: 1,\r\n originalEndLineNumber: 1,\r\n modifiedStartLineNumber: 1,\r\n modifiedEndLineNumber: this.modified.lines.length,\r\n charChanges: [{\r\n modifiedEndColumn: 0,\r\n modifiedEndLineNumber: 0,\r\n modifiedStartColumn: 0,\r\n modifiedStartLineNumber: 0,\r\n originalEndColumn: 0,\r\n originalEndLineNumber: 0,\r\n originalStartColumn: 0,\r\n originalStartLineNumber: 0\r\n }]\r\n }]\r\n };\r\n }\r\n if (this.modified.lines.length === 1 && this.modified.lines[0].length === 0) {\r\n // empty modified => fast path\r\n return {\r\n quitEarly: false,\r\n changes: [{\r\n originalStartLineNumber: 1,\r\n originalEndLineNumber: this.original.lines.length,\r\n modifiedStartLineNumber: 1,\r\n modifiedEndLineNumber: 1,\r\n charChanges: [{\r\n modifiedEndColumn: 0,\r\n modifiedEndLineNumber: 0,\r\n modifiedStartColumn: 0,\r\n modifiedStartLineNumber: 0,\r\n originalEndColumn: 0,\r\n originalEndLineNumber: 0,\r\n originalStartColumn: 0,\r\n originalStartLineNumber: 0\r\n }]\r\n }]\r\n };\r\n }\r\n var diffResult = computeDiff(this.original, this.modified, this.continueLineDiff, this.shouldMakePrettyDiff);\r\n var rawChanges = diffResult.changes;\r\n var quitEarly = diffResult.quitEarly;\r\n // The diff is always computed with ignoring trim whitespace\r\n // This ensures we get the prettiest diff\r\n if (this.shouldIgnoreTrimWhitespace) {\r\n var lineChanges = [];\r\n for (var i = 0, length_3 = rawChanges.length; i < length_3; i++) {\r\n lineChanges.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, rawChanges[i], this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\r\n }\r\n return {\r\n quitEarly: quitEarly,\r\n changes: lineChanges\r\n };\r\n }\r\n // Need to post-process and introduce changes where the trim whitespace is different\r\n // Note that we are looping starting at -1 to also cover the lines before the first change\r\n var result = [];\r\n var originalLineIndex = 0;\r\n var modifiedLineIndex = 0;\r\n for (var i = -1 /* !!!! */, len = rawChanges.length; i < len; i++) {\r\n var nextChange = (i + 1 < len ? rawChanges[i + 1] : null);\r\n var originalStop = (nextChange ? nextChange.originalStart : this.originalLines.length);\r\n var modifiedStop = (nextChange ? nextChange.modifiedStart : this.modifiedLines.length);\r\n while (originalLineIndex < originalStop && modifiedLineIndex < modifiedStop) {\r\n var originalLine = this.originalLines[originalLineIndex];\r\n var modifiedLine = this.modifiedLines[modifiedLineIndex];\r\n if (originalLine !== modifiedLine) {\r\n // These lines differ only in trim whitespace\r\n // Check the leading whitespace\r\n {\r\n var originalStartColumn = getFirstNonBlankColumn(originalLine, 1);\r\n var modifiedStartColumn = getFirstNonBlankColumn(modifiedLine, 1);\r\n while (originalStartColumn > 1 && modifiedStartColumn > 1) {\r\n var originalChar = originalLine.charCodeAt(originalStartColumn - 2);\r\n var modifiedChar = modifiedLine.charCodeAt(modifiedStartColumn - 2);\r\n if (originalChar !== modifiedChar) {\r\n break;\r\n }\r\n originalStartColumn--;\r\n modifiedStartColumn--;\r\n }\r\n if (originalStartColumn > 1 || modifiedStartColumn > 1) {\r\n this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, 1, originalStartColumn, modifiedLineIndex + 1, 1, modifiedStartColumn);\r\n }\r\n }\r\n // Check the trailing whitespace\r\n {\r\n var originalEndColumn = getLastNonBlankColumn(originalLine, 1);\r\n var modifiedEndColumn = getLastNonBlankColumn(modifiedLine, 1);\r\n var originalMaxColumn = originalLine.length + 1;\r\n var modifiedMaxColumn = modifiedLine.length + 1;\r\n while (originalEndColumn < originalMaxColumn && modifiedEndColumn < modifiedMaxColumn) {\r\n var originalChar = originalLine.charCodeAt(originalEndColumn - 1);\r\n var modifiedChar = originalLine.charCodeAt(modifiedEndColumn - 1);\r\n if (originalChar !== modifiedChar) {\r\n break;\r\n }\r\n originalEndColumn++;\r\n modifiedEndColumn++;\r\n }\r\n if (originalEndColumn < originalMaxColumn || modifiedEndColumn < modifiedMaxColumn) {\r\n this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, originalEndColumn, originalMaxColumn, modifiedLineIndex + 1, modifiedEndColumn, modifiedMaxColumn);\r\n }\r\n }\r\n }\r\n originalLineIndex++;\r\n modifiedLineIndex++;\r\n }\r\n if (nextChange) {\r\n // Emit the actual change\r\n result.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, nextChange, this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\r\n originalLineIndex += nextChange.originalLength;\r\n modifiedLineIndex += nextChange.modifiedLength;\r\n }\r\n }\r\n return {\r\n quitEarly: quitEarly,\r\n changes: result\r\n };\r\n };\r\n DiffComputer.prototype._pushTrimWhitespaceCharChange = function (result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\r\n if (this._mergeTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn)) {\r\n // Merged into previous\r\n return;\r\n }\r\n var charChanges = undefined;\r\n if (this.shouldComputeCharChanges) {\r\n charChanges = [new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn)];\r\n }\r\n result.push(new LineChange(originalLineNumber, originalLineNumber, modifiedLineNumber, modifiedLineNumber, charChanges));\r\n };\r\n DiffComputer.prototype._mergeTrimWhitespaceCharChange = function (result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\r\n var len = result.length;\r\n if (len === 0) {\r\n return false;\r\n }\r\n var prevChange = result[len - 1];\r\n if (prevChange.originalEndLineNumber === 0 || prevChange.modifiedEndLineNumber === 0) {\r\n // Don't merge with inserts/deletes\r\n return false;\r\n }\r\n if (prevChange.originalEndLineNumber + 1 === originalLineNumber && prevChange.modifiedEndLineNumber + 1 === modifiedLineNumber) {\r\n prevChange.originalEndLineNumber = originalLineNumber;\r\n prevChange.modifiedEndLineNumber = modifiedLineNumber;\r\n if (this.shouldComputeCharChanges && prevChange.charChanges) {\r\n prevChange.charChanges.push(new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn));\r\n }\r\n return true;\r\n }\r\n return false;\r\n };\r\n return DiffComputer;\r\n}());\r\nexport { DiffComputer };\r\nfunction getFirstNonBlankColumn(txt, defaultValue) {\r\n var r = strings.firstNonWhitespaceIndex(txt);\r\n if (r === -1) {\r\n return defaultValue;\r\n }\r\n return r + 1;\r\n}\r\nfunction getLastNonBlankColumn(txt, defaultValue) {\r\n var r = strings.lastNonWhitespaceIndex(txt);\r\n if (r === -1) {\r\n return defaultValue;\r\n }\r\n return r + 2;\r\n}\r\nfunction createContinueProcessingPredicate(maximumRuntime) {\r\n if (maximumRuntime === 0) {\r\n return function () { return true; };\r\n }\r\n var startTime = Date.now();\r\n return function () {\r\n return Date.now() - startTime < maximumRuntime;\r\n };\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport function toUint8(v) {\r\n if (v < 0) {\r\n return 0;\r\n }\r\n if (v > 255 /* MAX_UINT_8 */) {\r\n return 255 /* MAX_UINT_8 */;\r\n }\r\n return v | 0;\r\n}\r\nexport function toUint32(v) {\r\n if (v < 0) {\r\n return 0;\r\n }\r\n if (v > 4294967295 /* MAX_UINT_32 */) {\r\n return 4294967295 /* MAX_UINT_32 */;\r\n }\r\n return v | 0;\r\n}\r\nexport function toUint32Array(arr) {\r\n var len = arr.length;\r\n var r = new Uint32Array(len);\r\n for (var i = 0; i < len; i++) {\r\n r[i] = toUint32(arr[i]);\r\n }\r\n return r;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { toUint32 } from '../../../base/common/uint.js';\r\nvar PrefixSumIndexOfResult = /** @class */ (function () {\r\n function PrefixSumIndexOfResult(index, remainder) {\r\n this.index = index;\r\n this.remainder = remainder;\r\n }\r\n return PrefixSumIndexOfResult;\r\n}());\r\nexport { PrefixSumIndexOfResult };\r\nvar PrefixSumComputer = /** @class */ (function () {\r\n function PrefixSumComputer(values) {\r\n this.values = values;\r\n this.prefixSum = new Uint32Array(values.length);\r\n this.prefixSumValidIndex = new Int32Array(1);\r\n this.prefixSumValidIndex[0] = -1;\r\n }\r\n PrefixSumComputer.prototype.getCount = function () {\r\n return this.values.length;\r\n };\r\n PrefixSumComputer.prototype.insertValues = function (insertIndex, insertValues) {\r\n insertIndex = toUint32(insertIndex);\r\n var oldValues = this.values;\r\n var oldPrefixSum = this.prefixSum;\r\n var insertValuesLen = insertValues.length;\r\n if (insertValuesLen === 0) {\r\n return false;\r\n }\r\n this.values = new Uint32Array(oldValues.length + insertValuesLen);\r\n this.values.set(oldValues.subarray(0, insertIndex), 0);\r\n this.values.set(oldValues.subarray(insertIndex), insertIndex + insertValuesLen);\r\n this.values.set(insertValues, insertIndex);\r\n if (insertIndex - 1 < this.prefixSumValidIndex[0]) {\r\n this.prefixSumValidIndex[0] = insertIndex - 1;\r\n }\r\n this.prefixSum = new Uint32Array(this.values.length);\r\n if (this.prefixSumValidIndex[0] >= 0) {\r\n this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\r\n }\r\n return true;\r\n };\r\n PrefixSumComputer.prototype.changeValue = function (index, value) {\r\n index = toUint32(index);\r\n value = toUint32(value);\r\n if (this.values[index] === value) {\r\n return false;\r\n }\r\n this.values[index] = value;\r\n if (index - 1 < this.prefixSumValidIndex[0]) {\r\n this.prefixSumValidIndex[0] = index - 1;\r\n }\r\n return true;\r\n };\r\n PrefixSumComputer.prototype.removeValues = function (startIndex, cnt) {\r\n startIndex = toUint32(startIndex);\r\n cnt = toUint32(cnt);\r\n var oldValues = this.values;\r\n var oldPrefixSum = this.prefixSum;\r\n if (startIndex >= oldValues.length) {\r\n return false;\r\n }\r\n var maxCnt = oldValues.length - startIndex;\r\n if (cnt >= maxCnt) {\r\n cnt = maxCnt;\r\n }\r\n if (cnt === 0) {\r\n return false;\r\n }\r\n this.values = new Uint32Array(oldValues.length - cnt);\r\n this.values.set(oldValues.subarray(0, startIndex), 0);\r\n this.values.set(oldValues.subarray(startIndex + cnt), startIndex);\r\n this.prefixSum = new Uint32Array(this.values.length);\r\n if (startIndex - 1 < this.prefixSumValidIndex[0]) {\r\n this.prefixSumValidIndex[0] = startIndex - 1;\r\n }\r\n if (this.prefixSumValidIndex[0] >= 0) {\r\n this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\r\n }\r\n return true;\r\n };\r\n PrefixSumComputer.prototype.getTotalValue = function () {\r\n if (this.values.length === 0) {\r\n return 0;\r\n }\r\n return this._getAccumulatedValue(this.values.length - 1);\r\n };\r\n PrefixSumComputer.prototype.getAccumulatedValue = function (index) {\r\n if (index < 0) {\r\n return 0;\r\n }\r\n index = toUint32(index);\r\n return this._getAccumulatedValue(index);\r\n };\r\n PrefixSumComputer.prototype._getAccumulatedValue = function (index) {\r\n if (index <= this.prefixSumValidIndex[0]) {\r\n return this.prefixSum[index];\r\n }\r\n var startIndex = this.prefixSumValidIndex[0] + 1;\r\n if (startIndex === 0) {\r\n this.prefixSum[0] = this.values[0];\r\n startIndex++;\r\n }\r\n if (index >= this.values.length) {\r\n index = this.values.length - 1;\r\n }\r\n for (var i = startIndex; i <= index; i++) {\r\n this.prefixSum[i] = this.prefixSum[i - 1] + this.values[i];\r\n }\r\n this.prefixSumValidIndex[0] = Math.max(this.prefixSumValidIndex[0], index);\r\n return this.prefixSum[index];\r\n };\r\n PrefixSumComputer.prototype.getIndexOf = function (accumulatedValue) {\r\n accumulatedValue = Math.floor(accumulatedValue); //@perf\r\n // Compute all sums (to get a fully valid prefixSum)\r\n this.getTotalValue();\r\n var low = 0;\r\n var high = this.values.length - 1;\r\n var mid = 0;\r\n var midStop = 0;\r\n var midStart = 0;\r\n while (low <= high) {\r\n mid = low + ((high - low) / 2) | 0;\r\n midStop = this.prefixSum[mid];\r\n midStart = midStop - this.values[mid];\r\n if (accumulatedValue < midStart) {\r\n high = mid - 1;\r\n }\r\n else if (accumulatedValue >= midStop) {\r\n low = mid + 1;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n return new PrefixSumIndexOfResult(mid, accumulatedValue - midStart);\r\n };\r\n return PrefixSumComputer;\r\n}());\r\nexport { PrefixSumComputer };\r\nvar PrefixSumComputerWithCache = /** @class */ (function () {\r\n function PrefixSumComputerWithCache(values) {\r\n this._cacheAccumulatedValueStart = 0;\r\n this._cache = null;\r\n this._actual = new PrefixSumComputer(values);\r\n this._bustCache();\r\n }\r\n PrefixSumComputerWithCache.prototype._bustCache = function () {\r\n this._cacheAccumulatedValueStart = 0;\r\n this._cache = null;\r\n };\r\n PrefixSumComputerWithCache.prototype.insertValues = function (insertIndex, insertValues) {\r\n if (this._actual.insertValues(insertIndex, insertValues)) {\r\n this._bustCache();\r\n }\r\n };\r\n PrefixSumComputerWithCache.prototype.changeValue = function (index, value) {\r\n if (this._actual.changeValue(index, value)) {\r\n this._bustCache();\r\n }\r\n };\r\n PrefixSumComputerWithCache.prototype.removeValues = function (startIndex, cnt) {\r\n if (this._actual.removeValues(startIndex, cnt)) {\r\n this._bustCache();\r\n }\r\n };\r\n PrefixSumComputerWithCache.prototype.getTotalValue = function () {\r\n return this._actual.getTotalValue();\r\n };\r\n PrefixSumComputerWithCache.prototype.getAccumulatedValue = function (index) {\r\n return this._actual.getAccumulatedValue(index);\r\n };\r\n PrefixSumComputerWithCache.prototype.getIndexOf = function (accumulatedValue) {\r\n accumulatedValue = Math.floor(accumulatedValue); //@perf\r\n if (this._cache !== null) {\r\n var cacheIndex = accumulatedValue - this._cacheAccumulatedValueStart;\r\n if (cacheIndex >= 0 && cacheIndex < this._cache.length) {\r\n // Cache hit!\r\n return this._cache[cacheIndex];\r\n }\r\n }\r\n // Cache miss!\r\n return this._actual.getIndexOf(accumulatedValue);\r\n };\r\n /**\r\n * Gives a hint that a lot of requests are about to come in for these accumulated values.\r\n */\r\n PrefixSumComputerWithCache.prototype.warmUpCache = function (accumulatedValueStart, accumulatedValueEnd) {\r\n var newCache = [];\r\n for (var accumulatedValue = accumulatedValueStart; accumulatedValue <= accumulatedValueEnd; accumulatedValue++) {\r\n newCache[accumulatedValue - accumulatedValueStart] = this.getIndexOf(accumulatedValue);\r\n }\r\n this._cache = newCache;\r\n this._cacheAccumulatedValueStart = accumulatedValueStart;\r\n };\r\n return PrefixSumComputerWithCache;\r\n}());\r\nexport { PrefixSumComputerWithCache };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Position } from '../core/position.js';\r\nimport { PrefixSumComputer } from '../viewModel/prefixSumComputer.js';\r\nvar MirrorTextModel = /** @class */ (function () {\r\n function MirrorTextModel(uri, lines, eol, versionId) {\r\n this._uri = uri;\r\n this._lines = lines;\r\n this._eol = eol;\r\n this._versionId = versionId;\r\n this._lineStarts = null;\r\n }\r\n MirrorTextModel.prototype.dispose = function () {\r\n this._lines.length = 0;\r\n };\r\n MirrorTextModel.prototype.getText = function () {\r\n return this._lines.join(this._eol);\r\n };\r\n MirrorTextModel.prototype.onEvents = function (e) {\r\n if (e.eol && e.eol !== this._eol) {\r\n this._eol = e.eol;\r\n this._lineStarts = null;\r\n }\r\n // Update my lines\r\n var changes = e.changes;\r\n for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {\r\n var change = changes_1[_i];\r\n this._acceptDeleteRange(change.range);\r\n this._acceptInsertText(new Position(change.range.startLineNumber, change.range.startColumn), change.text);\r\n }\r\n this._versionId = e.versionId;\r\n };\r\n MirrorTextModel.prototype._ensureLineStarts = function () {\r\n if (!this._lineStarts) {\r\n var eolLength = this._eol.length;\r\n var linesLength = this._lines.length;\r\n var lineStartValues = new Uint32Array(linesLength);\r\n for (var i = 0; i < linesLength; i++) {\r\n lineStartValues[i] = this._lines[i].length + eolLength;\r\n }\r\n this._lineStarts = new PrefixSumComputer(lineStartValues);\r\n }\r\n };\r\n /**\r\n * All changes to a line's text go through this method\r\n */\r\n MirrorTextModel.prototype._setLineText = function (lineIndex, newValue) {\r\n this._lines[lineIndex] = newValue;\r\n if (this._lineStarts) {\r\n // update prefix sum\r\n this._lineStarts.changeValue(lineIndex, this._lines[lineIndex].length + this._eol.length);\r\n }\r\n };\r\n MirrorTextModel.prototype._acceptDeleteRange = function (range) {\r\n if (range.startLineNumber === range.endLineNumber) {\r\n if (range.startColumn === range.endColumn) {\r\n // Nothing to delete\r\n return;\r\n }\r\n // Delete text on the affected line\r\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\r\n + this._lines[range.startLineNumber - 1].substring(range.endColumn - 1));\r\n return;\r\n }\r\n // Take remaining text on last line and append it to remaining text on first line\r\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\r\n + this._lines[range.endLineNumber - 1].substring(range.endColumn - 1));\r\n // Delete middle lines\r\n this._lines.splice(range.startLineNumber, range.endLineNumber - range.startLineNumber);\r\n if (this._lineStarts) {\r\n // update prefix sum\r\n this._lineStarts.removeValues(range.startLineNumber, range.endLineNumber - range.startLineNumber);\r\n }\r\n };\r\n MirrorTextModel.prototype._acceptInsertText = function (position, insertText) {\r\n if (insertText.length === 0) {\r\n // Nothing to insert\r\n return;\r\n }\r\n var insertLines = insertText.split(/\\r\\n|\\r|\\n/);\r\n if (insertLines.length === 1) {\r\n // Inserting text on one line\r\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1)\r\n + insertLines[0]\r\n + this._lines[position.lineNumber - 1].substring(position.column - 1));\r\n return;\r\n }\r\n // Append overflowing text from first line to the end of text to insert\r\n insertLines[insertLines.length - 1] += this._lines[position.lineNumber - 1].substring(position.column - 1);\r\n // Delete overflowing text from first line and insert text on first line\r\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1)\r\n + insertLines[0]);\r\n // Insert new lines & store lengths\r\n var newLengths = new Uint32Array(insertLines.length - 1);\r\n for (var i = 1; i < insertLines.length; i++) {\r\n this._lines.splice(position.lineNumber + i - 1, 0, insertLines[i]);\r\n newLengths[i - 1] = insertLines[i].length + this._eol.length;\r\n }\r\n if (this._lineStarts) {\r\n // update prefix sum\r\n this._lineStarts.insertValues(position.lineNumber, newLengths);\r\n }\r\n };\r\n return MirrorTextModel;\r\n}());\r\nexport { MirrorTextModel };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { toUint8 } from '../../../base/common/uint.js';\r\n/**\r\n * A fast character classifier that uses a compact array for ASCII values.\r\n */\r\nvar CharacterClassifier = /** @class */ (function () {\r\n function CharacterClassifier(_defaultValue) {\r\n var defaultValue = toUint8(_defaultValue);\r\n this._defaultValue = defaultValue;\r\n this._asciiMap = CharacterClassifier._createAsciiMap(defaultValue);\r\n this._map = new Map();\r\n }\r\n CharacterClassifier._createAsciiMap = function (defaultValue) {\r\n var asciiMap = new Uint8Array(256);\r\n for (var i = 0; i < 256; i++) {\r\n asciiMap[i] = defaultValue;\r\n }\r\n return asciiMap;\r\n };\r\n CharacterClassifier.prototype.set = function (charCode, _value) {\r\n var value = toUint8(_value);\r\n if (charCode >= 0 && charCode < 256) {\r\n this._asciiMap[charCode] = value;\r\n }\r\n else {\r\n this._map.set(charCode, value);\r\n }\r\n };\r\n CharacterClassifier.prototype.get = function (charCode) {\r\n if (charCode >= 0 && charCode < 256) {\r\n return this._asciiMap[charCode];\r\n }\r\n else {\r\n return (this._map.get(charCode) || this._defaultValue);\r\n }\r\n };\r\n return CharacterClassifier;\r\n}());\r\nexport { CharacterClassifier };\r\nvar CharacterSet = /** @class */ (function () {\r\n function CharacterSet() {\r\n this._actual = new CharacterClassifier(0 /* False */);\r\n }\r\n CharacterSet.prototype.add = function (charCode) {\r\n this._actual.set(charCode, 1 /* True */);\r\n };\r\n CharacterSet.prototype.has = function (charCode) {\r\n return (this._actual.get(charCode) === 1 /* True */);\r\n };\r\n return CharacterSet;\r\n}());\r\nexport { CharacterSet };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { CharacterClassifier } from '../core/characterClassifier.js';\r\nvar Uint8Matrix = /** @class */ (function () {\r\n function Uint8Matrix(rows, cols, defaultValue) {\r\n var data = new Uint8Array(rows * cols);\r\n for (var i = 0, len = rows * cols; i < len; i++) {\r\n data[i] = defaultValue;\r\n }\r\n this._data = data;\r\n this.rows = rows;\r\n this.cols = cols;\r\n }\r\n Uint8Matrix.prototype.get = function (row, col) {\r\n return this._data[row * this.cols + col];\r\n };\r\n Uint8Matrix.prototype.set = function (row, col, value) {\r\n this._data[row * this.cols + col] = value;\r\n };\r\n return Uint8Matrix;\r\n}());\r\nexport { Uint8Matrix };\r\nvar StateMachine = /** @class */ (function () {\r\n function StateMachine(edges) {\r\n var maxCharCode = 0;\r\n var maxState = 0 /* Invalid */;\r\n for (var i = 0, len = edges.length; i < len; i++) {\r\n var _a = edges[i], from = _a[0], chCode = _a[1], to = _a[2];\r\n if (chCode > maxCharCode) {\r\n maxCharCode = chCode;\r\n }\r\n if (from > maxState) {\r\n maxState = from;\r\n }\r\n if (to > maxState) {\r\n maxState = to;\r\n }\r\n }\r\n maxCharCode++;\r\n maxState++;\r\n var states = new Uint8Matrix(maxState, maxCharCode, 0 /* Invalid */);\r\n for (var i = 0, len = edges.length; i < len; i++) {\r\n var _b = edges[i], from = _b[0], chCode = _b[1], to = _b[2];\r\n states.set(from, chCode, to);\r\n }\r\n this._states = states;\r\n this._maxCharCode = maxCharCode;\r\n }\r\n StateMachine.prototype.nextState = function (currentState, chCode) {\r\n if (chCode < 0 || chCode >= this._maxCharCode) {\r\n return 0 /* Invalid */;\r\n }\r\n return this._states.get(currentState, chCode);\r\n };\r\n return StateMachine;\r\n}());\r\nexport { StateMachine };\r\n// State machine for http:// or https:// or file://\r\nvar _stateMachine = null;\r\nfunction getStateMachine() {\r\n if (_stateMachine === null) {\r\n _stateMachine = new StateMachine([\r\n [1 /* Start */, 104 /* h */, 2 /* H */],\r\n [1 /* Start */, 72 /* H */, 2 /* H */],\r\n [1 /* Start */, 102 /* f */, 6 /* F */],\r\n [1 /* Start */, 70 /* F */, 6 /* F */],\r\n [2 /* H */, 116 /* t */, 3 /* HT */],\r\n [2 /* H */, 84 /* T */, 3 /* HT */],\r\n [3 /* HT */, 116 /* t */, 4 /* HTT */],\r\n [3 /* HT */, 84 /* T */, 4 /* HTT */],\r\n [4 /* HTT */, 112 /* p */, 5 /* HTTP */],\r\n [4 /* HTT */, 80 /* P */, 5 /* HTTP */],\r\n [5 /* HTTP */, 115 /* s */, 9 /* BeforeColon */],\r\n [5 /* HTTP */, 83 /* S */, 9 /* BeforeColon */],\r\n [5 /* HTTP */, 58 /* Colon */, 10 /* AfterColon */],\r\n [6 /* F */, 105 /* i */, 7 /* FI */],\r\n [6 /* F */, 73 /* I */, 7 /* FI */],\r\n [7 /* FI */, 108 /* l */, 8 /* FIL */],\r\n [7 /* FI */, 76 /* L */, 8 /* FIL */],\r\n [8 /* FIL */, 101 /* e */, 9 /* BeforeColon */],\r\n [8 /* FIL */, 69 /* E */, 9 /* BeforeColon */],\r\n [9 /* BeforeColon */, 58 /* Colon */, 10 /* AfterColon */],\r\n [10 /* AfterColon */, 47 /* Slash */, 11 /* AlmostThere */],\r\n [11 /* AlmostThere */, 47 /* Slash */, 12 /* End */],\r\n ]);\r\n }\r\n return _stateMachine;\r\n}\r\nvar _classifier = null;\r\nfunction getClassifier() {\r\n if (_classifier === null) {\r\n _classifier = new CharacterClassifier(0 /* None */);\r\n var FORCE_TERMINATION_CHARACTERS = ' \\t<>\\'\\\"、。。、,.:;?!@#$%&*‘“〈《「『【〔([{「」}])〕】』」》〉”’`~…';\r\n for (var i = 0; i < FORCE_TERMINATION_CHARACTERS.length; i++) {\r\n _classifier.set(FORCE_TERMINATION_CHARACTERS.charCodeAt(i), 1 /* ForceTermination */);\r\n }\r\n var CANNOT_END_WITH_CHARACTERS = '.,;';\r\n for (var i = 0; i < CANNOT_END_WITH_CHARACTERS.length; i++) {\r\n _classifier.set(CANNOT_END_WITH_CHARACTERS.charCodeAt(i), 2 /* CannotEndIn */);\r\n }\r\n }\r\n return _classifier;\r\n}\r\nvar LinkComputer = /** @class */ (function () {\r\n function LinkComputer() {\r\n }\r\n LinkComputer._createLink = function (classifier, line, lineNumber, linkBeginIndex, linkEndIndex) {\r\n // Do not allow to end link in certain characters...\r\n var lastIncludedCharIndex = linkEndIndex - 1;\r\n do {\r\n var chCode = line.charCodeAt(lastIncludedCharIndex);\r\n var chClass = classifier.get(chCode);\r\n if (chClass !== 2 /* CannotEndIn */) {\r\n break;\r\n }\r\n lastIncludedCharIndex--;\r\n } while (lastIncludedCharIndex > linkBeginIndex);\r\n // Handle links enclosed in parens, square brackets and curlys.\r\n if (linkBeginIndex > 0) {\r\n var charCodeBeforeLink = line.charCodeAt(linkBeginIndex - 1);\r\n var lastCharCodeInLink = line.charCodeAt(lastIncludedCharIndex);\r\n if ((charCodeBeforeLink === 40 /* OpenParen */ && lastCharCodeInLink === 41 /* CloseParen */)\r\n || (charCodeBeforeLink === 91 /* OpenSquareBracket */ && lastCharCodeInLink === 93 /* CloseSquareBracket */)\r\n || (charCodeBeforeLink === 123 /* OpenCurlyBrace */ && lastCharCodeInLink === 125 /* CloseCurlyBrace */)) {\r\n // Do not end in ) if ( is before the link start\r\n // Do not end in ] if [ is before the link start\r\n // Do not end in } if { is before the link start\r\n lastIncludedCharIndex--;\r\n }\r\n }\r\n return {\r\n range: {\r\n startLineNumber: lineNumber,\r\n startColumn: linkBeginIndex + 1,\r\n endLineNumber: lineNumber,\r\n endColumn: lastIncludedCharIndex + 2\r\n },\r\n url: line.substring(linkBeginIndex, lastIncludedCharIndex + 1)\r\n };\r\n };\r\n LinkComputer.computeLinks = function (model, stateMachine) {\r\n if (stateMachine === void 0) { stateMachine = getStateMachine(); }\r\n var classifier = getClassifier();\r\n var result = [];\r\n for (var i = 1, lineCount = model.getLineCount(); i <= lineCount; i++) {\r\n var line = model.getLineContent(i);\r\n var len = line.length;\r\n var j = 0;\r\n var linkBeginIndex = 0;\r\n var linkBeginChCode = 0;\r\n var state = 1 /* Start */;\r\n var hasOpenParens = false;\r\n var hasOpenSquareBracket = false;\r\n var hasOpenCurlyBracket = false;\r\n while (j < len) {\r\n var resetStateMachine = false;\r\n var chCode = line.charCodeAt(j);\r\n if (state === 13 /* Accept */) {\r\n var chClass = void 0;\r\n switch (chCode) {\r\n case 40 /* OpenParen */:\r\n hasOpenParens = true;\r\n chClass = 0 /* None */;\r\n break;\r\n case 41 /* CloseParen */:\r\n chClass = (hasOpenParens ? 0 /* None */ : 1 /* ForceTermination */);\r\n break;\r\n case 91 /* OpenSquareBracket */:\r\n hasOpenSquareBracket = true;\r\n chClass = 0 /* None */;\r\n break;\r\n case 93 /* CloseSquareBracket */:\r\n chClass = (hasOpenSquareBracket ? 0 /* None */ : 1 /* ForceTermination */);\r\n break;\r\n case 123 /* OpenCurlyBrace */:\r\n hasOpenCurlyBracket = true;\r\n chClass = 0 /* None */;\r\n break;\r\n case 125 /* CloseCurlyBrace */:\r\n chClass = (hasOpenCurlyBracket ? 0 /* None */ : 1 /* ForceTermination */);\r\n break;\r\n /* The following three rules make it that ' or \" or ` are allowed inside links if the link began with a different one */\r\n case 39 /* SingleQuote */:\r\n chClass = (linkBeginChCode === 34 /* DoubleQuote */ || linkBeginChCode === 96 /* BackTick */) ? 0 /* None */ : 1 /* ForceTermination */;\r\n break;\r\n case 34 /* DoubleQuote */:\r\n chClass = (linkBeginChCode === 39 /* SingleQuote */ || linkBeginChCode === 96 /* BackTick */) ? 0 /* None */ : 1 /* ForceTermination */;\r\n break;\r\n case 96 /* BackTick */:\r\n chClass = (linkBeginChCode === 39 /* SingleQuote */ || linkBeginChCode === 34 /* DoubleQuote */) ? 0 /* None */ : 1 /* ForceTermination */;\r\n break;\r\n case 42 /* Asterisk */:\r\n // `*` terminates a link if the link began with `*`\r\n chClass = (linkBeginChCode === 42 /* Asterisk */) ? 1 /* ForceTermination */ : 0 /* None */;\r\n break;\r\n default:\r\n chClass = classifier.get(chCode);\r\n }\r\n // Check if character terminates link\r\n if (chClass === 1 /* ForceTermination */) {\r\n result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, j));\r\n resetStateMachine = true;\r\n }\r\n }\r\n else if (state === 12 /* End */) {\r\n var chClass = void 0;\r\n if (chCode === 91 /* OpenSquareBracket */) {\r\n // Allow for the authority part to contain ipv6 addresses which contain [ and ]\r\n hasOpenSquareBracket = true;\r\n chClass = 0 /* None */;\r\n }\r\n else {\r\n chClass = classifier.get(chCode);\r\n }\r\n // Check if character terminates link\r\n if (chClass === 1 /* ForceTermination */) {\r\n resetStateMachine = true;\r\n }\r\n else {\r\n state = 13 /* Accept */;\r\n }\r\n }\r\n else {\r\n state = stateMachine.nextState(state, chCode);\r\n if (state === 0 /* Invalid */) {\r\n resetStateMachine = true;\r\n }\r\n }\r\n if (resetStateMachine) {\r\n state = 1 /* Start */;\r\n hasOpenParens = false;\r\n hasOpenSquareBracket = false;\r\n hasOpenCurlyBracket = false;\r\n // Record where the link started\r\n linkBeginIndex = j + 1;\r\n linkBeginChCode = chCode;\r\n }\r\n j++;\r\n }\r\n if (state === 13 /* Accept */) {\r\n result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, len));\r\n }\r\n }\r\n return result;\r\n };\r\n return LinkComputer;\r\n}());\r\nexport { LinkComputer };\r\n/**\r\n * Returns an array of all links contains in the provided\r\n * document. *Note* that this operation is computational\r\n * expensive and should not run in the UI thread.\r\n */\r\nexport function computeLinks(model) {\r\n if (!model || typeof model.getLineCount !== 'function' || typeof model.getLineContent !== 'function') {\r\n // Unknown caller!\r\n return [];\r\n }\r\n return LinkComputer.computeLinks(model);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar BasicInplaceReplace = /** @class */ (function () {\r\n function BasicInplaceReplace() {\r\n this._defaultValueSet = [\r\n ['true', 'false'],\r\n ['True', 'False'],\r\n ['Private', 'Public', 'Friend', 'ReadOnly', 'Partial', 'Protected', 'WriteOnly'],\r\n ['public', 'protected', 'private'],\r\n ];\r\n }\r\n BasicInplaceReplace.prototype.navigateValueSet = function (range1, text1, range2, text2, up) {\r\n if (range1 && text1) {\r\n var result = this.doNavigateValueSet(text1, up);\r\n if (result) {\r\n return {\r\n range: range1,\r\n value: result\r\n };\r\n }\r\n }\r\n if (range2 && text2) {\r\n var result = this.doNavigateValueSet(text2, up);\r\n if (result) {\r\n return {\r\n range: range2,\r\n value: result\r\n };\r\n }\r\n }\r\n return null;\r\n };\r\n BasicInplaceReplace.prototype.doNavigateValueSet = function (text, up) {\r\n var numberResult = this.numberReplace(text, up);\r\n if (numberResult !== null) {\r\n return numberResult;\r\n }\r\n return this.textReplace(text, up);\r\n };\r\n BasicInplaceReplace.prototype.numberReplace = function (value, up) {\r\n var precision = Math.pow(10, value.length - (value.lastIndexOf('.') + 1));\r\n var n1 = Number(value);\r\n var n2 = parseFloat(value);\r\n if (!isNaN(n1) && !isNaN(n2) && n1 === n2) {\r\n if (n1 === 0 && !up) {\r\n return null; // don't do negative\r\n //\t\t\t} else if(n1 === 9 && up) {\r\n //\t\t\t\treturn null; // don't insert 10 into a number\r\n }\r\n else {\r\n n1 = Math.floor(n1 * precision);\r\n n1 += up ? precision : -precision;\r\n return String(n1 / precision);\r\n }\r\n }\r\n return null;\r\n };\r\n BasicInplaceReplace.prototype.textReplace = function (value, up) {\r\n return this.valueSetsReplace(this._defaultValueSet, value, up);\r\n };\r\n BasicInplaceReplace.prototype.valueSetsReplace = function (valueSets, value, up) {\r\n var result = null;\r\n for (var i = 0, len = valueSets.length; result === null && i < len; i++) {\r\n result = this.valueSetReplace(valueSets[i], value, up);\r\n }\r\n return result;\r\n };\r\n BasicInplaceReplace.prototype.valueSetReplace = function (valueSet, value, up) {\r\n var idx = valueSet.indexOf(value);\r\n if (idx >= 0) {\r\n idx += up ? +1 : -1;\r\n if (idx < 0) {\r\n idx = valueSet.length - 1;\r\n }\r\n else {\r\n idx %= valueSet.length;\r\n }\r\n return valueSet[idx];\r\n }\r\n return null;\r\n };\r\n BasicInplaceReplace.INSTANCE = new BasicInplaceReplace();\r\n return BasicInplaceReplace;\r\n}());\r\nexport { BasicInplaceReplace };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { mergeSort } from '../../../base/common/arrays.js';\r\nimport { stringDiff } from '../../../base/common/diff/diff.js';\r\nimport { FIN } from '../../../base/common/iterator.js';\r\nimport { globals } from '../../../base/common/platform.js';\r\nimport { URI } from '../../../base/common/uri.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport { DiffComputer } from '../diff/diffComputer.js';\r\nimport { MirrorTextModel as BaseMirrorModel } from '../model/mirrorTextModel.js';\r\nimport { ensureValidWordDefinition, getWordAtText } from '../model/wordHelper.js';\r\nimport { computeLinks } from '../modes/linkComputer.js';\r\nimport { BasicInplaceReplace } from '../modes/supports/inplaceReplaceSupport.js';\r\nimport { createMonacoBaseAPI } from '../standalone/standaloneBase.js';\r\nimport * as types from '../../../base/common/types.js';\r\n/**\r\n * @internal\r\n */\r\nvar MirrorModel = /** @class */ (function (_super) {\r\n __extends(MirrorModel, _super);\r\n function MirrorModel() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n Object.defineProperty(MirrorModel.prototype, \"uri\", {\r\n get: function () {\r\n return this._uri;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MirrorModel.prototype, \"version\", {\r\n get: function () {\r\n return this._versionId;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MirrorModel.prototype, \"eol\", {\r\n get: function () {\r\n return this._eol;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n MirrorModel.prototype.getValue = function () {\r\n return this.getText();\r\n };\r\n MirrorModel.prototype.getLinesContent = function () {\r\n return this._lines.slice(0);\r\n };\r\n MirrorModel.prototype.getLineCount = function () {\r\n return this._lines.length;\r\n };\r\n MirrorModel.prototype.getLineContent = function (lineNumber) {\r\n return this._lines[lineNumber - 1];\r\n };\r\n MirrorModel.prototype.getWordAtPosition = function (position, wordDefinition) {\r\n var wordAtText = getWordAtText(position.column, ensureValidWordDefinition(wordDefinition), this._lines[position.lineNumber - 1], 0);\r\n if (wordAtText) {\r\n return new Range(position.lineNumber, wordAtText.startColumn, position.lineNumber, wordAtText.endColumn);\r\n }\r\n return null;\r\n };\r\n MirrorModel.prototype.createWordIterator = function (wordDefinition) {\r\n var _this = this;\r\n var obj;\r\n var lineNumber = 0;\r\n var lineText;\r\n var wordRangesIdx = 0;\r\n var wordRanges = [];\r\n var next = function () {\r\n if (wordRangesIdx < wordRanges.length) {\r\n var value = lineText.substring(wordRanges[wordRangesIdx].start, wordRanges[wordRangesIdx].end);\r\n wordRangesIdx += 1;\r\n if (!obj) {\r\n obj = { done: false, value: value };\r\n }\r\n else {\r\n obj.value = value;\r\n }\r\n return obj;\r\n }\r\n else if (lineNumber >= _this._lines.length) {\r\n return FIN;\r\n }\r\n else {\r\n lineText = _this._lines[lineNumber];\r\n wordRanges = _this._wordenize(lineText, wordDefinition);\r\n wordRangesIdx = 0;\r\n lineNumber += 1;\r\n return next();\r\n }\r\n };\r\n return { next: next };\r\n };\r\n MirrorModel.prototype.getLineWords = function (lineNumber, wordDefinition) {\r\n var content = this._lines[lineNumber - 1];\r\n var ranges = this._wordenize(content, wordDefinition);\r\n var words = [];\r\n for (var _i = 0, ranges_1 = ranges; _i < ranges_1.length; _i++) {\r\n var range = ranges_1[_i];\r\n words.push({\r\n word: content.substring(range.start, range.end),\r\n startColumn: range.start + 1,\r\n endColumn: range.end + 1\r\n });\r\n }\r\n return words;\r\n };\r\n MirrorModel.prototype._wordenize = function (content, wordDefinition) {\r\n var result = [];\r\n var match;\r\n wordDefinition.lastIndex = 0; // reset lastIndex just to be sure\r\n while (match = wordDefinition.exec(content)) {\r\n if (match[0].length === 0) {\r\n // it did match the empty string\r\n break;\r\n }\r\n result.push({ start: match.index, end: match.index + match[0].length });\r\n }\r\n return result;\r\n };\r\n MirrorModel.prototype.getValueInRange = function (range) {\r\n range = this._validateRange(range);\r\n if (range.startLineNumber === range.endLineNumber) {\r\n return this._lines[range.startLineNumber - 1].substring(range.startColumn - 1, range.endColumn - 1);\r\n }\r\n var lineEnding = this._eol;\r\n var startLineIndex = range.startLineNumber - 1;\r\n var endLineIndex = range.endLineNumber - 1;\r\n var resultLines = [];\r\n resultLines.push(this._lines[startLineIndex].substring(range.startColumn - 1));\r\n for (var i = startLineIndex + 1; i < endLineIndex; i++) {\r\n resultLines.push(this._lines[i]);\r\n }\r\n resultLines.push(this._lines[endLineIndex].substring(0, range.endColumn - 1));\r\n return resultLines.join(lineEnding);\r\n };\r\n MirrorModel.prototype.offsetAt = function (position) {\r\n position = this._validatePosition(position);\r\n this._ensureLineStarts();\r\n return this._lineStarts.getAccumulatedValue(position.lineNumber - 2) + (position.column - 1);\r\n };\r\n MirrorModel.prototype.positionAt = function (offset) {\r\n offset = Math.floor(offset);\r\n offset = Math.max(0, offset);\r\n this._ensureLineStarts();\r\n var out = this._lineStarts.getIndexOf(offset);\r\n var lineLength = this._lines[out.index].length;\r\n // Ensure we return a valid position\r\n return {\r\n lineNumber: 1 + out.index,\r\n column: 1 + Math.min(out.remainder, lineLength)\r\n };\r\n };\r\n MirrorModel.prototype._validateRange = function (range) {\r\n var start = this._validatePosition({ lineNumber: range.startLineNumber, column: range.startColumn });\r\n var end = this._validatePosition({ lineNumber: range.endLineNumber, column: range.endColumn });\r\n if (start.lineNumber !== range.startLineNumber\r\n || start.column !== range.startColumn\r\n || end.lineNumber !== range.endLineNumber\r\n || end.column !== range.endColumn) {\r\n return {\r\n startLineNumber: start.lineNumber,\r\n startColumn: start.column,\r\n endLineNumber: end.lineNumber,\r\n endColumn: end.column\r\n };\r\n }\r\n return range;\r\n };\r\n MirrorModel.prototype._validatePosition = function (position) {\r\n if (!Position.isIPosition(position)) {\r\n throw new Error('bad position');\r\n }\r\n var lineNumber = position.lineNumber, column = position.column;\r\n var hasChanged = false;\r\n if (lineNumber < 1) {\r\n lineNumber = 1;\r\n column = 1;\r\n hasChanged = true;\r\n }\r\n else if (lineNumber > this._lines.length) {\r\n lineNumber = this._lines.length;\r\n column = this._lines[lineNumber - 1].length + 1;\r\n hasChanged = true;\r\n }\r\n else {\r\n var maxCharacter = this._lines[lineNumber - 1].length + 1;\r\n if (column < 1) {\r\n column = 1;\r\n hasChanged = true;\r\n }\r\n else if (column > maxCharacter) {\r\n column = maxCharacter;\r\n hasChanged = true;\r\n }\r\n }\r\n if (!hasChanged) {\r\n return position;\r\n }\r\n else {\r\n return { lineNumber: lineNumber, column: column };\r\n }\r\n };\r\n return MirrorModel;\r\n}(BaseMirrorModel));\r\n/**\r\n * @internal\r\n */\r\nvar EditorSimpleWorker = /** @class */ (function () {\r\n function EditorSimpleWorker(host, foreignModuleFactory) {\r\n this._host = host;\r\n this._models = Object.create(null);\r\n this._foreignModuleFactory = foreignModuleFactory;\r\n this._foreignModule = null;\r\n }\r\n EditorSimpleWorker.prototype.dispose = function () {\r\n this._models = Object.create(null);\r\n };\r\n EditorSimpleWorker.prototype._getModel = function (uri) {\r\n return this._models[uri];\r\n };\r\n EditorSimpleWorker.prototype._getModels = function () {\r\n var _this = this;\r\n var all = [];\r\n Object.keys(this._models).forEach(function (key) { return all.push(_this._models[key]); });\r\n return all;\r\n };\r\n EditorSimpleWorker.prototype.acceptNewModel = function (data) {\r\n this._models[data.url] = new MirrorModel(URI.parse(data.url), data.lines, data.EOL, data.versionId);\r\n };\r\n EditorSimpleWorker.prototype.acceptModelChanged = function (strURL, e) {\r\n if (!this._models[strURL]) {\r\n return;\r\n }\r\n var model = this._models[strURL];\r\n model.onEvents(e);\r\n };\r\n EditorSimpleWorker.prototype.acceptRemovedModel = function (strURL) {\r\n if (!this._models[strURL]) {\r\n return;\r\n }\r\n delete this._models[strURL];\r\n };\r\n // ---- BEGIN diff --------------------------------------------------------------------------\r\n EditorSimpleWorker.prototype.computeDiff = function (originalUrl, modifiedUrl, ignoreTrimWhitespace, maxComputationTime) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var original, modified, originalLines, modifiedLines, diffComputer, diffResult, identical;\r\n return __generator(this, function (_a) {\r\n original = this._getModel(originalUrl);\r\n modified = this._getModel(modifiedUrl);\r\n if (!original || !modified) {\r\n return [2 /*return*/, null];\r\n }\r\n originalLines = original.getLinesContent();\r\n modifiedLines = modified.getLinesContent();\r\n diffComputer = new DiffComputer(originalLines, modifiedLines, {\r\n shouldComputeCharChanges: true,\r\n shouldPostProcessCharChanges: true,\r\n shouldIgnoreTrimWhitespace: ignoreTrimWhitespace,\r\n shouldMakePrettyDiff: true,\r\n maxComputationTime: maxComputationTime\r\n });\r\n diffResult = diffComputer.computeDiff();\r\n identical = (diffResult.changes.length > 0 ? false : this._modelsAreIdentical(original, modified));\r\n return [2 /*return*/, {\r\n quitEarly: diffResult.quitEarly,\r\n identical: identical,\r\n changes: diffResult.changes\r\n }];\r\n });\r\n });\r\n };\r\n EditorSimpleWorker.prototype._modelsAreIdentical = function (original, modified) {\r\n var originalLineCount = original.getLineCount();\r\n var modifiedLineCount = modified.getLineCount();\r\n if (originalLineCount !== modifiedLineCount) {\r\n return false;\r\n }\r\n for (var line = 1; line <= originalLineCount; line++) {\r\n var originalLine = original.getLineContent(line);\r\n var modifiedLine = modified.getLineContent(line);\r\n if (originalLine !== modifiedLine) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n EditorSimpleWorker.prototype.computeMoreMinimalEdits = function (modelUrl, edits) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var model, result, lastEol, _i, edits_1, _a, range, text, eol, original, changes, editOffset, _b, changes_1, change, start, end, newEdit;\r\n return __generator(this, function (_c) {\r\n model = this._getModel(modelUrl);\r\n if (!model) {\r\n return [2 /*return*/, edits];\r\n }\r\n result = [];\r\n lastEol = undefined;\r\n edits = mergeSort(edits, function (a, b) {\r\n if (a.range && b.range) {\r\n return Range.compareRangesUsingStarts(a.range, b.range);\r\n }\r\n // eol only changes should go to the end\r\n var aRng = a.range ? 0 : 1;\r\n var bRng = b.range ? 0 : 1;\r\n return aRng - bRng;\r\n });\r\n for (_i = 0, edits_1 = edits; _i < edits_1.length; _i++) {\r\n _a = edits_1[_i], range = _a.range, text = _a.text, eol = _a.eol;\r\n if (typeof eol === 'number') {\r\n lastEol = eol;\r\n }\r\n if (Range.isEmpty(range) && !text) {\r\n // empty change\r\n continue;\r\n }\r\n original = model.getValueInRange(range);\r\n text = text.replace(/\\r\\n|\\n|\\r/g, model.eol);\r\n if (original === text) {\r\n // noop\r\n continue;\r\n }\r\n // make sure diff won't take too long\r\n if (Math.max(text.length, original.length) > EditorSimpleWorker._diffLimit) {\r\n result.push({ range: range, text: text });\r\n continue;\r\n }\r\n changes = stringDiff(original, text, false);\r\n editOffset = model.offsetAt(Range.lift(range).getStartPosition());\r\n for (_b = 0, changes_1 = changes; _b < changes_1.length; _b++) {\r\n change = changes_1[_b];\r\n start = model.positionAt(editOffset + change.originalStart);\r\n end = model.positionAt(editOffset + change.originalStart + change.originalLength);\r\n newEdit = {\r\n text: text.substr(change.modifiedStart, change.modifiedLength),\r\n range: { startLineNumber: start.lineNumber, startColumn: start.column, endLineNumber: end.lineNumber, endColumn: end.column }\r\n };\r\n if (model.getValueInRange(newEdit.range) !== newEdit.text) {\r\n result.push(newEdit);\r\n }\r\n }\r\n }\r\n if (typeof lastEol === 'number') {\r\n result.push({ eol: lastEol, text: '', range: { startLineNumber: 0, startColumn: 0, endLineNumber: 0, endColumn: 0 } });\r\n }\r\n return [2 /*return*/, result];\r\n });\r\n });\r\n };\r\n // ---- END minimal edits ---------------------------------------------------------------\r\n EditorSimpleWorker.prototype.computeLinks = function (modelUrl) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var model;\r\n return __generator(this, function (_a) {\r\n model = this._getModel(modelUrl);\r\n if (!model) {\r\n return [2 /*return*/, null];\r\n }\r\n return [2 /*return*/, computeLinks(model)];\r\n });\r\n });\r\n };\r\n EditorSimpleWorker.prototype.textualSuggest = function (modelUrl, position, wordDef, wordDefFlags) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var model, words, seen, wordDefRegExp, wordAt, iter, e, word;\r\n return __generator(this, function (_a) {\r\n model = this._getModel(modelUrl);\r\n if (!model) {\r\n return [2 /*return*/, null];\r\n }\r\n words = [];\r\n seen = new Set();\r\n wordDefRegExp = new RegExp(wordDef, wordDefFlags);\r\n wordAt = model.getWordAtPosition(position, wordDefRegExp);\r\n if (wordAt) {\r\n seen.add(model.getValueInRange(wordAt));\r\n }\r\n for (iter = model.createWordIterator(wordDefRegExp), e = iter.next(); !e.done && seen.size <= EditorSimpleWorker._suggestionsLimit; e = iter.next()) {\r\n word = e.value;\r\n if (seen.has(word)) {\r\n continue;\r\n }\r\n seen.add(word);\r\n if (!isNaN(Number(word))) {\r\n continue;\r\n }\r\n words.push(word);\r\n }\r\n return [2 /*return*/, words];\r\n });\r\n });\r\n };\r\n // ---- END suggest --------------------------------------------------------------------------\r\n //#region -- word ranges --\r\n EditorSimpleWorker.prototype.computeWordRanges = function (modelUrl, range, wordDef, wordDefFlags) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var model, wordDefRegExp, result, line, words, _i, words_1, word, array;\r\n return __generator(this, function (_a) {\r\n model = this._getModel(modelUrl);\r\n if (!model) {\r\n return [2 /*return*/, Object.create(null)];\r\n }\r\n wordDefRegExp = new RegExp(wordDef, wordDefFlags);\r\n result = Object.create(null);\r\n for (line = range.startLineNumber; line < range.endLineNumber; line++) {\r\n words = model.getLineWords(line, wordDefRegExp);\r\n for (_i = 0, words_1 = words; _i < words_1.length; _i++) {\r\n word = words_1[_i];\r\n if (!isNaN(Number(word.word))) {\r\n continue;\r\n }\r\n array = result[word.word];\r\n if (!array) {\r\n array = [];\r\n result[word.word] = array;\r\n }\r\n array.push({\r\n startLineNumber: line,\r\n startColumn: word.startColumn,\r\n endLineNumber: line,\r\n endColumn: word.endColumn\r\n });\r\n }\r\n }\r\n return [2 /*return*/, result];\r\n });\r\n });\r\n };\r\n //#endregion\r\n EditorSimpleWorker.prototype.navigateValueSet = function (modelUrl, range, up, wordDef, wordDefFlags) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var model, wordDefRegExp, selectionText, wordRange, word, result;\r\n return __generator(this, function (_a) {\r\n model = this._getModel(modelUrl);\r\n if (!model) {\r\n return [2 /*return*/, null];\r\n }\r\n wordDefRegExp = new RegExp(wordDef, wordDefFlags);\r\n if (range.startColumn === range.endColumn) {\r\n range = {\r\n startLineNumber: range.startLineNumber,\r\n startColumn: range.startColumn,\r\n endLineNumber: range.endLineNumber,\r\n endColumn: range.endColumn + 1\r\n };\r\n }\r\n selectionText = model.getValueInRange(range);\r\n wordRange = model.getWordAtPosition({ lineNumber: range.startLineNumber, column: range.startColumn }, wordDefRegExp);\r\n if (!wordRange) {\r\n return [2 /*return*/, null];\r\n }\r\n word = model.getValueInRange(wordRange);\r\n result = BasicInplaceReplace.INSTANCE.navigateValueSet(range, selectionText, wordRange, word, up);\r\n return [2 /*return*/, result];\r\n });\r\n });\r\n };\r\n // ---- BEGIN foreign module support --------------------------------------------------------------------------\r\n EditorSimpleWorker.prototype.loadForeignModule = function (moduleId, createData, foreignHostMethods) {\r\n var _this = this;\r\n var proxyMethodRequest = function (method, args) {\r\n return _this._host.fhr(method, args);\r\n };\r\n var foreignHost = types.createProxyObject(foreignHostMethods, proxyMethodRequest);\r\n var ctx = {\r\n host: foreignHost,\r\n getMirrorModels: function () {\r\n return _this._getModels();\r\n }\r\n };\r\n if (this._foreignModuleFactory) {\r\n this._foreignModule = this._foreignModuleFactory(ctx, createData);\r\n // static foreing module\r\n return Promise.resolve(types.getAllMethodNames(this._foreignModule));\r\n }\r\n // ESM-comment-begin\r\n // \t\treturn new Promise((resolve, reject) => {\r\n // \t\t\trequire([moduleId], (foreignModule: { create: IForeignModuleFactory }) => {\r\n // \t\t\t\tthis._foreignModule = foreignModule.create(ctx, createData);\r\n // \r\n // \t\t\t\tresolve(types.getAllMethodNames(this._foreignModule));\r\n // \r\n // \t\t\t}, reject);\r\n // \t\t});\r\n // ESM-comment-end\r\n // ESM-uncomment-begin\r\n return Promise.reject(new Error(\"Unexpected usage\"));\r\n // ESM-uncomment-end\r\n };\r\n // foreign method request\r\n EditorSimpleWorker.prototype.fmr = function (method, args) {\r\n if (!this._foreignModule || typeof this._foreignModule[method] !== 'function') {\r\n return Promise.reject(new Error('Missing requestHandler or method: ' + method));\r\n }\r\n try {\r\n return Promise.resolve(this._foreignModule[method].apply(this._foreignModule, args));\r\n }\r\n catch (e) {\r\n return Promise.reject(e);\r\n }\r\n };\r\n // ---- END diff --------------------------------------------------------------------------\r\n // ---- BEGIN minimal edits ---------------------------------------------------------------\r\n EditorSimpleWorker._diffLimit = 100000;\r\n // ---- BEGIN suggest --------------------------------------------------------------------------\r\n EditorSimpleWorker._suggestionsLimit = 10000;\r\n return EditorSimpleWorker;\r\n}());\r\nexport { EditorSimpleWorker };\r\n/**\r\n * Called on the worker side\r\n * @internal\r\n */\r\nexport function create(host) {\r\n return new EditorSimpleWorker(host, null);\r\n}\r\nif (typeof importScripts === 'function') {\r\n // Running in a web worker\r\n globals.monaco = createMonacoBaseAPI();\r\n}\r\n","import { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nexport var ITextResourceConfigurationService = createDecorator('textResourceConfigurationService');\r\nexport var ITextResourcePropertiesService = createDecorator('textResourcePropertiesService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator as createServiceDecorator } from '../../instantiation/common/instantiation.js';\r\nexport var ILogService = createServiceDecorator('logService');\r\nvar NullLogService = /** @class */ (function () {\r\n function NullLogService() {\r\n }\r\n NullLogService.prototype.trace = function (message) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n };\r\n NullLogService.prototype.error = function (message) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n };\r\n NullLogService.prototype.dispose = function () { };\r\n return NullLogService;\r\n}());\r\nexport { NullLogService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { globals } from './platform.js';\r\nvar hasPerformanceNow = (globals.performance && typeof globals.performance.now === 'function');\r\nvar StopWatch = /** @class */ (function () {\r\n function StopWatch(highResolution) {\r\n this._highResolution = hasPerformanceNow && highResolution;\r\n this._startTime = this._now();\r\n this._stopTime = -1;\r\n }\r\n StopWatch.create = function (highResolution) {\r\n if (highResolution === void 0) { highResolution = true; }\r\n return new StopWatch(highResolution);\r\n };\r\n StopWatch.prototype.stop = function () {\r\n this._stopTime = this._now();\r\n };\r\n StopWatch.prototype.elapsed = function () {\r\n if (this._stopTime !== -1) {\r\n return this._stopTime - this._startTime;\r\n }\r\n return this._now() - this._startTime;\r\n };\r\n StopWatch.prototype._now = function () {\r\n return this._highResolution ? globals.performance.now() : new Date().getTime();\r\n };\r\n return StopWatch;\r\n}());\r\nexport { StopWatch };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { IntervalTimer } from '../../../base/common/async.js';\r\nimport { Disposable, dispose, toDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\r\nimport { SimpleWorkerClient, logOnceWebWorkerWarning } from '../../../base/common/worker/simpleWorker.js';\r\nimport { DefaultWorkerFactory } from '../../../base/worker/defaultWorkerFactory.js';\r\nimport { Range } from '../core/range.js';\r\nimport * as modes from '../modes.js';\r\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\r\nimport { EditorSimpleWorker } from './editorSimpleWorker.js';\r\nimport { IModelService } from './modelService.js';\r\nimport { ITextResourceConfigurationService } from './resourceConfiguration.js';\r\nimport { regExpFlags } from '../../../base/common/strings.js';\r\nimport { isNonEmptyArray } from '../../../base/common/arrays.js';\r\nimport { ILogService } from '../../../platform/log/common/log.js';\r\nimport { StopWatch } from '../../../base/common/stopwatch.js';\r\n/**\r\n * Stop syncing a model to the worker if it was not needed for 1 min.\r\n */\r\nvar STOP_SYNC_MODEL_DELTA_TIME_MS = 60 * 1000;\r\n/**\r\n * Stop the worker if it was not needed for 5 min.\r\n */\r\nvar STOP_WORKER_DELTA_TIME_MS = 5 * 60 * 1000;\r\nfunction canSyncModel(modelService, resource) {\r\n var model = modelService.getModel(resource);\r\n if (!model) {\r\n return false;\r\n }\r\n if (model.isTooLargeForSyncing()) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nvar EditorWorkerServiceImpl = /** @class */ (function (_super) {\r\n __extends(EditorWorkerServiceImpl, _super);\r\n function EditorWorkerServiceImpl(modelService, configurationService, logService) {\r\n var _this = _super.call(this) || this;\r\n _this._modelService = modelService;\r\n _this._workerManager = _this._register(new WorkerManager(_this._modelService));\r\n _this._logService = logService;\r\n // todo@joh make sure this happens only once\r\n _this._register(modes.LinkProviderRegistry.register('*', {\r\n provideLinks: function (model, token) {\r\n if (!canSyncModel(_this._modelService, model.uri)) {\r\n return Promise.resolve({ links: [] }); // File too large\r\n }\r\n return _this._workerManager.withWorker().then(function (client) { return client.computeLinks(model.uri); }).then(function (links) {\r\n return links && { links: links };\r\n });\r\n }\r\n }));\r\n _this._register(modes.CompletionProviderRegistry.register('*', new WordBasedCompletionItemProvider(_this._workerManager, configurationService, _this._modelService)));\r\n return _this;\r\n }\r\n EditorWorkerServiceImpl.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n EditorWorkerServiceImpl.prototype.canComputeDiff = function (original, modified) {\r\n return (canSyncModel(this._modelService, original) && canSyncModel(this._modelService, modified));\r\n };\r\n EditorWorkerServiceImpl.prototype.computeDiff = function (original, modified, ignoreTrimWhitespace, maxComputationTime) {\r\n return this._workerManager.withWorker().then(function (client) { return client.computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime); });\r\n };\r\n EditorWorkerServiceImpl.prototype.computeMoreMinimalEdits = function (resource, edits) {\r\n var _this = this;\r\n if (isNonEmptyArray(edits)) {\r\n if (!canSyncModel(this._modelService, resource)) {\r\n return Promise.resolve(edits); // File too large\r\n }\r\n var sw_1 = StopWatch.create(true);\r\n var result = this._workerManager.withWorker().then(function (client) { return client.computeMoreMinimalEdits(resource, edits); });\r\n result.finally(function () { return _this._logService.trace('FORMAT#computeMoreMinimalEdits', resource.toString(true), sw_1.elapsed()); });\r\n return result;\r\n }\r\n else {\r\n return Promise.resolve(undefined);\r\n }\r\n };\r\n EditorWorkerServiceImpl.prototype.canNavigateValueSet = function (resource) {\r\n return (canSyncModel(this._modelService, resource));\r\n };\r\n EditorWorkerServiceImpl.prototype.navigateValueSet = function (resource, range, up) {\r\n return this._workerManager.withWorker().then(function (client) { return client.navigateValueSet(resource, range, up); });\r\n };\r\n EditorWorkerServiceImpl.prototype.canComputeWordRanges = function (resource) {\r\n return canSyncModel(this._modelService, resource);\r\n };\r\n EditorWorkerServiceImpl.prototype.computeWordRanges = function (resource, range) {\r\n return this._workerManager.withWorker().then(function (client) { return client.computeWordRanges(resource, range); });\r\n };\r\n EditorWorkerServiceImpl = __decorate([\r\n __param(0, IModelService),\r\n __param(1, ITextResourceConfigurationService),\r\n __param(2, ILogService)\r\n ], EditorWorkerServiceImpl);\r\n return EditorWorkerServiceImpl;\r\n}(Disposable));\r\nexport { EditorWorkerServiceImpl };\r\nvar WordBasedCompletionItemProvider = /** @class */ (function () {\r\n function WordBasedCompletionItemProvider(workerManager, configurationService, modelService) {\r\n this._debugDisplayName = 'wordbasedCompletions';\r\n this._workerManager = workerManager;\r\n this._configurationService = configurationService;\r\n this._modelService = modelService;\r\n }\r\n WordBasedCompletionItemProvider.prototype.provideCompletionItems = function (model, position) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var wordBasedSuggestions, word, replace, insert, client, words;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n wordBasedSuggestions = this._configurationService.getValue(model.uri, position, 'editor').wordBasedSuggestions;\r\n if (!wordBasedSuggestions) {\r\n return [2 /*return*/, undefined];\r\n }\r\n if (!canSyncModel(this._modelService, model.uri)) {\r\n return [2 /*return*/, undefined]; // File too large\r\n }\r\n word = model.getWordAtPosition(position);\r\n replace = !word ? Range.fromPositions(position) : new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);\r\n insert = replace.setEndPosition(position.lineNumber, position.column);\r\n return [4 /*yield*/, this._workerManager.withWorker()];\r\n case 1:\r\n client = _a.sent();\r\n return [4 /*yield*/, client.textualSuggest(model.uri, position)];\r\n case 2:\r\n words = _a.sent();\r\n if (!words) {\r\n return [2 /*return*/, undefined];\r\n }\r\n return [2 /*return*/, {\r\n suggestions: words.map(function (word) {\r\n return {\r\n kind: 18 /* Text */,\r\n label: word,\r\n insertText: word,\r\n range: { insert: insert, replace: replace }\r\n };\r\n })\r\n }];\r\n }\r\n });\r\n });\r\n };\r\n return WordBasedCompletionItemProvider;\r\n}());\r\nvar WorkerManager = /** @class */ (function (_super) {\r\n __extends(WorkerManager, _super);\r\n function WorkerManager(modelService) {\r\n var _this = _super.call(this) || this;\r\n _this._modelService = modelService;\r\n _this._editorWorkerClient = null;\r\n _this._lastWorkerUsedTime = (new Date()).getTime();\r\n var stopWorkerInterval = _this._register(new IntervalTimer());\r\n stopWorkerInterval.cancelAndSet(function () { return _this._checkStopIdleWorker(); }, Math.round(STOP_WORKER_DELTA_TIME_MS / 2));\r\n _this._register(_this._modelService.onModelRemoved(function (_) { return _this._checkStopEmptyWorker(); }));\r\n return _this;\r\n }\r\n WorkerManager.prototype.dispose = function () {\r\n if (this._editorWorkerClient) {\r\n this._editorWorkerClient.dispose();\r\n this._editorWorkerClient = null;\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n /**\r\n * Check if the model service has no more models and stop the worker if that is the case.\r\n */\r\n WorkerManager.prototype._checkStopEmptyWorker = function () {\r\n if (!this._editorWorkerClient) {\r\n return;\r\n }\r\n var models = this._modelService.getModels();\r\n if (models.length === 0) {\r\n // There are no more models => nothing possible for me to do\r\n this._editorWorkerClient.dispose();\r\n this._editorWorkerClient = null;\r\n }\r\n };\r\n /**\r\n * Check if the worker has been idle for a while and then stop it.\r\n */\r\n WorkerManager.prototype._checkStopIdleWorker = function () {\r\n if (!this._editorWorkerClient) {\r\n return;\r\n }\r\n var timeSinceLastWorkerUsedTime = (new Date()).getTime() - this._lastWorkerUsedTime;\r\n if (timeSinceLastWorkerUsedTime > STOP_WORKER_DELTA_TIME_MS) {\r\n this._editorWorkerClient.dispose();\r\n this._editorWorkerClient = null;\r\n }\r\n };\r\n WorkerManager.prototype.withWorker = function () {\r\n this._lastWorkerUsedTime = (new Date()).getTime();\r\n if (!this._editorWorkerClient) {\r\n this._editorWorkerClient = new EditorWorkerClient(this._modelService, false, 'editorWorkerService');\r\n }\r\n return Promise.resolve(this._editorWorkerClient);\r\n };\r\n return WorkerManager;\r\n}(Disposable));\r\nvar EditorModelManager = /** @class */ (function (_super) {\r\n __extends(EditorModelManager, _super);\r\n function EditorModelManager(proxy, modelService, keepIdleModels) {\r\n var _this = _super.call(this) || this;\r\n _this._syncedModels = Object.create(null);\r\n _this._syncedModelsLastUsedTime = Object.create(null);\r\n _this._proxy = proxy;\r\n _this._modelService = modelService;\r\n if (!keepIdleModels) {\r\n var timer = new IntervalTimer();\r\n timer.cancelAndSet(function () { return _this._checkStopModelSync(); }, Math.round(STOP_SYNC_MODEL_DELTA_TIME_MS / 2));\r\n _this._register(timer);\r\n }\r\n return _this;\r\n }\r\n EditorModelManager.prototype.dispose = function () {\r\n for (var modelUrl in this._syncedModels) {\r\n dispose(this._syncedModels[modelUrl]);\r\n }\r\n this._syncedModels = Object.create(null);\r\n this._syncedModelsLastUsedTime = Object.create(null);\r\n _super.prototype.dispose.call(this);\r\n };\r\n EditorModelManager.prototype.ensureSyncedResources = function (resources) {\r\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\r\n var resource = resources_1[_i];\r\n var resourceStr = resource.toString();\r\n if (!this._syncedModels[resourceStr]) {\r\n this._beginModelSync(resource);\r\n }\r\n if (this._syncedModels[resourceStr]) {\r\n this._syncedModelsLastUsedTime[resourceStr] = (new Date()).getTime();\r\n }\r\n }\r\n };\r\n EditorModelManager.prototype._checkStopModelSync = function () {\r\n var currentTime = (new Date()).getTime();\r\n var toRemove = [];\r\n for (var modelUrl in this._syncedModelsLastUsedTime) {\r\n var elapsedTime = currentTime - this._syncedModelsLastUsedTime[modelUrl];\r\n if (elapsedTime > STOP_SYNC_MODEL_DELTA_TIME_MS) {\r\n toRemove.push(modelUrl);\r\n }\r\n }\r\n for (var _i = 0, toRemove_1 = toRemove; _i < toRemove_1.length; _i++) {\r\n var e = toRemove_1[_i];\r\n this._stopModelSync(e);\r\n }\r\n };\r\n EditorModelManager.prototype._beginModelSync = function (resource) {\r\n var _this = this;\r\n var model = this._modelService.getModel(resource);\r\n if (!model) {\r\n return;\r\n }\r\n if (model.isTooLargeForSyncing()) {\r\n return;\r\n }\r\n var modelUrl = resource.toString();\r\n this._proxy.acceptNewModel({\r\n url: model.uri.toString(),\r\n lines: model.getLinesContent(),\r\n EOL: model.getEOL(),\r\n versionId: model.getVersionId()\r\n });\r\n var toDispose = new DisposableStore();\r\n toDispose.add(model.onDidChangeContent(function (e) {\r\n _this._proxy.acceptModelChanged(modelUrl.toString(), e);\r\n }));\r\n toDispose.add(model.onWillDispose(function () {\r\n _this._stopModelSync(modelUrl);\r\n }));\r\n toDispose.add(toDisposable(function () {\r\n _this._proxy.acceptRemovedModel(modelUrl);\r\n }));\r\n this._syncedModels[modelUrl] = toDispose;\r\n };\r\n EditorModelManager.prototype._stopModelSync = function (modelUrl) {\r\n var toDispose = this._syncedModels[modelUrl];\r\n delete this._syncedModels[modelUrl];\r\n delete this._syncedModelsLastUsedTime[modelUrl];\r\n dispose(toDispose);\r\n };\r\n return EditorModelManager;\r\n}(Disposable));\r\nvar SynchronousWorkerClient = /** @class */ (function () {\r\n function SynchronousWorkerClient(instance) {\r\n this._instance = instance;\r\n this._proxyObj = Promise.resolve(this._instance);\r\n }\r\n SynchronousWorkerClient.prototype.dispose = function () {\r\n this._instance.dispose();\r\n };\r\n SynchronousWorkerClient.prototype.getProxyObject = function () {\r\n return this._proxyObj;\r\n };\r\n return SynchronousWorkerClient;\r\n}());\r\nvar EditorWorkerHost = /** @class */ (function () {\r\n function EditorWorkerHost(workerClient) {\r\n this._workerClient = workerClient;\r\n }\r\n // foreign host request\r\n EditorWorkerHost.prototype.fhr = function (method, args) {\r\n return this._workerClient.fhr(method, args);\r\n };\r\n return EditorWorkerHost;\r\n}());\r\nexport { EditorWorkerHost };\r\nvar EditorWorkerClient = /** @class */ (function (_super) {\r\n __extends(EditorWorkerClient, _super);\r\n function EditorWorkerClient(modelService, keepIdleModels, label) {\r\n var _this = _super.call(this) || this;\r\n _this._modelService = modelService;\r\n _this._keepIdleModels = keepIdleModels;\r\n _this._workerFactory = new DefaultWorkerFactory(label);\r\n _this._worker = null;\r\n _this._modelManager = null;\r\n return _this;\r\n }\r\n // foreign host request\r\n EditorWorkerClient.prototype.fhr = function (method, args) {\r\n throw new Error(\"Not implemented!\");\r\n };\r\n EditorWorkerClient.prototype._getOrCreateWorker = function () {\r\n if (!this._worker) {\r\n try {\r\n this._worker = this._register(new SimpleWorkerClient(this._workerFactory, 'vs/editor/common/services/editorSimpleWorker', new EditorWorkerHost(this)));\r\n }\r\n catch (err) {\r\n logOnceWebWorkerWarning(err);\r\n this._worker = new SynchronousWorkerClient(new EditorSimpleWorker(new EditorWorkerHost(this), null));\r\n }\r\n }\r\n return this._worker;\r\n };\r\n EditorWorkerClient.prototype._getProxy = function () {\r\n var _this = this;\r\n return this._getOrCreateWorker().getProxyObject().then(undefined, function (err) {\r\n logOnceWebWorkerWarning(err);\r\n _this._worker = new SynchronousWorkerClient(new EditorSimpleWorker(new EditorWorkerHost(_this), null));\r\n return _this._getOrCreateWorker().getProxyObject();\r\n });\r\n };\r\n EditorWorkerClient.prototype._getOrCreateModelManager = function (proxy) {\r\n if (!this._modelManager) {\r\n this._modelManager = this._register(new EditorModelManager(proxy, this._modelService, this._keepIdleModels));\r\n }\r\n return this._modelManager;\r\n };\r\n EditorWorkerClient.prototype._withSyncedResources = function (resources) {\r\n var _this = this;\r\n return this._getProxy().then(function (proxy) {\r\n _this._getOrCreateModelManager(proxy).ensureSyncedResources(resources);\r\n return proxy;\r\n });\r\n };\r\n EditorWorkerClient.prototype.computeDiff = function (original, modified, ignoreTrimWhitespace, maxComputationTime) {\r\n return this._withSyncedResources([original, modified]).then(function (proxy) {\r\n return proxy.computeDiff(original.toString(), modified.toString(), ignoreTrimWhitespace, maxComputationTime);\r\n });\r\n };\r\n EditorWorkerClient.prototype.computeMoreMinimalEdits = function (resource, edits) {\r\n return this._withSyncedResources([resource]).then(function (proxy) {\r\n return proxy.computeMoreMinimalEdits(resource.toString(), edits);\r\n });\r\n };\r\n EditorWorkerClient.prototype.computeLinks = function (resource) {\r\n return this._withSyncedResources([resource]).then(function (proxy) {\r\n return proxy.computeLinks(resource.toString());\r\n });\r\n };\r\n EditorWorkerClient.prototype.textualSuggest = function (resource, position) {\r\n var _this = this;\r\n return this._withSyncedResources([resource]).then(function (proxy) {\r\n var model = _this._modelService.getModel(resource);\r\n if (!model) {\r\n return null;\r\n }\r\n var wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\r\n var wordDef = wordDefRegExp.source;\r\n var wordDefFlags = regExpFlags(wordDefRegExp);\r\n return proxy.textualSuggest(resource.toString(), position, wordDef, wordDefFlags);\r\n });\r\n };\r\n EditorWorkerClient.prototype.computeWordRanges = function (resource, range) {\r\n var _this = this;\r\n return this._withSyncedResources([resource]).then(function (proxy) {\r\n var model = _this._modelService.getModel(resource);\r\n if (!model) {\r\n return Promise.resolve(null);\r\n }\r\n var wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\r\n var wordDef = wordDefRegExp.source;\r\n var wordDefFlags = regExpFlags(wordDefRegExp);\r\n return proxy.computeWordRanges(resource.toString(), range, wordDef, wordDefFlags);\r\n });\r\n };\r\n EditorWorkerClient.prototype.navigateValueSet = function (resource, range, up) {\r\n var _this = this;\r\n return this._withSyncedResources([resource]).then(function (proxy) {\r\n var model = _this._modelService.getModel(resource);\r\n if (!model) {\r\n return null;\r\n }\r\n var wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\r\n var wordDef = wordDefRegExp.source;\r\n var wordDefFlags = regExpFlags(wordDefRegExp);\r\n return proxy.navigateValueSet(resource.toString(), range, up, wordDef, wordDefFlags);\r\n });\r\n };\r\n return EditorWorkerClient;\r\n}(Disposable));\r\nexport { EditorWorkerClient };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { EditorWorkerClient } from './editorWorkerServiceImpl.js';\r\nimport * as types from '../../../base/common/types.js';\r\n/**\r\n * Create a new web worker that has model syncing capabilities built in.\r\n * Specify an AMD module to load that will `create` an object that will be proxied.\r\n */\r\nexport function createWebWorker(modelService, opts) {\r\n return new MonacoWebWorkerImpl(modelService, opts);\r\n}\r\nvar MonacoWebWorkerImpl = /** @class */ (function (_super) {\r\n __extends(MonacoWebWorkerImpl, _super);\r\n function MonacoWebWorkerImpl(modelService, opts) {\r\n var _this = _super.call(this, modelService, opts.keepIdleModels || false, opts.label) || this;\r\n _this._foreignModuleId = opts.moduleId;\r\n _this._foreignModuleCreateData = opts.createData || null;\r\n _this._foreignModuleHost = opts.host || null;\r\n _this._foreignProxy = null;\r\n return _this;\r\n }\r\n // foreign host request\r\n MonacoWebWorkerImpl.prototype.fhr = function (method, args) {\r\n if (!this._foreignModuleHost || typeof this._foreignModuleHost[method] !== 'function') {\r\n return Promise.reject(new Error('Missing method ' + method + ' or missing main thread foreign host.'));\r\n }\r\n try {\r\n return Promise.resolve(this._foreignModuleHost[method].apply(this._foreignModuleHost, args));\r\n }\r\n catch (e) {\r\n return Promise.reject(e);\r\n }\r\n };\r\n MonacoWebWorkerImpl.prototype._getForeignProxy = function () {\r\n var _this = this;\r\n if (!this._foreignProxy) {\r\n this._foreignProxy = this._getProxy().then(function (proxy) {\r\n var foreignHostMethods = _this._foreignModuleHost ? types.getAllMethodNames(_this._foreignModuleHost) : [];\r\n return proxy.loadForeignModule(_this._foreignModuleId, _this._foreignModuleCreateData, foreignHostMethods).then(function (foreignMethods) {\r\n _this._foreignModuleCreateData = null;\r\n var proxyMethodRequest = function (method, args) {\r\n return proxy.fmr(method, args);\r\n };\r\n var createProxyMethod = function (method, proxyMethodRequest) {\r\n return function () {\r\n var args = Array.prototype.slice.call(arguments, 0);\r\n return proxyMethodRequest(method, args);\r\n };\r\n };\r\n var foreignProxy = {};\r\n for (var _i = 0, foreignMethods_1 = foreignMethods; _i < foreignMethods_1.length; _i++) {\r\n var foreignMethod = foreignMethods_1[_i];\r\n foreignProxy[foreignMethod] = createProxyMethod(foreignMethod, proxyMethodRequest);\r\n }\r\n return foreignProxy;\r\n });\r\n });\r\n }\r\n return this._foreignProxy;\r\n };\r\n MonacoWebWorkerImpl.prototype.getProxy = function () {\r\n return this._getForeignProxy();\r\n };\r\n MonacoWebWorkerImpl.prototype.withSyncedResources = function (resources) {\r\n var _this = this;\r\n return this._withSyncedResources(resources).then(function (_) { return _this.getProxy(); });\r\n };\r\n return MonacoWebWorkerImpl;\r\n}(EditorWorkerClient));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nexport var createStringBuilder;\r\nif (typeof TextDecoder !== 'undefined') {\r\n createStringBuilder = function (capacity) { return new StringBuilder(capacity); };\r\n}\r\nelse {\r\n createStringBuilder = function (capacity) { return new CompatStringBuilder(); };\r\n}\r\nvar StringBuilder = /** @class */ (function () {\r\n function StringBuilder(capacity) {\r\n this._decoder = new TextDecoder('UTF-16LE');\r\n this._capacity = capacity | 0;\r\n this._buffer = new Uint16Array(this._capacity);\r\n this._completedStrings = null;\r\n this._bufferLength = 0;\r\n }\r\n StringBuilder.prototype.reset = function () {\r\n this._completedStrings = null;\r\n this._bufferLength = 0;\r\n };\r\n StringBuilder.prototype.build = function () {\r\n if (this._completedStrings !== null) {\r\n this._flushBuffer();\r\n return this._completedStrings.join('');\r\n }\r\n return this._buildBuffer();\r\n };\r\n StringBuilder.prototype._buildBuffer = function () {\r\n if (this._bufferLength === 0) {\r\n return '';\r\n }\r\n var view = new Uint16Array(this._buffer.buffer, 0, this._bufferLength);\r\n return this._decoder.decode(view);\r\n };\r\n StringBuilder.prototype._flushBuffer = function () {\r\n var bufferString = this._buildBuffer();\r\n this._bufferLength = 0;\r\n if (this._completedStrings === null) {\r\n this._completedStrings = [bufferString];\r\n }\r\n else {\r\n this._completedStrings[this._completedStrings.length] = bufferString;\r\n }\r\n };\r\n StringBuilder.prototype.write1 = function (charCode) {\r\n var remainingSpace = this._capacity - this._bufferLength;\r\n if (remainingSpace <= 1) {\r\n if (remainingSpace === 0 || strings.isHighSurrogate(charCode)) {\r\n this._flushBuffer();\r\n }\r\n }\r\n this._buffer[this._bufferLength++] = charCode;\r\n };\r\n StringBuilder.prototype.appendASCII = function (charCode) {\r\n if (this._bufferLength === this._capacity) {\r\n // buffer is full\r\n this._flushBuffer();\r\n }\r\n this._buffer[this._bufferLength++] = charCode;\r\n };\r\n StringBuilder.prototype.appendASCIIString = function (str) {\r\n var strLen = str.length;\r\n if (this._bufferLength + strLen >= this._capacity) {\r\n // This string does not fit in the remaining buffer space\r\n this._flushBuffer();\r\n this._completedStrings[this._completedStrings.length] = str;\r\n return;\r\n }\r\n for (var i = 0; i < strLen; i++) {\r\n this._buffer[this._bufferLength++] = str.charCodeAt(i);\r\n }\r\n };\r\n return StringBuilder;\r\n}());\r\nvar CompatStringBuilder = /** @class */ (function () {\r\n function CompatStringBuilder() {\r\n this._pieces = [];\r\n this._piecesLen = 0;\r\n }\r\n CompatStringBuilder.prototype.reset = function () {\r\n this._pieces = [];\r\n this._piecesLen = 0;\r\n };\r\n CompatStringBuilder.prototype.build = function () {\r\n return this._pieces.join('');\r\n };\r\n CompatStringBuilder.prototype.write1 = function (charCode) {\r\n this._pieces[this._piecesLen++] = String.fromCharCode(charCode);\r\n };\r\n CompatStringBuilder.prototype.appendASCII = function (charCode) {\r\n this._pieces[this._piecesLen++] = String.fromCharCode(charCode);\r\n };\r\n CompatStringBuilder.prototype.appendASCIIString = function (str) {\r\n this._pieces[this._piecesLen++] = str;\r\n };\r\n return CompatStringBuilder;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { TokenMetadata } from '../modes.js';\r\nvar LineTokens = /** @class */ (function () {\r\n function LineTokens(tokens, text) {\r\n this._tokens = tokens;\r\n this._tokensCount = (this._tokens.length >>> 1);\r\n this._text = text;\r\n }\r\n LineTokens.prototype.equals = function (other) {\r\n if (other instanceof LineTokens) {\r\n return this.slicedEquals(other, 0, this._tokensCount);\r\n }\r\n return false;\r\n };\r\n LineTokens.prototype.slicedEquals = function (other, sliceFromTokenIndex, sliceTokenCount) {\r\n if (this._text !== other._text) {\r\n return false;\r\n }\r\n if (this._tokensCount !== other._tokensCount) {\r\n return false;\r\n }\r\n var from = (sliceFromTokenIndex << 1);\r\n var to = from + (sliceTokenCount << 1);\r\n for (var i = from; i < to; i++) {\r\n if (this._tokens[i] !== other._tokens[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n LineTokens.prototype.getLineContent = function () {\r\n return this._text;\r\n };\r\n LineTokens.prototype.getCount = function () {\r\n return this._tokensCount;\r\n };\r\n LineTokens.prototype.getStartOffset = function (tokenIndex) {\r\n if (tokenIndex > 0) {\r\n return this._tokens[(tokenIndex - 1) << 1];\r\n }\r\n return 0;\r\n };\r\n LineTokens.prototype.getMetadata = function (tokenIndex) {\r\n var metadata = this._tokens[(tokenIndex << 1) + 1];\r\n return metadata;\r\n };\r\n LineTokens.prototype.getLanguageId = function (tokenIndex) {\r\n var metadata = this._tokens[(tokenIndex << 1) + 1];\r\n return TokenMetadata.getLanguageId(metadata);\r\n };\r\n LineTokens.prototype.getStandardTokenType = function (tokenIndex) {\r\n var metadata = this._tokens[(tokenIndex << 1) + 1];\r\n return TokenMetadata.getTokenType(metadata);\r\n };\r\n LineTokens.prototype.getForeground = function (tokenIndex) {\r\n var metadata = this._tokens[(tokenIndex << 1) + 1];\r\n return TokenMetadata.getForeground(metadata);\r\n };\r\n LineTokens.prototype.getClassName = function (tokenIndex) {\r\n var metadata = this._tokens[(tokenIndex << 1) + 1];\r\n return TokenMetadata.getClassNameFromMetadata(metadata);\r\n };\r\n LineTokens.prototype.getInlineStyle = function (tokenIndex, colorMap) {\r\n var metadata = this._tokens[(tokenIndex << 1) + 1];\r\n return TokenMetadata.getInlineStyleFromMetadata(metadata, colorMap);\r\n };\r\n LineTokens.prototype.getEndOffset = function (tokenIndex) {\r\n return this._tokens[tokenIndex << 1];\r\n };\r\n /**\r\n * Find the token containing offset `offset`.\r\n * @param offset The search offset\r\n * @return The index of the token containing the offset.\r\n */\r\n LineTokens.prototype.findTokenIndexAtOffset = function (offset) {\r\n return LineTokens.findIndexInTokensArray(this._tokens, offset);\r\n };\r\n LineTokens.prototype.inflate = function () {\r\n return this;\r\n };\r\n LineTokens.prototype.sliceAndInflate = function (startOffset, endOffset, deltaOffset) {\r\n return new SlicedLineTokens(this, startOffset, endOffset, deltaOffset);\r\n };\r\n LineTokens.convertToEndOffset = function (tokens, lineTextLength) {\r\n var tokenCount = (tokens.length >>> 1);\r\n var lastTokenIndex = tokenCount - 1;\r\n for (var tokenIndex = 0; tokenIndex < lastTokenIndex; tokenIndex++) {\r\n tokens[tokenIndex << 1] = tokens[(tokenIndex + 1) << 1];\r\n }\r\n tokens[lastTokenIndex << 1] = lineTextLength;\r\n };\r\n LineTokens.findIndexInTokensArray = function (tokens, desiredIndex) {\r\n if (tokens.length <= 2) {\r\n return 0;\r\n }\r\n var low = 0;\r\n var high = (tokens.length >>> 1) - 1;\r\n while (low < high) {\r\n var mid = low + Math.floor((high - low) / 2);\r\n var endOffset = tokens[(mid << 1)];\r\n if (endOffset === desiredIndex) {\r\n return mid + 1;\r\n }\r\n else if (endOffset < desiredIndex) {\r\n low = mid + 1;\r\n }\r\n else if (endOffset > desiredIndex) {\r\n high = mid;\r\n }\r\n }\r\n return low;\r\n };\r\n return LineTokens;\r\n}());\r\nexport { LineTokens };\r\nvar SlicedLineTokens = /** @class */ (function () {\r\n function SlicedLineTokens(source, startOffset, endOffset, deltaOffset) {\r\n this._source = source;\r\n this._startOffset = startOffset;\r\n this._endOffset = endOffset;\r\n this._deltaOffset = deltaOffset;\r\n this._firstTokenIndex = source.findTokenIndexAtOffset(startOffset);\r\n this._tokensCount = 0;\r\n for (var i = this._firstTokenIndex, len = source.getCount(); i < len; i++) {\r\n var tokenStartOffset = source.getStartOffset(i);\r\n if (tokenStartOffset >= endOffset) {\r\n break;\r\n }\r\n this._tokensCount++;\r\n }\r\n }\r\n SlicedLineTokens.prototype.equals = function (other) {\r\n if (other instanceof SlicedLineTokens) {\r\n return (this._startOffset === other._startOffset\r\n && this._endOffset === other._endOffset\r\n && this._deltaOffset === other._deltaOffset\r\n && this._source.slicedEquals(other._source, this._firstTokenIndex, this._tokensCount));\r\n }\r\n return false;\r\n };\r\n SlicedLineTokens.prototype.getCount = function () {\r\n return this._tokensCount;\r\n };\r\n SlicedLineTokens.prototype.getForeground = function (tokenIndex) {\r\n return this._source.getForeground(this._firstTokenIndex + tokenIndex);\r\n };\r\n SlicedLineTokens.prototype.getEndOffset = function (tokenIndex) {\r\n var tokenEndOffset = this._source.getEndOffset(this._firstTokenIndex + tokenIndex);\r\n return Math.min(this._endOffset, tokenEndOffset) - this._startOffset + this._deltaOffset;\r\n };\r\n SlicedLineTokens.prototype.getClassName = function (tokenIndex) {\r\n return this._source.getClassName(this._firstTokenIndex + tokenIndex);\r\n };\r\n SlicedLineTokens.prototype.getInlineStyle = function (tokenIndex, colorMap) {\r\n return this._source.getInlineStyle(this._firstTokenIndex + tokenIndex, colorMap);\r\n };\r\n SlicedLineTokens.prototype.findTokenIndexAtOffset = function (offset) {\r\n return this._source.findTokenIndexAtOffset(offset + this._startOffset - this._deltaOffset) - this._firstTokenIndex;\r\n };\r\n return SlicedLineTokens;\r\n}());\r\nexport { SlicedLineTokens };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nvar LineDecoration = /** @class */ (function () {\r\n function LineDecoration(startColumn, endColumn, className, type) {\r\n this.startColumn = startColumn;\r\n this.endColumn = endColumn;\r\n this.className = className;\r\n this.type = type;\r\n }\r\n LineDecoration._equals = function (a, b) {\r\n return (a.startColumn === b.startColumn\r\n && a.endColumn === b.endColumn\r\n && a.className === b.className\r\n && a.type === b.type);\r\n };\r\n LineDecoration.equalsArr = function (a, b) {\r\n var aLen = a.length;\r\n var bLen = b.length;\r\n if (aLen !== bLen) {\r\n return false;\r\n }\r\n for (var i = 0; i < aLen; i++) {\r\n if (!LineDecoration._equals(a[i], b[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n LineDecoration.filter = function (lineDecorations, lineNumber, minLineColumn, maxLineColumn) {\r\n if (lineDecorations.length === 0) {\r\n return [];\r\n }\r\n var result = [], resultLen = 0;\r\n for (var i = 0, len = lineDecorations.length; i < len; i++) {\r\n var d = lineDecorations[i];\r\n var range = d.range;\r\n if (range.endLineNumber < lineNumber || range.startLineNumber > lineNumber) {\r\n // Ignore decorations that sit outside this line\r\n continue;\r\n }\r\n if (range.isEmpty() && (d.type === 0 /* Regular */ || d.type === 3 /* RegularAffectingLetterSpacing */)) {\r\n // Ignore empty range decorations\r\n continue;\r\n }\r\n var startColumn = (range.startLineNumber === lineNumber ? range.startColumn : minLineColumn);\r\n var endColumn = (range.endLineNumber === lineNumber ? range.endColumn : maxLineColumn);\r\n result[resultLen++] = new LineDecoration(startColumn, endColumn, d.inlineClassName, d.type);\r\n }\r\n return result;\r\n };\r\n LineDecoration.compare = function (a, b) {\r\n if (a.startColumn === b.startColumn) {\r\n if (a.endColumn === b.endColumn) {\r\n if (a.className < b.className) {\r\n return -1;\r\n }\r\n if (a.className > b.className) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n return a.endColumn - b.endColumn;\r\n }\r\n return a.startColumn - b.startColumn;\r\n };\r\n return LineDecoration;\r\n}());\r\nexport { LineDecoration };\r\nvar DecorationSegment = /** @class */ (function () {\r\n function DecorationSegment(startOffset, endOffset, className) {\r\n this.startOffset = startOffset;\r\n this.endOffset = endOffset;\r\n this.className = className;\r\n }\r\n return DecorationSegment;\r\n}());\r\nexport { DecorationSegment };\r\nvar Stack = /** @class */ (function () {\r\n function Stack() {\r\n this.stopOffsets = [];\r\n this.classNames = [];\r\n this.count = 0;\r\n }\r\n Stack.prototype.consumeLowerThan = function (maxStopOffset, nextStartOffset, result) {\r\n while (this.count > 0 && this.stopOffsets[0] < maxStopOffset) {\r\n var i = 0;\r\n // Take all equal stopping offsets\r\n while (i + 1 < this.count && this.stopOffsets[i] === this.stopOffsets[i + 1]) {\r\n i++;\r\n }\r\n // Basically we are consuming the first i + 1 elements of the stack\r\n result.push(new DecorationSegment(nextStartOffset, this.stopOffsets[i], this.classNames.join(' ')));\r\n nextStartOffset = this.stopOffsets[i] + 1;\r\n // Consume them\r\n this.stopOffsets.splice(0, i + 1);\r\n this.classNames.splice(0, i + 1);\r\n this.count -= (i + 1);\r\n }\r\n if (this.count > 0 && nextStartOffset < maxStopOffset) {\r\n result.push(new DecorationSegment(nextStartOffset, maxStopOffset - 1, this.classNames.join(' ')));\r\n nextStartOffset = maxStopOffset;\r\n }\r\n return nextStartOffset;\r\n };\r\n Stack.prototype.insert = function (stopOffset, className) {\r\n if (this.count === 0 || this.stopOffsets[this.count - 1] <= stopOffset) {\r\n // Insert at the end\r\n this.stopOffsets.push(stopOffset);\r\n this.classNames.push(className);\r\n }\r\n else {\r\n // Find the insertion position for `stopOffset`\r\n for (var i = 0; i < this.count; i++) {\r\n if (this.stopOffsets[i] >= stopOffset) {\r\n this.stopOffsets.splice(i, 0, stopOffset);\r\n this.classNames.splice(i, 0, className);\r\n break;\r\n }\r\n }\r\n }\r\n this.count++;\r\n return;\r\n };\r\n return Stack;\r\n}());\r\nvar LineDecorationsNormalizer = /** @class */ (function () {\r\n function LineDecorationsNormalizer() {\r\n }\r\n /**\r\n * Normalize line decorations. Overlapping decorations will generate multiple segments\r\n */\r\n LineDecorationsNormalizer.normalize = function (lineContent, lineDecorations) {\r\n if (lineDecorations.length === 0) {\r\n return [];\r\n }\r\n var result = [];\r\n var stack = new Stack();\r\n var nextStartOffset = 0;\r\n for (var i = 0, len = lineDecorations.length; i < len; i++) {\r\n var d = lineDecorations[i];\r\n var startColumn = d.startColumn;\r\n var endColumn = d.endColumn;\r\n var className = d.className;\r\n // If the position would end up in the middle of a high-low surrogate pair, we move it to before the pair\r\n if (startColumn > 1) {\r\n var charCodeBefore = lineContent.charCodeAt(startColumn - 2);\r\n if (strings.isHighSurrogate(charCodeBefore)) {\r\n startColumn--;\r\n }\r\n }\r\n if (endColumn > 1) {\r\n var charCodeBefore = lineContent.charCodeAt(endColumn - 2);\r\n if (strings.isHighSurrogate(charCodeBefore)) {\r\n endColumn--;\r\n }\r\n }\r\n var currentStartOffset = startColumn - 1;\r\n var currentEndOffset = endColumn - 2;\r\n nextStartOffset = stack.consumeLowerThan(currentStartOffset, nextStartOffset, result);\r\n if (stack.count === 0) {\r\n nextStartOffset = currentStartOffset;\r\n }\r\n stack.insert(currentEndOffset, className);\r\n }\r\n stack.consumeLowerThan(1073741824 /* MAX_SAFE_SMALL_INTEGER */, nextStartOffset, result);\r\n return result;\r\n };\r\n return LineDecorationsNormalizer;\r\n}());\r\nexport { LineDecorationsNormalizer };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { createStringBuilder } from '../core/stringBuilder.js';\r\nimport { LineDecoration, LineDecorationsNormalizer } from './lineDecorations.js';\r\nvar LinePart = /** @class */ (function () {\r\n function LinePart(endIndex, type) {\r\n this.endIndex = endIndex;\r\n this.type = type;\r\n }\r\n return LinePart;\r\n}());\r\nvar LineRange = /** @class */ (function () {\r\n function LineRange(startIndex, endIndex) {\r\n this.startOffset = startIndex;\r\n this.endOffset = endIndex;\r\n }\r\n LineRange.prototype.equals = function (otherLineRange) {\r\n return this.startOffset === otherLineRange.startOffset\r\n && this.endOffset === otherLineRange.endOffset;\r\n };\r\n return LineRange;\r\n}());\r\nexport { LineRange };\r\nvar RenderLineInput = /** @class */ (function () {\r\n function RenderLineInput(useMonospaceOptimizations, canUseHalfwidthRightwardsArrow, lineContent, continuesWithWrappedLine, isBasicASCII, containsRTL, fauxIndentLength, lineTokens, lineDecorations, tabSize, spaceWidth, stopRenderingLineAfter, renderWhitespace, renderControlCharacters, fontLigatures, selectionsOnLine) {\r\n this.useMonospaceOptimizations = useMonospaceOptimizations;\r\n this.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\r\n this.lineContent = lineContent;\r\n this.continuesWithWrappedLine = continuesWithWrappedLine;\r\n this.isBasicASCII = isBasicASCII;\r\n this.containsRTL = containsRTL;\r\n this.fauxIndentLength = fauxIndentLength;\r\n this.lineTokens = lineTokens;\r\n this.lineDecorations = lineDecorations;\r\n this.tabSize = tabSize;\r\n this.spaceWidth = spaceWidth;\r\n this.stopRenderingLineAfter = stopRenderingLineAfter;\r\n this.renderWhitespace = (renderWhitespace === 'all'\r\n ? 3 /* All */\r\n : renderWhitespace === 'boundary'\r\n ? 1 /* Boundary */\r\n : renderWhitespace === 'selection'\r\n ? 2 /* Selection */\r\n : 0 /* None */);\r\n this.renderControlCharacters = renderControlCharacters;\r\n this.fontLigatures = fontLigatures;\r\n this.selectionsOnLine = selectionsOnLine && selectionsOnLine.sort(function (a, b) { return a.startOffset < b.startOffset ? -1 : 1; });\r\n }\r\n RenderLineInput.prototype.sameSelection = function (otherSelections) {\r\n if (this.selectionsOnLine === null) {\r\n return otherSelections === null;\r\n }\r\n if (otherSelections === null) {\r\n return false;\r\n }\r\n if (otherSelections.length !== this.selectionsOnLine.length) {\r\n return false;\r\n }\r\n for (var i = 0; i < this.selectionsOnLine.length; i++) {\r\n if (!this.selectionsOnLine[i].equals(otherSelections[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n RenderLineInput.prototype.equals = function (other) {\r\n return (this.useMonospaceOptimizations === other.useMonospaceOptimizations\r\n && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\r\n && this.lineContent === other.lineContent\r\n && this.continuesWithWrappedLine === other.continuesWithWrappedLine\r\n && this.isBasicASCII === other.isBasicASCII\r\n && this.containsRTL === other.containsRTL\r\n && this.fauxIndentLength === other.fauxIndentLength\r\n && this.tabSize === other.tabSize\r\n && this.spaceWidth === other.spaceWidth\r\n && this.stopRenderingLineAfter === other.stopRenderingLineAfter\r\n && this.renderWhitespace === other.renderWhitespace\r\n && this.renderControlCharacters === other.renderControlCharacters\r\n && this.fontLigatures === other.fontLigatures\r\n && LineDecoration.equalsArr(this.lineDecorations, other.lineDecorations)\r\n && this.lineTokens.equals(other.lineTokens)\r\n && this.sameSelection(other.selectionsOnLine));\r\n };\r\n return RenderLineInput;\r\n}());\r\nexport { RenderLineInput };\r\n/**\r\n * Provides a both direction mapping between a line's character and its rendered position.\r\n */\r\nvar CharacterMapping = /** @class */ (function () {\r\n function CharacterMapping(length, partCount) {\r\n this.length = length;\r\n this._data = new Uint32Array(this.length);\r\n this._absoluteOffsets = new Uint32Array(this.length);\r\n }\r\n CharacterMapping.getPartIndex = function (partData) {\r\n return (partData & 4294901760 /* PART_INDEX_MASK */) >>> 16 /* PART_INDEX_OFFSET */;\r\n };\r\n CharacterMapping.getCharIndex = function (partData) {\r\n return (partData & 65535 /* CHAR_INDEX_MASK */) >>> 0 /* CHAR_INDEX_OFFSET */;\r\n };\r\n CharacterMapping.prototype.setPartData = function (charOffset, partIndex, charIndex, partAbsoluteOffset) {\r\n var partData = ((partIndex << 16 /* PART_INDEX_OFFSET */)\r\n | (charIndex << 0 /* CHAR_INDEX_OFFSET */)) >>> 0;\r\n this._data[charOffset] = partData;\r\n this._absoluteOffsets[charOffset] = partAbsoluteOffset + charIndex;\r\n };\r\n CharacterMapping.prototype.getAbsoluteOffsets = function () {\r\n return this._absoluteOffsets;\r\n };\r\n CharacterMapping.prototype.charOffsetToPartData = function (charOffset) {\r\n if (this.length === 0) {\r\n return 0;\r\n }\r\n if (charOffset < 0) {\r\n return this._data[0];\r\n }\r\n if (charOffset >= this.length) {\r\n return this._data[this.length - 1];\r\n }\r\n return this._data[charOffset];\r\n };\r\n CharacterMapping.prototype.partDataToCharOffset = function (partIndex, partLength, charIndex) {\r\n if (this.length === 0) {\r\n return 0;\r\n }\r\n var searchEntry = ((partIndex << 16 /* PART_INDEX_OFFSET */)\r\n | (charIndex << 0 /* CHAR_INDEX_OFFSET */)) >>> 0;\r\n var min = 0;\r\n var max = this.length - 1;\r\n while (min + 1 < max) {\r\n var mid = ((min + max) >>> 1);\r\n var midEntry = this._data[mid];\r\n if (midEntry === searchEntry) {\r\n return mid;\r\n }\r\n else if (midEntry > searchEntry) {\r\n max = mid;\r\n }\r\n else {\r\n min = mid;\r\n }\r\n }\r\n if (min === max) {\r\n return min;\r\n }\r\n var minEntry = this._data[min];\r\n var maxEntry = this._data[max];\r\n if (minEntry === searchEntry) {\r\n return min;\r\n }\r\n if (maxEntry === searchEntry) {\r\n return max;\r\n }\r\n var minPartIndex = CharacterMapping.getPartIndex(minEntry);\r\n var minCharIndex = CharacterMapping.getCharIndex(minEntry);\r\n var maxPartIndex = CharacterMapping.getPartIndex(maxEntry);\r\n var maxCharIndex;\r\n if (minPartIndex !== maxPartIndex) {\r\n // sitting between parts\r\n maxCharIndex = partLength;\r\n }\r\n else {\r\n maxCharIndex = CharacterMapping.getCharIndex(maxEntry);\r\n }\r\n var minEntryDistance = charIndex - minCharIndex;\r\n var maxEntryDistance = maxCharIndex - charIndex;\r\n if (minEntryDistance <= maxEntryDistance) {\r\n return min;\r\n }\r\n return max;\r\n };\r\n return CharacterMapping;\r\n}());\r\nexport { CharacterMapping };\r\nvar RenderLineOutput = /** @class */ (function () {\r\n function RenderLineOutput(characterMapping, containsRTL, containsForeignElements) {\r\n this.characterMapping = characterMapping;\r\n this.containsRTL = containsRTL;\r\n this.containsForeignElements = containsForeignElements;\r\n }\r\n return RenderLineOutput;\r\n}());\r\nexport { RenderLineOutput };\r\nexport function renderViewLine(input, sb) {\r\n if (input.lineContent.length === 0) {\r\n var containsForeignElements = 0 /* None */;\r\n // This is basically for IE's hit test to work\r\n var content = '\\u00a0';\r\n if (input.lineDecorations.length > 0) {\r\n // This line is empty, but it contains inline decorations\r\n var classNames = [];\r\n for (var i = 0, len = input.lineDecorations.length; i < len; i++) {\r\n var lineDecoration = input.lineDecorations[i];\r\n if (lineDecoration.type === 1 /* Before */) {\r\n classNames.push(input.lineDecorations[i].className);\r\n containsForeignElements |= 1 /* Before */;\r\n }\r\n if (lineDecoration.type === 2 /* After */) {\r\n classNames.push(input.lineDecorations[i].className);\r\n containsForeignElements |= 2 /* After */;\r\n }\r\n }\r\n if (containsForeignElements !== 0 /* None */) {\r\n content = \"\";\r\n }\r\n }\r\n sb.appendASCIIString(content);\r\n return new RenderLineOutput(new CharacterMapping(0, 0), false, containsForeignElements);\r\n }\r\n return _renderLine(resolveRenderLineInput(input), sb);\r\n}\r\nvar RenderLineOutput2 = /** @class */ (function () {\r\n function RenderLineOutput2(characterMapping, html, containsRTL, containsForeignElements) {\r\n this.characterMapping = characterMapping;\r\n this.html = html;\r\n this.containsRTL = containsRTL;\r\n this.containsForeignElements = containsForeignElements;\r\n }\r\n return RenderLineOutput2;\r\n}());\r\nexport { RenderLineOutput2 };\r\nexport function renderViewLine2(input) {\r\n var sb = createStringBuilder(10000);\r\n var out = renderViewLine(input, sb);\r\n return new RenderLineOutput2(out.characterMapping, sb.build(), out.containsRTL, out.containsForeignElements);\r\n}\r\nvar ResolvedRenderLineInput = /** @class */ (function () {\r\n function ResolvedRenderLineInput(fontIsMonospace, canUseHalfwidthRightwardsArrow, lineContent, len, isOverflowing, parts, containsForeignElements, tabSize, containsRTL, spaceWidth, renderWhitespace, renderControlCharacters) {\r\n this.fontIsMonospace = fontIsMonospace;\r\n this.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\r\n this.lineContent = lineContent;\r\n this.len = len;\r\n this.isOverflowing = isOverflowing;\r\n this.parts = parts;\r\n this.containsForeignElements = containsForeignElements;\r\n this.tabSize = tabSize;\r\n this.containsRTL = containsRTL;\r\n this.spaceWidth = spaceWidth;\r\n this.renderWhitespace = renderWhitespace;\r\n this.renderControlCharacters = renderControlCharacters;\r\n //\r\n }\r\n return ResolvedRenderLineInput;\r\n}());\r\nfunction resolveRenderLineInput(input) {\r\n var useMonospaceOptimizations = input.useMonospaceOptimizations;\r\n var lineContent = input.lineContent;\r\n var isOverflowing;\r\n var len;\r\n if (input.stopRenderingLineAfter !== -1 && input.stopRenderingLineAfter < lineContent.length) {\r\n isOverflowing = true;\r\n len = input.stopRenderingLineAfter;\r\n }\r\n else {\r\n isOverflowing = false;\r\n len = lineContent.length;\r\n }\r\n var tokens = transformAndRemoveOverflowing(input.lineTokens, input.fauxIndentLength, len);\r\n if (input.renderWhitespace === 3 /* All */ || input.renderWhitespace === 1 /* Boundary */ || (input.renderWhitespace === 2 /* Selection */ && !!input.selectionsOnLine)) {\r\n tokens = _applyRenderWhitespace(lineContent, len, input.continuesWithWrappedLine, tokens, input.fauxIndentLength, input.tabSize, useMonospaceOptimizations, input.selectionsOnLine, input.renderWhitespace === 1 /* Boundary */);\r\n }\r\n var containsForeignElements = 0 /* None */;\r\n if (input.lineDecorations.length > 0) {\r\n for (var i = 0, len_1 = input.lineDecorations.length; i < len_1; i++) {\r\n var lineDecoration = input.lineDecorations[i];\r\n if (lineDecoration.type === 3 /* RegularAffectingLetterSpacing */) {\r\n // Pretend there are foreign elements... although not 100% accurate.\r\n containsForeignElements |= 1 /* Before */;\r\n }\r\n else if (lineDecoration.type === 1 /* Before */) {\r\n containsForeignElements |= 1 /* Before */;\r\n }\r\n else if (lineDecoration.type === 2 /* After */) {\r\n containsForeignElements |= 2 /* After */;\r\n }\r\n }\r\n tokens = _applyInlineDecorations(lineContent, len, tokens, input.lineDecorations);\r\n }\r\n if (!input.containsRTL) {\r\n // We can never split RTL text, as it ruins the rendering\r\n tokens = splitLargeTokens(lineContent, tokens, !input.isBasicASCII || input.fontLigatures);\r\n }\r\n return new ResolvedRenderLineInput(useMonospaceOptimizations, input.canUseHalfwidthRightwardsArrow, lineContent, len, isOverflowing, tokens, containsForeignElements, input.tabSize, input.containsRTL, input.spaceWidth, input.renderWhitespace, input.renderControlCharacters);\r\n}\r\n/**\r\n * In the rendering phase, characters are always looped until token.endIndex.\r\n * Ensure that all tokens end before `len` and the last one ends precisely at `len`.\r\n */\r\nfunction transformAndRemoveOverflowing(tokens, fauxIndentLength, len) {\r\n var result = [], resultLen = 0;\r\n // The faux indent part of the line should have no token type\r\n if (fauxIndentLength > 0) {\r\n result[resultLen++] = new LinePart(fauxIndentLength, '');\r\n }\r\n for (var tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\r\n var endIndex = tokens.getEndOffset(tokenIndex);\r\n if (endIndex <= fauxIndentLength) {\r\n // The faux indent part of the line should have no token type\r\n continue;\r\n }\r\n var type = tokens.getClassName(tokenIndex);\r\n if (endIndex >= len) {\r\n result[resultLen++] = new LinePart(len, type);\r\n break;\r\n }\r\n result[resultLen++] = new LinePart(endIndex, type);\r\n }\r\n return result;\r\n}\r\n/**\r\n * See https://github.com/Microsoft/vscode/issues/6885.\r\n * It appears that having very large spans causes very slow reading of character positions.\r\n * So here we try to avoid that.\r\n */\r\nfunction splitLargeTokens(lineContent, tokens, onlyAtSpaces) {\r\n var lastTokenEndIndex = 0;\r\n var result = [], resultLen = 0;\r\n if (onlyAtSpaces) {\r\n // Split only at spaces => we need to walk each character\r\n for (var i = 0, len = tokens.length; i < len; i++) {\r\n var token = tokens[i];\r\n var tokenEndIndex = token.endIndex;\r\n if (lastTokenEndIndex + 50 /* LongToken */ < tokenEndIndex) {\r\n var tokenType = token.type;\r\n var lastSpaceOffset = -1;\r\n var currTokenStart = lastTokenEndIndex;\r\n for (var j = lastTokenEndIndex; j < tokenEndIndex; j++) {\r\n if (lineContent.charCodeAt(j) === 32 /* Space */) {\r\n lastSpaceOffset = j;\r\n }\r\n if (lastSpaceOffset !== -1 && j - currTokenStart >= 50 /* LongToken */) {\r\n // Split at `lastSpaceOffset` + 1\r\n result[resultLen++] = new LinePart(lastSpaceOffset + 1, tokenType);\r\n currTokenStart = lastSpaceOffset + 1;\r\n lastSpaceOffset = -1;\r\n }\r\n }\r\n if (currTokenStart !== tokenEndIndex) {\r\n result[resultLen++] = new LinePart(tokenEndIndex, tokenType);\r\n }\r\n }\r\n else {\r\n result[resultLen++] = token;\r\n }\r\n lastTokenEndIndex = tokenEndIndex;\r\n }\r\n }\r\n else {\r\n // Split anywhere => we don't need to walk each character\r\n for (var i = 0, len = tokens.length; i < len; i++) {\r\n var token = tokens[i];\r\n var tokenEndIndex = token.endIndex;\r\n var diff = (tokenEndIndex - lastTokenEndIndex);\r\n if (diff > 50 /* LongToken */) {\r\n var tokenType = token.type;\r\n var piecesCount = Math.ceil(diff / 50 /* LongToken */);\r\n for (var j = 1; j < piecesCount; j++) {\r\n var pieceEndIndex = lastTokenEndIndex + (j * 50 /* LongToken */);\r\n result[resultLen++] = new LinePart(pieceEndIndex, tokenType);\r\n }\r\n result[resultLen++] = new LinePart(tokenEndIndex, tokenType);\r\n }\r\n else {\r\n result[resultLen++] = token;\r\n }\r\n lastTokenEndIndex = tokenEndIndex;\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * Whitespace is rendered by \"replacing\" tokens with a special-purpose `vs-whitespace` type that is later recognized in the rendering phase.\r\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  .\r\n * The rendering phase will generate `style=\"width:...\"` for these tokens.\r\n */\r\nfunction _applyRenderWhitespace(lineContent, len, continuesWithWrappedLine, tokens, fauxIndentLength, tabSize, useMonospaceOptimizations, selections, onlyBoundary) {\r\n var result = [], resultLen = 0;\r\n var tokenIndex = 0;\r\n var tokenType = tokens[tokenIndex].type;\r\n var tokenEndIndex = tokens[tokenIndex].endIndex;\r\n var tokensLength = tokens.length;\r\n var firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\r\n var lastNonWhitespaceIndex;\r\n if (firstNonWhitespaceIndex === -1) {\r\n // The entire line is whitespace\r\n firstNonWhitespaceIndex = len;\r\n lastNonWhitespaceIndex = len;\r\n }\r\n else {\r\n lastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\r\n }\r\n var tmpIndent = 0;\r\n for (var charIndex = 0; charIndex < fauxIndentLength; charIndex++) {\r\n var chCode = lineContent.charCodeAt(charIndex);\r\n if (chCode === 9 /* Tab */) {\r\n tmpIndent = tabSize;\r\n }\r\n else if (strings.isFullWidthCharacter(chCode)) {\r\n tmpIndent += 2;\r\n }\r\n else {\r\n tmpIndent++;\r\n }\r\n }\r\n tmpIndent = tmpIndent % tabSize;\r\n var wasInWhitespace = false;\r\n var currentSelectionIndex = 0;\r\n var currentSelection = selections && selections[currentSelectionIndex];\r\n for (var charIndex = fauxIndentLength; charIndex < len; charIndex++) {\r\n var chCode = lineContent.charCodeAt(charIndex);\r\n if (currentSelection && charIndex >= currentSelection.endOffset) {\r\n currentSelectionIndex++;\r\n currentSelection = selections && selections[currentSelectionIndex];\r\n }\r\n var isInWhitespace = void 0;\r\n if (charIndex < firstNonWhitespaceIndex || charIndex > lastNonWhitespaceIndex) {\r\n // in leading or trailing whitespace\r\n isInWhitespace = true;\r\n }\r\n else if (chCode === 9 /* Tab */) {\r\n // a tab character is rendered both in all and boundary cases\r\n isInWhitespace = true;\r\n }\r\n else if (chCode === 32 /* Space */) {\r\n // hit a space character\r\n if (onlyBoundary) {\r\n // rendering only boundary whitespace\r\n if (wasInWhitespace) {\r\n isInWhitespace = true;\r\n }\r\n else {\r\n var nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : 0 /* Null */);\r\n isInWhitespace = (nextChCode === 32 /* Space */ || nextChCode === 9 /* Tab */);\r\n }\r\n }\r\n else {\r\n isInWhitespace = true;\r\n }\r\n }\r\n else {\r\n isInWhitespace = false;\r\n }\r\n // If rendering whitespace on selection, check that the charIndex falls within a selection\r\n if (isInWhitespace && selections) {\r\n isInWhitespace = !!currentSelection && currentSelection.startOffset <= charIndex && currentSelection.endOffset > charIndex;\r\n }\r\n if (wasInWhitespace) {\r\n // was in whitespace token\r\n if (!isInWhitespace || (!useMonospaceOptimizations && tmpIndent >= tabSize)) {\r\n // leaving whitespace token or entering a new indent\r\n result[resultLen++] = new LinePart(charIndex, 'vs-whitespace');\r\n tmpIndent = tmpIndent % tabSize;\r\n }\r\n }\r\n else {\r\n // was in regular token\r\n if (charIndex === tokenEndIndex || (isInWhitespace && charIndex > fauxIndentLength)) {\r\n result[resultLen++] = new LinePart(charIndex, tokenType);\r\n tmpIndent = tmpIndent % tabSize;\r\n }\r\n }\r\n if (chCode === 9 /* Tab */) {\r\n tmpIndent = tabSize;\r\n }\r\n else if (strings.isFullWidthCharacter(chCode)) {\r\n tmpIndent += 2;\r\n }\r\n else {\r\n tmpIndent++;\r\n }\r\n wasInWhitespace = isInWhitespace;\r\n if (charIndex === tokenEndIndex) {\r\n tokenIndex++;\r\n if (tokenIndex < tokensLength) {\r\n tokenType = tokens[tokenIndex].type;\r\n tokenEndIndex = tokens[tokenIndex].endIndex;\r\n }\r\n }\r\n }\r\n var generateWhitespace = false;\r\n if (wasInWhitespace) {\r\n // was in whitespace token\r\n if (continuesWithWrappedLine && onlyBoundary) {\r\n var lastCharCode = (len > 0 ? lineContent.charCodeAt(len - 1) : 0 /* Null */);\r\n var prevCharCode = (len > 1 ? lineContent.charCodeAt(len - 2) : 0 /* Null */);\r\n var isSingleTrailingSpace = (lastCharCode === 32 /* Space */ && (prevCharCode !== 32 /* Space */ && prevCharCode !== 9 /* Tab */));\r\n if (!isSingleTrailingSpace) {\r\n generateWhitespace = true;\r\n }\r\n }\r\n else {\r\n generateWhitespace = true;\r\n }\r\n }\r\n result[resultLen++] = new LinePart(len, generateWhitespace ? 'vs-whitespace' : tokenType);\r\n return result;\r\n}\r\n/**\r\n * Inline decorations are \"merged\" on top of tokens.\r\n * Special care must be taken when multiple inline decorations are at play and they overlap.\r\n */\r\nfunction _applyInlineDecorations(lineContent, len, tokens, _lineDecorations) {\r\n _lineDecorations.sort(LineDecoration.compare);\r\n var lineDecorations = LineDecorationsNormalizer.normalize(lineContent, _lineDecorations);\r\n var lineDecorationsLen = lineDecorations.length;\r\n var lineDecorationIndex = 0;\r\n var result = [], resultLen = 0, lastResultEndIndex = 0;\r\n for (var tokenIndex = 0, len_2 = tokens.length; tokenIndex < len_2; tokenIndex++) {\r\n var token = tokens[tokenIndex];\r\n var tokenEndIndex = token.endIndex;\r\n var tokenType = token.type;\r\n while (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset < tokenEndIndex) {\r\n var lineDecoration = lineDecorations[lineDecorationIndex];\r\n if (lineDecoration.startOffset > lastResultEndIndex) {\r\n lastResultEndIndex = lineDecoration.startOffset;\r\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType);\r\n }\r\n if (lineDecoration.endOffset + 1 <= tokenEndIndex) {\r\n // This line decoration ends before this token ends\r\n lastResultEndIndex = lineDecoration.endOffset + 1;\r\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className);\r\n lineDecorationIndex++;\r\n }\r\n else {\r\n // This line decoration continues on to the next token\r\n lastResultEndIndex = tokenEndIndex;\r\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className);\r\n break;\r\n }\r\n }\r\n if (tokenEndIndex > lastResultEndIndex) {\r\n lastResultEndIndex = tokenEndIndex;\r\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType);\r\n }\r\n }\r\n var lastTokenEndIndex = tokens[tokens.length - 1].endIndex;\r\n if (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\r\n var classNames = [];\r\n while (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\r\n classNames.push(lineDecorations[lineDecorationIndex].className);\r\n lineDecorationIndex++;\r\n }\r\n result[resultLen++] = new LinePart(lastResultEndIndex, classNames.join(' '));\r\n }\r\n return result;\r\n}\r\n/**\r\n * This function is on purpose not split up into multiple functions to allow runtime type inference (i.e. performance reasons).\r\n * Notice how all the needed data is fully resolved and passed in (i.e. no other calls).\r\n */\r\nfunction _renderLine(input, sb) {\r\n var fontIsMonospace = input.fontIsMonospace;\r\n var canUseHalfwidthRightwardsArrow = input.canUseHalfwidthRightwardsArrow;\r\n var containsForeignElements = input.containsForeignElements;\r\n var lineContent = input.lineContent;\r\n var len = input.len;\r\n var isOverflowing = input.isOverflowing;\r\n var parts = input.parts;\r\n var tabSize = input.tabSize;\r\n var containsRTL = input.containsRTL;\r\n var spaceWidth = input.spaceWidth;\r\n var renderWhitespace = input.renderWhitespace;\r\n var renderControlCharacters = input.renderControlCharacters;\r\n var characterMapping = new CharacterMapping(len + 1, parts.length);\r\n var charIndex = 0;\r\n var tabsCharDelta = 0;\r\n var charOffsetInPart = 0;\r\n var prevPartContentCnt = 0;\r\n var partAbsoluteOffset = 0;\r\n sb.appendASCIIString('');\r\n for (var partIndex = 0, tokensLen = parts.length; partIndex < tokensLen; partIndex++) {\r\n partAbsoluteOffset += prevPartContentCnt;\r\n var part = parts[partIndex];\r\n var partEndIndex = part.endIndex;\r\n var partType = part.type;\r\n var partRendersWhitespace = (renderWhitespace !== 0 /* None */ && (partType.indexOf('vs-whitespace') >= 0));\r\n charOffsetInPart = 0;\r\n sb.appendASCIIString(' 0) {\r\n if (!canUseHalfwidthRightwardsArrow || insertSpacesCount > 1) {\r\n sb.write1(0x2192); // RIGHTWARDS ARROW\r\n }\r\n else {\r\n sb.write1(0xFFEB); // HALFWIDTH RIGHTWARDS ARROW\r\n }\r\n insertSpacesCount--;\r\n }\r\n while (insertSpacesCount > 0) {\r\n sb.write1(0xA0); //  \r\n insertSpacesCount--;\r\n }\r\n }\r\n else {\r\n // must be CharCode.Space\r\n sb.write1(0xB7); // ·\r\n }\r\n charOffsetInPart++;\r\n }\r\n prevPartContentCnt = partContentCnt;\r\n }\r\n else {\r\n var partContentCnt = 0;\r\n if (containsRTL) {\r\n sb.appendASCIIString(' dir=\"ltr\"');\r\n }\r\n sb.appendASCII(62 /* GreaterThan */);\r\n for (; charIndex < partEndIndex; charIndex++) {\r\n characterMapping.setPartData(charIndex, partIndex, charOffsetInPart, partAbsoluteOffset);\r\n var charCode = lineContent.charCodeAt(charIndex);\r\n switch (charCode) {\r\n case 9 /* Tab */:\r\n var insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\r\n tabsCharDelta += insertSpacesCount - 1;\r\n charOffsetInPart += insertSpacesCount - 1;\r\n while (insertSpacesCount > 0) {\r\n sb.write1(0xA0); //  \r\n partContentCnt++;\r\n insertSpacesCount--;\r\n }\r\n break;\r\n case 32 /* Space */:\r\n sb.write1(0xA0); //  \r\n partContentCnt++;\r\n break;\r\n case 60 /* LessThan */:\r\n sb.appendASCIIString('<');\r\n partContentCnt++;\r\n break;\r\n case 62 /* GreaterThan */:\r\n sb.appendASCIIString('>');\r\n partContentCnt++;\r\n break;\r\n case 38 /* Ampersand */:\r\n sb.appendASCIIString('&');\r\n partContentCnt++;\r\n break;\r\n case 0 /* Null */:\r\n sb.appendASCIIString('�');\r\n partContentCnt++;\r\n break;\r\n case 65279 /* UTF8_BOM */:\r\n case 8232 /* LINE_SEPARATOR_2028 */:\r\n sb.write1(0xFFFD);\r\n partContentCnt++;\r\n break;\r\n default:\r\n if (strings.isFullWidthCharacter(charCode)) {\r\n tabsCharDelta++;\r\n }\r\n if (renderControlCharacters && charCode < 32) {\r\n sb.write1(9216 + charCode);\r\n partContentCnt++;\r\n }\r\n else {\r\n sb.write1(charCode);\r\n partContentCnt++;\r\n }\r\n }\r\n charOffsetInPart++;\r\n }\r\n prevPartContentCnt = partContentCnt;\r\n }\r\n sb.appendASCIIString('');\r\n }\r\n // When getting client rects for the last character, we will position the\r\n // text range at the end of the span, insteaf of at the beginning of next span\r\n characterMapping.setPartData(len, parts.length - 1, charOffsetInPart, partAbsoluteOffset);\r\n if (isOverflowing) {\r\n sb.appendASCIIString('');\r\n }\r\n sb.appendASCIIString('');\r\n return new RenderLineOutput(characterMapping, containsRTL, containsForeignElements);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nvar Viewport = /** @class */ (function () {\r\n function Viewport(top, left, width, height) {\r\n this.top = top | 0;\r\n this.left = left | 0;\r\n this.width = width | 0;\r\n this.height = height | 0;\r\n }\r\n return Viewport;\r\n}());\r\nexport { Viewport };\r\nvar MinimapLinesRenderingData = /** @class */ (function () {\r\n function MinimapLinesRenderingData(tabSize, data) {\r\n this.tabSize = tabSize;\r\n this.data = data;\r\n }\r\n return MinimapLinesRenderingData;\r\n}());\r\nexport { MinimapLinesRenderingData };\r\nvar ViewLineData = /** @class */ (function () {\r\n function ViewLineData(content, continuesWithWrappedLine, minColumn, maxColumn, tokens) {\r\n this.content = content;\r\n this.continuesWithWrappedLine = continuesWithWrappedLine;\r\n this.minColumn = minColumn;\r\n this.maxColumn = maxColumn;\r\n this.tokens = tokens;\r\n }\r\n return ViewLineData;\r\n}());\r\nexport { ViewLineData };\r\nvar ViewLineRenderingData = /** @class */ (function () {\r\n function ViewLineRenderingData(minColumn, maxColumn, content, continuesWithWrappedLine, mightContainRTL, mightContainNonBasicASCII, tokens, inlineDecorations, tabSize) {\r\n this.minColumn = minColumn;\r\n this.maxColumn = maxColumn;\r\n this.content = content;\r\n this.continuesWithWrappedLine = continuesWithWrappedLine;\r\n this.isBasicASCII = ViewLineRenderingData.isBasicASCII(content, mightContainNonBasicASCII);\r\n this.containsRTL = ViewLineRenderingData.containsRTL(content, this.isBasicASCII, mightContainRTL);\r\n this.tokens = tokens;\r\n this.inlineDecorations = inlineDecorations;\r\n this.tabSize = tabSize;\r\n }\r\n ViewLineRenderingData.isBasicASCII = function (lineContent, mightContainNonBasicASCII) {\r\n if (mightContainNonBasicASCII) {\r\n return strings.isBasicASCII(lineContent);\r\n }\r\n return true;\r\n };\r\n ViewLineRenderingData.containsRTL = function (lineContent, isBasicASCII, mightContainRTL) {\r\n if (!isBasicASCII && mightContainRTL) {\r\n return strings.containsRTL(lineContent);\r\n }\r\n return false;\r\n };\r\n return ViewLineRenderingData;\r\n}());\r\nexport { ViewLineRenderingData };\r\nvar InlineDecoration = /** @class */ (function () {\r\n function InlineDecoration(range, inlineClassName, type) {\r\n this.range = range;\r\n this.inlineClassName = inlineClassName;\r\n this.type = type;\r\n }\r\n return InlineDecoration;\r\n}());\r\nexport { InlineDecoration };\r\nvar ViewModelDecoration = /** @class */ (function () {\r\n function ViewModelDecoration(range, options) {\r\n this.range = range;\r\n this.options = options;\r\n }\r\n return ViewModelDecoration;\r\n}());\r\nexport { ViewModelDecoration };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport function isFuzzyActionArr(what) {\r\n return (Array.isArray(what));\r\n}\r\nexport function isFuzzyAction(what) {\r\n return !isFuzzyActionArr(what);\r\n}\r\nexport function isString(what) {\r\n return (typeof what === 'string');\r\n}\r\nexport function isIAction(what) {\r\n return !isString(what);\r\n}\r\n// Small helper functions\r\n/**\r\n * Is a string null, undefined, or empty?\r\n */\r\nexport function empty(s) {\r\n return (s ? false : true);\r\n}\r\n/**\r\n * Puts a string to lower case if 'ignoreCase' is set.\r\n */\r\nexport function fixCase(lexer, str) {\r\n return (lexer.ignoreCase && str ? str.toLowerCase() : str);\r\n}\r\n/**\r\n * Ensures there are no bad characters in a CSS token class.\r\n */\r\nexport function sanitize(s) {\r\n return s.replace(/[&<>'\"_]/g, '-'); // used on all output token CSS classes\r\n}\r\n// Logging\r\n/**\r\n * Logs a message.\r\n */\r\nexport function log(lexer, msg) {\r\n console.log(lexer.languageId + \": \" + msg);\r\n}\r\n// Throwing errors\r\nexport function createError(lexer, msg) {\r\n return new Error(lexer.languageId + \": \" + msg);\r\n}\r\n// Helper functions for rule finding and substitution\r\n/**\r\n * substituteMatches is used on lexer strings and can substitutes predefined patterns:\r\n * \t\t$$ => $\r\n * \t\t$# => id\r\n * \t\t$n => matched entry n\r\n * \t\t@attr => contents of lexer[attr]\r\n *\r\n * See documentation for more info\r\n */\r\nexport function substituteMatches(lexer, str, id, matches, state) {\r\n var re = /\\$((\\$)|(#)|(\\d\\d?)|[sS](\\d\\d?)|@(\\w+))/g;\r\n var stateMatches = null;\r\n return str.replace(re, function (full, sub, dollar, hash, n, s, attr, ofs, total) {\r\n if (!empty(dollar)) {\r\n return '$'; // $$\r\n }\r\n if (!empty(hash)) {\r\n return fixCase(lexer, id); // default $#\r\n }\r\n if (!empty(n) && n < matches.length) {\r\n return fixCase(lexer, matches[n]); // $n\r\n }\r\n if (!empty(attr) && lexer && typeof (lexer[attr]) === 'string') {\r\n return lexer[attr]; //@attribute\r\n }\r\n if (stateMatches === null) { // split state on demand\r\n stateMatches = state.split('.');\r\n stateMatches.unshift(state);\r\n }\r\n if (!empty(s) && s < stateMatches.length) {\r\n return fixCase(lexer, stateMatches[s]); //$Sn\r\n }\r\n return '';\r\n });\r\n}\r\n/**\r\n * Find the tokenizer rules for a specific state (i.e. next action)\r\n */\r\nexport function findRules(lexer, inState) {\r\n var state = inState;\r\n while (state && state.length > 0) {\r\n var rules = lexer.tokenizer[state];\r\n if (rules) {\r\n return rules;\r\n }\r\n var idx = state.lastIndexOf('.');\r\n if (idx < 0) {\r\n state = null; // no further parent\r\n }\r\n else {\r\n state = state.substr(0, idx);\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Is a certain state defined? In contrast to 'findRules' this works on a ILexerMin.\r\n * This is used during compilation where we may know the defined states\r\n * but not yet whether the corresponding rules are correct.\r\n */\r\nexport function stateExists(lexer, inState) {\r\n var state = inState;\r\n while (state && state.length > 0) {\r\n var exist = lexer.stateNames[state];\r\n if (exist) {\r\n return true;\r\n }\r\n var idx = state.lastIndexOf('.');\r\n if (idx < 0) {\r\n state = null; // no further parent\r\n }\r\n else {\r\n state = state.substr(0, idx);\r\n }\r\n }\r\n return false;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Token, TokenizationResult, TokenizationResult2 } from '../../../common/core/token.js';\r\nimport * as modes from '../../../common/modes.js';\r\nimport { NULL_MODE_ID, NULL_STATE } from '../../../common/modes/nullMode.js';\r\nimport * as monarchCommon from './monarchCommon.js';\r\nvar CACHE_STACK_DEPTH = 5;\r\n/**\r\n * Reuse the same stack elements up to a certain depth.\r\n */\r\nvar MonarchStackElementFactory = /** @class */ (function () {\r\n function MonarchStackElementFactory(maxCacheDepth) {\r\n this._maxCacheDepth = maxCacheDepth;\r\n this._entries = Object.create(null);\r\n }\r\n MonarchStackElementFactory.create = function (parent, state) {\r\n return this._INSTANCE.create(parent, state);\r\n };\r\n MonarchStackElementFactory.prototype.create = function (parent, state) {\r\n if (parent !== null && parent.depth >= this._maxCacheDepth) {\r\n // no caching above a certain depth\r\n return new MonarchStackElement(parent, state);\r\n }\r\n var stackElementId = MonarchStackElement.getStackElementId(parent);\r\n if (stackElementId.length > 0) {\r\n stackElementId += '|';\r\n }\r\n stackElementId += state;\r\n var result = this._entries[stackElementId];\r\n if (result) {\r\n return result;\r\n }\r\n result = new MonarchStackElement(parent, state);\r\n this._entries[stackElementId] = result;\r\n return result;\r\n };\r\n MonarchStackElementFactory._INSTANCE = new MonarchStackElementFactory(CACHE_STACK_DEPTH);\r\n return MonarchStackElementFactory;\r\n}());\r\nvar MonarchStackElement = /** @class */ (function () {\r\n function MonarchStackElement(parent, state) {\r\n this.parent = parent;\r\n this.state = state;\r\n this.depth = (this.parent ? this.parent.depth : 0) + 1;\r\n }\r\n MonarchStackElement.getStackElementId = function (element) {\r\n var result = '';\r\n while (element !== null) {\r\n if (result.length > 0) {\r\n result += '|';\r\n }\r\n result += element.state;\r\n element = element.parent;\r\n }\r\n return result;\r\n };\r\n MonarchStackElement._equals = function (a, b) {\r\n while (a !== null && b !== null) {\r\n if (a === b) {\r\n return true;\r\n }\r\n if (a.state !== b.state) {\r\n return false;\r\n }\r\n a = a.parent;\r\n b = b.parent;\r\n }\r\n if (a === null && b === null) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n MonarchStackElement.prototype.equals = function (other) {\r\n return MonarchStackElement._equals(this, other);\r\n };\r\n MonarchStackElement.prototype.push = function (state) {\r\n return MonarchStackElementFactory.create(this, state);\r\n };\r\n MonarchStackElement.prototype.pop = function () {\r\n return this.parent;\r\n };\r\n MonarchStackElement.prototype.popall = function () {\r\n var result = this;\r\n while (result.parent) {\r\n result = result.parent;\r\n }\r\n return result;\r\n };\r\n MonarchStackElement.prototype.switchTo = function (state) {\r\n return MonarchStackElementFactory.create(this.parent, state);\r\n };\r\n return MonarchStackElement;\r\n}());\r\nvar EmbeddedModeData = /** @class */ (function () {\r\n function EmbeddedModeData(modeId, state) {\r\n this.modeId = modeId;\r\n this.state = state;\r\n }\r\n EmbeddedModeData.prototype.equals = function (other) {\r\n return (this.modeId === other.modeId\r\n && this.state.equals(other.state));\r\n };\r\n EmbeddedModeData.prototype.clone = function () {\r\n var stateClone = this.state.clone();\r\n // save an object\r\n if (stateClone === this.state) {\r\n return this;\r\n }\r\n return new EmbeddedModeData(this.modeId, this.state);\r\n };\r\n return EmbeddedModeData;\r\n}());\r\n/**\r\n * Reuse the same line states up to a certain depth.\r\n */\r\nvar MonarchLineStateFactory = /** @class */ (function () {\r\n function MonarchLineStateFactory(maxCacheDepth) {\r\n this._maxCacheDepth = maxCacheDepth;\r\n this._entries = Object.create(null);\r\n }\r\n MonarchLineStateFactory.create = function (stack, embeddedModeData) {\r\n return this._INSTANCE.create(stack, embeddedModeData);\r\n };\r\n MonarchLineStateFactory.prototype.create = function (stack, embeddedModeData) {\r\n if (embeddedModeData !== null) {\r\n // no caching when embedding\r\n return new MonarchLineState(stack, embeddedModeData);\r\n }\r\n if (stack !== null && stack.depth >= this._maxCacheDepth) {\r\n // no caching above a certain depth\r\n return new MonarchLineState(stack, embeddedModeData);\r\n }\r\n var stackElementId = MonarchStackElement.getStackElementId(stack);\r\n var result = this._entries[stackElementId];\r\n if (result) {\r\n return result;\r\n }\r\n result = new MonarchLineState(stack, null);\r\n this._entries[stackElementId] = result;\r\n return result;\r\n };\r\n MonarchLineStateFactory._INSTANCE = new MonarchLineStateFactory(CACHE_STACK_DEPTH);\r\n return MonarchLineStateFactory;\r\n}());\r\nvar MonarchLineState = /** @class */ (function () {\r\n function MonarchLineState(stack, embeddedModeData) {\r\n this.stack = stack;\r\n this.embeddedModeData = embeddedModeData;\r\n }\r\n MonarchLineState.prototype.clone = function () {\r\n var embeddedModeDataClone = this.embeddedModeData ? this.embeddedModeData.clone() : null;\r\n // save an object\r\n if (embeddedModeDataClone === this.embeddedModeData) {\r\n return this;\r\n }\r\n return MonarchLineStateFactory.create(this.stack, this.embeddedModeData);\r\n };\r\n MonarchLineState.prototype.equals = function (other) {\r\n if (!(other instanceof MonarchLineState)) {\r\n return false;\r\n }\r\n if (!this.stack.equals(other.stack)) {\r\n return false;\r\n }\r\n if (this.embeddedModeData === null && other.embeddedModeData === null) {\r\n return true;\r\n }\r\n if (this.embeddedModeData === null || other.embeddedModeData === null) {\r\n return false;\r\n }\r\n return this.embeddedModeData.equals(other.embeddedModeData);\r\n };\r\n return MonarchLineState;\r\n}());\r\nvar MonarchClassicTokensCollector = /** @class */ (function () {\r\n function MonarchClassicTokensCollector() {\r\n this._tokens = [];\r\n this._language = null;\r\n this._lastTokenType = null;\r\n this._lastTokenLanguage = null;\r\n }\r\n MonarchClassicTokensCollector.prototype.enterMode = function (startOffset, modeId) {\r\n this._language = modeId;\r\n };\r\n MonarchClassicTokensCollector.prototype.emit = function (startOffset, type) {\r\n if (this._lastTokenType === type && this._lastTokenLanguage === this._language) {\r\n return;\r\n }\r\n this._lastTokenType = type;\r\n this._lastTokenLanguage = this._language;\r\n this._tokens.push(new Token(startOffset, type, this._language));\r\n };\r\n MonarchClassicTokensCollector.prototype.nestedModeTokenize = function (embeddedModeLine, embeddedModeData, offsetDelta) {\r\n var nestedModeId = embeddedModeData.modeId;\r\n var embeddedModeState = embeddedModeData.state;\r\n var nestedModeTokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\r\n if (!nestedModeTokenizationSupport) {\r\n this.enterMode(offsetDelta, nestedModeId);\r\n this.emit(offsetDelta, '');\r\n return embeddedModeState;\r\n }\r\n var nestedResult = nestedModeTokenizationSupport.tokenize(embeddedModeLine, embeddedModeState, offsetDelta);\r\n this._tokens = this._tokens.concat(nestedResult.tokens);\r\n this._lastTokenType = null;\r\n this._lastTokenLanguage = null;\r\n this._language = null;\r\n return nestedResult.endState;\r\n };\r\n MonarchClassicTokensCollector.prototype.finalize = function (endState) {\r\n return new TokenizationResult(this._tokens, endState);\r\n };\r\n return MonarchClassicTokensCollector;\r\n}());\r\nvar MonarchModernTokensCollector = /** @class */ (function () {\r\n function MonarchModernTokensCollector(modeService, theme) {\r\n this._modeService = modeService;\r\n this._theme = theme;\r\n this._prependTokens = null;\r\n this._tokens = [];\r\n this._currentLanguageId = 0 /* Null */;\r\n this._lastTokenMetadata = 0;\r\n }\r\n MonarchModernTokensCollector.prototype.enterMode = function (startOffset, modeId) {\r\n this._currentLanguageId = this._modeService.getLanguageIdentifier(modeId).id;\r\n };\r\n MonarchModernTokensCollector.prototype.emit = function (startOffset, type) {\r\n var metadata = this._theme.match(this._currentLanguageId, type);\r\n if (this._lastTokenMetadata === metadata) {\r\n return;\r\n }\r\n this._lastTokenMetadata = metadata;\r\n this._tokens.push(startOffset);\r\n this._tokens.push(metadata);\r\n };\r\n MonarchModernTokensCollector._merge = function (a, b, c) {\r\n var aLen = (a !== null ? a.length : 0);\r\n var bLen = b.length;\r\n var cLen = (c !== null ? c.length : 0);\r\n if (aLen === 0 && bLen === 0 && cLen === 0) {\r\n return new Uint32Array(0);\r\n }\r\n if (aLen === 0 && bLen === 0) {\r\n return c;\r\n }\r\n if (bLen === 0 && cLen === 0) {\r\n return a;\r\n }\r\n var result = new Uint32Array(aLen + bLen + cLen);\r\n if (a !== null) {\r\n result.set(a);\r\n }\r\n for (var i = 0; i < bLen; i++) {\r\n result[aLen + i] = b[i];\r\n }\r\n if (c !== null) {\r\n result.set(c, aLen + bLen);\r\n }\r\n return result;\r\n };\r\n MonarchModernTokensCollector.prototype.nestedModeTokenize = function (embeddedModeLine, embeddedModeData, offsetDelta) {\r\n var nestedModeId = embeddedModeData.modeId;\r\n var embeddedModeState = embeddedModeData.state;\r\n var nestedModeTokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\r\n if (!nestedModeTokenizationSupport) {\r\n this.enterMode(offsetDelta, nestedModeId);\r\n this.emit(offsetDelta, '');\r\n return embeddedModeState;\r\n }\r\n var nestedResult = nestedModeTokenizationSupport.tokenize2(embeddedModeLine, embeddedModeState, offsetDelta);\r\n this._prependTokens = MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, nestedResult.tokens);\r\n this._tokens = [];\r\n this._currentLanguageId = 0;\r\n this._lastTokenMetadata = 0;\r\n return nestedResult.endState;\r\n };\r\n MonarchModernTokensCollector.prototype.finalize = function (endState) {\r\n return new TokenizationResult2(MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null), endState);\r\n };\r\n return MonarchModernTokensCollector;\r\n}());\r\nvar MonarchTokenizer = /** @class */ (function () {\r\n function MonarchTokenizer(modeService, standaloneThemeService, modeId, lexer) {\r\n var _this = this;\r\n this._modeService = modeService;\r\n this._standaloneThemeService = standaloneThemeService;\r\n this._modeId = modeId;\r\n this._lexer = lexer;\r\n this._embeddedModes = Object.create(null);\r\n this.embeddedLoaded = Promise.resolve(undefined);\r\n // Set up listening for embedded modes\r\n var emitting = false;\r\n this._tokenizationRegistryListener = modes.TokenizationRegistry.onDidChange(function (e) {\r\n if (emitting) {\r\n return;\r\n }\r\n var isOneOfMyEmbeddedModes = false;\r\n for (var i = 0, len = e.changedLanguages.length; i < len; i++) {\r\n var language = e.changedLanguages[i];\r\n if (_this._embeddedModes[language]) {\r\n isOneOfMyEmbeddedModes = true;\r\n break;\r\n }\r\n }\r\n if (isOneOfMyEmbeddedModes) {\r\n emitting = true;\r\n modes.TokenizationRegistry.fire([_this._modeId]);\r\n emitting = false;\r\n }\r\n });\r\n }\r\n MonarchTokenizer.prototype.dispose = function () {\r\n this._tokenizationRegistryListener.dispose();\r\n };\r\n MonarchTokenizer.prototype.getLoadStatus = function () {\r\n var promises = [];\r\n for (var nestedModeId in this._embeddedModes) {\r\n var tokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\r\n if (tokenizationSupport) {\r\n // The nested mode is already loaded\r\n if (tokenizationSupport instanceof MonarchTokenizer) {\r\n var nestedModeStatus = tokenizationSupport.getLoadStatus();\r\n if (nestedModeStatus.loaded === false) {\r\n promises.push(nestedModeStatus.promise);\r\n }\r\n }\r\n continue;\r\n }\r\n var tokenizationSupportPromise = modes.TokenizationRegistry.getPromise(nestedModeId);\r\n if (tokenizationSupportPromise) {\r\n // The nested mode is in the process of being loaded\r\n promises.push(tokenizationSupportPromise);\r\n }\r\n }\r\n if (promises.length === 0) {\r\n return {\r\n loaded: true\r\n };\r\n }\r\n return {\r\n loaded: false,\r\n promise: Promise.all(promises).then(function (_) { return undefined; })\r\n };\r\n };\r\n MonarchTokenizer.prototype.getInitialState = function () {\r\n var rootState = MonarchStackElementFactory.create(null, this._lexer.start);\r\n return MonarchLineStateFactory.create(rootState, null);\r\n };\r\n MonarchTokenizer.prototype.tokenize = function (line, lineState, offsetDelta) {\r\n var tokensCollector = new MonarchClassicTokensCollector();\r\n var endLineState = this._tokenize(line, lineState, offsetDelta, tokensCollector);\r\n return tokensCollector.finalize(endLineState);\r\n };\r\n MonarchTokenizer.prototype.tokenize2 = function (line, lineState, offsetDelta) {\r\n var tokensCollector = new MonarchModernTokensCollector(this._modeService, this._standaloneThemeService.getTheme().tokenTheme);\r\n var endLineState = this._tokenize(line, lineState, offsetDelta, tokensCollector);\r\n return tokensCollector.finalize(endLineState);\r\n };\r\n MonarchTokenizer.prototype._tokenize = function (line, lineState, offsetDelta, collector) {\r\n if (lineState.embeddedModeData) {\r\n return this._nestedTokenize(line, lineState, offsetDelta, collector);\r\n }\r\n else {\r\n return this._myTokenize(line, lineState, offsetDelta, collector);\r\n }\r\n };\r\n MonarchTokenizer.prototype._findLeavingNestedModeOffset = function (line, state) {\r\n var rules = this._lexer.tokenizer[state.stack.state];\r\n if (!rules) {\r\n rules = monarchCommon.findRules(this._lexer, state.stack.state); // do parent matching\r\n if (!rules) {\r\n throw monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state.stack.state);\r\n }\r\n }\r\n var popOffset = -1;\r\n var hasEmbeddedPopRule = false;\r\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\r\n var rule = rules_1[_i];\r\n if (!monarchCommon.isIAction(rule.action) || rule.action.nextEmbedded !== '@pop') {\r\n continue;\r\n }\r\n hasEmbeddedPopRule = true;\r\n var regex = rule.regex;\r\n var regexSource = rule.regex.source;\r\n if (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {\r\n regex = new RegExp(regexSource.substr(4, regexSource.length - 5), regex.ignoreCase ? 'i' : '');\r\n }\r\n var result = line.search(regex);\r\n if (result === -1) {\r\n continue;\r\n }\r\n if (popOffset === -1 || result < popOffset) {\r\n popOffset = result;\r\n }\r\n }\r\n if (!hasEmbeddedPopRule) {\r\n throw monarchCommon.createError(this._lexer, 'no rule containing nextEmbedded: \"@pop\" in tokenizer embedded state: ' + state.stack.state);\r\n }\r\n return popOffset;\r\n };\r\n MonarchTokenizer.prototype._nestedTokenize = function (line, lineState, offsetDelta, tokensCollector) {\r\n var popOffset = this._findLeavingNestedModeOffset(line, lineState);\r\n if (popOffset === -1) {\r\n // tokenization will not leave nested mode\r\n var nestedEndState = tokensCollector.nestedModeTokenize(line, lineState.embeddedModeData, offsetDelta);\r\n return MonarchLineStateFactory.create(lineState.stack, new EmbeddedModeData(lineState.embeddedModeData.modeId, nestedEndState));\r\n }\r\n var nestedModeLine = line.substring(0, popOffset);\r\n if (nestedModeLine.length > 0) {\r\n // tokenize with the nested mode\r\n tokensCollector.nestedModeTokenize(nestedModeLine, lineState.embeddedModeData, offsetDelta);\r\n }\r\n var restOfTheLine = line.substring(popOffset);\r\n return this._myTokenize(restOfTheLine, lineState, offsetDelta + popOffset, tokensCollector);\r\n };\r\n MonarchTokenizer.prototype._safeRuleName = function (rule) {\r\n if (rule) {\r\n return rule.name;\r\n }\r\n return '(unknown)';\r\n };\r\n MonarchTokenizer.prototype._myTokenize = function (line, lineState, offsetDelta, tokensCollector) {\r\n tokensCollector.enterMode(offsetDelta, this._modeId);\r\n var lineLength = line.length;\r\n var embeddedModeData = lineState.embeddedModeData;\r\n var stack = lineState.stack;\r\n var pos = 0;\r\n var groupMatching = null;\r\n // See https://github.com/Microsoft/monaco-editor/issues/1235:\r\n // Evaluate rules at least once for an empty line\r\n var forceEvaluation = true;\r\n while (forceEvaluation || pos < lineLength) {\r\n var pos0 = pos;\r\n var stackLen0 = stack.depth;\r\n var groupLen0 = groupMatching ? groupMatching.groups.length : 0;\r\n var state = stack.state;\r\n var matches = null;\r\n var matched = null;\r\n var action = null;\r\n var rule = null;\r\n var enteringEmbeddedMode = null;\r\n // check if we need to process group matches first\r\n if (groupMatching) {\r\n matches = groupMatching.matches;\r\n var groupEntry = groupMatching.groups.shift();\r\n matched = groupEntry.matched;\r\n action = groupEntry.action;\r\n rule = groupMatching.rule;\r\n // cleanup if necessary\r\n if (groupMatching.groups.length === 0) {\r\n groupMatching = null;\r\n }\r\n }\r\n else {\r\n // otherwise we match on the token stream\r\n if (!forceEvaluation && pos >= lineLength) {\r\n // nothing to do\r\n break;\r\n }\r\n forceEvaluation = false;\r\n // get the rules for this state\r\n var rules = this._lexer.tokenizer[state];\r\n if (!rules) {\r\n rules = monarchCommon.findRules(this._lexer, state); // do parent matching\r\n if (!rules) {\r\n throw monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state);\r\n }\r\n }\r\n // try each rule until we match\r\n var restOfLine = line.substr(pos);\r\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\r\n var rule_1 = rules_2[_i];\r\n if (pos === 0 || !rule_1.matchOnlyAtLineStart) {\r\n matches = restOfLine.match(rule_1.regex);\r\n if (matches) {\r\n matched = matches[0];\r\n action = rule_1.action;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n // We matched 'rule' with 'matches' and 'action'\r\n if (!matches) {\r\n matches = [''];\r\n matched = '';\r\n }\r\n if (!action) {\r\n // bad: we didn't match anything, and there is no action to take\r\n // we need to advance the stream or we get progress trouble\r\n if (pos < lineLength) {\r\n matches = [line.charAt(pos)];\r\n matched = matches[0];\r\n }\r\n action = this._lexer.defaultToken;\r\n }\r\n if (matched === null) {\r\n // should never happen, needed for strict null checking\r\n break;\r\n }\r\n // advance stream\r\n pos += matched.length;\r\n // maybe call action function (used for 'cases')\r\n while (monarchCommon.isFuzzyAction(action) && monarchCommon.isIAction(action) && action.test) {\r\n action = action.test(matched, matches, state, pos === lineLength);\r\n }\r\n var result = null;\r\n // set the result: either a string or an array of actions\r\n if (typeof action === 'string' || Array.isArray(action)) {\r\n result = action;\r\n }\r\n else if (action.group) {\r\n result = action.group;\r\n }\r\n else if (action.token !== null && action.token !== undefined) {\r\n // do $n replacements?\r\n if (action.tokenSubst) {\r\n result = monarchCommon.substituteMatches(this._lexer, action.token, matched, matches, state);\r\n }\r\n else {\r\n result = action.token;\r\n }\r\n // enter embedded mode?\r\n if (action.nextEmbedded) {\r\n if (action.nextEmbedded === '@pop') {\r\n if (!embeddedModeData) {\r\n throw monarchCommon.createError(this._lexer, 'cannot pop embedded mode if not inside one');\r\n }\r\n embeddedModeData = null;\r\n }\r\n else if (embeddedModeData) {\r\n throw monarchCommon.createError(this._lexer, 'cannot enter embedded mode from within an embedded mode');\r\n }\r\n else {\r\n enteringEmbeddedMode = monarchCommon.substituteMatches(this._lexer, action.nextEmbedded, matched, matches, state);\r\n }\r\n }\r\n // state transformations\r\n if (action.goBack) { // back up the stream..\r\n pos = Math.max(0, pos - action.goBack);\r\n }\r\n if (action.switchTo && typeof action.switchTo === 'string') {\r\n var nextState = monarchCommon.substituteMatches(this._lexer, action.switchTo, matched, matches, state); // switch state without a push...\r\n if (nextState[0] === '@') {\r\n nextState = nextState.substr(1); // peel off starting '@'\r\n }\r\n if (!monarchCommon.findRules(this._lexer, nextState)) {\r\n throw monarchCommon.createError(this._lexer, 'trying to switch to a state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\r\n }\r\n else {\r\n stack = stack.switchTo(nextState);\r\n }\r\n }\r\n else if (action.transform && typeof action.transform === 'function') {\r\n throw monarchCommon.createError(this._lexer, 'action.transform not supported');\r\n }\r\n else if (action.next) {\r\n if (action.next === '@push') {\r\n if (stack.depth >= this._lexer.maxStack) {\r\n throw monarchCommon.createError(this._lexer, 'maximum tokenizer stack size reached: [' +\r\n stack.state + ',' + stack.parent.state + ',...]');\r\n }\r\n else {\r\n stack = stack.push(state);\r\n }\r\n }\r\n else if (action.next === '@pop') {\r\n if (stack.depth <= 1) {\r\n throw monarchCommon.createError(this._lexer, 'trying to pop an empty stack in rule: ' + this._safeRuleName(rule));\r\n }\r\n else {\r\n stack = stack.pop();\r\n }\r\n }\r\n else if (action.next === '@popall') {\r\n stack = stack.popall();\r\n }\r\n else {\r\n var nextState = monarchCommon.substituteMatches(this._lexer, action.next, matched, matches, state);\r\n if (nextState[0] === '@') {\r\n nextState = nextState.substr(1); // peel off starting '@'\r\n }\r\n if (!monarchCommon.findRules(this._lexer, nextState)) {\r\n throw monarchCommon.createError(this._lexer, 'trying to set a next state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\r\n }\r\n else {\r\n stack = stack.push(nextState);\r\n }\r\n }\r\n }\r\n if (action.log && typeof (action.log) === 'string') {\r\n monarchCommon.log(this._lexer, this._lexer.languageId + ': ' + monarchCommon.substituteMatches(this._lexer, action.log, matched, matches, state));\r\n }\r\n }\r\n // check result\r\n if (result === null) {\r\n throw monarchCommon.createError(this._lexer, 'lexer rule has no well-defined action in rule: ' + this._safeRuleName(rule));\r\n }\r\n // is the result a group match?\r\n if (Array.isArray(result)) {\r\n if (groupMatching && groupMatching.groups.length > 0) {\r\n throw monarchCommon.createError(this._lexer, 'groups cannot be nested: ' + this._safeRuleName(rule));\r\n }\r\n if (matches.length !== result.length + 1) {\r\n throw monarchCommon.createError(this._lexer, 'matched number of groups does not match the number of actions in rule: ' + this._safeRuleName(rule));\r\n }\r\n var totalLen = 0;\r\n for (var i = 1; i < matches.length; i++) {\r\n totalLen += matches[i].length;\r\n }\r\n if (totalLen !== matched.length) {\r\n throw monarchCommon.createError(this._lexer, 'with groups, all characters should be matched in consecutive groups in rule: ' + this._safeRuleName(rule));\r\n }\r\n groupMatching = {\r\n rule: rule,\r\n matches: matches,\r\n groups: []\r\n };\r\n for (var i = 0; i < result.length; i++) {\r\n groupMatching.groups[i] = {\r\n action: result[i],\r\n matched: matches[i + 1]\r\n };\r\n }\r\n pos -= matched.length;\r\n // call recursively to initiate first result match\r\n continue;\r\n }\r\n else {\r\n // regular result\r\n // check for '@rematch'\r\n if (result === '@rematch') {\r\n pos -= matched.length;\r\n matched = ''; // better set the next state too..\r\n matches = null;\r\n result = '';\r\n }\r\n // check progress\r\n if (matched.length === 0) {\r\n if (lineLength === 0 || stackLen0 !== stack.depth || state !== stack.state || (!groupMatching ? 0 : groupMatching.groups.length) !== groupLen0) {\r\n continue;\r\n }\r\n else {\r\n throw monarchCommon.createError(this._lexer, 'no progress in tokenizer in rule: ' + this._safeRuleName(rule));\r\n }\r\n }\r\n // return the result (and check for brace matching)\r\n // todo: for efficiency we could pre-sanitize tokenPostfix and substitutions\r\n var tokenType = null;\r\n if (monarchCommon.isString(result) && result.indexOf('@brackets') === 0) {\r\n var rest = result.substr('@brackets'.length);\r\n var bracket = findBracket(this._lexer, matched);\r\n if (!bracket) {\r\n throw monarchCommon.createError(this._lexer, '@brackets token returned but no bracket defined as: ' + matched);\r\n }\r\n tokenType = monarchCommon.sanitize(bracket.token + rest);\r\n }\r\n else {\r\n var token = (result === '' ? '' : result + this._lexer.tokenPostfix);\r\n tokenType = monarchCommon.sanitize(token);\r\n }\r\n tokensCollector.emit(pos0 + offsetDelta, tokenType);\r\n }\r\n if (enteringEmbeddedMode !== null) {\r\n // substitute language alias to known modes to support syntax highlighting\r\n var enteringEmbeddedModeId = this._modeService.getModeIdForLanguageName(enteringEmbeddedMode);\r\n if (enteringEmbeddedModeId) {\r\n enteringEmbeddedMode = enteringEmbeddedModeId;\r\n }\r\n var embeddedModeData_1 = this._getNestedEmbeddedModeData(enteringEmbeddedMode);\r\n if (pos < lineLength) {\r\n // there is content from the embedded mode on this line\r\n var restOfLine = line.substr(pos);\r\n return this._nestedTokenize(restOfLine, MonarchLineStateFactory.create(stack, embeddedModeData_1), offsetDelta + pos, tokensCollector);\r\n }\r\n else {\r\n return MonarchLineStateFactory.create(stack, embeddedModeData_1);\r\n }\r\n }\r\n }\r\n return MonarchLineStateFactory.create(stack, embeddedModeData);\r\n };\r\n MonarchTokenizer.prototype._getNestedEmbeddedModeData = function (mimetypeOrModeId) {\r\n var nestedModeId = this._locateMode(mimetypeOrModeId);\r\n if (nestedModeId) {\r\n var tokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\r\n if (tokenizationSupport) {\r\n return new EmbeddedModeData(nestedModeId, tokenizationSupport.getInitialState());\r\n }\r\n }\r\n return new EmbeddedModeData(nestedModeId || NULL_MODE_ID, NULL_STATE);\r\n };\r\n MonarchTokenizer.prototype._locateMode = function (mimetypeOrModeId) {\r\n if (!mimetypeOrModeId || !this._modeService.isRegisteredMode(mimetypeOrModeId)) {\r\n return null;\r\n }\r\n if (mimetypeOrModeId === this._modeId) {\r\n // embedding myself...\r\n return mimetypeOrModeId;\r\n }\r\n var modeId = this._modeService.getModeId(mimetypeOrModeId);\r\n if (modeId) {\r\n // Fire mode loading event\r\n this._modeService.triggerMode(modeId);\r\n this._embeddedModes[modeId] = true;\r\n }\r\n return modeId;\r\n };\r\n return MonarchTokenizer;\r\n}());\r\nexport { MonarchTokenizer };\r\n/**\r\n * Searches for a bracket in the 'brackets' attribute that matches the input.\r\n */\r\nfunction findBracket(lexer, matched) {\r\n if (!matched) {\r\n return null;\r\n }\r\n matched = monarchCommon.fixCase(lexer, matched);\r\n var brackets = lexer.brackets;\r\n for (var _i = 0, brackets_1 = brackets; _i < brackets_1.length; _i++) {\r\n var bracket = brackets_1[_i];\r\n if (bracket.open === matched) {\r\n return { token: bracket.token, bracketType: 1 /* Open */ };\r\n }\r\n else if (bracket.close === matched) {\r\n return { token: bracket.token, bracketType: -1 /* Close */ };\r\n }\r\n }\r\n return null;\r\n}\r\nexport function createTokenizationSupport(modeService, standaloneThemeService, modeId, lexer) {\r\n return new MonarchTokenizer(modeService, standaloneThemeService, modeId, lexer);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { TimeoutTimer } from '../../../base/common/async.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { LineTokens } from '../../common/core/lineTokens.js';\r\nimport { TokenizationRegistry } from '../../common/modes.js';\r\nimport { RenderLineInput, renderViewLine2 as renderViewLine } from '../../common/viewLayout/viewLineRenderer.js';\r\nimport { ViewLineRenderingData } from '../../common/viewModel/viewModel.js';\r\nimport { MonarchTokenizer } from '../common/monarch/monarchLexer.js';\r\nvar Colorizer = /** @class */ (function () {\r\n function Colorizer() {\r\n }\r\n Colorizer.colorizeElement = function (themeService, modeService, domNode, options) {\r\n options = options || {};\r\n var theme = options.theme || 'vs';\r\n var mimeType = options.mimeType || domNode.getAttribute('lang') || domNode.getAttribute('data-lang');\r\n if (!mimeType) {\r\n console.error('Mode not detected');\r\n return Promise.resolve();\r\n }\r\n themeService.setTheme(theme);\r\n var text = domNode.firstChild ? domNode.firstChild.nodeValue : '';\r\n domNode.className += ' ' + theme;\r\n var render = function (str) {\r\n domNode.innerHTML = str;\r\n };\r\n return this.colorize(modeService, text || '', mimeType, options).then(render, function (err) { return console.error(err); });\r\n };\r\n Colorizer.colorize = function (modeService, text, mimeType, options) {\r\n var tabSize = 4;\r\n if (options && typeof options.tabSize === 'number') {\r\n tabSize = options.tabSize;\r\n }\r\n if (strings.startsWithUTF8BOM(text)) {\r\n text = text.substr(1);\r\n }\r\n var lines = text.split(/\\r\\n|\\r|\\n/);\r\n var language = modeService.getModeId(mimeType);\r\n if (!language) {\r\n return Promise.resolve(_fakeColorize(lines, tabSize));\r\n }\r\n // Send out the event to create the mode\r\n modeService.triggerMode(language);\r\n var tokenizationSupport = TokenizationRegistry.get(language);\r\n if (tokenizationSupport) {\r\n return _colorize(lines, tabSize, tokenizationSupport);\r\n }\r\n var tokenizationSupportPromise = TokenizationRegistry.getPromise(language);\r\n if (tokenizationSupportPromise) {\r\n // A tokenizer will be registered soon\r\n return new Promise(function (resolve, reject) {\r\n tokenizationSupportPromise.then(function (tokenizationSupport) {\r\n _colorize(lines, tabSize, tokenizationSupport).then(resolve, reject);\r\n }, reject);\r\n });\r\n }\r\n return new Promise(function (resolve, reject) {\r\n var listener = null;\r\n var timeout = null;\r\n var execute = function () {\r\n if (listener) {\r\n listener.dispose();\r\n listener = null;\r\n }\r\n if (timeout) {\r\n timeout.dispose();\r\n timeout = null;\r\n }\r\n var tokenizationSupport = TokenizationRegistry.get(language);\r\n if (tokenizationSupport) {\r\n _colorize(lines, tabSize, tokenizationSupport).then(resolve, reject);\r\n return;\r\n }\r\n resolve(_fakeColorize(lines, tabSize));\r\n };\r\n // wait 500ms for mode to load, then give up\r\n timeout = new TimeoutTimer();\r\n timeout.cancelAndSet(execute, 500);\r\n listener = TokenizationRegistry.onDidChange(function (e) {\r\n if (e.changedLanguages.indexOf(language) >= 0) {\r\n execute();\r\n }\r\n });\r\n });\r\n };\r\n Colorizer.colorizeLine = function (line, mightContainNonBasicASCII, mightContainRTL, tokens, tabSize) {\r\n if (tabSize === void 0) { tabSize = 4; }\r\n var isBasicASCII = ViewLineRenderingData.isBasicASCII(line, mightContainNonBasicASCII);\r\n var containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, mightContainRTL);\r\n var renderResult = renderViewLine(new RenderLineInput(false, true, line, false, isBasicASCII, containsRTL, 0, tokens, [], tabSize, 0, -1, 'none', false, false, null));\r\n return renderResult.html;\r\n };\r\n Colorizer.colorizeModelLine = function (model, lineNumber, tabSize) {\r\n if (tabSize === void 0) { tabSize = 4; }\r\n var content = model.getLineContent(lineNumber);\r\n model.forceTokenization(lineNumber);\r\n var tokens = model.getLineTokens(lineNumber);\r\n var inflatedTokens = tokens.inflate();\r\n return this.colorizeLine(content, model.mightContainNonBasicASCII(), model.mightContainRTL(), inflatedTokens, tabSize);\r\n };\r\n return Colorizer;\r\n}());\r\nexport { Colorizer };\r\nfunction _colorize(lines, tabSize, tokenizationSupport) {\r\n return new Promise(function (c, e) {\r\n var execute = function () {\r\n var result = _actualColorize(lines, tabSize, tokenizationSupport);\r\n if (tokenizationSupport instanceof MonarchTokenizer) {\r\n var status_1 = tokenizationSupport.getLoadStatus();\r\n if (status_1.loaded === false) {\r\n status_1.promise.then(execute, e);\r\n return;\r\n }\r\n }\r\n c(result);\r\n };\r\n execute();\r\n });\r\n}\r\nfunction _fakeColorize(lines, tabSize) {\r\n var html = [];\r\n var defaultMetadata = ((0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\r\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\r\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\r\n var tokens = new Uint32Array(2);\r\n tokens[0] = 0;\r\n tokens[1] = defaultMetadata;\r\n for (var i = 0, length_1 = lines.length; i < length_1; i++) {\r\n var line = lines[i];\r\n tokens[0] = line.length;\r\n var lineTokens = new LineTokens(tokens, line);\r\n var isBasicASCII = ViewLineRenderingData.isBasicASCII(line, /* check for basic ASCII */ true);\r\n var containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, /* check for RTL */ true);\r\n var renderResult = renderViewLine(new RenderLineInput(false, true, line, false, isBasicASCII, containsRTL, 0, lineTokens, [], tabSize, 0, -1, 'none', false, false, null));\r\n html = html.concat(renderResult.html);\r\n html.push('
');\r\n }\r\n return html.join('');\r\n}\r\nfunction _actualColorize(lines, tabSize, tokenizationSupport) {\r\n var html = [];\r\n var state = tokenizationSupport.getInitialState();\r\n for (var i = 0, length_2 = lines.length; i < length_2; i++) {\r\n var line = lines[i];\r\n var tokenizeResult = tokenizationSupport.tokenize2(line, state, 0);\r\n LineTokens.convertToEndOffset(tokenizeResult.tokens, line.length);\r\n var lineTokens = new LineTokens(tokenizeResult.tokens, line);\r\n var isBasicASCII = ViewLineRenderingData.isBasicASCII(line, /* check for basic ASCII */ true);\r\n var containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, /* check for RTL */ true);\r\n var renderResult = renderViewLine(new RenderLineInput(false, true, line, false, isBasicASCII, containsRTL, 0, lineTokens.inflate(), [], tabSize, 0, -1, 'none', false, false, null));\r\n html = html.concat(renderResult.html);\r\n html.push('
');\r\n state = tokenizeResult.endState;\r\n }\r\n return html.join('');\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as nls from '../../nls.js';\r\nimport * as strings from './strings.js';\r\nvar Severity;\r\n(function (Severity) {\r\n Severity[Severity[\"Ignore\"] = 0] = \"Ignore\";\r\n Severity[Severity[\"Info\"] = 1] = \"Info\";\r\n Severity[Severity[\"Warning\"] = 2] = \"Warning\";\r\n Severity[Severity[\"Error\"] = 3] = \"Error\";\r\n})(Severity || (Severity = {}));\r\n(function (Severity) {\r\n var _error = 'error';\r\n var _warning = 'warning';\r\n var _warn = 'warn';\r\n var _info = 'info';\r\n var _displayStrings = Object.create(null);\r\n _displayStrings[Severity.Error] = nls.localize('sev.error', \"Error\");\r\n _displayStrings[Severity.Warning] = nls.localize('sev.warning', \"Warning\");\r\n _displayStrings[Severity.Info] = nls.localize('sev.info', \"Info\");\r\n /**\r\n * Parses 'error', 'warning', 'warn', 'info' in call casings\r\n * and falls back to ignore.\r\n */\r\n function fromValue(value) {\r\n if (!value) {\r\n return Severity.Ignore;\r\n }\r\n if (strings.equalsIgnoreCase(_error, value)) {\r\n return Severity.Error;\r\n }\r\n if (strings.equalsIgnoreCase(_warning, value) || strings.equalsIgnoreCase(_warn, value)) {\r\n return Severity.Warning;\r\n }\r\n if (strings.equalsIgnoreCase(_info, value)) {\r\n return Severity.Info;\r\n }\r\n return Severity.Ignore;\r\n }\r\n Severity.fromValue = fromValue;\r\n})(Severity || (Severity = {}));\r\nexport default Severity;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as editorCommon from '../common/editorCommon.js';\r\n/**\r\n *@internal\r\n */\r\nexport function isCodeEditor(thing) {\r\n if (thing && typeof thing.getEditorType === 'function') {\r\n return thing.getEditorType() === editorCommon.EditorType.ICodeEditor;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as Types from '../../../base/common/types.js';\r\nimport * as Assert from '../../../base/common/assert.js';\r\nvar RegistryImpl = /** @class */ (function () {\r\n function RegistryImpl() {\r\n this.data = new Map();\r\n }\r\n RegistryImpl.prototype.add = function (id, data) {\r\n Assert.ok(Types.isString(id));\r\n Assert.ok(Types.isObject(data));\r\n Assert.ok(!this.data.has(id), 'There is already an extension with this id');\r\n this.data.set(id, data);\r\n };\r\n RegistryImpl.prototype.as = function (id) {\r\n return this.data.get(id) || null;\r\n };\r\n return RegistryImpl;\r\n}());\r\nexport var Registry = new RegistryImpl();\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as platform from '../../registry/common/platform.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nexport var Extensions = {\r\n JSONContribution: 'base.contributions.json'\r\n};\r\nfunction normalizeId(id) {\r\n if (id.length > 0 && id.charAt(id.length - 1) === '#') {\r\n return id.substring(0, id.length - 1);\r\n }\r\n return id;\r\n}\r\nvar JSONContributionRegistry = /** @class */ (function () {\r\n function JSONContributionRegistry() {\r\n this._onDidChangeSchema = new Emitter();\r\n this.schemasById = {};\r\n }\r\n JSONContributionRegistry.prototype.registerSchema = function (uri, unresolvedSchemaContent) {\r\n this.schemasById[normalizeId(uri)] = unresolvedSchemaContent;\r\n this._onDidChangeSchema.fire(uri);\r\n };\r\n JSONContributionRegistry.prototype.notifySchemaChanged = function (uri) {\r\n this._onDidChangeSchema.fire(uri);\r\n };\r\n return JSONContributionRegistry;\r\n}());\r\nvar jsonContributionRegistry = new JSONContributionRegistry();\r\nplatform.Registry.add(Extensions.JSONContribution, jsonContributionRegistry);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as nls from '../../../nls.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Registry } from '../../registry/common/platform.js';\r\nimport * as types from '../../../base/common/types.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\r\nexport var Extensions = {\r\n Configuration: 'base.contributions.configuration'\r\n};\r\nexport var allSettings = { properties: {}, patternProperties: {} };\r\nexport var applicationSettings = { properties: {}, patternProperties: {} };\r\nexport var machineSettings = { properties: {}, patternProperties: {} };\r\nexport var machineOverridableSettings = { properties: {}, patternProperties: {} };\r\nexport var windowSettings = { properties: {}, patternProperties: {} };\r\nexport var resourceSettings = { properties: {}, patternProperties: {} };\r\nexport var editorConfigurationSchemaId = 'vscode://schemas/settings/editor';\r\nvar contributionRegistry = Registry.as(JSONExtensions.JSONContribution);\r\nvar ConfigurationRegistry = /** @class */ (function () {\r\n function ConfigurationRegistry() {\r\n this.overrideIdentifiers = [];\r\n this._onDidSchemaChange = new Emitter();\r\n this._onDidUpdateConfiguration = new Emitter();\r\n this.defaultOverridesConfigurationNode = {\r\n id: 'defaultOverrides',\r\n title: nls.localize('defaultConfigurations.title', \"Default Configuration Overrides\"),\r\n properties: {}\r\n };\r\n this.configurationContributors = [this.defaultOverridesConfigurationNode];\r\n this.editorConfigurationSchema = { properties: {}, patternProperties: {}, additionalProperties: false, errorMessage: 'Unknown editor configuration setting', allowTrailingCommas: true, allowComments: true };\r\n this.configurationProperties = {};\r\n this.excludedConfigurationProperties = {};\r\n this.overridePropertyPattern = this.computeOverridePropertyPattern();\r\n contributionRegistry.registerSchema(editorConfigurationSchemaId, this.editorConfigurationSchema);\r\n }\r\n ConfigurationRegistry.prototype.registerConfiguration = function (configuration, validate) {\r\n if (validate === void 0) { validate = true; }\r\n this.registerConfigurations([configuration], validate);\r\n };\r\n ConfigurationRegistry.prototype.registerConfigurations = function (configurations, validate) {\r\n var _this = this;\r\n if (validate === void 0) { validate = true; }\r\n var properties = [];\r\n configurations.forEach(function (configuration) {\r\n properties.push.apply(properties, _this.validateAndRegisterProperties(configuration, validate)); // fills in defaults\r\n _this.configurationContributors.push(configuration);\r\n _this.registerJSONConfiguration(configuration);\r\n _this.updateSchemaForOverrideSettingsConfiguration(configuration);\r\n });\r\n this._onDidSchemaChange.fire();\r\n this._onDidUpdateConfiguration.fire(properties);\r\n };\r\n ConfigurationRegistry.prototype.registerOverrideIdentifiers = function (overrideIdentifiers) {\r\n var _a;\r\n (_a = this.overrideIdentifiers).push.apply(_a, overrideIdentifiers);\r\n this.updateOverridePropertyPatternKey();\r\n };\r\n ConfigurationRegistry.prototype.validateAndRegisterProperties = function (configuration, validate, scope, overridable) {\r\n if (validate === void 0) { validate = true; }\r\n if (scope === void 0) { scope = 3 /* WINDOW */; }\r\n if (overridable === void 0) { overridable = false; }\r\n scope = types.isUndefinedOrNull(configuration.scope) ? scope : configuration.scope;\r\n overridable = configuration.overridable || overridable;\r\n var propertyKeys = [];\r\n var properties = configuration.properties;\r\n if (properties) {\r\n for (var key in properties) {\r\n var message = void 0;\r\n if (validate && (message = validateProperty(key))) {\r\n console.warn(message);\r\n delete properties[key];\r\n continue;\r\n }\r\n // fill in default values\r\n var property = properties[key];\r\n var defaultValue = property.default;\r\n if (types.isUndefined(defaultValue)) {\r\n property.default = getDefaultValue(property.type);\r\n }\r\n // Inherit overridable property from parent\r\n if (overridable) {\r\n property.overridable = true;\r\n }\r\n if (OVERRIDE_PROPERTY_PATTERN.test(key)) {\r\n property.scope = undefined; // No scope for overridable properties `[${identifier}]`\r\n }\r\n else {\r\n property.scope = types.isUndefinedOrNull(property.scope) ? scope : property.scope;\r\n }\r\n // Add to properties maps\r\n // Property is included by default if 'included' is unspecified\r\n if (properties[key].hasOwnProperty('included') && !properties[key].included) {\r\n this.excludedConfigurationProperties[key] = properties[key];\r\n delete properties[key];\r\n continue;\r\n }\r\n else {\r\n this.configurationProperties[key] = properties[key];\r\n }\r\n propertyKeys.push(key);\r\n }\r\n }\r\n var subNodes = configuration.allOf;\r\n if (subNodes) {\r\n for (var _i = 0, subNodes_1 = subNodes; _i < subNodes_1.length; _i++) {\r\n var node = subNodes_1[_i];\r\n propertyKeys.push.apply(propertyKeys, this.validateAndRegisterProperties(node, validate, scope, overridable));\r\n }\r\n }\r\n return propertyKeys;\r\n };\r\n ConfigurationRegistry.prototype.getConfigurationProperties = function () {\r\n return this.configurationProperties;\r\n };\r\n ConfigurationRegistry.prototype.registerJSONConfiguration = function (configuration) {\r\n function register(configuration) {\r\n var properties = configuration.properties;\r\n if (properties) {\r\n for (var key in properties) {\r\n allSettings.properties[key] = properties[key];\r\n switch (properties[key].scope) {\r\n case 1 /* APPLICATION */:\r\n applicationSettings.properties[key] = properties[key];\r\n break;\r\n case 2 /* MACHINE */:\r\n machineSettings.properties[key] = properties[key];\r\n break;\r\n case 5 /* MACHINE_OVERRIDABLE */:\r\n machineOverridableSettings.properties[key] = properties[key];\r\n break;\r\n case 3 /* WINDOW */:\r\n windowSettings.properties[key] = properties[key];\r\n break;\r\n case 4 /* RESOURCE */:\r\n resourceSettings.properties[key] = properties[key];\r\n break;\r\n }\r\n }\r\n }\r\n var subNodes = configuration.allOf;\r\n if (subNodes) {\r\n subNodes.forEach(register);\r\n }\r\n }\r\n register(configuration);\r\n };\r\n ConfigurationRegistry.prototype.updateSchemaForOverrideSettingsConfiguration = function (configuration) {\r\n if (configuration.id !== SETTINGS_OVERRRIDE_NODE_ID) {\r\n this.update(configuration);\r\n contributionRegistry.registerSchema(editorConfigurationSchemaId, this.editorConfigurationSchema);\r\n }\r\n };\r\n ConfigurationRegistry.prototype.updateOverridePropertyPatternKey = function () {\r\n var patternProperties = allSettings.patternProperties[this.overridePropertyPattern];\r\n if (!patternProperties) {\r\n patternProperties = {\r\n type: 'object',\r\n description: nls.localize('overrideSettings.defaultDescription', \"Configure editor settings to be overridden for a language.\"),\r\n errorMessage: 'Unknown Identifier. Use language identifiers',\r\n $ref: editorConfigurationSchemaId\r\n };\r\n }\r\n delete allSettings.patternProperties[this.overridePropertyPattern];\r\n delete applicationSettings.patternProperties[this.overridePropertyPattern];\r\n delete machineSettings.patternProperties[this.overridePropertyPattern];\r\n delete machineOverridableSettings.patternProperties[this.overridePropertyPattern];\r\n delete windowSettings.patternProperties[this.overridePropertyPattern];\r\n delete resourceSettings.patternProperties[this.overridePropertyPattern];\r\n this.overridePropertyPattern = this.computeOverridePropertyPattern();\r\n allSettings.patternProperties[this.overridePropertyPattern] = patternProperties;\r\n applicationSettings.patternProperties[this.overridePropertyPattern] = patternProperties;\r\n machineSettings.patternProperties[this.overridePropertyPattern] = patternProperties;\r\n machineOverridableSettings.patternProperties[this.overridePropertyPattern] = patternProperties;\r\n windowSettings.patternProperties[this.overridePropertyPattern] = patternProperties;\r\n resourceSettings.patternProperties[this.overridePropertyPattern] = patternProperties;\r\n this._onDidSchemaChange.fire();\r\n };\r\n ConfigurationRegistry.prototype.update = function (configuration) {\r\n var _this = this;\r\n var properties = configuration.properties;\r\n if (properties) {\r\n for (var key in properties) {\r\n if (properties[key].overridable) {\r\n this.editorConfigurationSchema.properties[key] = this.getConfigurationProperties()[key];\r\n }\r\n }\r\n }\r\n var subNodes = configuration.allOf;\r\n if (subNodes) {\r\n subNodes.forEach(function (subNode) { return _this.update(subNode); });\r\n }\r\n };\r\n ConfigurationRegistry.prototype.computeOverridePropertyPattern = function () {\r\n return this.overrideIdentifiers.length ? OVERRIDE_PATTERN_WITH_SUBSTITUTION.replace('${0}', this.overrideIdentifiers.map(function (identifier) { return strings.createRegExp(identifier, false).source; }).join('|')) : OVERRIDE_PROPERTY;\r\n };\r\n return ConfigurationRegistry;\r\n}());\r\nvar SETTINGS_OVERRRIDE_NODE_ID = 'override';\r\nvar OVERRIDE_PROPERTY = '\\\\[.*\\\\]$';\r\nvar OVERRIDE_PATTERN_WITH_SUBSTITUTION = '\\\\[(${0})\\\\]$';\r\nexport var OVERRIDE_PROPERTY_PATTERN = new RegExp(OVERRIDE_PROPERTY);\r\nexport function getDefaultValue(type) {\r\n var t = Array.isArray(type) ? type[0] : type;\r\n switch (t) {\r\n case 'boolean':\r\n return false;\r\n case 'integer':\r\n case 'number':\r\n return 0;\r\n case 'string':\r\n return '';\r\n case 'array':\r\n return [];\r\n case 'object':\r\n return {};\r\n default:\r\n return null;\r\n }\r\n}\r\nvar configurationRegistry = new ConfigurationRegistry();\r\nRegistry.add(Extensions.Configuration, configurationRegistry);\r\nexport function validateProperty(property) {\r\n if (OVERRIDE_PROPERTY_PATTERN.test(property)) {\r\n return nls.localize('config.property.languageDefault', \"Cannot register '{0}'. This matches property pattern '\\\\\\\\[.*\\\\\\\\]$' for describing language specific editor settings. Use 'configurationDefaults' contribution.\", property);\r\n }\r\n if (configurationRegistry.getConfigurationProperties()[property] !== undefined) {\r\n return nls.localize('config.property.duplicate', \"Cannot register '{0}'. This property is already registered.\", property);\r\n }\r\n return null;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n/**\r\n * Returns an array which contains all values that reside\r\n * in the given set.\r\n */\r\nexport function values(from) {\r\n var result = [];\r\n for (var key in from) {\r\n if (hasOwnProperty.call(from, key)) {\r\n result.push(from[key]);\r\n }\r\n }\r\n return result;\r\n}\r\nexport function first(from) {\r\n for (var key in from) {\r\n if (hasOwnProperty.call(from, key)) {\r\n return from[key];\r\n }\r\n }\r\n return undefined;\r\n}\r\n/**\r\n * Iterates over each entry in the provided set. The iterator allows\r\n * to remove elements and will stop when the callback returns {{false}}.\r\n */\r\nexport function forEach(from, callback) {\r\n var _loop_1 = function (key) {\r\n if (hasOwnProperty.call(from, key)) {\r\n var result = callback({ key: key, value: from[key] }, function () {\r\n delete from[key];\r\n });\r\n if (result === false) {\r\n return { value: void 0 };\r\n }\r\n }\r\n };\r\n for (var key in from) {\r\n var state_1 = _loop_1(key);\r\n if (typeof state_1 === \"object\")\r\n return state_1.value;\r\n }\r\n}\r\nvar SetMap = /** @class */ (function () {\r\n function SetMap() {\r\n this.map = new Map();\r\n }\r\n SetMap.prototype.add = function (key, value) {\r\n var values = this.map.get(key);\r\n if (!values) {\r\n values = new Set();\r\n this.map.set(key, values);\r\n }\r\n values.add(value);\r\n };\r\n SetMap.prototype.delete = function (key, value) {\r\n var values = this.map.get(key);\r\n if (!values) {\r\n return;\r\n }\r\n values.delete(value);\r\n if (values.size === 0) {\r\n this.map.delete(key);\r\n }\r\n };\r\n SetMap.prototype.forEach = function (key, fn) {\r\n var values = this.map.get(key);\r\n if (!values) {\r\n return;\r\n }\r\n values.forEach(fn);\r\n };\r\n return SetMap;\r\n}());\r\nexport { SetMap };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport * as nls from '../../../nls.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport * as objects from '../../../base/common/objects.js';\r\nimport * as arrays from '../../../base/common/arrays.js';\r\nimport { editorOptionsRegistry, ValidatedEditorOptions, ConfigurationChangedEvent, EDITOR_MODEL_DEFAULTS } from './editorOptions.js';\r\nimport { EditorZoom } from './editorZoom.js';\r\nimport { BareFontInfo } from './fontInfo.js';\r\nimport { Extensions } from '../../../platform/configuration/common/configurationRegistry.js';\r\nimport { Registry } from '../../../platform/registry/common/platform.js';\r\nimport { forEach } from '../../../base/common/collections.js';\r\nexport var TabFocus = new /** @class */ (function () {\r\n function class_1() {\r\n this._tabFocus = false;\r\n this._onDidChangeTabFocus = new Emitter();\r\n this.onDidChangeTabFocus = this._onDidChangeTabFocus.event;\r\n }\r\n class_1.prototype.getTabFocusMode = function () {\r\n return this._tabFocus;\r\n };\r\n class_1.prototype.setTabFocusMode = function (tabFocusMode) {\r\n if (this._tabFocus === tabFocusMode) {\r\n return;\r\n }\r\n this._tabFocus = tabFocusMode;\r\n this._onDidChangeTabFocus.fire(this._tabFocus);\r\n };\r\n return class_1;\r\n}());\r\nvar hasOwnProperty = Object.hasOwnProperty;\r\nvar ComputedEditorOptions = /** @class */ (function () {\r\n function ComputedEditorOptions() {\r\n this._values = [];\r\n }\r\n ComputedEditorOptions.prototype._read = function (id) {\r\n return this._values[id];\r\n };\r\n ComputedEditorOptions.prototype.get = function (id) {\r\n return this._values[id];\r\n };\r\n ComputedEditorOptions.prototype._write = function (id, value) {\r\n this._values[id] = value;\r\n };\r\n return ComputedEditorOptions;\r\n}());\r\nexport { ComputedEditorOptions };\r\nvar RawEditorOptions = /** @class */ (function () {\r\n function RawEditorOptions() {\r\n this._values = [];\r\n }\r\n RawEditorOptions.prototype._read = function (id) {\r\n return this._values[id];\r\n };\r\n RawEditorOptions.prototype._write = function (id, value) {\r\n this._values[id] = value;\r\n };\r\n return RawEditorOptions;\r\n}());\r\nvar EditorConfiguration2 = /** @class */ (function () {\r\n function EditorConfiguration2() {\r\n }\r\n EditorConfiguration2.readOptions = function (_options) {\r\n var options = _options;\r\n var result = new RawEditorOptions();\r\n for (var _i = 0, editorOptionsRegistry_2 = editorOptionsRegistry; _i < editorOptionsRegistry_2.length; _i++) {\r\n var editorOption = editorOptionsRegistry_2[_i];\r\n var value = (editorOption.name === '_never_' ? undefined : options[editorOption.name]);\r\n result._write(editorOption.id, value);\r\n }\r\n return result;\r\n };\r\n EditorConfiguration2.validateOptions = function (options) {\r\n var result = new ValidatedEditorOptions();\r\n for (var _i = 0, editorOptionsRegistry_3 = editorOptionsRegistry; _i < editorOptionsRegistry_3.length; _i++) {\r\n var editorOption = editorOptionsRegistry_3[_i];\r\n result._write(editorOption.id, editorOption.validate(options._read(editorOption.id)));\r\n }\r\n return result;\r\n };\r\n EditorConfiguration2.computeOptions = function (options, env) {\r\n var result = new ComputedEditorOptions();\r\n for (var _i = 0, editorOptionsRegistry_4 = editorOptionsRegistry; _i < editorOptionsRegistry_4.length; _i++) {\r\n var editorOption = editorOptionsRegistry_4[_i];\r\n result._write(editorOption.id, editorOption.compute(env, result, options._read(editorOption.id)));\r\n }\r\n return result;\r\n };\r\n EditorConfiguration2._deepEquals = function (a, b) {\r\n if (typeof a !== 'object' || typeof b !== 'object') {\r\n return (a === b);\r\n }\r\n if (Array.isArray(a) || Array.isArray(b)) {\r\n return (Array.isArray(a) && Array.isArray(b) ? arrays.equals(a, b) : false);\r\n }\r\n for (var key in a) {\r\n if (!EditorConfiguration2._deepEquals(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n EditorConfiguration2.checkEquals = function (a, b) {\r\n var result = [];\r\n var somethingChanged = false;\r\n for (var _i = 0, editorOptionsRegistry_5 = editorOptionsRegistry; _i < editorOptionsRegistry_5.length; _i++) {\r\n var editorOption = editorOptionsRegistry_5[_i];\r\n var changed = !EditorConfiguration2._deepEquals(a._read(editorOption.id), b._read(editorOption.id));\r\n result[editorOption.id] = changed;\r\n if (changed) {\r\n somethingChanged = true;\r\n }\r\n }\r\n return (somethingChanged ? new ConfigurationChangedEvent(result) : null);\r\n };\r\n return EditorConfiguration2;\r\n}());\r\n/**\r\n * Compatibility with old options\r\n */\r\nfunction migrateOptions(options) {\r\n var wordWrap = options.wordWrap;\r\n if (wordWrap === true) {\r\n options.wordWrap = 'on';\r\n }\r\n else if (wordWrap === false) {\r\n options.wordWrap = 'off';\r\n }\r\n var lineNumbers = options.lineNumbers;\r\n if (lineNumbers === true) {\r\n options.lineNumbers = 'on';\r\n }\r\n else if (lineNumbers === false) {\r\n options.lineNumbers = 'off';\r\n }\r\n var autoClosingBrackets = options.autoClosingBrackets;\r\n if (autoClosingBrackets === false) {\r\n options.autoClosingBrackets = 'never';\r\n options.autoClosingQuotes = 'never';\r\n options.autoSurround = 'never';\r\n }\r\n var cursorBlinking = options.cursorBlinking;\r\n if (cursorBlinking === 'visible') {\r\n options.cursorBlinking = 'solid';\r\n }\r\n var renderWhitespace = options.renderWhitespace;\r\n if (renderWhitespace === true) {\r\n options.renderWhitespace = 'boundary';\r\n }\r\n else if (renderWhitespace === false) {\r\n options.renderWhitespace = 'none';\r\n }\r\n var renderLineHighlight = options.renderLineHighlight;\r\n if (renderLineHighlight === true) {\r\n options.renderLineHighlight = 'line';\r\n }\r\n else if (renderLineHighlight === false) {\r\n options.renderLineHighlight = 'none';\r\n }\r\n var acceptSuggestionOnEnter = options.acceptSuggestionOnEnter;\r\n if (acceptSuggestionOnEnter === true) {\r\n options.acceptSuggestionOnEnter = 'on';\r\n }\r\n else if (acceptSuggestionOnEnter === false) {\r\n options.acceptSuggestionOnEnter = 'off';\r\n }\r\n var tabCompletion = options.tabCompletion;\r\n if (tabCompletion === false) {\r\n options.tabCompletion = 'off';\r\n }\r\n else if (tabCompletion === true) {\r\n options.tabCompletion = 'onlySnippets';\r\n }\r\n var suggest = options.suggest;\r\n if (suggest && typeof suggest.filteredTypes === 'object' && suggest.filteredTypes) {\r\n var mapping = {};\r\n mapping['method'] = 'showMethods';\r\n mapping['function'] = 'showFunctions';\r\n mapping['constructor'] = 'showConstructors';\r\n mapping['field'] = 'showFields';\r\n mapping['variable'] = 'showVariables';\r\n mapping['class'] = 'showClasses';\r\n mapping['struct'] = 'showStructs';\r\n mapping['interface'] = 'showInterfaces';\r\n mapping['module'] = 'showModules';\r\n mapping['property'] = 'showProperties';\r\n mapping['event'] = 'showEvents';\r\n mapping['operator'] = 'showOperators';\r\n mapping['unit'] = 'showUnits';\r\n mapping['value'] = 'showValues';\r\n mapping['constant'] = 'showConstants';\r\n mapping['enum'] = 'showEnums';\r\n mapping['enumMember'] = 'showEnumMembers';\r\n mapping['keyword'] = 'showKeywords';\r\n mapping['text'] = 'showWords';\r\n mapping['color'] = 'showColors';\r\n mapping['file'] = 'showFiles';\r\n mapping['reference'] = 'showReferences';\r\n mapping['folder'] = 'showFolders';\r\n mapping['typeParameter'] = 'showTypeParameters';\r\n mapping['snippet'] = 'showSnippets';\r\n forEach(mapping, function (entry) {\r\n var value = suggest.filteredTypes[entry.key];\r\n if (value === false) {\r\n suggest[entry.value] = value;\r\n }\r\n });\r\n // delete (suggest).filteredTypes;\r\n }\r\n var hover = options.hover;\r\n if (hover === true) {\r\n options.hover = {\r\n enabled: true\r\n };\r\n }\r\n else if (hover === false) {\r\n options.hover = {\r\n enabled: false\r\n };\r\n }\r\n var parameterHints = options.parameterHints;\r\n if (parameterHints === true) {\r\n options.parameterHints = {\r\n enabled: true\r\n };\r\n }\r\n else if (parameterHints === false) {\r\n options.parameterHints = {\r\n enabled: false\r\n };\r\n }\r\n var autoIndent = options.autoIndent;\r\n if (autoIndent === true) {\r\n options.autoIndent = 'full';\r\n }\r\n else if (autoIndent === false) {\r\n options.autoIndent = 'advanced';\r\n }\r\n var matchBrackets = options.matchBrackets;\r\n if (matchBrackets === true) {\r\n options.matchBrackets = 'always';\r\n }\r\n else if (matchBrackets === false) {\r\n options.matchBrackets = 'never';\r\n }\r\n}\r\nfunction deepCloneAndMigrateOptions(_options) {\r\n var options = objects.deepClone(_options);\r\n migrateOptions(options);\r\n return options;\r\n}\r\nvar CommonEditorConfiguration = /** @class */ (function (_super) {\r\n __extends(CommonEditorConfiguration, _super);\r\n function CommonEditorConfiguration(isSimpleWidget, _options) {\r\n var _this = _super.call(this) || this;\r\n _this._onDidChange = _this._register(new Emitter());\r\n _this.onDidChange = _this._onDidChange.event;\r\n _this.isSimpleWidget = isSimpleWidget;\r\n _this._isDominatedByLongLines = false;\r\n _this._lineNumbersDigitCount = 1;\r\n _this._rawOptions = deepCloneAndMigrateOptions(_options);\r\n _this._readOptions = EditorConfiguration2.readOptions(_this._rawOptions);\r\n _this._validatedOptions = EditorConfiguration2.validateOptions(_this._readOptions);\r\n _this._register(EditorZoom.onDidChangeZoomLevel(function (_) { return _this._recomputeOptions(); }));\r\n _this._register(TabFocus.onDidChangeTabFocus(function (_) { return _this._recomputeOptions(); }));\r\n return _this;\r\n }\r\n CommonEditorConfiguration.prototype.observeReferenceElement = function (dimension) {\r\n };\r\n CommonEditorConfiguration.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n CommonEditorConfiguration.prototype._recomputeOptions = function () {\r\n var oldOptions = this.options;\r\n var newOptions = this._computeInternalOptions();\r\n if (!oldOptions) {\r\n this.options = newOptions;\r\n }\r\n else {\r\n var changeEvent = EditorConfiguration2.checkEquals(oldOptions, newOptions);\r\n if (changeEvent === null) {\r\n // nothing changed!\r\n return;\r\n }\r\n this.options = newOptions;\r\n this._onDidChange.fire(changeEvent);\r\n }\r\n };\r\n CommonEditorConfiguration.prototype.getRawOptions = function () {\r\n return this._rawOptions;\r\n };\r\n CommonEditorConfiguration.prototype._computeInternalOptions = function () {\r\n var partialEnv = this._getEnvConfiguration();\r\n var bareFontInfo = BareFontInfo.createFromValidatedSettings(this._validatedOptions, partialEnv.zoomLevel, this.isSimpleWidget);\r\n var env = {\r\n outerWidth: partialEnv.outerWidth,\r\n outerHeight: partialEnv.outerHeight,\r\n fontInfo: this.readConfiguration(bareFontInfo),\r\n extraEditorClassName: partialEnv.extraEditorClassName,\r\n isDominatedByLongLines: this._isDominatedByLongLines,\r\n lineNumbersDigitCount: this._lineNumbersDigitCount,\r\n emptySelectionClipboard: partialEnv.emptySelectionClipboard,\r\n pixelRatio: partialEnv.pixelRatio,\r\n tabFocusMode: TabFocus.getTabFocusMode(),\r\n accessibilitySupport: partialEnv.accessibilitySupport\r\n };\r\n return EditorConfiguration2.computeOptions(this._validatedOptions, env);\r\n };\r\n CommonEditorConfiguration._subsetEquals = function (base, subset) {\r\n for (var key in subset) {\r\n if (hasOwnProperty.call(subset, key)) {\r\n var subsetValue = subset[key];\r\n var baseValue = base[key];\r\n if (baseValue === subsetValue) {\r\n continue;\r\n }\r\n if (Array.isArray(baseValue) && Array.isArray(subsetValue)) {\r\n if (!arrays.equals(baseValue, subsetValue)) {\r\n return false;\r\n }\r\n continue;\r\n }\r\n if (typeof baseValue === 'object' && typeof subsetValue === 'object') {\r\n if (!this._subsetEquals(baseValue, subsetValue)) {\r\n return false;\r\n }\r\n continue;\r\n }\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n CommonEditorConfiguration.prototype.updateOptions = function (_newOptions) {\r\n if (typeof _newOptions === 'undefined') {\r\n return;\r\n }\r\n var newOptions = deepCloneAndMigrateOptions(_newOptions);\r\n if (CommonEditorConfiguration._subsetEquals(this._rawOptions, newOptions)) {\r\n return;\r\n }\r\n this._rawOptions = objects.mixin(this._rawOptions, newOptions || {});\r\n this._readOptions = EditorConfiguration2.readOptions(this._rawOptions);\r\n this._validatedOptions = EditorConfiguration2.validateOptions(this._readOptions);\r\n this._recomputeOptions();\r\n };\r\n CommonEditorConfiguration.prototype.setIsDominatedByLongLines = function (isDominatedByLongLines) {\r\n this._isDominatedByLongLines = isDominatedByLongLines;\r\n this._recomputeOptions();\r\n };\r\n CommonEditorConfiguration.prototype.setMaxLineNumber = function (maxLineNumber) {\r\n var digitCount = CommonEditorConfiguration._digitCount(maxLineNumber);\r\n if (this._lineNumbersDigitCount === digitCount) {\r\n return;\r\n }\r\n this._lineNumbersDigitCount = digitCount;\r\n this._recomputeOptions();\r\n };\r\n CommonEditorConfiguration._digitCount = function (n) {\r\n var r = 0;\r\n while (n) {\r\n n = Math.floor(n / 10);\r\n r++;\r\n }\r\n return r ? r : 1;\r\n };\r\n return CommonEditorConfiguration;\r\n}(Disposable));\r\nexport { CommonEditorConfiguration };\r\nexport var editorConfigurationBaseNode = Object.freeze({\r\n id: 'editor',\r\n order: 5,\r\n type: 'object',\r\n title: nls.localize('editorConfigurationTitle', \"Editor\"),\r\n overridable: true,\r\n scope: 4 /* RESOURCE */,\r\n});\r\nvar configurationRegistry = Registry.as(Extensions.Configuration);\r\nvar editorConfiguration = __assign(__assign({}, editorConfigurationBaseNode), { properties: {\r\n 'editor.tabSize': {\r\n type: 'number',\r\n default: EDITOR_MODEL_DEFAULTS.tabSize,\r\n minimum: 1,\r\n markdownDescription: nls.localize('tabSize', \"The number of spaces a tab is equal to. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.\")\r\n },\r\n // 'editor.indentSize': {\r\n // \t'anyOf': [\r\n // \t\t{\r\n // \t\t\ttype: 'string',\r\n // \t\t\tenum: ['tabSize']\r\n // \t\t},\r\n // \t\t{\r\n // \t\t\ttype: 'number',\r\n // \t\t\tminimum: 1\r\n // \t\t}\r\n // \t],\r\n // \tdefault: 'tabSize',\r\n // \tmarkdownDescription: nls.localize('indentSize', \"The number of spaces used for indentation or 'tabSize' to use the value from `#editor.tabSize#`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.\")\r\n // },\r\n 'editor.insertSpaces': {\r\n type: 'boolean',\r\n default: EDITOR_MODEL_DEFAULTS.insertSpaces,\r\n markdownDescription: nls.localize('insertSpaces', \"Insert spaces when pressing `Tab`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.\")\r\n },\r\n 'editor.detectIndentation': {\r\n type: 'boolean',\r\n default: EDITOR_MODEL_DEFAULTS.detectIndentation,\r\n markdownDescription: nls.localize('detectIndentation', \"Controls whether `#editor.tabSize#` and `#editor.insertSpaces#` will be automatically detected when a file is opened based on the file contents.\")\r\n },\r\n 'editor.trimAutoWhitespace': {\r\n type: 'boolean',\r\n default: EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,\r\n description: nls.localize('trimAutoWhitespace', \"Remove trailing auto inserted whitespace.\")\r\n },\r\n 'editor.largeFileOptimizations': {\r\n type: 'boolean',\r\n default: EDITOR_MODEL_DEFAULTS.largeFileOptimizations,\r\n description: nls.localize('largeFileOptimizations', \"Special handling for large files to disable certain memory intensive features.\")\r\n },\r\n 'editor.wordBasedSuggestions': {\r\n type: 'boolean',\r\n default: true,\r\n description: nls.localize('wordBasedSuggestions', \"Controls whether completions should be computed based on words in the document.\")\r\n },\r\n 'editor.stablePeek': {\r\n type: 'boolean',\r\n default: false,\r\n markdownDescription: nls.localize('stablePeek', \"Keep peek editors open even when double clicking their content or when hitting `Escape`.\")\r\n },\r\n 'editor.maxTokenizationLineLength': {\r\n type: 'integer',\r\n default: 20000,\r\n description: nls.localize('maxTokenizationLineLength', \"Lines above this length will not be tokenized for performance reasons\")\r\n },\r\n 'diffEditor.maxComputationTime': {\r\n type: 'number',\r\n default: 5000,\r\n description: nls.localize('maxComputationTime', \"Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.\")\r\n },\r\n 'diffEditor.renderSideBySide': {\r\n type: 'boolean',\r\n default: true,\r\n description: nls.localize('sideBySide', \"Controls whether the diff editor shows the diff side by side or inline.\")\r\n },\r\n 'diffEditor.ignoreTrimWhitespace': {\r\n type: 'boolean',\r\n default: true,\r\n description: nls.localize('ignoreTrimWhitespace', \"Controls whether the diff editor shows changes in leading or trailing whitespace as diffs.\")\r\n },\r\n 'diffEditor.renderIndicators': {\r\n type: 'boolean',\r\n default: true,\r\n description: nls.localize('renderIndicators', \"Controls whether the diff editor shows +/- indicators for added/removed changes.\")\r\n }\r\n } });\r\nfunction isConfigurationPropertySchema(x) {\r\n return (typeof x.type !== 'undefined' || typeof x.anyOf !== 'undefined');\r\n}\r\n// Add properties from the Editor Option Registry\r\nfor (var _i = 0, editorOptionsRegistry_1 = editorOptionsRegistry; _i < editorOptionsRegistry_1.length; _i++) {\r\n var editorOption = editorOptionsRegistry_1[_i];\r\n var schema = editorOption.schema;\r\n if (typeof schema !== 'undefined') {\r\n if (isConfigurationPropertySchema(schema)) {\r\n // This is a single schema contribution\r\n editorConfiguration.properties[\"editor.\" + editorOption.name] = schema;\r\n }\r\n else {\r\n for (var key in schema) {\r\n if (hasOwnProperty.call(schema, key)) {\r\n editorConfiguration.properties[key] = schema[key];\r\n }\r\n }\r\n }\r\n }\r\n}\r\nvar cachedEditorConfigurationKeys = null;\r\nfunction getEditorConfigurationKeys() {\r\n if (cachedEditorConfigurationKeys === null) {\r\n cachedEditorConfigurationKeys = Object.create(null);\r\n Object.keys(editorConfiguration.properties).forEach(function (prop) {\r\n cachedEditorConfigurationKeys[prop] = true;\r\n });\r\n }\r\n return cachedEditorConfigurationKeys;\r\n}\r\nexport function isEditorConfigurationKey(key) {\r\n var editorConfigurationKeys = getEditorConfigurationKeys();\r\n return (editorConfigurationKeys[\"editor.\" + key] || false);\r\n}\r\nexport function isDiffEditorConfigurationKey(key) {\r\n var editorConfigurationKeys = getEditorConfigurationKeys();\r\n return (editorConfigurationKeys[\"diffEditor.\" + key] || false);\r\n}\r\nconfigurationRegistry.registerConfiguration(editorConfiguration);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Range } from './range.js';\r\nvar EditOperation = /** @class */ (function () {\r\n function EditOperation() {\r\n }\r\n EditOperation.insert = function (position, text) {\r\n return {\r\n range: new Range(position.lineNumber, position.column, position.lineNumber, position.column),\r\n text: text,\r\n forceMoveMarkers: true\r\n };\r\n };\r\n EditOperation.delete = function (range) {\r\n return {\r\n range: range,\r\n text: null\r\n };\r\n };\r\n EditOperation.replace = function (range, text) {\r\n return {\r\n range: range,\r\n text: text\r\n };\r\n };\r\n EditOperation.replaceMove = function (range, text) {\r\n return {\r\n range: range,\r\n text: text,\r\n forceMoveMarkers: true\r\n };\r\n };\r\n return EditOperation;\r\n}());\r\nexport { EditOperation };\r\n","import { Registry } from '../../registry/common/platform.js';\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { Extensions } from './configurationRegistry.js';\r\nexport var IConfigurationService = createDecorator('configurationService');\r\nexport function toValuesTree(properties, conflictReporter) {\r\n var root = Object.create(null);\r\n for (var key in properties) {\r\n addToValueTree(root, key, properties[key], conflictReporter);\r\n }\r\n return root;\r\n}\r\nexport function addToValueTree(settingsTreeRoot, key, value, conflictReporter) {\r\n var segments = key.split('.');\r\n var last = segments.pop();\r\n var curr = settingsTreeRoot;\r\n for (var i = 0; i < segments.length; i++) {\r\n var s = segments[i];\r\n var obj = curr[s];\r\n switch (typeof obj) {\r\n case 'undefined':\r\n obj = curr[s] = Object.create(null);\r\n break;\r\n case 'object':\r\n break;\r\n default:\r\n conflictReporter(\"Ignoring \" + key + \" as \" + segments.slice(0, i + 1).join('.') + \" is \" + JSON.stringify(obj));\r\n return;\r\n }\r\n curr = obj;\r\n }\r\n if (typeof curr === 'object') {\r\n curr[last] = value; // workaround https://github.com/Microsoft/vscode/issues/13606\r\n }\r\n else {\r\n conflictReporter(\"Ignoring \" + key + \" as \" + segments.join('.') + \" is \" + JSON.stringify(curr));\r\n }\r\n}\r\nexport function removeFromValueTree(valueTree, key) {\r\n var segments = key.split('.');\r\n doRemoveFromValueTree(valueTree, segments);\r\n}\r\nfunction doRemoveFromValueTree(valueTree, segments) {\r\n var first = segments.shift();\r\n if (segments.length === 0) {\r\n // Reached last segment\r\n delete valueTree[first];\r\n return;\r\n }\r\n if (Object.keys(valueTree).indexOf(first) !== -1) {\r\n var value = valueTree[first];\r\n if (typeof value === 'object' && !Array.isArray(value)) {\r\n doRemoveFromValueTree(value, segments);\r\n if (Object.keys(value).length === 0) {\r\n delete valueTree[first];\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * A helper function to get the configuration value with a specific settings path (e.g. config.some.setting)\r\n */\r\nexport function getConfigurationValue(config, settingPath, defaultValue) {\r\n function accessSetting(config, path) {\r\n var current = config;\r\n for (var _i = 0, path_1 = path; _i < path_1.length; _i++) {\r\n var component = path_1[_i];\r\n if (typeof current !== 'object' || current === null) {\r\n return undefined;\r\n }\r\n current = current[component];\r\n }\r\n return current;\r\n }\r\n var path = settingPath.split('.');\r\n var result = accessSetting(config, path);\r\n return typeof result === 'undefined' ? defaultValue : result;\r\n}\r\nexport function getConfigurationKeys() {\r\n var properties = Registry.as(Extensions.Configuration).getConfigurationProperties();\r\n return Object.keys(properties);\r\n}\r\nexport function getDefaultValues() {\r\n var valueTreeRoot = Object.create(null);\r\n var properties = Registry.as(Extensions.Configuration).getConfigurationProperties();\r\n for (var key in properties) {\r\n var value = properties[key].default;\r\n addToValueTree(valueTreeRoot, key, value, function (message) { return console.error(\"Conflict in default settings: \" + message); });\r\n }\r\n return valueTreeRoot;\r\n}\r\nexport function overrideIdentifierFromKey(key) {\r\n return key.substring(1, key.length - 1);\r\n}\r\nexport function getMigratedSettingValue(configurationService, currentSettingName, legacySettingName) {\r\n var setting = configurationService.inspect(currentSettingName);\r\n var legacySetting = configurationService.inspect(legacySettingName);\r\n if (typeof setting.user !== 'undefined' || typeof setting.workspace !== 'undefined' || typeof setting.workspaceFolder !== 'undefined') {\r\n return setting.value;\r\n }\r\n else if (typeof legacySetting.user !== 'undefined' || typeof legacySetting.workspace !== 'undefined' || typeof legacySetting.workspaceFolder !== 'undefined') {\r\n return legacySetting.value;\r\n }\r\n else {\r\n return setting.default;\r\n }\r\n}\r\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { ResourceMap } from '../../../base/common/map.js';\r\nimport * as arrays from '../../../base/common/arrays.js';\r\nimport * as types from '../../../base/common/types.js';\r\nimport * as objects from '../../../base/common/objects.js';\r\nimport { OVERRIDE_PROPERTY_PATTERN } from './configurationRegistry.js';\r\nimport { overrideIdentifierFromKey, addToValueTree, toValuesTree, getConfigurationValue, getDefaultValues, getConfigurationKeys, removeFromValueTree } from './configuration.js';\r\nvar ConfigurationModel = /** @class */ (function () {\r\n function ConfigurationModel(_contents, _keys, _overrides) {\r\n if (_contents === void 0) { _contents = {}; }\r\n if (_keys === void 0) { _keys = []; }\r\n if (_overrides === void 0) { _overrides = []; }\r\n this._contents = _contents;\r\n this._keys = _keys;\r\n this._overrides = _overrides;\r\n this.isFrozen = false;\r\n }\r\n Object.defineProperty(ConfigurationModel.prototype, \"contents\", {\r\n get: function () {\r\n return this.checkAndFreeze(this._contents);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ConfigurationModel.prototype, \"overrides\", {\r\n get: function () {\r\n return this.checkAndFreeze(this._overrides);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ConfigurationModel.prototype, \"keys\", {\r\n get: function () {\r\n return this.checkAndFreeze(this._keys);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ConfigurationModel.prototype.isEmpty = function () {\r\n return this._keys.length === 0 && Object.keys(this._contents).length === 0 && this._overrides.length === 0;\r\n };\r\n ConfigurationModel.prototype.getValue = function (section) {\r\n return section ? getConfigurationValue(this.contents, section) : this.contents;\r\n };\r\n ConfigurationModel.prototype.override = function (identifier) {\r\n var overrideContents = this.getContentsForOverrideIdentifer(identifier);\r\n if (!overrideContents || typeof overrideContents !== 'object' || !Object.keys(overrideContents).length) {\r\n // If there are no valid overrides, return self\r\n return this;\r\n }\r\n var contents = {};\r\n for (var _i = 0, _a = arrays.distinct(__spreadArrays(Object.keys(this.contents), Object.keys(overrideContents))); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n var contentsForKey = this.contents[key];\r\n var overrideContentsForKey = overrideContents[key];\r\n // If there are override contents for the key, clone and merge otherwise use base contents\r\n if (overrideContentsForKey) {\r\n // Clone and merge only if base contents and override contents are of type object otherwise just override\r\n if (typeof contentsForKey === 'object' && typeof overrideContentsForKey === 'object') {\r\n contentsForKey = objects.deepClone(contentsForKey);\r\n this.mergeContents(contentsForKey, overrideContentsForKey);\r\n }\r\n else {\r\n contentsForKey = overrideContentsForKey;\r\n }\r\n }\r\n contents[key] = contentsForKey;\r\n }\r\n return new ConfigurationModel(contents);\r\n };\r\n ConfigurationModel.prototype.merge = function () {\r\n var others = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n others[_i] = arguments[_i];\r\n }\r\n var contents = objects.deepClone(this.contents);\r\n var overrides = objects.deepClone(this.overrides);\r\n var keys = __spreadArrays(this.keys);\r\n for (var _a = 0, others_1 = others; _a < others_1.length; _a++) {\r\n var other = others_1[_a];\r\n this.mergeContents(contents, other.contents);\r\n var _loop_1 = function (otherOverride) {\r\n var override = overrides.filter(function (o) { return arrays.equals(o.identifiers, otherOverride.identifiers); })[0];\r\n if (override) {\r\n this_1.mergeContents(override.contents, otherOverride.contents);\r\n }\r\n else {\r\n overrides.push(objects.deepClone(otherOverride));\r\n }\r\n };\r\n var this_1 = this;\r\n for (var _b = 0, _c = other.overrides; _b < _c.length; _b++) {\r\n var otherOverride = _c[_b];\r\n _loop_1(otherOverride);\r\n }\r\n for (var _d = 0, _e = other.keys; _d < _e.length; _d++) {\r\n var key = _e[_d];\r\n if (keys.indexOf(key) === -1) {\r\n keys.push(key);\r\n }\r\n }\r\n }\r\n return new ConfigurationModel(contents, keys, overrides);\r\n };\r\n ConfigurationModel.prototype.freeze = function () {\r\n this.isFrozen = true;\r\n return this;\r\n };\r\n ConfigurationModel.prototype.mergeContents = function (source, target) {\r\n for (var _i = 0, _a = Object.keys(target); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n if (key in source) {\r\n if (types.isObject(source[key]) && types.isObject(target[key])) {\r\n this.mergeContents(source[key], target[key]);\r\n continue;\r\n }\r\n }\r\n source[key] = objects.deepClone(target[key]);\r\n }\r\n };\r\n ConfigurationModel.prototype.checkAndFreeze = function (data) {\r\n if (this.isFrozen && !Object.isFrozen(data)) {\r\n return objects.deepFreeze(data);\r\n }\r\n return data;\r\n };\r\n ConfigurationModel.prototype.getContentsForOverrideIdentifer = function (identifier) {\r\n for (var _i = 0, _a = this.overrides; _i < _a.length; _i++) {\r\n var override = _a[_i];\r\n if (override.identifiers.indexOf(identifier) !== -1) {\r\n return override.contents;\r\n }\r\n }\r\n return null;\r\n };\r\n ConfigurationModel.prototype.toJSON = function () {\r\n return {\r\n contents: this.contents,\r\n overrides: this.overrides,\r\n keys: this.keys\r\n };\r\n };\r\n // Update methods\r\n ConfigurationModel.prototype.setValue = function (key, value) {\r\n this.addKey(key);\r\n addToValueTree(this.contents, key, value, function (e) { throw new Error(e); });\r\n };\r\n ConfigurationModel.prototype.removeValue = function (key) {\r\n if (this.removeKey(key)) {\r\n removeFromValueTree(this.contents, key);\r\n }\r\n };\r\n ConfigurationModel.prototype.addKey = function (key) {\r\n var index = this.keys.length;\r\n for (var i = 0; i < index; i++) {\r\n if (key.indexOf(this.keys[i]) === 0) {\r\n index = i;\r\n }\r\n }\r\n this.keys.splice(index, 1, key);\r\n };\r\n ConfigurationModel.prototype.removeKey = function (key) {\r\n var index = this.keys.indexOf(key);\r\n if (index !== -1) {\r\n this.keys.splice(index, 1);\r\n return true;\r\n }\r\n return false;\r\n };\r\n return ConfigurationModel;\r\n}());\r\nexport { ConfigurationModel };\r\nvar DefaultConfigurationModel = /** @class */ (function (_super) {\r\n __extends(DefaultConfigurationModel, _super);\r\n function DefaultConfigurationModel() {\r\n var _this = this;\r\n var contents = getDefaultValues();\r\n var keys = getConfigurationKeys();\r\n var overrides = [];\r\n for (var _i = 0, _a = Object.keys(contents); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n if (OVERRIDE_PROPERTY_PATTERN.test(key)) {\r\n overrides.push({\r\n identifiers: [overrideIdentifierFromKey(key).trim()],\r\n contents: toValuesTree(contents[key], function (message) { return console.error(\"Conflict in default settings file: \" + message); })\r\n });\r\n }\r\n }\r\n _this = _super.call(this, contents, keys, overrides) || this;\r\n return _this;\r\n }\r\n return DefaultConfigurationModel;\r\n}(ConfigurationModel));\r\nexport { DefaultConfigurationModel };\r\nvar Configuration = /** @class */ (function () {\r\n function Configuration(_defaultConfiguration, _localUserConfiguration, _remoteUserConfiguration, _workspaceConfiguration, _folderConfigurations, _memoryConfiguration, _memoryConfigurationByResource, _freeze) {\r\n if (_remoteUserConfiguration === void 0) { _remoteUserConfiguration = new ConfigurationModel(); }\r\n if (_workspaceConfiguration === void 0) { _workspaceConfiguration = new ConfigurationModel(); }\r\n if (_folderConfigurations === void 0) { _folderConfigurations = new ResourceMap(); }\r\n if (_memoryConfiguration === void 0) { _memoryConfiguration = new ConfigurationModel(); }\r\n if (_memoryConfigurationByResource === void 0) { _memoryConfigurationByResource = new ResourceMap(); }\r\n if (_freeze === void 0) { _freeze = true; }\r\n this._defaultConfiguration = _defaultConfiguration;\r\n this._localUserConfiguration = _localUserConfiguration;\r\n this._remoteUserConfiguration = _remoteUserConfiguration;\r\n this._workspaceConfiguration = _workspaceConfiguration;\r\n this._folderConfigurations = _folderConfigurations;\r\n this._memoryConfiguration = _memoryConfiguration;\r\n this._memoryConfigurationByResource = _memoryConfigurationByResource;\r\n this._freeze = _freeze;\r\n this._workspaceConsolidatedConfiguration = null;\r\n this._foldersConsolidatedConfigurations = new ResourceMap();\r\n this._userConfiguration = null;\r\n }\r\n Configuration.prototype.getValue = function (section, overrides, workspace) {\r\n var consolidateConfigurationModel = this.getConsolidateConfigurationModel(overrides, workspace);\r\n return consolidateConfigurationModel.getValue(section);\r\n };\r\n Configuration.prototype.updateValue = function (key, value, overrides) {\r\n if (overrides === void 0) { overrides = {}; }\r\n var memoryConfiguration;\r\n if (overrides.resource) {\r\n memoryConfiguration = this._memoryConfigurationByResource.get(overrides.resource);\r\n if (!memoryConfiguration) {\r\n memoryConfiguration = new ConfigurationModel();\r\n this._memoryConfigurationByResource.set(overrides.resource, memoryConfiguration);\r\n }\r\n }\r\n else {\r\n memoryConfiguration = this._memoryConfiguration;\r\n }\r\n if (value === undefined) {\r\n memoryConfiguration.removeValue(key);\r\n }\r\n else {\r\n memoryConfiguration.setValue(key, value);\r\n }\r\n if (!overrides.resource) {\r\n this._workspaceConsolidatedConfiguration = null;\r\n }\r\n };\r\n Configuration.prototype.inspect = function (key, overrides, workspace) {\r\n var consolidateConfigurationModel = this.getConsolidateConfigurationModel(overrides, workspace);\r\n var folderConfigurationModel = this.getFolderConfigurationModelForResource(overrides.resource, workspace);\r\n var memoryConfigurationModel = overrides.resource ? this._memoryConfigurationByResource.get(overrides.resource) || this._memoryConfiguration : this._memoryConfiguration;\r\n return {\r\n default: overrides.overrideIdentifier ? this._defaultConfiguration.freeze().override(overrides.overrideIdentifier).getValue(key) : this._defaultConfiguration.freeze().getValue(key),\r\n user: overrides.overrideIdentifier ? this.userConfiguration.freeze().override(overrides.overrideIdentifier).getValue(key) : this.userConfiguration.freeze().getValue(key),\r\n userLocal: overrides.overrideIdentifier ? this.localUserConfiguration.freeze().override(overrides.overrideIdentifier).getValue(key) : this.localUserConfiguration.freeze().getValue(key),\r\n userRemote: overrides.overrideIdentifier ? this.remoteUserConfiguration.freeze().override(overrides.overrideIdentifier).getValue(key) : this.remoteUserConfiguration.freeze().getValue(key),\r\n workspace: workspace ? overrides.overrideIdentifier ? this._workspaceConfiguration.freeze().override(overrides.overrideIdentifier).getValue(key) : this._workspaceConfiguration.freeze().getValue(key) : undefined,\r\n workspaceFolder: folderConfigurationModel ? overrides.overrideIdentifier ? folderConfigurationModel.freeze().override(overrides.overrideIdentifier).getValue(key) : folderConfigurationModel.freeze().getValue(key) : undefined,\r\n memory: overrides.overrideIdentifier ? memoryConfigurationModel.override(overrides.overrideIdentifier).getValue(key) : memoryConfigurationModel.getValue(key),\r\n value: consolidateConfigurationModel.getValue(key)\r\n };\r\n };\r\n Object.defineProperty(Configuration.prototype, \"userConfiguration\", {\r\n get: function () {\r\n if (!this._userConfiguration) {\r\n this._userConfiguration = this._remoteUserConfiguration.isEmpty() ? this._localUserConfiguration : this._localUserConfiguration.merge(this._remoteUserConfiguration);\r\n if (this._freeze) {\r\n this._userConfiguration.freeze();\r\n }\r\n }\r\n return this._userConfiguration;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Configuration.prototype, \"localUserConfiguration\", {\r\n get: function () {\r\n return this._localUserConfiguration;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Configuration.prototype, \"remoteUserConfiguration\", {\r\n get: function () {\r\n return this._remoteUserConfiguration;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Configuration.prototype.getConsolidateConfigurationModel = function (overrides, workspace) {\r\n var configurationModel = this.getConsolidatedConfigurationModelForResource(overrides, workspace);\r\n return overrides.overrideIdentifier ? configurationModel.override(overrides.overrideIdentifier) : configurationModel;\r\n };\r\n Configuration.prototype.getConsolidatedConfigurationModelForResource = function (_a, workspace) {\r\n var resource = _a.resource;\r\n var consolidateConfiguration = this.getWorkspaceConsolidatedConfiguration();\r\n if (workspace && resource) {\r\n var root = workspace.getFolder(resource);\r\n if (root) {\r\n consolidateConfiguration = this.getFolderConsolidatedConfiguration(root.uri) || consolidateConfiguration;\r\n }\r\n var memoryConfigurationForResource = this._memoryConfigurationByResource.get(resource);\r\n if (memoryConfigurationForResource) {\r\n consolidateConfiguration = consolidateConfiguration.merge(memoryConfigurationForResource);\r\n }\r\n }\r\n return consolidateConfiguration;\r\n };\r\n Configuration.prototype.getWorkspaceConsolidatedConfiguration = function () {\r\n if (!this._workspaceConsolidatedConfiguration) {\r\n this._workspaceConsolidatedConfiguration = this._defaultConfiguration.merge(this.userConfiguration, this._workspaceConfiguration, this._memoryConfiguration);\r\n if (this._freeze) {\r\n this._workspaceConfiguration = this._workspaceConfiguration.freeze();\r\n }\r\n }\r\n return this._workspaceConsolidatedConfiguration;\r\n };\r\n Configuration.prototype.getFolderConsolidatedConfiguration = function (folder) {\r\n var folderConsolidatedConfiguration = this._foldersConsolidatedConfigurations.get(folder);\r\n if (!folderConsolidatedConfiguration) {\r\n var workspaceConsolidateConfiguration = this.getWorkspaceConsolidatedConfiguration();\r\n var folderConfiguration = this._folderConfigurations.get(folder);\r\n if (folderConfiguration) {\r\n folderConsolidatedConfiguration = workspaceConsolidateConfiguration.merge(folderConfiguration);\r\n if (this._freeze) {\r\n folderConsolidatedConfiguration = folderConsolidatedConfiguration.freeze();\r\n }\r\n this._foldersConsolidatedConfigurations.set(folder, folderConsolidatedConfiguration);\r\n }\r\n else {\r\n folderConsolidatedConfiguration = workspaceConsolidateConfiguration;\r\n }\r\n }\r\n return folderConsolidatedConfiguration;\r\n };\r\n Configuration.prototype.getFolderConfigurationModelForResource = function (resource, workspace) {\r\n if (workspace && resource) {\r\n var root = workspace.getFolder(resource);\r\n if (root) {\r\n return this._folderConfigurations.get(root.uri);\r\n }\r\n }\r\n return undefined;\r\n };\r\n return Configuration;\r\n}());\r\nexport { Configuration };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as nls from '../../../nls.js';\r\nimport { IntervalTimer } from '../../../base/common/async.js';\r\nimport { Emitter, Event } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nvar AbstractKeybindingService = /** @class */ (function (_super) {\r\n __extends(AbstractKeybindingService, _super);\r\n function AbstractKeybindingService(_contextKeyService, _commandService, _telemetryService, _notificationService) {\r\n var _this = _super.call(this) || this;\r\n _this._contextKeyService = _contextKeyService;\r\n _this._commandService = _commandService;\r\n _this._telemetryService = _telemetryService;\r\n _this._notificationService = _notificationService;\r\n _this._onDidUpdateKeybindings = _this._register(new Emitter());\r\n _this._currentChord = null;\r\n _this._currentChordChecker = new IntervalTimer();\r\n _this._currentChordStatusMessage = null;\r\n return _this;\r\n }\r\n Object.defineProperty(AbstractKeybindingService.prototype, \"onDidUpdateKeybindings\", {\r\n get: function () {\r\n return this._onDidUpdateKeybindings ? this._onDidUpdateKeybindings.event : Event.None; // Sinon stubbing walks properties on prototype\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AbstractKeybindingService.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n AbstractKeybindingService.prototype.getKeybindings = function () {\r\n return this._getResolver().getKeybindings();\r\n };\r\n AbstractKeybindingService.prototype.lookupKeybinding = function (commandId) {\r\n var result = this._getResolver().lookupPrimaryKeybinding(commandId);\r\n if (!result) {\r\n return undefined;\r\n }\r\n return result.resolvedKeybinding;\r\n };\r\n AbstractKeybindingService.prototype.softDispatch = function (e, target) {\r\n var keybinding = this.resolveKeyboardEvent(e);\r\n if (keybinding.isChord()) {\r\n console.warn('Unexpected keyboard event mapped to a chord');\r\n return null;\r\n }\r\n var firstPart = keybinding.getDispatchParts()[0];\r\n if (firstPart === null) {\r\n // cannot be dispatched, probably only modifier keys\r\n return null;\r\n }\r\n var contextValue = this._contextKeyService.getContext(target);\r\n var currentChord = this._currentChord ? this._currentChord.keypress : null;\r\n return this._getResolver().resolve(contextValue, currentChord, firstPart);\r\n };\r\n AbstractKeybindingService.prototype._enterChordMode = function (firstPart, keypressLabel) {\r\n var _this = this;\r\n this._currentChord = {\r\n keypress: firstPart,\r\n label: keypressLabel\r\n };\r\n this._currentChordStatusMessage = this._notificationService.status(nls.localize('first.chord', \"({0}) was pressed. Waiting for second key of chord...\", keypressLabel));\r\n var chordEnterTime = Date.now();\r\n this._currentChordChecker.cancelAndSet(function () {\r\n if (!_this._documentHasFocus()) {\r\n // Focus has been lost => leave chord mode\r\n _this._leaveChordMode();\r\n return;\r\n }\r\n if (Date.now() - chordEnterTime > 5000) {\r\n // 5 seconds elapsed => leave chord mode\r\n _this._leaveChordMode();\r\n }\r\n }, 500);\r\n };\r\n AbstractKeybindingService.prototype._leaveChordMode = function () {\r\n if (this._currentChordStatusMessage) {\r\n this._currentChordStatusMessage.dispose();\r\n this._currentChordStatusMessage = null;\r\n }\r\n this._currentChordChecker.cancel();\r\n this._currentChord = null;\r\n };\r\n AbstractKeybindingService.prototype._dispatch = function (e, target) {\r\n return this._doDispatch(this.resolveKeyboardEvent(e), target);\r\n };\r\n AbstractKeybindingService.prototype._doDispatch = function (keybinding, target) {\r\n var _this = this;\r\n var shouldPreventDefault = false;\r\n if (keybinding.isChord()) {\r\n console.warn('Unexpected keyboard event mapped to a chord');\r\n return false;\r\n }\r\n var firstPart = keybinding.getDispatchParts()[0];\r\n if (firstPart === null) {\r\n // cannot be dispatched, probably only modifier keys\r\n return shouldPreventDefault;\r\n }\r\n var contextValue = this._contextKeyService.getContext(target);\r\n var currentChord = this._currentChord ? this._currentChord.keypress : null;\r\n var keypressLabel = keybinding.getLabel();\r\n var resolveResult = this._getResolver().resolve(contextValue, currentChord, firstPart);\r\n if (resolveResult && resolveResult.enterChord) {\r\n shouldPreventDefault = true;\r\n this._enterChordMode(firstPart, keypressLabel);\r\n return shouldPreventDefault;\r\n }\r\n if (this._currentChord) {\r\n if (!resolveResult || !resolveResult.commandId) {\r\n this._notificationService.status(nls.localize('missing.chord', \"The key combination ({0}, {1}) is not a command.\", this._currentChord.label, keypressLabel), { hideAfter: 10 * 1000 /* 10s */ });\r\n shouldPreventDefault = true;\r\n }\r\n }\r\n this._leaveChordMode();\r\n if (resolveResult && resolveResult.commandId) {\r\n if (!resolveResult.bubble) {\r\n shouldPreventDefault = true;\r\n }\r\n if (typeof resolveResult.commandArgs === 'undefined') {\r\n this._commandService.executeCommand(resolveResult.commandId).then(undefined, function (err) { return _this._notificationService.warn(err); });\r\n }\r\n else {\r\n this._commandService.executeCommand(resolveResult.commandId, resolveResult.commandArgs).then(undefined, function (err) { return _this._notificationService.warn(err); });\r\n }\r\n this._telemetryService.publicLog2('workbenchActionExecuted', { id: resolveResult.commandId, from: 'keybinding' });\r\n }\r\n return shouldPreventDefault;\r\n };\r\n AbstractKeybindingService.prototype.mightProducePrintableCharacter = function (event) {\r\n if (event.ctrlKey || event.metaKey) {\r\n // ignore ctrl/cmd-combination but not shift/alt-combinatios\r\n return false;\r\n }\r\n // weak check for certain ranges. this is properly implemented in a subclass\r\n // with access to the KeyboardMapperFactory.\r\n if ((event.keyCode >= 31 /* KEY_A */ && event.keyCode <= 56 /* KEY_Z */)\r\n || (event.keyCode >= 21 /* KEY_0 */ && event.keyCode <= 30 /* KEY_9 */)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n return AbstractKeybindingService;\r\n}(Disposable));\r\nexport { AbstractKeybindingService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { isFalsyOrWhitespace } from '../../../base/common/strings.js';\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nvar ContextKeyExpr = /** @class */ (function () {\r\n function ContextKeyExpr() {\r\n }\r\n ContextKeyExpr.has = function (key) {\r\n return ContextKeyDefinedExpr.create(key);\r\n };\r\n ContextKeyExpr.equals = function (key, value) {\r\n return ContextKeyEqualsExpr.create(key, value);\r\n };\r\n ContextKeyExpr.regex = function (key, value) {\r\n return ContextKeyRegexExpr.create(key, value);\r\n };\r\n ContextKeyExpr.not = function (key) {\r\n return ContextKeyNotExpr.create(key);\r\n };\r\n ContextKeyExpr.and = function () {\r\n var expr = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n expr[_i] = arguments[_i];\r\n }\r\n return ContextKeyAndExpr.create(expr);\r\n };\r\n ContextKeyExpr.or = function () {\r\n var expr = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n expr[_i] = arguments[_i];\r\n }\r\n return ContextKeyOrExpr.create(expr);\r\n };\r\n ContextKeyExpr.deserialize = function (serialized, strict) {\r\n if (strict === void 0) { strict = false; }\r\n if (!serialized) {\r\n return undefined;\r\n }\r\n return this._deserializeOrExpression(serialized, strict);\r\n };\r\n ContextKeyExpr._deserializeOrExpression = function (serialized, strict) {\r\n var _this = this;\r\n var pieces = serialized.split('||');\r\n return ContextKeyOrExpr.create(pieces.map(function (p) { return _this._deserializeAndExpression(p, strict); }));\r\n };\r\n ContextKeyExpr._deserializeAndExpression = function (serialized, strict) {\r\n var _this = this;\r\n var pieces = serialized.split('&&');\r\n return ContextKeyAndExpr.create(pieces.map(function (p) { return _this._deserializeOne(p, strict); }));\r\n };\r\n ContextKeyExpr._deserializeOne = function (serializedOne, strict) {\r\n serializedOne = serializedOne.trim();\r\n if (serializedOne.indexOf('!=') >= 0) {\r\n var pieces = serializedOne.split('!=');\r\n return ContextKeyNotEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1], strict));\r\n }\r\n if (serializedOne.indexOf('==') >= 0) {\r\n var pieces = serializedOne.split('==');\r\n return ContextKeyEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1], strict));\r\n }\r\n if (serializedOne.indexOf('=~') >= 0) {\r\n var pieces = serializedOne.split('=~');\r\n return ContextKeyRegexExpr.create(pieces[0].trim(), this._deserializeRegexValue(pieces[1], strict));\r\n }\r\n if (/^\\!\\s*/.test(serializedOne)) {\r\n return ContextKeyNotExpr.create(serializedOne.substr(1).trim());\r\n }\r\n return ContextKeyDefinedExpr.create(serializedOne);\r\n };\r\n ContextKeyExpr._deserializeValue = function (serializedValue, strict) {\r\n serializedValue = serializedValue.trim();\r\n if (serializedValue === 'true') {\r\n return true;\r\n }\r\n if (serializedValue === 'false') {\r\n return false;\r\n }\r\n var m = /^'([^']*)'$/.exec(serializedValue);\r\n if (m) {\r\n return m[1].trim();\r\n }\r\n return serializedValue;\r\n };\r\n ContextKeyExpr._deserializeRegexValue = function (serializedValue, strict) {\r\n if (isFalsyOrWhitespace(serializedValue)) {\r\n if (strict) {\r\n throw new Error('missing regexp-value for =~-expression');\r\n }\r\n else {\r\n console.warn('missing regexp-value for =~-expression');\r\n }\r\n return null;\r\n }\r\n var start = serializedValue.indexOf('/');\r\n var end = serializedValue.lastIndexOf('/');\r\n if (start === end || start < 0 /* || to < 0 */) {\r\n if (strict) {\r\n throw new Error(\"bad regexp-value '\" + serializedValue + \"', missing /-enclosure\");\r\n }\r\n else {\r\n console.warn(\"bad regexp-value '\" + serializedValue + \"', missing /-enclosure\");\r\n }\r\n return null;\r\n }\r\n var value = serializedValue.slice(start + 1, end);\r\n var caseIgnoreFlag = serializedValue[end + 1] === 'i' ? 'i' : '';\r\n try {\r\n return new RegExp(value, caseIgnoreFlag);\r\n }\r\n catch (e) {\r\n if (strict) {\r\n throw new Error(\"bad regexp-value '\" + serializedValue + \"', parse error: \" + e);\r\n }\r\n else {\r\n console.warn(\"bad regexp-value '\" + serializedValue + \"', parse error: \" + e);\r\n }\r\n return null;\r\n }\r\n };\r\n return ContextKeyExpr;\r\n}());\r\nexport { ContextKeyExpr };\r\nfunction cmp(a, b) {\r\n var aType = a.getType();\r\n var bType = b.getType();\r\n if (aType !== bType) {\r\n return aType - bType;\r\n }\r\n switch (aType) {\r\n case 1 /* Defined */:\r\n return a.cmp(b);\r\n case 2 /* Not */:\r\n return a.cmp(b);\r\n case 3 /* Equals */:\r\n return a.cmp(b);\r\n case 4 /* NotEquals */:\r\n return a.cmp(b);\r\n case 6 /* Regex */:\r\n return a.cmp(b);\r\n case 7 /* NotRegex */:\r\n return a.cmp(b);\r\n case 5 /* And */:\r\n return a.cmp(b);\r\n default:\r\n throw new Error('Unknown ContextKeyExpr!');\r\n }\r\n}\r\nvar ContextKeyDefinedExpr = /** @class */ (function () {\r\n function ContextKeyDefinedExpr(key) {\r\n this.key = key;\r\n }\r\n ContextKeyDefinedExpr.create = function (key) {\r\n return new ContextKeyDefinedExpr(key);\r\n };\r\n ContextKeyDefinedExpr.prototype.getType = function () {\r\n return 1 /* Defined */;\r\n };\r\n ContextKeyDefinedExpr.prototype.cmp = function (other) {\r\n if (this.key < other.key) {\r\n return -1;\r\n }\r\n if (this.key > other.key) {\r\n return 1;\r\n }\r\n return 0;\r\n };\r\n ContextKeyDefinedExpr.prototype.equals = function (other) {\r\n if (other instanceof ContextKeyDefinedExpr) {\r\n return (this.key === other.key);\r\n }\r\n return false;\r\n };\r\n ContextKeyDefinedExpr.prototype.evaluate = function (context) {\r\n return (!!context.getValue(this.key));\r\n };\r\n ContextKeyDefinedExpr.prototype.keys = function () {\r\n return [this.key];\r\n };\r\n ContextKeyDefinedExpr.prototype.negate = function () {\r\n return ContextKeyNotExpr.create(this.key);\r\n };\r\n return ContextKeyDefinedExpr;\r\n}());\r\nexport { ContextKeyDefinedExpr };\r\nvar ContextKeyEqualsExpr = /** @class */ (function () {\r\n function ContextKeyEqualsExpr(key, value) {\r\n this.key = key;\r\n this.value = value;\r\n }\r\n ContextKeyEqualsExpr.create = function (key, value) {\r\n if (typeof value === 'boolean') {\r\n if (value) {\r\n return ContextKeyDefinedExpr.create(key);\r\n }\r\n return ContextKeyNotExpr.create(key);\r\n }\r\n return new ContextKeyEqualsExpr(key, value);\r\n };\r\n ContextKeyEqualsExpr.prototype.getType = function () {\r\n return 3 /* Equals */;\r\n };\r\n ContextKeyEqualsExpr.prototype.cmp = function (other) {\r\n if (this.key < other.key) {\r\n return -1;\r\n }\r\n if (this.key > other.key) {\r\n return 1;\r\n }\r\n if (this.value < other.value) {\r\n return -1;\r\n }\r\n if (this.value > other.value) {\r\n return 1;\r\n }\r\n return 0;\r\n };\r\n ContextKeyEqualsExpr.prototype.equals = function (other) {\r\n if (other instanceof ContextKeyEqualsExpr) {\r\n return (this.key === other.key && this.value === other.value);\r\n }\r\n return false;\r\n };\r\n ContextKeyEqualsExpr.prototype.evaluate = function (context) {\r\n /* tslint:disable:triple-equals */\r\n // Intentional ==\r\n return (context.getValue(this.key) == this.value);\r\n /* tslint:enable:triple-equals */\r\n };\r\n ContextKeyEqualsExpr.prototype.keys = function () {\r\n return [this.key];\r\n };\r\n ContextKeyEqualsExpr.prototype.negate = function () {\r\n return ContextKeyNotEqualsExpr.create(this.key, this.value);\r\n };\r\n return ContextKeyEqualsExpr;\r\n}());\r\nexport { ContextKeyEqualsExpr };\r\nvar ContextKeyNotEqualsExpr = /** @class */ (function () {\r\n function ContextKeyNotEqualsExpr(key, value) {\r\n this.key = key;\r\n this.value = value;\r\n }\r\n ContextKeyNotEqualsExpr.create = function (key, value) {\r\n if (typeof value === 'boolean') {\r\n if (value) {\r\n return ContextKeyNotExpr.create(key);\r\n }\r\n return ContextKeyDefinedExpr.create(key);\r\n }\r\n return new ContextKeyNotEqualsExpr(key, value);\r\n };\r\n ContextKeyNotEqualsExpr.prototype.getType = function () {\r\n return 4 /* NotEquals */;\r\n };\r\n ContextKeyNotEqualsExpr.prototype.cmp = function (other) {\r\n if (this.key < other.key) {\r\n return -1;\r\n }\r\n if (this.key > other.key) {\r\n return 1;\r\n }\r\n if (this.value < other.value) {\r\n return -1;\r\n }\r\n if (this.value > other.value) {\r\n return 1;\r\n }\r\n return 0;\r\n };\r\n ContextKeyNotEqualsExpr.prototype.equals = function (other) {\r\n if (other instanceof ContextKeyNotEqualsExpr) {\r\n return (this.key === other.key && this.value === other.value);\r\n }\r\n return false;\r\n };\r\n ContextKeyNotEqualsExpr.prototype.evaluate = function (context) {\r\n /* tslint:disable:triple-equals */\r\n // Intentional !=\r\n return (context.getValue(this.key) != this.value);\r\n /* tslint:enable:triple-equals */\r\n };\r\n ContextKeyNotEqualsExpr.prototype.keys = function () {\r\n return [this.key];\r\n };\r\n ContextKeyNotEqualsExpr.prototype.negate = function () {\r\n return ContextKeyEqualsExpr.create(this.key, this.value);\r\n };\r\n return ContextKeyNotEqualsExpr;\r\n}());\r\nexport { ContextKeyNotEqualsExpr };\r\nvar ContextKeyNotExpr = /** @class */ (function () {\r\n function ContextKeyNotExpr(key) {\r\n this.key = key;\r\n }\r\n ContextKeyNotExpr.create = function (key) {\r\n return new ContextKeyNotExpr(key);\r\n };\r\n ContextKeyNotExpr.prototype.getType = function () {\r\n return 2 /* Not */;\r\n };\r\n ContextKeyNotExpr.prototype.cmp = function (other) {\r\n if (this.key < other.key) {\r\n return -1;\r\n }\r\n if (this.key > other.key) {\r\n return 1;\r\n }\r\n return 0;\r\n };\r\n ContextKeyNotExpr.prototype.equals = function (other) {\r\n if (other instanceof ContextKeyNotExpr) {\r\n return (this.key === other.key);\r\n }\r\n return false;\r\n };\r\n ContextKeyNotExpr.prototype.evaluate = function (context) {\r\n return (!context.getValue(this.key));\r\n };\r\n ContextKeyNotExpr.prototype.keys = function () {\r\n return [this.key];\r\n };\r\n ContextKeyNotExpr.prototype.negate = function () {\r\n return ContextKeyDefinedExpr.create(this.key);\r\n };\r\n return ContextKeyNotExpr;\r\n}());\r\nexport { ContextKeyNotExpr };\r\nvar ContextKeyRegexExpr = /** @class */ (function () {\r\n function ContextKeyRegexExpr(key, regexp) {\r\n this.key = key;\r\n this.regexp = regexp;\r\n //\r\n }\r\n ContextKeyRegexExpr.create = function (key, regexp) {\r\n return new ContextKeyRegexExpr(key, regexp);\r\n };\r\n ContextKeyRegexExpr.prototype.getType = function () {\r\n return 6 /* Regex */;\r\n };\r\n ContextKeyRegexExpr.prototype.cmp = function (other) {\r\n if (this.key < other.key) {\r\n return -1;\r\n }\r\n if (this.key > other.key) {\r\n return 1;\r\n }\r\n var thisSource = this.regexp ? this.regexp.source : '';\r\n var otherSource = other.regexp ? other.regexp.source : '';\r\n if (thisSource < otherSource) {\r\n return -1;\r\n }\r\n if (thisSource > otherSource) {\r\n return 1;\r\n }\r\n return 0;\r\n };\r\n ContextKeyRegexExpr.prototype.equals = function (other) {\r\n if (other instanceof ContextKeyRegexExpr) {\r\n var thisSource = this.regexp ? this.regexp.source : '';\r\n var otherSource = other.regexp ? other.regexp.source : '';\r\n return (this.key === other.key && thisSource === otherSource);\r\n }\r\n return false;\r\n };\r\n ContextKeyRegexExpr.prototype.evaluate = function (context) {\r\n var value = context.getValue(this.key);\r\n return this.regexp ? this.regexp.test(value) : false;\r\n };\r\n ContextKeyRegexExpr.prototype.keys = function () {\r\n return [this.key];\r\n };\r\n ContextKeyRegexExpr.prototype.negate = function () {\r\n return ContextKeyNotRegexExpr.create(this);\r\n };\r\n return ContextKeyRegexExpr;\r\n}());\r\nexport { ContextKeyRegexExpr };\r\nvar ContextKeyNotRegexExpr = /** @class */ (function () {\r\n function ContextKeyNotRegexExpr(_actual) {\r\n this._actual = _actual;\r\n //\r\n }\r\n ContextKeyNotRegexExpr.create = function (actual) {\r\n return new ContextKeyNotRegexExpr(actual);\r\n };\r\n ContextKeyNotRegexExpr.prototype.getType = function () {\r\n return 7 /* NotRegex */;\r\n };\r\n ContextKeyNotRegexExpr.prototype.cmp = function (other) {\r\n return this._actual.cmp(other._actual);\r\n };\r\n ContextKeyNotRegexExpr.prototype.equals = function (other) {\r\n if (other instanceof ContextKeyNotRegexExpr) {\r\n return this._actual.equals(other._actual);\r\n }\r\n return false;\r\n };\r\n ContextKeyNotRegexExpr.prototype.evaluate = function (context) {\r\n return !this._actual.evaluate(context);\r\n };\r\n ContextKeyNotRegexExpr.prototype.keys = function () {\r\n return this._actual.keys();\r\n };\r\n ContextKeyNotRegexExpr.prototype.negate = function () {\r\n return this._actual;\r\n };\r\n return ContextKeyNotRegexExpr;\r\n}());\r\nexport { ContextKeyNotRegexExpr };\r\nvar ContextKeyAndExpr = /** @class */ (function () {\r\n function ContextKeyAndExpr(expr) {\r\n this.expr = expr;\r\n }\r\n ContextKeyAndExpr.create = function (_expr) {\r\n var expr = ContextKeyAndExpr._normalizeArr(_expr);\r\n if (expr.length === 0) {\r\n return undefined;\r\n }\r\n if (expr.length === 1) {\r\n return expr[0];\r\n }\r\n return new ContextKeyAndExpr(expr);\r\n };\r\n ContextKeyAndExpr.prototype.getType = function () {\r\n return 5 /* And */;\r\n };\r\n ContextKeyAndExpr.prototype.cmp = function (other) {\r\n if (this.expr.length < other.expr.length) {\r\n return -1;\r\n }\r\n if (this.expr.length > other.expr.length) {\r\n return 1;\r\n }\r\n for (var i = 0, len = this.expr.length; i < len; i++) {\r\n var r = cmp(this.expr[i], other.expr[i]);\r\n if (r !== 0) {\r\n return r;\r\n }\r\n }\r\n return 0;\r\n };\r\n ContextKeyAndExpr.prototype.equals = function (other) {\r\n if (other instanceof ContextKeyAndExpr) {\r\n if (this.expr.length !== other.expr.length) {\r\n return false;\r\n }\r\n for (var i = 0, len = this.expr.length; i < len; i++) {\r\n if (!this.expr[i].equals(other.expr[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n };\r\n ContextKeyAndExpr.prototype.evaluate = function (context) {\r\n for (var i = 0, len = this.expr.length; i < len; i++) {\r\n if (!this.expr[i].evaluate(context)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n ContextKeyAndExpr._normalizeArr = function (arr) {\r\n var expr = [];\r\n if (arr) {\r\n for (var i = 0, len = arr.length; i < len; i++) {\r\n var e = arr[i];\r\n if (!e) {\r\n continue;\r\n }\r\n if (e instanceof ContextKeyAndExpr) {\r\n expr = expr.concat(e.expr);\r\n continue;\r\n }\r\n if (e instanceof ContextKeyOrExpr) {\r\n // Not allowed, because we don't have parens!\r\n throw new Error(\"It is not allowed to have an or expression here due to lack of parens! For example \\\"a && (b||c)\\\" is not supported, use \\\"(a&&b) || (a&&c)\\\" instead.\");\r\n }\r\n expr.push(e);\r\n }\r\n expr.sort(cmp);\r\n }\r\n return expr;\r\n };\r\n ContextKeyAndExpr.prototype.keys = function () {\r\n var result = [];\r\n for (var _i = 0, _a = this.expr; _i < _a.length; _i++) {\r\n var expr = _a[_i];\r\n result.push.apply(result, expr.keys());\r\n }\r\n return result;\r\n };\r\n ContextKeyAndExpr.prototype.negate = function () {\r\n var result = [];\r\n for (var _i = 0, _a = this.expr; _i < _a.length; _i++) {\r\n var expr = _a[_i];\r\n result.push(expr.negate());\r\n }\r\n return ContextKeyOrExpr.create(result);\r\n };\r\n return ContextKeyAndExpr;\r\n}());\r\nexport { ContextKeyAndExpr };\r\nvar ContextKeyOrExpr = /** @class */ (function () {\r\n function ContextKeyOrExpr(expr) {\r\n this.expr = expr;\r\n }\r\n ContextKeyOrExpr.create = function (_expr) {\r\n var expr = ContextKeyOrExpr._normalizeArr(_expr);\r\n if (expr.length === 0) {\r\n return undefined;\r\n }\r\n if (expr.length === 1) {\r\n return expr[0];\r\n }\r\n return new ContextKeyOrExpr(expr);\r\n };\r\n ContextKeyOrExpr.prototype.getType = function () {\r\n return 8 /* Or */;\r\n };\r\n ContextKeyOrExpr.prototype.equals = function (other) {\r\n if (other instanceof ContextKeyOrExpr) {\r\n if (this.expr.length !== other.expr.length) {\r\n return false;\r\n }\r\n for (var i = 0, len = this.expr.length; i < len; i++) {\r\n if (!this.expr[i].equals(other.expr[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n };\r\n ContextKeyOrExpr.prototype.evaluate = function (context) {\r\n for (var i = 0, len = this.expr.length; i < len; i++) {\r\n if (this.expr[i].evaluate(context)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n ContextKeyOrExpr._normalizeArr = function (arr) {\r\n var expr = [];\r\n if (arr) {\r\n for (var i = 0, len = arr.length; i < len; i++) {\r\n var e = arr[i];\r\n if (!e) {\r\n continue;\r\n }\r\n if (e instanceof ContextKeyOrExpr) {\r\n expr = expr.concat(e.expr);\r\n continue;\r\n }\r\n expr.push(e);\r\n }\r\n expr.sort(cmp);\r\n }\r\n return expr;\r\n };\r\n ContextKeyOrExpr.prototype.keys = function () {\r\n var result = [];\r\n for (var _i = 0, _a = this.expr; _i < _a.length; _i++) {\r\n var expr = _a[_i];\r\n result.push.apply(result, expr.keys());\r\n }\r\n return result;\r\n };\r\n ContextKeyOrExpr.prototype.negate = function () {\r\n var result = [];\r\n for (var _i = 0, _a = this.expr; _i < _a.length; _i++) {\r\n var expr = _a[_i];\r\n result.push(expr.negate());\r\n }\r\n var terminals = function (node) {\r\n if (node instanceof ContextKeyOrExpr) {\r\n return node.expr;\r\n }\r\n return [node];\r\n };\r\n // We don't support parens, so here we distribute the AND over the OR terminals\r\n // We always take the first 2 AND pairs and distribute them\r\n while (result.length > 1) {\r\n var LEFT = result.shift();\r\n var RIGHT = result.shift();\r\n var all = [];\r\n for (var _b = 0, _c = terminals(LEFT); _b < _c.length; _b++) {\r\n var left = _c[_b];\r\n for (var _d = 0, _e = terminals(RIGHT); _d < _e.length; _d++) {\r\n var right = _e[_d];\r\n all.push(ContextKeyExpr.and(left, right));\r\n }\r\n }\r\n result.unshift(ContextKeyExpr.or.apply(ContextKeyExpr, all));\r\n }\r\n return result[0];\r\n };\r\n return ContextKeyOrExpr;\r\n}());\r\nexport { ContextKeyOrExpr };\r\nvar RawContextKey = /** @class */ (function (_super) {\r\n __extends(RawContextKey, _super);\r\n function RawContextKey(key, defaultValue) {\r\n var _this = _super.call(this, key) || this;\r\n _this._defaultValue = defaultValue;\r\n return _this;\r\n }\r\n RawContextKey.prototype.bindTo = function (target) {\r\n return target.createKey(this.key, this._defaultValue);\r\n };\r\n RawContextKey.prototype.getValue = function (target) {\r\n return target.getContextKeyValue(this.key);\r\n };\r\n RawContextKey.prototype.toNegated = function () {\r\n return ContextKeyExpr.not(this.key);\r\n };\r\n return RawContextKey;\r\n}(ContextKeyDefinedExpr));\r\nexport { RawContextKey };\r\nexport var IContextKeyService = createDecorator('contextKeyService');\r\nexport var SET_CONTEXT_COMMAND_ID = 'setContext';\r\n","import { ContextKeyOrExpr } from '../../contextkey/common/contextkey.js';\r\nvar KeybindingResolver = /** @class */ (function () {\r\n function KeybindingResolver(defaultKeybindings, overrides) {\r\n this._defaultKeybindings = defaultKeybindings;\r\n this._defaultBoundCommands = new Map();\r\n for (var i = 0, len = defaultKeybindings.length; i < len; i++) {\r\n var command = defaultKeybindings[i].command;\r\n if (command) {\r\n this._defaultBoundCommands.set(command, true);\r\n }\r\n }\r\n this._map = new Map();\r\n this._lookupMap = new Map();\r\n this._keybindings = KeybindingResolver.combine(defaultKeybindings, overrides);\r\n for (var i = 0, len = this._keybindings.length; i < len; i++) {\r\n var k = this._keybindings[i];\r\n if (k.keypressParts.length === 0) {\r\n // unbound\r\n continue;\r\n }\r\n // TODO@chords\r\n this._addKeyPress(k.keypressParts[0], k);\r\n }\r\n }\r\n KeybindingResolver._isTargetedForRemoval = function (defaultKb, keypressFirstPart, keypressChordPart, command, when) {\r\n if (defaultKb.command !== command) {\r\n return false;\r\n }\r\n // TODO@chords\r\n if (keypressFirstPart && defaultKb.keypressParts[0] !== keypressFirstPart) {\r\n return false;\r\n }\r\n // TODO@chords\r\n if (keypressChordPart && defaultKb.keypressParts[1] !== keypressChordPart) {\r\n return false;\r\n }\r\n if (when) {\r\n if (!defaultKb.when) {\r\n return false;\r\n }\r\n if (!when.equals(defaultKb.when)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * Looks for rules containing -command in `overrides` and removes them directly from `defaults`.\r\n */\r\n KeybindingResolver.combine = function (defaults, rawOverrides) {\r\n defaults = defaults.slice(0);\r\n var overrides = [];\r\n for (var _i = 0, rawOverrides_1 = rawOverrides; _i < rawOverrides_1.length; _i++) {\r\n var override = rawOverrides_1[_i];\r\n if (!override.command || override.command.length === 0 || override.command.charAt(0) !== '-') {\r\n overrides.push(override);\r\n continue;\r\n }\r\n var command = override.command.substr(1);\r\n // TODO@chords\r\n var keypressFirstPart = override.keypressParts[0];\r\n var keypressChordPart = override.keypressParts[1];\r\n var when = override.when;\r\n for (var j = defaults.length - 1; j >= 0; j--) {\r\n if (this._isTargetedForRemoval(defaults[j], keypressFirstPart, keypressChordPart, command, when)) {\r\n defaults.splice(j, 1);\r\n }\r\n }\r\n }\r\n return defaults.concat(overrides);\r\n };\r\n KeybindingResolver.prototype._addKeyPress = function (keypress, item) {\r\n var conflicts = this._map.get(keypress);\r\n if (typeof conflicts === 'undefined') {\r\n // There is no conflict so far\r\n this._map.set(keypress, [item]);\r\n this._addToLookupMap(item);\r\n return;\r\n }\r\n for (var i = conflicts.length - 1; i >= 0; i--) {\r\n var conflict = conflicts[i];\r\n if (conflict.command === item.command) {\r\n continue;\r\n }\r\n var conflictIsChord = (conflict.keypressParts.length > 1);\r\n var itemIsChord = (item.keypressParts.length > 1);\r\n // TODO@chords\r\n if (conflictIsChord && itemIsChord && conflict.keypressParts[1] !== item.keypressParts[1]) {\r\n // The conflict only shares the chord start with this command\r\n continue;\r\n }\r\n if (KeybindingResolver.whenIsEntirelyIncluded(conflict.when, item.when)) {\r\n // `item` completely overwrites `conflict`\r\n // Remove conflict from the lookupMap\r\n this._removeFromLookupMap(conflict);\r\n }\r\n }\r\n conflicts.push(item);\r\n this._addToLookupMap(item);\r\n };\r\n KeybindingResolver.prototype._addToLookupMap = function (item) {\r\n if (!item.command) {\r\n return;\r\n }\r\n var arr = this._lookupMap.get(item.command);\r\n if (typeof arr === 'undefined') {\r\n arr = [item];\r\n this._lookupMap.set(item.command, arr);\r\n }\r\n else {\r\n arr.push(item);\r\n }\r\n };\r\n KeybindingResolver.prototype._removeFromLookupMap = function (item) {\r\n if (!item.command) {\r\n return;\r\n }\r\n var arr = this._lookupMap.get(item.command);\r\n if (typeof arr === 'undefined') {\r\n return;\r\n }\r\n for (var i = 0, len = arr.length; i < len; i++) {\r\n if (arr[i] === item) {\r\n arr.splice(i, 1);\r\n return;\r\n }\r\n }\r\n };\r\n /**\r\n * Returns true if it is provable `a` implies `b`.\r\n */\r\n KeybindingResolver.whenIsEntirelyIncluded = function (a, b) {\r\n if (!b) {\r\n return true;\r\n }\r\n if (!a) {\r\n return false;\r\n }\r\n return this._implies(a, b);\r\n };\r\n /**\r\n * Returns true if it is provable `p` implies `q`.\r\n */\r\n KeybindingResolver._implies = function (p, q) {\r\n var notP = p.negate();\r\n var terminals = function (node) {\r\n if (node instanceof ContextKeyOrExpr) {\r\n return node.expr;\r\n }\r\n return [node];\r\n };\r\n var expr = terminals(notP).concat(terminals(q));\r\n for (var i = 0; i < expr.length; i++) {\r\n var a = expr[i];\r\n var notA = a.negate();\r\n for (var j = i + 1; j < expr.length; j++) {\r\n var b = expr[j];\r\n if (notA.equals(b)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n KeybindingResolver.prototype.getKeybindings = function () {\r\n return this._keybindings;\r\n };\r\n KeybindingResolver.prototype.lookupPrimaryKeybinding = function (commandId) {\r\n var items = this._lookupMap.get(commandId);\r\n if (typeof items === 'undefined' || items.length === 0) {\r\n return null;\r\n }\r\n return items[items.length - 1];\r\n };\r\n KeybindingResolver.prototype.resolve = function (context, currentChord, keypress) {\r\n var lookupMap = null;\r\n if (currentChord !== null) {\r\n // Fetch all chord bindings for `currentChord`\r\n var candidates = this._map.get(currentChord);\r\n if (typeof candidates === 'undefined') {\r\n // No chords starting with `currentChord`\r\n return null;\r\n }\r\n lookupMap = [];\r\n for (var i = 0, len = candidates.length; i < len; i++) {\r\n var candidate = candidates[i];\r\n // TODO@chords\r\n if (candidate.keypressParts[1] === keypress) {\r\n lookupMap.push(candidate);\r\n }\r\n }\r\n }\r\n else {\r\n var candidates = this._map.get(keypress);\r\n if (typeof candidates === 'undefined') {\r\n // No bindings with `keypress`\r\n return null;\r\n }\r\n lookupMap = candidates;\r\n }\r\n var result = this._findCommand(context, lookupMap);\r\n if (!result) {\r\n return null;\r\n }\r\n // TODO@chords\r\n if (currentChord === null && result.keypressParts.length > 1 && result.keypressParts[1] !== null) {\r\n return {\r\n enterChord: true,\r\n commandId: null,\r\n commandArgs: null,\r\n bubble: false\r\n };\r\n }\r\n return {\r\n enterChord: false,\r\n commandId: result.command,\r\n commandArgs: result.commandArgs,\r\n bubble: result.bubble\r\n };\r\n };\r\n KeybindingResolver.prototype._findCommand = function (context, matches) {\r\n for (var i = matches.length - 1; i >= 0; i--) {\r\n var k = matches[i];\r\n if (!KeybindingResolver.contextMatchesRules(context, k.when)) {\r\n continue;\r\n }\r\n return k;\r\n }\r\n return null;\r\n };\r\n KeybindingResolver.contextMatchesRules = function (context, rules) {\r\n if (!rules) {\r\n return true;\r\n }\r\n return rules.evaluate(context);\r\n };\r\n return KeybindingResolver;\r\n}());\r\nexport { KeybindingResolver };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createKeybinding } from '../../../base/common/keyCodes.js';\r\nimport { OS } from '../../../base/common/platform.js';\r\nimport { CommandsRegistry } from '../../commands/common/commands.js';\r\nimport { Registry } from '../../registry/common/platform.js';\r\nvar KeybindingsRegistryImpl = /** @class */ (function () {\r\n function KeybindingsRegistryImpl() {\r\n this._coreKeybindings = [];\r\n this._extensionKeybindings = [];\r\n this._cachedMergedKeybindings = null;\r\n }\r\n /**\r\n * Take current platform into account and reduce to primary & secondary.\r\n */\r\n KeybindingsRegistryImpl.bindToCurrentPlatform = function (kb) {\r\n if (OS === 1 /* Windows */) {\r\n if (kb && kb.win) {\r\n return kb.win;\r\n }\r\n }\r\n else if (OS === 2 /* Macintosh */) {\r\n if (kb && kb.mac) {\r\n return kb.mac;\r\n }\r\n }\r\n else {\r\n if (kb && kb.linux) {\r\n return kb.linux;\r\n }\r\n }\r\n return kb;\r\n };\r\n KeybindingsRegistryImpl.prototype.registerKeybindingRule = function (rule) {\r\n var actualKb = KeybindingsRegistryImpl.bindToCurrentPlatform(rule);\r\n if (actualKb && actualKb.primary) {\r\n var kk = createKeybinding(actualKb.primary, OS);\r\n if (kk) {\r\n this._registerDefaultKeybinding(kk, rule.id, rule.args, rule.weight, 0, rule.when);\r\n }\r\n }\r\n if (actualKb && Array.isArray(actualKb.secondary)) {\r\n for (var i = 0, len = actualKb.secondary.length; i < len; i++) {\r\n var k = actualKb.secondary[i];\r\n var kk = createKeybinding(k, OS);\r\n if (kk) {\r\n this._registerDefaultKeybinding(kk, rule.id, rule.args, rule.weight, -i - 1, rule.when);\r\n }\r\n }\r\n }\r\n };\r\n KeybindingsRegistryImpl.prototype.registerCommandAndKeybindingRule = function (desc) {\r\n this.registerKeybindingRule(desc);\r\n CommandsRegistry.registerCommand(desc);\r\n };\r\n KeybindingsRegistryImpl._mightProduceChar = function (keyCode) {\r\n if (keyCode >= 21 /* KEY_0 */ && keyCode <= 30 /* KEY_9 */) {\r\n return true;\r\n }\r\n if (keyCode >= 31 /* KEY_A */ && keyCode <= 56 /* KEY_Z */) {\r\n return true;\r\n }\r\n return (keyCode === 80 /* US_SEMICOLON */\r\n || keyCode === 81 /* US_EQUAL */\r\n || keyCode === 82 /* US_COMMA */\r\n || keyCode === 83 /* US_MINUS */\r\n || keyCode === 84 /* US_DOT */\r\n || keyCode === 85 /* US_SLASH */\r\n || keyCode === 86 /* US_BACKTICK */\r\n || keyCode === 110 /* ABNT_C1 */\r\n || keyCode === 111 /* ABNT_C2 */\r\n || keyCode === 87 /* US_OPEN_SQUARE_BRACKET */\r\n || keyCode === 88 /* US_BACKSLASH */\r\n || keyCode === 89 /* US_CLOSE_SQUARE_BRACKET */\r\n || keyCode === 90 /* US_QUOTE */\r\n || keyCode === 91 /* OEM_8 */\r\n || keyCode === 92 /* OEM_102 */);\r\n };\r\n KeybindingsRegistryImpl.prototype._assertNoCtrlAlt = function (keybinding, commandId) {\r\n if (keybinding.ctrlKey && keybinding.altKey && !keybinding.metaKey) {\r\n if (KeybindingsRegistryImpl._mightProduceChar(keybinding.keyCode)) {\r\n console.warn('Ctrl+Alt+ keybindings should not be used by default under Windows. Offender: ', keybinding, ' for ', commandId);\r\n }\r\n }\r\n };\r\n KeybindingsRegistryImpl.prototype._registerDefaultKeybinding = function (keybinding, commandId, commandArgs, weight1, weight2, when) {\r\n if (OS === 1 /* Windows */) {\r\n this._assertNoCtrlAlt(keybinding.parts[0], commandId);\r\n }\r\n this._coreKeybindings.push({\r\n keybinding: keybinding,\r\n command: commandId,\r\n commandArgs: commandArgs,\r\n when: when,\r\n weight1: weight1,\r\n weight2: weight2\r\n });\r\n this._cachedMergedKeybindings = null;\r\n };\r\n KeybindingsRegistryImpl.prototype.getDefaultKeybindings = function () {\r\n if (!this._cachedMergedKeybindings) {\r\n this._cachedMergedKeybindings = [].concat(this._coreKeybindings).concat(this._extensionKeybindings);\r\n this._cachedMergedKeybindings.sort(sorter);\r\n }\r\n return this._cachedMergedKeybindings.slice(0);\r\n };\r\n return KeybindingsRegistryImpl;\r\n}());\r\nexport var KeybindingsRegistry = new KeybindingsRegistryImpl();\r\n// Define extension point ids\r\nexport var Extensions = {\r\n EditorModes: 'platform.keybindingsRegistry'\r\n};\r\nRegistry.add(Extensions.EditorModes, KeybindingsRegistry);\r\nfunction sorter(a, b) {\r\n if (a.weight1 !== b.weight1) {\r\n return a.weight1 - b.weight1;\r\n }\r\n if (a.command < b.command) {\r\n return -1;\r\n }\r\n if (a.command > b.command) {\r\n return 1;\r\n }\r\n return a.weight2 - b.weight2;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar ResolvedKeybindingItem = /** @class */ (function () {\r\n function ResolvedKeybindingItem(resolvedKeybinding, command, commandArgs, when, isDefault) {\r\n this.resolvedKeybinding = resolvedKeybinding;\r\n this.keypressParts = resolvedKeybinding ? removeElementsAfterNulls(resolvedKeybinding.getDispatchParts()) : [];\r\n this.bubble = (command ? command.charCodeAt(0) === 94 /* Caret */ : false);\r\n this.command = this.bubble ? command.substr(1) : command;\r\n this.commandArgs = commandArgs;\r\n this.when = when;\r\n this.isDefault = isDefault;\r\n }\r\n return ResolvedKeybindingItem;\r\n}());\r\nexport { ResolvedKeybindingItem };\r\nexport function removeElementsAfterNulls(arr) {\r\n var result = [];\r\n for (var i = 0, len = arr.length; i < len; i++) {\r\n var element = arr[i];\r\n if (!element) {\r\n // stop processing at first encountered null\r\n return result;\r\n }\r\n result.push(element);\r\n }\r\n return result;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as nls from '../../nls.js';\r\nvar ModifierLabelProvider = /** @class */ (function () {\r\n function ModifierLabelProvider(mac, windows, linux) {\r\n if (linux === void 0) { linux = windows; }\r\n this.modifierLabels = [null]; // index 0 will never me accessed.\r\n this.modifierLabels[2 /* Macintosh */] = mac;\r\n this.modifierLabels[1 /* Windows */] = windows;\r\n this.modifierLabels[3 /* Linux */] = linux;\r\n }\r\n ModifierLabelProvider.prototype.toLabel = function (OS, parts, keyLabelProvider) {\r\n if (parts.length === 0) {\r\n return null;\r\n }\r\n var result = [];\r\n for (var i = 0, len = parts.length; i < len; i++) {\r\n var part = parts[i];\r\n var keyLabel = keyLabelProvider(part);\r\n if (keyLabel === null) {\r\n // this keybinding cannot be expressed...\r\n return null;\r\n }\r\n result[i] = _simpleAsString(part, keyLabel, this.modifierLabels[OS]);\r\n }\r\n return result.join(' ');\r\n };\r\n return ModifierLabelProvider;\r\n}());\r\nexport { ModifierLabelProvider };\r\n/**\r\n * A label provider that prints modifiers in a suitable format for displaying in the UI.\r\n */\r\nexport var UILabelProvider = new ModifierLabelProvider({\r\n ctrlKey: '⌃',\r\n shiftKey: '⇧',\r\n altKey: '⌥',\r\n metaKey: '⌘',\r\n separator: '',\r\n}, {\r\n ctrlKey: nls.localize({ key: 'ctrlKey', comment: ['This is the short form for the Control key on the keyboard'] }, \"Ctrl\"),\r\n shiftKey: nls.localize({ key: 'shiftKey', comment: ['This is the short form for the Shift key on the keyboard'] }, \"Shift\"),\r\n altKey: nls.localize({ key: 'altKey', comment: ['This is the short form for the Alt key on the keyboard'] }, \"Alt\"),\r\n metaKey: nls.localize({ key: 'windowsKey', comment: ['This is the short form for the Windows key on the keyboard'] }, \"Windows\"),\r\n separator: '+',\r\n}, {\r\n ctrlKey: nls.localize({ key: 'ctrlKey', comment: ['This is the short form for the Control key on the keyboard'] }, \"Ctrl\"),\r\n shiftKey: nls.localize({ key: 'shiftKey', comment: ['This is the short form for the Shift key on the keyboard'] }, \"Shift\"),\r\n altKey: nls.localize({ key: 'altKey', comment: ['This is the short form for the Alt key on the keyboard'] }, \"Alt\"),\r\n metaKey: nls.localize({ key: 'superKey', comment: ['This is the short form for the Super key on the keyboard'] }, \"Super\"),\r\n separator: '+',\r\n});\r\n/**\r\n * A label provider that prints modifiers in a suitable format for ARIA.\r\n */\r\nexport var AriaLabelProvider = new ModifierLabelProvider({\r\n ctrlKey: nls.localize({ key: 'ctrlKey.long', comment: ['This is the long form for the Control key on the keyboard'] }, \"Control\"),\r\n shiftKey: nls.localize({ key: 'shiftKey.long', comment: ['This is the long form for the Shift key on the keyboard'] }, \"Shift\"),\r\n altKey: nls.localize({ key: 'altKey.long', comment: ['This is the long form for the Alt key on the keyboard'] }, \"Alt\"),\r\n metaKey: nls.localize({ key: 'cmdKey.long', comment: ['This is the long form for the Command key on the keyboard'] }, \"Command\"),\r\n separator: '+',\r\n}, {\r\n ctrlKey: nls.localize({ key: 'ctrlKey.long', comment: ['This is the long form for the Control key on the keyboard'] }, \"Control\"),\r\n shiftKey: nls.localize({ key: 'shiftKey.long', comment: ['This is the long form for the Shift key on the keyboard'] }, \"Shift\"),\r\n altKey: nls.localize({ key: 'altKey.long', comment: ['This is the long form for the Alt key on the keyboard'] }, \"Alt\"),\r\n metaKey: nls.localize({ key: 'windowsKey.long', comment: ['This is the long form for the Windows key on the keyboard'] }, \"Windows\"),\r\n separator: '+',\r\n}, {\r\n ctrlKey: nls.localize({ key: 'ctrlKey.long', comment: ['This is the long form for the Control key on the keyboard'] }, \"Control\"),\r\n shiftKey: nls.localize({ key: 'shiftKey.long', comment: ['This is the long form for the Shift key on the keyboard'] }, \"Shift\"),\r\n altKey: nls.localize({ key: 'altKey.long', comment: ['This is the long form for the Alt key on the keyboard'] }, \"Alt\"),\r\n metaKey: nls.localize({ key: 'superKey.long', comment: ['This is the long form for the Super key on the keyboard'] }, \"Super\"),\r\n separator: '+',\r\n});\r\nfunction _simpleAsString(modifiers, key, labels) {\r\n if (key === null) {\r\n return '';\r\n }\r\n var result = [];\r\n // translate modifier keys: Ctrl-Shift-Alt-Meta\r\n if (modifiers.ctrlKey) {\r\n result.push(labels.ctrlKey);\r\n }\r\n if (modifiers.shiftKey) {\r\n result.push(labels.shiftKey);\r\n }\r\n if (modifiers.altKey) {\r\n result.push(labels.altKey);\r\n }\r\n if (modifiers.metaKey) {\r\n result.push(labels.metaKey);\r\n }\r\n // the actual key\r\n result.push(key);\r\n return result.join(labels.separator);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { illegalArgument } from '../../../base/common/errors.js';\r\nimport { UILabelProvider, AriaLabelProvider } from '../../../base/common/keybindingLabels.js';\r\nimport { ResolvedKeybinding, ResolvedKeybindingPart } from '../../../base/common/keyCodes.js';\r\nvar BaseResolvedKeybinding = /** @class */ (function (_super) {\r\n __extends(BaseResolvedKeybinding, _super);\r\n function BaseResolvedKeybinding(os, parts) {\r\n var _this = _super.call(this) || this;\r\n if (parts.length === 0) {\r\n throw illegalArgument(\"parts\");\r\n }\r\n _this._os = os;\r\n _this._parts = parts;\r\n return _this;\r\n }\r\n BaseResolvedKeybinding.prototype.getLabel = function () {\r\n var _this = this;\r\n return UILabelProvider.toLabel(this._os, this._parts, function (keybinding) { return _this._getLabel(keybinding); });\r\n };\r\n BaseResolvedKeybinding.prototype.getAriaLabel = function () {\r\n var _this = this;\r\n return AriaLabelProvider.toLabel(this._os, this._parts, function (keybinding) { return _this._getAriaLabel(keybinding); });\r\n };\r\n BaseResolvedKeybinding.prototype.isChord = function () {\r\n return (this._parts.length > 1);\r\n };\r\n BaseResolvedKeybinding.prototype.getParts = function () {\r\n var _this = this;\r\n return this._parts.map(function (keybinding) { return _this._getPart(keybinding); });\r\n };\r\n BaseResolvedKeybinding.prototype._getPart = function (keybinding) {\r\n return new ResolvedKeybindingPart(keybinding.ctrlKey, keybinding.shiftKey, keybinding.altKey, keybinding.metaKey, this._getLabel(keybinding), this._getAriaLabel(keybinding));\r\n };\r\n BaseResolvedKeybinding.prototype.getDispatchParts = function () {\r\n var _this = this;\r\n return this._parts.map(function (keybinding) { return _this._getDispatchPart(keybinding); });\r\n };\r\n return BaseResolvedKeybinding;\r\n}(ResolvedKeybinding));\r\nexport { BaseResolvedKeybinding };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { URI } from '../../../base/common/uri.js';\r\nimport * as resources from '../../../base/common/resources.js';\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { TernarySearchTree } from '../../../base/common/map.js';\r\nexport var IWorkspaceContextService = createDecorator('contextService');\r\nexport var IWorkspace;\r\n(function (IWorkspace) {\r\n function isIWorkspace(thing) {\r\n return thing && typeof thing === 'object'\r\n && typeof thing.id === 'string'\r\n && Array.isArray(thing.folders);\r\n }\r\n IWorkspace.isIWorkspace = isIWorkspace;\r\n})(IWorkspace || (IWorkspace = {}));\r\nexport var IWorkspaceFolder;\r\n(function (IWorkspaceFolder) {\r\n function isIWorkspaceFolder(thing) {\r\n return thing && typeof thing === 'object'\r\n && URI.isUri(thing.uri)\r\n && typeof thing.name === 'string'\r\n && typeof thing.toResource === 'function';\r\n }\r\n IWorkspaceFolder.isIWorkspaceFolder = isIWorkspaceFolder;\r\n})(IWorkspaceFolder || (IWorkspaceFolder = {}));\r\nvar Workspace = /** @class */ (function () {\r\n function Workspace(_id, folders, _configuration) {\r\n if (folders === void 0) { folders = []; }\r\n if (_configuration === void 0) { _configuration = null; }\r\n this._id = _id;\r\n this._configuration = _configuration;\r\n this._foldersMap = TernarySearchTree.forPaths();\r\n this.folders = folders;\r\n }\r\n Object.defineProperty(Workspace.prototype, \"folders\", {\r\n get: function () {\r\n return this._folders;\r\n },\r\n set: function (folders) {\r\n this._folders = folders;\r\n this.updateFoldersMap();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Workspace.prototype, \"id\", {\r\n get: function () {\r\n return this._id;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Workspace.prototype, \"configuration\", {\r\n get: function () {\r\n return this._configuration;\r\n },\r\n set: function (configuration) {\r\n this._configuration = configuration;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Workspace.prototype.getFolder = function (resource) {\r\n if (!resource) {\r\n return null;\r\n }\r\n return this._foldersMap.findSubstr(resource.with({\r\n scheme: resource.scheme,\r\n authority: resource.authority,\r\n path: resource.path\r\n }).toString()) || null;\r\n };\r\n Workspace.prototype.updateFoldersMap = function () {\r\n this._foldersMap = TernarySearchTree.forPaths();\r\n for (var _i = 0, _a = this.folders; _i < _a.length; _i++) {\r\n var folder = _a[_i];\r\n this._foldersMap.set(folder.uri.toString(), folder);\r\n }\r\n };\r\n Workspace.prototype.toJSON = function () {\r\n return { id: this.id, folders: this.folders, configuration: this.configuration };\r\n };\r\n return Workspace;\r\n}());\r\nexport { Workspace };\r\nvar WorkspaceFolder = /** @class */ (function () {\r\n function WorkspaceFolder(data, raw) {\r\n this.raw = raw;\r\n this.uri = data.uri;\r\n this.index = data.index;\r\n this.name = data.name;\r\n }\r\n WorkspaceFolder.prototype.toResource = function (relativePath) {\r\n return resources.joinPath(this.uri, relativePath);\r\n };\r\n WorkspaceFolder.prototype.toJSON = function () {\r\n return { uri: this.uri, name: this.name, index: this.index };\r\n };\r\n return WorkspaceFolder;\r\n}());\r\nexport { WorkspaceFolder };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { KeyCodeUtils } from '../../../base/common/keyCodes.js';\r\nimport { BaseResolvedKeybinding } from './baseResolvedKeybinding.js';\r\n/**\r\n * Do not instantiate. Use KeybindingService to get a ResolvedKeybinding seeded with information about the current kb layout.\r\n */\r\nvar USLayoutResolvedKeybinding = /** @class */ (function (_super) {\r\n __extends(USLayoutResolvedKeybinding, _super);\r\n function USLayoutResolvedKeybinding(actual, os) {\r\n return _super.call(this, os, actual.parts) || this;\r\n }\r\n USLayoutResolvedKeybinding.prototype._keyCodeToUILabel = function (keyCode) {\r\n if (this._os === 2 /* Macintosh */) {\r\n switch (keyCode) {\r\n case 15 /* LeftArrow */:\r\n return '←';\r\n case 16 /* UpArrow */:\r\n return '↑';\r\n case 17 /* RightArrow */:\r\n return '→';\r\n case 18 /* DownArrow */:\r\n return '↓';\r\n }\r\n }\r\n return KeyCodeUtils.toString(keyCode);\r\n };\r\n USLayoutResolvedKeybinding.prototype._getLabel = function (keybinding) {\r\n if (keybinding.isDuplicateModifierCase()) {\r\n return '';\r\n }\r\n return this._keyCodeToUILabel(keybinding.keyCode);\r\n };\r\n USLayoutResolvedKeybinding.prototype._getAriaLabel = function (keybinding) {\r\n if (keybinding.isDuplicateModifierCase()) {\r\n return '';\r\n }\r\n return KeyCodeUtils.toString(keybinding.keyCode);\r\n };\r\n USLayoutResolvedKeybinding.prototype._getDispatchPart = function (keybinding) {\r\n return USLayoutResolvedKeybinding.getDispatchStr(keybinding);\r\n };\r\n USLayoutResolvedKeybinding.getDispatchStr = function (keybinding) {\r\n if (keybinding.isModifierKey()) {\r\n return null;\r\n }\r\n var result = '';\r\n if (keybinding.ctrlKey) {\r\n result += 'ctrl+';\r\n }\r\n if (keybinding.shiftKey) {\r\n result += 'shift+';\r\n }\r\n if (keybinding.altKey) {\r\n result += 'alt+';\r\n }\r\n if (keybinding.metaKey) {\r\n result += 'meta+';\r\n }\r\n result += KeyCodeUtils.toString(keybinding.keyCode);\r\n return result;\r\n };\r\n return USLayoutResolvedKeybinding;\r\n}(BaseResolvedKeybinding));\r\nexport { USLayoutResolvedKeybinding };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport BaseSeverity from '../../../base/common/severity.js';\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nexport var Severity = BaseSeverity;\r\nexport var INotificationService = createDecorator('notificationService');\r\nvar NoOpNotification = /** @class */ (function () {\r\n function NoOpNotification() {\r\n }\r\n return NoOpNotification;\r\n}());\r\nexport { NoOpNotification };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as nls from '../../nls.js';\r\nexport var AccessibilityHelpNLS;\r\n(function (AccessibilityHelpNLS) {\r\n AccessibilityHelpNLS.noSelection = nls.localize(\"noSelection\", \"No selection\");\r\n AccessibilityHelpNLS.singleSelectionRange = nls.localize(\"singleSelectionRange\", \"Line {0}, Column {1} ({2} selected)\");\r\n AccessibilityHelpNLS.singleSelection = nls.localize(\"singleSelection\", \"Line {0}, Column {1}\");\r\n AccessibilityHelpNLS.multiSelectionRange = nls.localize(\"multiSelectionRange\", \"{0} selections ({1} characters selected)\");\r\n AccessibilityHelpNLS.multiSelection = nls.localize(\"multiSelection\", \"{0} selections\");\r\n AccessibilityHelpNLS.emergencyConfOn = nls.localize(\"emergencyConfOn\", \"Now changing the setting `accessibilitySupport` to 'on'.\");\r\n AccessibilityHelpNLS.openingDocs = nls.localize(\"openingDocs\", \"Now opening the Editor Accessibility documentation page.\");\r\n AccessibilityHelpNLS.readonlyDiffEditor = nls.localize(\"readonlyDiffEditor\", \" in a read-only pane of a diff editor.\");\r\n AccessibilityHelpNLS.editableDiffEditor = nls.localize(\"editableDiffEditor\", \" in a pane of a diff editor.\");\r\n AccessibilityHelpNLS.readonlyEditor = nls.localize(\"readonlyEditor\", \" in a read-only code editor\");\r\n AccessibilityHelpNLS.editableEditor = nls.localize(\"editableEditor\", \" in a code editor\");\r\n AccessibilityHelpNLS.changeConfigToOnMac = nls.localize(\"changeConfigToOnMac\", \"To configure the editor to be optimized for usage with a Screen Reader press Command+E now.\");\r\n AccessibilityHelpNLS.changeConfigToOnWinLinux = nls.localize(\"changeConfigToOnWinLinux\", \"To configure the editor to be optimized for usage with a Screen Reader press Control+E now.\");\r\n AccessibilityHelpNLS.auto_on = nls.localize(\"auto_on\", \"The editor is configured to be optimized for usage with a Screen Reader.\");\r\n AccessibilityHelpNLS.auto_off = nls.localize(\"auto_off\", \"The editor is configured to never be optimized for usage with a Screen Reader, which is not the case at this time.\");\r\n AccessibilityHelpNLS.tabFocusModeOnMsg = nls.localize(\"tabFocusModeOnMsg\", \"Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}.\");\r\n AccessibilityHelpNLS.tabFocusModeOnMsgNoKb = nls.localize(\"tabFocusModeOnMsgNoKb\", \"Pressing Tab in the current editor will move focus to the next focusable element. The command {0} is currently not triggerable by a keybinding.\");\r\n AccessibilityHelpNLS.tabFocusModeOffMsg = nls.localize(\"tabFocusModeOffMsg\", \"Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}.\");\r\n AccessibilityHelpNLS.tabFocusModeOffMsgNoKb = nls.localize(\"tabFocusModeOffMsgNoKb\", \"Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding.\");\r\n AccessibilityHelpNLS.openDocMac = nls.localize(\"openDocMac\", \"Press Command+H now to open a browser window with more information related to editor accessibility.\");\r\n AccessibilityHelpNLS.openDocWinLinux = nls.localize(\"openDocWinLinux\", \"Press Control+H now to open a browser window with more information related to editor accessibility.\");\r\n AccessibilityHelpNLS.outroMsg = nls.localize(\"outroMsg\", \"You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape.\");\r\n AccessibilityHelpNLS.showAccessibilityHelpAction = nls.localize(\"showAccessibilityHelpAction\", \"Show Accessibility Help\");\r\n})(AccessibilityHelpNLS || (AccessibilityHelpNLS = {}));\r\nexport var InspectTokensNLS;\r\n(function (InspectTokensNLS) {\r\n InspectTokensNLS.inspectTokensAction = nls.localize('inspectTokens', \"Developer: Inspect Tokens\");\r\n})(InspectTokensNLS || (InspectTokensNLS = {}));\r\nexport var GoToLineNLS;\r\n(function (GoToLineNLS) {\r\n GoToLineNLS.gotoLineLabelValidLineAndColumn = nls.localize('gotoLineLabelValidLineAndColumn', \"Go to line {0} and character {1}\");\r\n GoToLineNLS.gotoLineLabelValidLine = nls.localize('gotoLineLabelValidLine', \"Go to line {0}\");\r\n GoToLineNLS.gotoLineLabelEmptyWithLineLimit = nls.localize('gotoLineLabelEmptyWithLineLimit', \"Type a line number between 1 and {0} to navigate to\");\r\n GoToLineNLS.gotoLineLabelEmptyWithLineAndColumnLimit = nls.localize('gotoLineLabelEmptyWithLineAndColumnLimit', \"Type a character between 1 and {0} to navigate to\");\r\n GoToLineNLS.gotoLineAriaLabel = nls.localize('gotoLineAriaLabel', \"Current Line: {0}. Go to line {1}.\");\r\n GoToLineNLS.gotoLineActionInput = nls.localize('gotoLineActionInput', \"Type a line number, followed by an optional colon and a character number to navigate to\");\r\n GoToLineNLS.gotoLineActionLabel = nls.localize('gotoLineActionLabel', \"Go to Line...\");\r\n})(GoToLineNLS || (GoToLineNLS = {}));\r\nexport var QuickCommandNLS;\r\n(function (QuickCommandNLS) {\r\n QuickCommandNLS.ariaLabelEntryWithKey = nls.localize('ariaLabelEntryWithKey', \"{0}, {1}, commands\");\r\n QuickCommandNLS.ariaLabelEntry = nls.localize('ariaLabelEntry', \"{0}, commands\");\r\n QuickCommandNLS.quickCommandActionInput = nls.localize('quickCommandActionInput', \"Type the name of an action you want to execute\");\r\n QuickCommandNLS.quickCommandActionLabel = nls.localize('quickCommandActionLabel', \"Command Palette\");\r\n})(QuickCommandNLS || (QuickCommandNLS = {}));\r\nexport var QuickOutlineNLS;\r\n(function (QuickOutlineNLS) {\r\n QuickOutlineNLS.entryAriaLabel = nls.localize('entryAriaLabel', \"{0}, symbols\");\r\n QuickOutlineNLS.quickOutlineActionInput = nls.localize('quickOutlineActionInput', \"Type the name of an identifier you wish to navigate to\");\r\n QuickOutlineNLS.quickOutlineActionLabel = nls.localize('quickOutlineActionLabel', \"Go to Symbol...\");\r\n QuickOutlineNLS._symbols_ = nls.localize('symbols', \"symbols ({0})\");\r\n QuickOutlineNLS._modules_ = nls.localize('modules', \"modules ({0})\");\r\n QuickOutlineNLS._class_ = nls.localize('class', \"classes ({0})\");\r\n QuickOutlineNLS._interface_ = nls.localize('interface', \"interfaces ({0})\");\r\n QuickOutlineNLS._method_ = nls.localize('method', \"methods ({0})\");\r\n QuickOutlineNLS._function_ = nls.localize('function', \"functions ({0})\");\r\n QuickOutlineNLS._property_ = nls.localize('property', \"properties ({0})\");\r\n QuickOutlineNLS._variable_ = nls.localize('variable', \"variables ({0})\");\r\n QuickOutlineNLS._variable2_ = nls.localize('variable2', \"variables ({0})\");\r\n QuickOutlineNLS._constructor_ = nls.localize('_constructor', \"constructors ({0})\");\r\n QuickOutlineNLS._call_ = nls.localize('call', \"calls ({0})\");\r\n})(QuickOutlineNLS || (QuickOutlineNLS = {}));\r\nexport var StandaloneCodeEditorNLS;\r\n(function (StandaloneCodeEditorNLS) {\r\n StandaloneCodeEditorNLS.editorViewAccessibleLabel = nls.localize('editorViewAccessibleLabel', \"Editor content\");\r\n StandaloneCodeEditorNLS.accessibilityHelpMessageIE = nls.localize('accessibilityHelpMessageIE', \"Press Ctrl+F1 for Accessibility Options.\");\r\n StandaloneCodeEditorNLS.accessibilityHelpMessage = nls.localize('accessibilityHelpMessage', \"Press Alt+F1 for Accessibility Options.\");\r\n})(StandaloneCodeEditorNLS || (StandaloneCodeEditorNLS = {}));\r\nexport var ToggleHighContrastNLS;\r\n(function (ToggleHighContrastNLS) {\r\n ToggleHighContrastNLS.toggleHighContrast = nls.localize('toggleHighContrast', \"Toggle High Contrast Theme\");\r\n})(ToggleHighContrastNLS || (ToggleHighContrastNLS = {}));\r\nexport var SimpleServicesNLS;\r\n(function (SimpleServicesNLS) {\r\n SimpleServicesNLS.bulkEditServiceSummary = nls.localize('bulkEditServiceSummary', \"Made {0} edits in {1} files\");\r\n})(SimpleServicesNLS || (SimpleServicesNLS = {}));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\r\nimport { Emitter, Event } from '../../../base/common/event.js';\r\nimport { SimpleKeybinding, createKeybinding } from '../../../base/common/keyCodes.js';\r\nimport { ImmortalReference, toDisposable, DisposableStore, Disposable } from '../../../base/common/lifecycle.js';\r\nimport { OS, isLinux, isMacintosh } from '../../../base/common/platform.js';\r\nimport Severity from '../../../base/common/severity.js';\r\nimport { URI } from '../../../base/common/uri.js';\r\nimport { isCodeEditor } from '../../browser/editorBrowser.js';\r\nimport { isDiffEditorConfigurationKey, isEditorConfigurationKey } from '../../common/config/commonEditorConfig.js';\r\nimport { EditOperation } from '../../common/core/editOperation.js';\r\nimport { Position as Pos } from '../../common/core/position.js';\r\nimport { Range } from '../../common/core/range.js';\r\nimport { isResourceTextEdit } from '../../common/modes.js';\r\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\r\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\r\nimport { Configuration, ConfigurationModel, DefaultConfigurationModel } from '../../../platform/configuration/common/configurationModels.js';\r\nimport { AbstractKeybindingService } from '../../../platform/keybinding/common/abstractKeybindingService.js';\r\nimport { KeybindingResolver } from '../../../platform/keybinding/common/keybindingResolver.js';\r\nimport { KeybindingsRegistry } from '../../../platform/keybinding/common/keybindingsRegistry.js';\r\nimport { ResolvedKeybindingItem } from '../../../platform/keybinding/common/resolvedKeybindingItem.js';\r\nimport { USLayoutResolvedKeybinding } from '../../../platform/keybinding/common/usLayoutResolvedKeybinding.js';\r\nimport { NoOpNotification } from '../../../platform/notification/common/notification.js';\r\nimport { WorkspaceFolder } from '../../../platform/workspace/common/workspace.js';\r\nimport { SimpleServicesNLS } from '../../common/standaloneStrings.js';\r\nvar SimpleModel = /** @class */ (function () {\r\n function SimpleModel(model) {\r\n this.model = model;\r\n this._onDispose = new Emitter();\r\n }\r\n Object.defineProperty(SimpleModel.prototype, \"textEditorModel\", {\r\n get: function () {\r\n return this.model;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n SimpleModel.prototype.dispose = function () {\r\n this._onDispose.fire();\r\n };\r\n return SimpleModel;\r\n}());\r\nexport { SimpleModel };\r\nfunction withTypedEditor(widget, codeEditorCallback, diffEditorCallback) {\r\n if (isCodeEditor(widget)) {\r\n // Single Editor\r\n return codeEditorCallback(widget);\r\n }\r\n else {\r\n // Diff Editor\r\n return diffEditorCallback(widget);\r\n }\r\n}\r\nvar SimpleEditorModelResolverService = /** @class */ (function () {\r\n function SimpleEditorModelResolverService(modelService) {\r\n this.modelService = modelService;\r\n }\r\n SimpleEditorModelResolverService.prototype.setEditor = function (editor) {\r\n this.editor = editor;\r\n };\r\n SimpleEditorModelResolverService.prototype.createModelReference = function (resource) {\r\n var _this = this;\r\n var model = null;\r\n if (this.editor) {\r\n model = withTypedEditor(this.editor, function (editor) { return _this.findModel(editor, resource); }, function (diffEditor) { return _this.findModel(diffEditor.getOriginalEditor(), resource) || _this.findModel(diffEditor.getModifiedEditor(), resource); });\r\n }\r\n if (!model) {\r\n return Promise.reject(new Error(\"Model not found\"));\r\n }\r\n return Promise.resolve(new ImmortalReference(new SimpleModel(model)));\r\n };\r\n SimpleEditorModelResolverService.prototype.findModel = function (editor, resource) {\r\n var model = this.modelService ? this.modelService.getModel(resource) : editor.getModel();\r\n if (model && model.uri.toString() !== resource.toString()) {\r\n return null;\r\n }\r\n return model;\r\n };\r\n return SimpleEditorModelResolverService;\r\n}());\r\nexport { SimpleEditorModelResolverService };\r\nvar SimpleEditorProgressService = /** @class */ (function () {\r\n function SimpleEditorProgressService() {\r\n }\r\n SimpleEditorProgressService.prototype.show = function () {\r\n return SimpleEditorProgressService.NULL_PROGRESS_RUNNER;\r\n };\r\n SimpleEditorProgressService.prototype.showWhile = function (promise, delay) {\r\n return Promise.resolve(undefined);\r\n };\r\n SimpleEditorProgressService.NULL_PROGRESS_RUNNER = {\r\n done: function () { },\r\n total: function () { },\r\n worked: function () { }\r\n };\r\n return SimpleEditorProgressService;\r\n}());\r\nexport { SimpleEditorProgressService };\r\nvar SimpleDialogService = /** @class */ (function () {\r\n function SimpleDialogService() {\r\n }\r\n return SimpleDialogService;\r\n}());\r\nexport { SimpleDialogService };\r\nvar SimpleNotificationService = /** @class */ (function () {\r\n function SimpleNotificationService() {\r\n }\r\n SimpleNotificationService.prototype.info = function (message) {\r\n return this.notify({ severity: Severity.Info, message: message });\r\n };\r\n SimpleNotificationService.prototype.warn = function (message) {\r\n return this.notify({ severity: Severity.Warning, message: message });\r\n };\r\n SimpleNotificationService.prototype.error = function (error) {\r\n return this.notify({ severity: Severity.Error, message: error });\r\n };\r\n SimpleNotificationService.prototype.notify = function (notification) {\r\n switch (notification.severity) {\r\n case Severity.Error:\r\n console.error(notification.message);\r\n break;\r\n case Severity.Warning:\r\n console.warn(notification.message);\r\n break;\r\n default:\r\n console.log(notification.message);\r\n break;\r\n }\r\n return SimpleNotificationService.NO_OP;\r\n };\r\n SimpleNotificationService.prototype.status = function (message, options) {\r\n return Disposable.None;\r\n };\r\n SimpleNotificationService.NO_OP = new NoOpNotification();\r\n return SimpleNotificationService;\r\n}());\r\nexport { SimpleNotificationService };\r\nvar StandaloneCommandService = /** @class */ (function () {\r\n function StandaloneCommandService(instantiationService) {\r\n this._onWillExecuteCommand = new Emitter();\r\n this._onDidExecuteCommand = new Emitter();\r\n this._instantiationService = instantiationService;\r\n this._dynamicCommands = Object.create(null);\r\n }\r\n StandaloneCommandService.prototype.addCommand = function (command) {\r\n var _this = this;\r\n var id = command.id;\r\n this._dynamicCommands[id] = command;\r\n return toDisposable(function () {\r\n delete _this._dynamicCommands[id];\r\n });\r\n };\r\n StandaloneCommandService.prototype.executeCommand = function (id) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var command = (CommandsRegistry.getCommand(id) || this._dynamicCommands[id]);\r\n if (!command) {\r\n return Promise.reject(new Error(\"command '\" + id + \"' not found\"));\r\n }\r\n try {\r\n this._onWillExecuteCommand.fire({ commandId: id, args: args });\r\n var result = this._instantiationService.invokeFunction.apply(this._instantiationService, __spreadArrays([command.handler], args));\r\n this._onDidExecuteCommand.fire({ commandId: id, args: args });\r\n return Promise.resolve(result);\r\n }\r\n catch (err) {\r\n return Promise.reject(err);\r\n }\r\n };\r\n return StandaloneCommandService;\r\n}());\r\nexport { StandaloneCommandService };\r\nvar StandaloneKeybindingService = /** @class */ (function (_super) {\r\n __extends(StandaloneKeybindingService, _super);\r\n function StandaloneKeybindingService(contextKeyService, commandService, telemetryService, notificationService, domNode) {\r\n var _this = _super.call(this, contextKeyService, commandService, telemetryService, notificationService) || this;\r\n _this._cachedResolver = null;\r\n _this._dynamicKeybindings = [];\r\n _this._register(dom.addDisposableListener(domNode, dom.EventType.KEY_DOWN, function (e) {\r\n var keyEvent = new StandardKeyboardEvent(e);\r\n var shouldPreventDefault = _this._dispatch(keyEvent, keyEvent.target);\r\n if (shouldPreventDefault) {\r\n keyEvent.preventDefault();\r\n keyEvent.stopPropagation();\r\n }\r\n }));\r\n return _this;\r\n }\r\n StandaloneKeybindingService.prototype.addDynamicKeybinding = function (commandId, _keybinding, handler, when) {\r\n var _this = this;\r\n var keybinding = createKeybinding(_keybinding, OS);\r\n var toDispose = new DisposableStore();\r\n if (keybinding) {\r\n this._dynamicKeybindings.push({\r\n keybinding: keybinding,\r\n command: commandId,\r\n when: when,\r\n weight1: 1000,\r\n weight2: 0\r\n });\r\n toDispose.add(toDisposable(function () {\r\n for (var i = 0; i < _this._dynamicKeybindings.length; i++) {\r\n var kb = _this._dynamicKeybindings[i];\r\n if (kb.command === commandId) {\r\n _this._dynamicKeybindings.splice(i, 1);\r\n _this.updateResolver({ source: 1 /* Default */ });\r\n return;\r\n }\r\n }\r\n }));\r\n }\r\n var commandService = this._commandService;\r\n if (commandService instanceof StandaloneCommandService) {\r\n toDispose.add(commandService.addCommand({\r\n id: commandId,\r\n handler: handler\r\n }));\r\n }\r\n else {\r\n throw new Error('Unknown command service!');\r\n }\r\n this.updateResolver({ source: 1 /* Default */ });\r\n return toDispose;\r\n };\r\n StandaloneKeybindingService.prototype.updateResolver = function (event) {\r\n this._cachedResolver = null;\r\n this._onDidUpdateKeybindings.fire(event);\r\n };\r\n StandaloneKeybindingService.prototype._getResolver = function () {\r\n if (!this._cachedResolver) {\r\n var defaults = this._toNormalizedKeybindingItems(KeybindingsRegistry.getDefaultKeybindings(), true);\r\n var overrides = this._toNormalizedKeybindingItems(this._dynamicKeybindings, false);\r\n this._cachedResolver = new KeybindingResolver(defaults, overrides);\r\n }\r\n return this._cachedResolver;\r\n };\r\n StandaloneKeybindingService.prototype._documentHasFocus = function () {\r\n return document.hasFocus();\r\n };\r\n StandaloneKeybindingService.prototype._toNormalizedKeybindingItems = function (items, isDefault) {\r\n var result = [], resultLen = 0;\r\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\r\n var item = items_1[_i];\r\n var when = item.when || undefined;\r\n var keybinding = item.keybinding;\r\n if (!keybinding) {\r\n // This might be a removal keybinding item in user settings => accept it\r\n result[resultLen++] = new ResolvedKeybindingItem(undefined, item.command, item.commandArgs, when, isDefault);\r\n }\r\n else {\r\n var resolvedKeybindings = this.resolveKeybinding(keybinding);\r\n for (var _a = 0, resolvedKeybindings_1 = resolvedKeybindings; _a < resolvedKeybindings_1.length; _a++) {\r\n var resolvedKeybinding = resolvedKeybindings_1[_a];\r\n result[resultLen++] = new ResolvedKeybindingItem(resolvedKeybinding, item.command, item.commandArgs, when, isDefault);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n StandaloneKeybindingService.prototype.resolveKeybinding = function (keybinding) {\r\n return [new USLayoutResolvedKeybinding(keybinding, OS)];\r\n };\r\n StandaloneKeybindingService.prototype.resolveKeyboardEvent = function (keyboardEvent) {\r\n var keybinding = new SimpleKeybinding(keyboardEvent.ctrlKey, keyboardEvent.shiftKey, keyboardEvent.altKey, keyboardEvent.metaKey, keyboardEvent.keyCode).toChord();\r\n return new USLayoutResolvedKeybinding(keybinding, OS);\r\n };\r\n return StandaloneKeybindingService;\r\n}(AbstractKeybindingService));\r\nexport { StandaloneKeybindingService };\r\nfunction isConfigurationOverrides(thing) {\r\n return thing\r\n && typeof thing === 'object'\r\n && (!thing.overrideIdentifier || typeof thing.overrideIdentifier === 'string')\r\n && (!thing.resource || thing.resource instanceof URI);\r\n}\r\nvar SimpleConfigurationService = /** @class */ (function () {\r\n function SimpleConfigurationService() {\r\n this._onDidChangeConfiguration = new Emitter();\r\n this.onDidChangeConfiguration = this._onDidChangeConfiguration.event;\r\n this._configuration = new Configuration(new DefaultConfigurationModel(), new ConfigurationModel());\r\n }\r\n SimpleConfigurationService.prototype.configuration = function () {\r\n return this._configuration;\r\n };\r\n SimpleConfigurationService.prototype.getValue = function (arg1, arg2) {\r\n var section = typeof arg1 === 'string' ? arg1 : undefined;\r\n var overrides = isConfigurationOverrides(arg1) ? arg1 : isConfigurationOverrides(arg2) ? arg2 : {};\r\n return this.configuration().getValue(section, overrides, undefined);\r\n };\r\n SimpleConfigurationService.prototype.updateValue = function (key, value, arg3, arg4) {\r\n this.configuration().updateValue(key, value);\r\n return Promise.resolve();\r\n };\r\n SimpleConfigurationService.prototype.inspect = function (key, options) {\r\n if (options === void 0) { options = {}; }\r\n return this.configuration().inspect(key, options, undefined);\r\n };\r\n return SimpleConfigurationService;\r\n}());\r\nexport { SimpleConfigurationService };\r\nvar SimpleResourceConfigurationService = /** @class */ (function () {\r\n function SimpleResourceConfigurationService(configurationService) {\r\n var _this = this;\r\n this.configurationService = configurationService;\r\n this._onDidChangeConfiguration = new Emitter();\r\n this.configurationService.onDidChangeConfiguration(function (e) {\r\n _this._onDidChangeConfiguration.fire(e);\r\n });\r\n }\r\n SimpleResourceConfigurationService.prototype.getValue = function (resource, arg2, arg3) {\r\n var position = Pos.isIPosition(arg2) ? arg2 : null;\r\n var section = position ? (typeof arg3 === 'string' ? arg3 : undefined) : (typeof arg2 === 'string' ? arg2 : undefined);\r\n if (typeof section === 'undefined') {\r\n return this.configurationService.getValue();\r\n }\r\n return this.configurationService.getValue(section);\r\n };\r\n return SimpleResourceConfigurationService;\r\n}());\r\nexport { SimpleResourceConfigurationService };\r\nvar SimpleResourcePropertiesService = /** @class */ (function () {\r\n function SimpleResourcePropertiesService(configurationService) {\r\n this.configurationService = configurationService;\r\n }\r\n SimpleResourcePropertiesService.prototype.getEOL = function (resource, language) {\r\n var eol = this.configurationService.getValue('files.eol', { overrideIdentifier: language, resource: resource });\r\n if (eol && eol !== 'auto') {\r\n return eol;\r\n }\r\n return (isLinux || isMacintosh) ? '\\n' : '\\r\\n';\r\n };\r\n SimpleResourcePropertiesService = __decorate([\r\n __param(0, IConfigurationService)\r\n ], SimpleResourcePropertiesService);\r\n return SimpleResourcePropertiesService;\r\n}());\r\nexport { SimpleResourcePropertiesService };\r\nvar StandaloneTelemetryService = /** @class */ (function () {\r\n function StandaloneTelemetryService() {\r\n }\r\n StandaloneTelemetryService.prototype.publicLog = function (eventName, data) {\r\n return Promise.resolve(undefined);\r\n };\r\n StandaloneTelemetryService.prototype.publicLog2 = function (eventName, data) {\r\n return this.publicLog(eventName, data);\r\n };\r\n return StandaloneTelemetryService;\r\n}());\r\nexport { StandaloneTelemetryService };\r\nvar SimpleWorkspaceContextService = /** @class */ (function () {\r\n function SimpleWorkspaceContextService() {\r\n var resource = URI.from({ scheme: SimpleWorkspaceContextService.SCHEME, authority: 'model', path: '/' });\r\n this.workspace = { id: '4064f6ec-cb38-4ad0-af64-ee6467e63c82', folders: [new WorkspaceFolder({ uri: resource, name: '', index: 0 })] };\r\n }\r\n SimpleWorkspaceContextService.prototype.getWorkspace = function () {\r\n return this.workspace;\r\n };\r\n SimpleWorkspaceContextService.prototype.getWorkspaceFolder = function (resource) {\r\n return resource && resource.scheme === SimpleWorkspaceContextService.SCHEME ? this.workspace.folders[0] : null;\r\n };\r\n SimpleWorkspaceContextService.SCHEME = 'inmemory';\r\n return SimpleWorkspaceContextService;\r\n}());\r\nexport { SimpleWorkspaceContextService };\r\nexport function applyConfigurationValues(configurationService, source, isDiffEditor) {\r\n if (!source) {\r\n return;\r\n }\r\n if (!(configurationService instanceof SimpleConfigurationService)) {\r\n return;\r\n }\r\n Object.keys(source).forEach(function (key) {\r\n if (isEditorConfigurationKey(key)) {\r\n configurationService.updateValue(\"editor.\" + key, source[key]);\r\n }\r\n if (isDiffEditor && isDiffEditorConfigurationKey(key)) {\r\n configurationService.updateValue(\"diffEditor.\" + key, source[key]);\r\n }\r\n });\r\n}\r\nvar SimpleBulkEditService = /** @class */ (function () {\r\n function SimpleBulkEditService(_modelService) {\r\n this._modelService = _modelService;\r\n //\r\n }\r\n SimpleBulkEditService.prototype.apply = function (workspaceEdit, options) {\r\n var edits = new Map();\r\n if (workspaceEdit.edits) {\r\n for (var _i = 0, _a = workspaceEdit.edits; _i < _a.length; _i++) {\r\n var edit = _a[_i];\r\n if (!isResourceTextEdit(edit)) {\r\n return Promise.reject(new Error('bad edit - only text edits are supported'));\r\n }\r\n var model = this._modelService.getModel(edit.resource);\r\n if (!model) {\r\n return Promise.reject(new Error('bad edit - model not found'));\r\n }\r\n var array = edits.get(model);\r\n if (!array) {\r\n array = [];\r\n }\r\n edits.set(model, array.concat(edit.edits));\r\n }\r\n }\r\n var totalEdits = 0;\r\n var totalFiles = 0;\r\n edits.forEach(function (edits, model) {\r\n model.pushStackElement();\r\n model.pushEditOperations([], edits.map(function (e) { return EditOperation.replaceMove(Range.lift(e.range), e.text); }), function () { return []; });\r\n model.pushStackElement();\r\n totalFiles += 1;\r\n totalEdits += edits.length;\r\n });\r\n return Promise.resolve({\r\n selection: undefined,\r\n ariaSummary: strings.format(SimpleServicesNLS.bulkEditServiceSummary, totalEdits, totalFiles)\r\n });\r\n };\r\n return SimpleBulkEditService;\r\n}());\r\nexport { SimpleBulkEditService };\r\nvar SimpleUriLabelService = /** @class */ (function () {\r\n function SimpleUriLabelService() {\r\n }\r\n SimpleUriLabelService.prototype.getUriLabel = function (resource, options) {\r\n if (resource.scheme === 'file') {\r\n return resource.fsPath;\r\n }\r\n return resource.path;\r\n };\r\n return SimpleUriLabelService;\r\n}());\r\nexport { SimpleUriLabelService };\r\nvar SimpleLayoutService = /** @class */ (function () {\r\n function SimpleLayoutService(_container) {\r\n this._container = _container;\r\n this.onLayout = Event.None;\r\n }\r\n Object.defineProperty(SimpleLayoutService.prototype, \"container\", {\r\n get: function () {\r\n return this._container;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return SimpleLayoutService;\r\n}());\r\nexport { SimpleLayoutService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport './aria.css';\r\nimport * as nls from '../../../../nls.js';\r\nimport { isMacintosh } from '../../../common/platform.js';\r\nimport * as dom from '../../dom.js';\r\nvar ariaContainer;\r\nvar alertContainer;\r\nvar statusContainer;\r\nexport function setARIAContainer(parent) {\r\n ariaContainer = document.createElement('div');\r\n ariaContainer.className = 'monaco-aria-container';\r\n alertContainer = document.createElement('div');\r\n alertContainer.className = 'monaco-alert';\r\n alertContainer.setAttribute('role', 'alert');\r\n alertContainer.setAttribute('aria-atomic', 'true');\r\n ariaContainer.appendChild(alertContainer);\r\n statusContainer = document.createElement('div');\r\n statusContainer.className = 'monaco-status';\r\n statusContainer.setAttribute('role', 'status');\r\n statusContainer.setAttribute('aria-atomic', 'true');\r\n ariaContainer.appendChild(statusContainer);\r\n parent.appendChild(ariaContainer);\r\n}\r\n/**\r\n * Given the provided message, will make sure that it is read as alert to screen readers.\r\n */\r\nexport function alert(msg, disableRepeat) {\r\n insertMessage(alertContainer, msg, disableRepeat);\r\n}\r\n/**\r\n * Given the provided message, will make sure that it is read as status to screen readers.\r\n */\r\nexport function status(msg, disableRepeat) {\r\n if (isMacintosh) {\r\n alert(msg, disableRepeat); // VoiceOver does not seem to support status role\r\n }\r\n else {\r\n insertMessage(statusContainer, msg, disableRepeat);\r\n }\r\n}\r\nvar repeatedTimes = 0;\r\nvar prevText = undefined;\r\nfunction insertMessage(target, msg, disableRepeat) {\r\n if (!ariaContainer) {\r\n return;\r\n }\r\n // If the same message should be inserted that is already present, a screen reader would\r\n // not announce this message because it matches the previous one. As a workaround, we\r\n // alter the message with the number of occurences unless this is explicitly disabled\r\n // via the disableRepeat flag.\r\n if (!disableRepeat) {\r\n if (prevText === msg) {\r\n repeatedTimes++;\r\n }\r\n else {\r\n prevText = msg;\r\n repeatedTimes = 0;\r\n }\r\n switch (repeatedTimes) {\r\n case 0: break;\r\n case 1:\r\n msg = nls.localize('repeated', \"{0} (occurred again)\", msg);\r\n break;\r\n default:\r\n msg = nls.localize('repeatedNtimes', \"{0} (occurred {1} times)\", msg, repeatedTimes);\r\n break;\r\n }\r\n }\r\n dom.clearNode(target);\r\n target.textContent = msg;\r\n // See https://www.paciellogroup.com/blog/2012/06/html5-accessibility-chops-aria-rolealert-browser-support/\r\n target.style.visibility = 'hidden';\r\n target.style.visibility = 'visible';\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar CharWidthRequest = /** @class */ (function () {\r\n function CharWidthRequest(chr, type) {\r\n this.chr = chr;\r\n this.type = type;\r\n this.width = 0;\r\n }\r\n CharWidthRequest.prototype.fulfill = function (width) {\r\n this.width = width;\r\n };\r\n return CharWidthRequest;\r\n}());\r\nexport { CharWidthRequest };\r\nvar DomCharWidthReader = /** @class */ (function () {\r\n function DomCharWidthReader(bareFontInfo, requests) {\r\n this._bareFontInfo = bareFontInfo;\r\n this._requests = requests;\r\n this._container = null;\r\n this._testElements = null;\r\n }\r\n DomCharWidthReader.prototype.read = function () {\r\n // Create a test container with all these test elements\r\n this._createDomElements();\r\n // Add the container to the DOM\r\n document.body.appendChild(this._container);\r\n // Read character widths\r\n this._readFromDomElements();\r\n // Remove the container from the DOM\r\n document.body.removeChild(this._container);\r\n this._container = null;\r\n this._testElements = null;\r\n };\r\n DomCharWidthReader.prototype._createDomElements = function () {\r\n var container = document.createElement('div');\r\n container.style.position = 'absolute';\r\n container.style.top = '-50000px';\r\n container.style.width = '50000px';\r\n var regularDomNode = document.createElement('div');\r\n regularDomNode.style.fontFamily = this._bareFontInfo.getMassagedFontFamily();\r\n regularDomNode.style.fontWeight = this._bareFontInfo.fontWeight;\r\n regularDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\r\n regularDomNode.style.fontFeatureSettings = this._bareFontInfo.fontFeatureSettings;\r\n regularDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\r\n regularDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\r\n container.appendChild(regularDomNode);\r\n var boldDomNode = document.createElement('div');\r\n boldDomNode.style.fontFamily = this._bareFontInfo.getMassagedFontFamily();\r\n boldDomNode.style.fontWeight = 'bold';\r\n boldDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\r\n boldDomNode.style.fontFeatureSettings = this._bareFontInfo.fontFeatureSettings;\r\n boldDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\r\n boldDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\r\n container.appendChild(boldDomNode);\r\n var italicDomNode = document.createElement('div');\r\n italicDomNode.style.fontFamily = this._bareFontInfo.getMassagedFontFamily();\r\n italicDomNode.style.fontWeight = this._bareFontInfo.fontWeight;\r\n italicDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\r\n italicDomNode.style.fontFeatureSettings = this._bareFontInfo.fontFeatureSettings;\r\n italicDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\r\n italicDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\r\n italicDomNode.style.fontStyle = 'italic';\r\n container.appendChild(italicDomNode);\r\n var testElements = [];\r\n for (var _i = 0, _a = this._requests; _i < _a.length; _i++) {\r\n var request = _a[_i];\r\n var parent_1 = void 0;\r\n if (request.type === 0 /* Regular */) {\r\n parent_1 = regularDomNode;\r\n }\r\n if (request.type === 2 /* Bold */) {\r\n parent_1 = boldDomNode;\r\n }\r\n if (request.type === 1 /* Italic */) {\r\n parent_1 = italicDomNode;\r\n }\r\n parent_1.appendChild(document.createElement('br'));\r\n var testElement = document.createElement('span');\r\n DomCharWidthReader._render(testElement, request);\r\n parent_1.appendChild(testElement);\r\n testElements.push(testElement);\r\n }\r\n this._container = container;\r\n this._testElements = testElements;\r\n };\r\n DomCharWidthReader._render = function (testElement, request) {\r\n if (request.chr === ' ') {\r\n var htmlString = ' ';\r\n // Repeat character 256 (2^8) times\r\n for (var i = 0; i < 8; i++) {\r\n htmlString += htmlString;\r\n }\r\n testElement.innerHTML = htmlString;\r\n }\r\n else {\r\n var testString = request.chr;\r\n // Repeat character 256 (2^8) times\r\n for (var i = 0; i < 8; i++) {\r\n testString += testString;\r\n }\r\n testElement.textContent = testString;\r\n }\r\n };\r\n DomCharWidthReader.prototype._readFromDomElements = function () {\r\n for (var i = 0, len = this._requests.length; i < len; i++) {\r\n var request = this._requests[i];\r\n var testElement = this._testElements[i];\r\n request.fulfill(testElement.offsetWidth / 256);\r\n }\r\n };\r\n return DomCharWidthReader;\r\n}());\r\nexport function readCharWidths(bareFontInfo, requests) {\r\n var reader = new DomCharWidthReader(bareFontInfo, requests);\r\n reader.read();\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nvar ElementSizeObserver = /** @class */ (function (_super) {\r\n __extends(ElementSizeObserver, _super);\r\n function ElementSizeObserver(referenceDomElement, dimension, changeCallback) {\r\n var _this = _super.call(this) || this;\r\n _this.referenceDomElement = referenceDomElement;\r\n _this.changeCallback = changeCallback;\r\n _this.measureReferenceDomElementToken = -1;\r\n _this.width = -1;\r\n _this.height = -1;\r\n _this.measureReferenceDomElement(false, dimension);\r\n return _this;\r\n }\r\n ElementSizeObserver.prototype.dispose = function () {\r\n this.stopObserving();\r\n _super.prototype.dispose.call(this);\r\n };\r\n ElementSizeObserver.prototype.getWidth = function () {\r\n return this.width;\r\n };\r\n ElementSizeObserver.prototype.getHeight = function () {\r\n return this.height;\r\n };\r\n ElementSizeObserver.prototype.startObserving = function () {\r\n var _this = this;\r\n if (this.measureReferenceDomElementToken === -1) {\r\n this.measureReferenceDomElementToken = setInterval(function () { return _this.measureReferenceDomElement(true); }, 100);\r\n }\r\n };\r\n ElementSizeObserver.prototype.stopObserving = function () {\r\n if (this.measureReferenceDomElementToken !== -1) {\r\n clearInterval(this.measureReferenceDomElementToken);\r\n this.measureReferenceDomElementToken = -1;\r\n }\r\n };\r\n ElementSizeObserver.prototype.observe = function (dimension) {\r\n this.measureReferenceDomElement(true, dimension);\r\n };\r\n ElementSizeObserver.prototype.measureReferenceDomElement = function (callChangeCallback, dimension) {\r\n var observedWidth = 0;\r\n var observedHeight = 0;\r\n if (dimension) {\r\n observedWidth = dimension.width;\r\n observedHeight = dimension.height;\r\n }\r\n else if (this.referenceDomElement) {\r\n observedWidth = this.referenceDomElement.clientWidth;\r\n observedHeight = this.referenceDomElement.clientHeight;\r\n }\r\n observedWidth = Math.max(5, observedWidth);\r\n observedHeight = Math.max(5, observedHeight);\r\n if (this.width !== observedWidth || this.height !== observedHeight) {\r\n this.width = observedWidth;\r\n this.height = observedHeight;\r\n if (callChangeCallback) {\r\n this.changeCallback();\r\n }\r\n }\r\n };\r\n return ElementSizeObserver;\r\n}(Disposable));\r\nexport { ElementSizeObserver };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as browser from '../../../base/browser/browser.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nimport { CharWidthRequest, readCharWidths } from './charWidthReader.js';\r\nimport { ElementSizeObserver } from './elementSizeObserver.js';\r\nimport { CommonEditorConfiguration } from '../../common/config/commonEditorConfig.js';\r\nimport { EditorFontLigatures } from '../../common/config/editorOptions.js';\r\nimport { FontInfo } from '../../common/config/fontInfo.js';\r\nvar CSSBasedConfigurationCache = /** @class */ (function () {\r\n function CSSBasedConfigurationCache() {\r\n this._keys = Object.create(null);\r\n this._values = Object.create(null);\r\n }\r\n CSSBasedConfigurationCache.prototype.has = function (item) {\r\n var itemId = item.getId();\r\n return !!this._values[itemId];\r\n };\r\n CSSBasedConfigurationCache.prototype.get = function (item) {\r\n var itemId = item.getId();\r\n return this._values[itemId];\r\n };\r\n CSSBasedConfigurationCache.prototype.put = function (item, value) {\r\n var itemId = item.getId();\r\n this._keys[itemId] = item;\r\n this._values[itemId] = value;\r\n };\r\n CSSBasedConfigurationCache.prototype.remove = function (item) {\r\n var itemId = item.getId();\r\n delete this._keys[itemId];\r\n delete this._values[itemId];\r\n };\r\n CSSBasedConfigurationCache.prototype.getValues = function () {\r\n var _this = this;\r\n return Object.keys(this._keys).map(function (id) { return _this._values[id]; });\r\n };\r\n return CSSBasedConfigurationCache;\r\n}());\r\nexport function clearAllFontInfos() {\r\n CSSBasedConfiguration.INSTANCE.clearCache();\r\n}\r\nvar CSSBasedConfiguration = /** @class */ (function (_super) {\r\n __extends(CSSBasedConfiguration, _super);\r\n function CSSBasedConfiguration() {\r\n var _this = _super.call(this) || this;\r\n _this._onDidChange = _this._register(new Emitter());\r\n _this.onDidChange = _this._onDidChange.event;\r\n _this._cache = new CSSBasedConfigurationCache();\r\n _this._evictUntrustedReadingsTimeout = -1;\r\n return _this;\r\n }\r\n CSSBasedConfiguration.prototype.dispose = function () {\r\n if (this._evictUntrustedReadingsTimeout !== -1) {\r\n clearTimeout(this._evictUntrustedReadingsTimeout);\r\n this._evictUntrustedReadingsTimeout = -1;\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n CSSBasedConfiguration.prototype.clearCache = function () {\r\n this._cache = new CSSBasedConfigurationCache();\r\n this._onDidChange.fire();\r\n };\r\n CSSBasedConfiguration.prototype._writeToCache = function (item, value) {\r\n var _this = this;\r\n this._cache.put(item, value);\r\n if (!value.isTrusted && this._evictUntrustedReadingsTimeout === -1) {\r\n // Try reading again after some time\r\n this._evictUntrustedReadingsTimeout = setTimeout(function () {\r\n _this._evictUntrustedReadingsTimeout = -1;\r\n _this._evictUntrustedReadings();\r\n }, 5000);\r\n }\r\n };\r\n CSSBasedConfiguration.prototype._evictUntrustedReadings = function () {\r\n var values = this._cache.getValues();\r\n var somethingRemoved = false;\r\n for (var i = 0, len = values.length; i < len; i++) {\r\n var item = values[i];\r\n if (!item.isTrusted) {\r\n somethingRemoved = true;\r\n this._cache.remove(item);\r\n }\r\n }\r\n if (somethingRemoved) {\r\n this._onDidChange.fire();\r\n }\r\n };\r\n CSSBasedConfiguration.prototype.readConfiguration = function (bareFontInfo) {\r\n if (!this._cache.has(bareFontInfo)) {\r\n var readConfig = CSSBasedConfiguration._actualReadConfiguration(bareFontInfo);\r\n if (readConfig.typicalHalfwidthCharacterWidth <= 2 || readConfig.typicalFullwidthCharacterWidth <= 2 || readConfig.spaceWidth <= 2 || readConfig.maxDigitWidth <= 2) {\r\n // Hey, it's Bug 14341 ... we couldn't read\r\n readConfig = new FontInfo({\r\n zoomLevel: browser.getZoomLevel(),\r\n fontFamily: readConfig.fontFamily,\r\n fontWeight: readConfig.fontWeight,\r\n fontSize: readConfig.fontSize,\r\n fontFeatureSettings: readConfig.fontFeatureSettings,\r\n lineHeight: readConfig.lineHeight,\r\n letterSpacing: readConfig.letterSpacing,\r\n isMonospace: readConfig.isMonospace,\r\n typicalHalfwidthCharacterWidth: Math.max(readConfig.typicalHalfwidthCharacterWidth, 5),\r\n typicalFullwidthCharacterWidth: Math.max(readConfig.typicalFullwidthCharacterWidth, 5),\r\n canUseHalfwidthRightwardsArrow: readConfig.canUseHalfwidthRightwardsArrow,\r\n spaceWidth: Math.max(readConfig.spaceWidth, 5),\r\n maxDigitWidth: Math.max(readConfig.maxDigitWidth, 5),\r\n }, false);\r\n }\r\n this._writeToCache(bareFontInfo, readConfig);\r\n }\r\n return this._cache.get(bareFontInfo);\r\n };\r\n CSSBasedConfiguration.createRequest = function (chr, type, all, monospace) {\r\n var result = new CharWidthRequest(chr, type);\r\n all.push(result);\r\n if (monospace) {\r\n monospace.push(result);\r\n }\r\n return result;\r\n };\r\n CSSBasedConfiguration._actualReadConfiguration = function (bareFontInfo) {\r\n var all = [];\r\n var monospace = [];\r\n var typicalHalfwidthCharacter = this.createRequest('n', 0 /* Regular */, all, monospace);\r\n var typicalFullwidthCharacter = this.createRequest('\\uff4d', 0 /* Regular */, all, null);\r\n var space = this.createRequest(' ', 0 /* Regular */, all, monospace);\r\n var digit0 = this.createRequest('0', 0 /* Regular */, all, monospace);\r\n var digit1 = this.createRequest('1', 0 /* Regular */, all, monospace);\r\n var digit2 = this.createRequest('2', 0 /* Regular */, all, monospace);\r\n var digit3 = this.createRequest('3', 0 /* Regular */, all, monospace);\r\n var digit4 = this.createRequest('4', 0 /* Regular */, all, monospace);\r\n var digit5 = this.createRequest('5', 0 /* Regular */, all, monospace);\r\n var digit6 = this.createRequest('6', 0 /* Regular */, all, monospace);\r\n var digit7 = this.createRequest('7', 0 /* Regular */, all, monospace);\r\n var digit8 = this.createRequest('8', 0 /* Regular */, all, monospace);\r\n var digit9 = this.createRequest('9', 0 /* Regular */, all, monospace);\r\n // monospace test: used for whitespace rendering\r\n var rightwardsArrow = this.createRequest('→', 0 /* Regular */, all, monospace);\r\n var halfwidthRightwardsArrow = this.createRequest('→', 0 /* Regular */, all, null);\r\n this.createRequest('·', 0 /* Regular */, all, monospace);\r\n // monospace test: some characters\r\n this.createRequest('|', 0 /* Regular */, all, monospace);\r\n this.createRequest('/', 0 /* Regular */, all, monospace);\r\n this.createRequest('-', 0 /* Regular */, all, monospace);\r\n this.createRequest('_', 0 /* Regular */, all, monospace);\r\n this.createRequest('i', 0 /* Regular */, all, monospace);\r\n this.createRequest('l', 0 /* Regular */, all, monospace);\r\n this.createRequest('m', 0 /* Regular */, all, monospace);\r\n // monospace italic test\r\n this.createRequest('|', 1 /* Italic */, all, monospace);\r\n this.createRequest('_', 1 /* Italic */, all, monospace);\r\n this.createRequest('i', 1 /* Italic */, all, monospace);\r\n this.createRequest('l', 1 /* Italic */, all, monospace);\r\n this.createRequest('m', 1 /* Italic */, all, monospace);\r\n this.createRequest('n', 1 /* Italic */, all, monospace);\r\n // monospace bold test\r\n this.createRequest('|', 2 /* Bold */, all, monospace);\r\n this.createRequest('_', 2 /* Bold */, all, monospace);\r\n this.createRequest('i', 2 /* Bold */, all, monospace);\r\n this.createRequest('l', 2 /* Bold */, all, monospace);\r\n this.createRequest('m', 2 /* Bold */, all, monospace);\r\n this.createRequest('n', 2 /* Bold */, all, monospace);\r\n readCharWidths(bareFontInfo, all);\r\n var maxDigitWidth = Math.max(digit0.width, digit1.width, digit2.width, digit3.width, digit4.width, digit5.width, digit6.width, digit7.width, digit8.width, digit9.width);\r\n var isMonospace = (bareFontInfo.fontFeatureSettings === EditorFontLigatures.OFF);\r\n var referenceWidth = monospace[0].width;\r\n for (var i = 1, len = monospace.length; isMonospace && i < len; i++) {\r\n var diff = referenceWidth - monospace[i].width;\r\n if (diff < -0.001 || diff > 0.001) {\r\n isMonospace = false;\r\n break;\r\n }\r\n }\r\n var canUseHalfwidthRightwardsArrow = true;\r\n if (isMonospace && halfwidthRightwardsArrow.width !== referenceWidth) {\r\n // using a halfwidth rightwards arrow would break monospace...\r\n canUseHalfwidthRightwardsArrow = false;\r\n }\r\n if (halfwidthRightwardsArrow.width > rightwardsArrow.width) {\r\n // using a halfwidth rightwards arrow would paint a larger arrow than a regular rightwards arrow\r\n canUseHalfwidthRightwardsArrow = false;\r\n }\r\n // let's trust the zoom level only 2s after it was changed.\r\n var canTrustBrowserZoomLevel = (browser.getTimeSinceLastZoomLevelChanged() > 2000);\r\n return new FontInfo({\r\n zoomLevel: browser.getZoomLevel(),\r\n fontFamily: bareFontInfo.fontFamily,\r\n fontWeight: bareFontInfo.fontWeight,\r\n fontSize: bareFontInfo.fontSize,\r\n fontFeatureSettings: bareFontInfo.fontFeatureSettings,\r\n lineHeight: bareFontInfo.lineHeight,\r\n letterSpacing: bareFontInfo.letterSpacing,\r\n isMonospace: isMonospace,\r\n typicalHalfwidthCharacterWidth: typicalHalfwidthCharacter.width,\r\n typicalFullwidthCharacterWidth: typicalFullwidthCharacter.width,\r\n canUseHalfwidthRightwardsArrow: canUseHalfwidthRightwardsArrow,\r\n spaceWidth: space.width,\r\n maxDigitWidth: maxDigitWidth\r\n }, canTrustBrowserZoomLevel);\r\n };\r\n CSSBasedConfiguration.INSTANCE = new CSSBasedConfiguration();\r\n return CSSBasedConfiguration;\r\n}(Disposable));\r\nvar Configuration = /** @class */ (function (_super) {\r\n __extends(Configuration, _super);\r\n function Configuration(isSimpleWidget, options, referenceDomElement, accessibilityService) {\r\n if (referenceDomElement === void 0) { referenceDomElement = null; }\r\n var _this = _super.call(this, isSimpleWidget, options) || this;\r\n _this.accessibilityService = accessibilityService;\r\n _this._elementSizeObserver = _this._register(new ElementSizeObserver(referenceDomElement, options.dimension, function () { return _this._onReferenceDomElementSizeChanged(); }));\r\n _this._register(CSSBasedConfiguration.INSTANCE.onDidChange(function () { return _this._onCSSBasedConfigurationChanged(); }));\r\n if (_this._validatedOptions.get(9 /* automaticLayout */)) {\r\n _this._elementSizeObserver.startObserving();\r\n }\r\n _this._register(browser.onDidChangeZoomLevel(function (_) { return _this._recomputeOptions(); }));\r\n _this._register(_this.accessibilityService.onDidChangeAccessibilitySupport(function () { return _this._recomputeOptions(); }));\r\n _this._recomputeOptions();\r\n return _this;\r\n }\r\n Configuration.applyFontInfoSlow = function (domNode, fontInfo) {\r\n domNode.style.fontFamily = fontInfo.getMassagedFontFamily();\r\n domNode.style.fontWeight = fontInfo.fontWeight;\r\n domNode.style.fontSize = fontInfo.fontSize + 'px';\r\n domNode.style.fontFeatureSettings = fontInfo.fontFeatureSettings;\r\n domNode.style.lineHeight = fontInfo.lineHeight + 'px';\r\n domNode.style.letterSpacing = fontInfo.letterSpacing + 'px';\r\n };\r\n Configuration.applyFontInfo = function (domNode, fontInfo) {\r\n domNode.setFontFamily(fontInfo.getMassagedFontFamily());\r\n domNode.setFontWeight(fontInfo.fontWeight);\r\n domNode.setFontSize(fontInfo.fontSize);\r\n domNode.setFontFeatureSettings(fontInfo.fontFeatureSettings);\r\n domNode.setLineHeight(fontInfo.lineHeight);\r\n domNode.setLetterSpacing(fontInfo.letterSpacing);\r\n };\r\n Configuration.prototype._onReferenceDomElementSizeChanged = function () {\r\n this._recomputeOptions();\r\n };\r\n Configuration.prototype._onCSSBasedConfigurationChanged = function () {\r\n this._recomputeOptions();\r\n };\r\n Configuration.prototype.observeReferenceElement = function (dimension) {\r\n this._elementSizeObserver.observe(dimension);\r\n };\r\n Configuration.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n Configuration.prototype._getExtraEditorClassName = function () {\r\n var extra = '';\r\n if (!browser.isSafari && !browser.isWebkitWebView) {\r\n // Use user-select: none in all browsers except Safari and native macOS WebView\r\n extra += 'no-user-select ';\r\n }\r\n if (platform.isMacintosh) {\r\n extra += 'mac ';\r\n }\r\n return extra;\r\n };\r\n Configuration.prototype._getEnvConfiguration = function () {\r\n return {\r\n extraEditorClassName: this._getExtraEditorClassName(),\r\n outerWidth: this._elementSizeObserver.getWidth(),\r\n outerHeight: this._elementSizeObserver.getHeight(),\r\n emptySelectionClipboard: browser.isWebKit || browser.isFirefox,\r\n pixelRatio: browser.getPixelRatio(),\r\n zoomLevel: browser.getZoomLevel(),\r\n accessibilitySupport: this.accessibilityService.getAccessibilitySupport()\r\n };\r\n };\r\n Configuration.prototype.readConfiguration = function (bareFontInfo) {\r\n return CSSBasedConfiguration.INSTANCE.readConfiguration(bareFontInfo);\r\n };\r\n return Configuration;\r\n}(CommonEditorConfiguration));\r\nexport { Configuration };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { Disposable } from './lifecycle.js';\r\nimport { Emitter } from './event.js';\r\nvar Action = /** @class */ (function (_super) {\r\n __extends(Action, _super);\r\n function Action(id, label, cssClass, enabled, actionCallback) {\r\n if (label === void 0) { label = ''; }\r\n if (cssClass === void 0) { cssClass = ''; }\r\n if (enabled === void 0) { enabled = true; }\r\n var _this = _super.call(this) || this;\r\n _this._onDidChange = _this._register(new Emitter());\r\n _this.onDidChange = _this._onDidChange.event;\r\n _this._enabled = true;\r\n _this._checked = false;\r\n _this._id = id;\r\n _this._label = label;\r\n _this._cssClass = cssClass;\r\n _this._enabled = enabled;\r\n _this._actionCallback = actionCallback;\r\n return _this;\r\n }\r\n Object.defineProperty(Action.prototype, \"id\", {\r\n get: function () {\r\n return this._id;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Action.prototype, \"label\", {\r\n get: function () {\r\n return this._label;\r\n },\r\n set: function (value) {\r\n this._setLabel(value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Action.prototype._setLabel = function (value) {\r\n if (this._label !== value) {\r\n this._label = value;\r\n this._onDidChange.fire({ label: value });\r\n }\r\n };\r\n Object.defineProperty(Action.prototype, \"tooltip\", {\r\n get: function () {\r\n return this._tooltip || '';\r\n },\r\n set: function (value) {\r\n this._setTooltip(value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Action.prototype._setTooltip = function (value) {\r\n if (this._tooltip !== value) {\r\n this._tooltip = value;\r\n this._onDidChange.fire({ tooltip: value });\r\n }\r\n };\r\n Object.defineProperty(Action.prototype, \"class\", {\r\n get: function () {\r\n return this._cssClass;\r\n },\r\n set: function (value) {\r\n this._setClass(value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Action.prototype._setClass = function (value) {\r\n if (this._cssClass !== value) {\r\n this._cssClass = value;\r\n this._onDidChange.fire({ class: value });\r\n }\r\n };\r\n Object.defineProperty(Action.prototype, \"enabled\", {\r\n get: function () {\r\n return this._enabled;\r\n },\r\n set: function (value) {\r\n this._setEnabled(value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Action.prototype._setEnabled = function (value) {\r\n if (this._enabled !== value) {\r\n this._enabled = value;\r\n this._onDidChange.fire({ enabled: value });\r\n }\r\n };\r\n Object.defineProperty(Action.prototype, \"checked\", {\r\n get: function () {\r\n return this._checked;\r\n },\r\n set: function (value) {\r\n this._setChecked(value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Action.prototype._setChecked = function (value) {\r\n if (this._checked !== value) {\r\n this._checked = value;\r\n this._onDidChange.fire({ checked: value });\r\n }\r\n };\r\n Action.prototype.run = function (event, _data) {\r\n if (this._actionCallback) {\r\n return this._actionCallback(event);\r\n }\r\n return Promise.resolve(true);\r\n };\r\n return Action;\r\n}(Disposable));\r\nexport { Action };\r\nvar ActionRunner = /** @class */ (function (_super) {\r\n __extends(ActionRunner, _super);\r\n function ActionRunner() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this._onDidBeforeRun = _this._register(new Emitter());\r\n _this.onDidBeforeRun = _this._onDidBeforeRun.event;\r\n _this._onDidRun = _this._register(new Emitter());\r\n _this.onDidRun = _this._onDidRun.event;\r\n return _this;\r\n }\r\n ActionRunner.prototype.run = function (action, context) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var result, error_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!action.enabled) {\r\n return [2 /*return*/, Promise.resolve(null)];\r\n }\r\n this._onDidBeforeRun.fire({ action: action });\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, this.runAction(action, context)];\r\n case 2:\r\n result = _a.sent();\r\n this._onDidRun.fire({ action: action, result: result });\r\n return [3 /*break*/, 4];\r\n case 3:\r\n error_1 = _a.sent();\r\n this._onDidRun.fire({ action: action, error: error_1 });\r\n return [3 /*break*/, 4];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n ActionRunner.prototype.runAction = function (action, context) {\r\n var res = context ? action.run(context) : action.run();\r\n return Promise.resolve(res);\r\n };\r\n return ActionRunner;\r\n}(Disposable));\r\nexport { ActionRunner };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { Action } from '../../../base/common/actions.js';\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\r\nimport { ICommandService } from '../../commands/common/commands.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nexport function isIMenuItem(item) {\r\n return item.command !== undefined;\r\n}\r\nexport var IMenuService = createDecorator('menuService');\r\nexport var MenuRegistry = new /** @class */ (function () {\r\n function class_1() {\r\n this._commands = new Map();\r\n this._menuItems = new Map();\r\n this._onDidChangeMenu = new Emitter();\r\n this.onDidChangeMenu = this._onDidChangeMenu.event;\r\n }\r\n class_1.prototype.addCommand = function (command) {\r\n var _this = this;\r\n this._commands.set(command.id, command);\r\n this._onDidChangeMenu.fire(0 /* CommandPalette */);\r\n return {\r\n dispose: function () {\r\n if (_this._commands.delete(command.id)) {\r\n _this._onDidChangeMenu.fire(0 /* CommandPalette */);\r\n }\r\n }\r\n };\r\n };\r\n class_1.prototype.getCommand = function (id) {\r\n return this._commands.get(id);\r\n };\r\n class_1.prototype.getCommands = function () {\r\n var map = new Map();\r\n this._commands.forEach(function (value, key) { return map.set(key, value); });\r\n return map;\r\n };\r\n class_1.prototype.appendMenuItem = function (id, item) {\r\n var _this = this;\r\n var array = this._menuItems.get(id);\r\n if (!array) {\r\n array = [item];\r\n this._menuItems.set(id, array);\r\n }\r\n else {\r\n array.push(item);\r\n }\r\n this._onDidChangeMenu.fire(id);\r\n return {\r\n dispose: function () {\r\n var idx = array.indexOf(item);\r\n if (idx >= 0) {\r\n array.splice(idx, 1);\r\n _this._onDidChangeMenu.fire(id);\r\n }\r\n }\r\n };\r\n };\r\n class_1.prototype.getMenuItems = function (id) {\r\n var result = (this._menuItems.get(id) || []).slice(0);\r\n if (id === 0 /* CommandPalette */) {\r\n // CommandPalette is special because it shows\r\n // all commands by default\r\n this._appendImplicitItems(result);\r\n }\r\n return result;\r\n };\r\n class_1.prototype._appendImplicitItems = function (result) {\r\n var set = new Set();\r\n var temp = result.filter(function (item) { return isIMenuItem(item); });\r\n for (var _i = 0, temp_1 = temp; _i < temp_1.length; _i++) {\r\n var _a = temp_1[_i], command = _a.command, alt = _a.alt;\r\n set.add(command.id);\r\n if (alt) {\r\n set.add(alt.id);\r\n }\r\n }\r\n this._commands.forEach(function (command, id) {\r\n if (!set.has(id)) {\r\n result.push({ command: command });\r\n }\r\n });\r\n };\r\n return class_1;\r\n}());\r\nvar ExecuteCommandAction = /** @class */ (function (_super) {\r\n __extends(ExecuteCommandAction, _super);\r\n function ExecuteCommandAction(id, label, _commandService) {\r\n var _this = _super.call(this, id, label) || this;\r\n _this._commandService = _commandService;\r\n return _this;\r\n }\r\n ExecuteCommandAction.prototype.run = function () {\r\n var _a;\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n return (_a = this._commandService).executeCommand.apply(_a, __spreadArrays([this.id], args));\r\n };\r\n ExecuteCommandAction = __decorate([\r\n __param(2, ICommandService)\r\n ], ExecuteCommandAction);\r\n return ExecuteCommandAction;\r\n}(Action));\r\nexport { ExecuteCommandAction };\r\nvar SubmenuItemAction = /** @class */ (function (_super) {\r\n __extends(SubmenuItemAction, _super);\r\n function SubmenuItemAction(item) {\r\n var _this = this;\r\n typeof item.title === 'string' ? _this = _super.call(this, '', item.title, 'submenu') || this : _this = _super.call(this, '', item.title.value, 'submenu') || this;\r\n _this.item = item;\r\n return _this;\r\n }\r\n return SubmenuItemAction;\r\n}(Action));\r\nexport { SubmenuItemAction };\r\nvar MenuItemAction = /** @class */ (function (_super) {\r\n __extends(MenuItemAction, _super);\r\n function MenuItemAction(item, alt, options, contextKeyService, commandService) {\r\n var _this = this;\r\n typeof item.title === 'string' ? _this = _super.call(this, item.id, item.title, commandService) || this : _this = _super.call(this, item.id, item.title.value, commandService) || this;\r\n _this._cssClass = undefined;\r\n _this._enabled = !item.precondition || contextKeyService.contextMatchesRules(item.precondition);\r\n _this._checked = Boolean(item.toggled && contextKeyService.contextMatchesRules(item.toggled));\r\n _this._options = options || {};\r\n _this.item = item;\r\n _this.alt = alt ? new MenuItemAction(alt, undefined, _this._options, contextKeyService, commandService) : undefined;\r\n return _this;\r\n }\r\n MenuItemAction.prototype.dispose = function () {\r\n if (this.alt) {\r\n this.alt.dispose();\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n MenuItemAction.prototype.run = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var runArgs = [];\r\n if (this._options.arg) {\r\n runArgs = __spreadArrays(runArgs, [this._options.arg]);\r\n }\r\n if (this._options.shouldForwardArgs) {\r\n runArgs = __spreadArrays(runArgs, args);\r\n }\r\n return _super.prototype.run.apply(this, runArgs);\r\n };\r\n MenuItemAction = __decorate([\r\n __param(3, IContextKeyService),\r\n __param(4, ICommandService)\r\n ], MenuItemAction);\r\n return MenuItemAction;\r\n}(ExecuteCommandAction));\r\nexport { MenuItemAction };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { illegalArgument } from '../../base/common/errors.js';\r\nimport { URI } from '../../base/common/uri.js';\r\nimport { ICodeEditorService } from './services/codeEditorService.js';\r\nimport { Position } from '../common/core/position.js';\r\nimport { IModelService } from '../common/services/modelService.js';\r\nimport { ITextModelService } from '../common/services/resolverService.js';\r\nimport { MenuRegistry } from '../../platform/actions/common/actions.js';\r\nimport { CommandsRegistry } from '../../platform/commands/common/commands.js';\r\nimport { ContextKeyExpr, IContextKeyService } from '../../platform/contextkey/common/contextkey.js';\r\nimport { KeybindingsRegistry } from '../../platform/keybinding/common/keybindingsRegistry.js';\r\nimport { Registry } from '../../platform/registry/common/platform.js';\r\nimport { ITelemetryService } from '../../platform/telemetry/common/telemetry.js';\r\nimport { withNullAsUndefined } from '../../base/common/types.js';\r\nvar Command = /** @class */ (function () {\r\n function Command(opts) {\r\n this.id = opts.id;\r\n this.precondition = opts.precondition;\r\n this._kbOpts = opts.kbOpts;\r\n this._menuOpts = opts.menuOpts;\r\n this._description = opts.description;\r\n }\r\n Command.prototype.register = function () {\r\n var _this = this;\r\n if (Array.isArray(this._menuOpts)) {\r\n this._menuOpts.forEach(this._registerMenuItem, this);\r\n }\r\n else if (this._menuOpts) {\r\n this._registerMenuItem(this._menuOpts);\r\n }\r\n if (this._kbOpts) {\r\n var kbWhen = this._kbOpts.kbExpr;\r\n if (this.precondition) {\r\n if (kbWhen) {\r\n kbWhen = ContextKeyExpr.and(kbWhen, this.precondition);\r\n }\r\n else {\r\n kbWhen = this.precondition;\r\n }\r\n }\r\n KeybindingsRegistry.registerCommandAndKeybindingRule({\r\n id: this.id,\r\n handler: function (accessor, args) { return _this.runCommand(accessor, args); },\r\n weight: this._kbOpts.weight,\r\n when: kbWhen,\r\n primary: this._kbOpts.primary,\r\n secondary: this._kbOpts.secondary,\r\n win: this._kbOpts.win,\r\n linux: this._kbOpts.linux,\r\n mac: this._kbOpts.mac,\r\n description: this._description\r\n });\r\n }\r\n else {\r\n CommandsRegistry.registerCommand({\r\n id: this.id,\r\n handler: function (accessor, args) { return _this.runCommand(accessor, args); },\r\n description: this._description\r\n });\r\n }\r\n };\r\n Command.prototype._registerMenuItem = function (item) {\r\n MenuRegistry.appendMenuItem(item.menuId, {\r\n group: item.group,\r\n command: {\r\n id: this.id,\r\n title: item.title,\r\n },\r\n when: item.when,\r\n order: item.order\r\n });\r\n };\r\n return Command;\r\n}());\r\nexport { Command };\r\nvar EditorCommand = /** @class */ (function (_super) {\r\n __extends(EditorCommand, _super);\r\n function EditorCommand() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n /**\r\n * Create a command class that is bound to a certain editor contribution.\r\n */\r\n EditorCommand.bindToContribution = function (controllerGetter) {\r\n return /** @class */ (function (_super) {\r\n __extends(EditorControllerCommandImpl, _super);\r\n function EditorControllerCommandImpl(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._callback = opts.handler;\r\n return _this;\r\n }\r\n EditorControllerCommandImpl.prototype.runEditorCommand = function (accessor, editor, args) {\r\n var controller = controllerGetter(editor);\r\n if (controller) {\r\n this._callback(controllerGetter(editor), args);\r\n }\r\n };\r\n return EditorControllerCommandImpl;\r\n }(EditorCommand));\r\n };\r\n EditorCommand.prototype.runCommand = function (accessor, args) {\r\n var _this = this;\r\n var codeEditorService = accessor.get(ICodeEditorService);\r\n // Find the editor with text focus or active\r\n var editor = codeEditorService.getFocusedCodeEditor() || codeEditorService.getActiveCodeEditor();\r\n if (!editor) {\r\n // well, at least we tried...\r\n return;\r\n }\r\n return editor.invokeWithinContext(function (editorAccessor) {\r\n var kbService = editorAccessor.get(IContextKeyService);\r\n if (!kbService.contextMatchesRules(withNullAsUndefined(_this.precondition))) {\r\n // precondition does not hold\r\n return;\r\n }\r\n return _this.runEditorCommand(editorAccessor, editor, args);\r\n });\r\n };\r\n return EditorCommand;\r\n}(Command));\r\nexport { EditorCommand };\r\nvar EditorAction = /** @class */ (function (_super) {\r\n __extends(EditorAction, _super);\r\n function EditorAction(opts) {\r\n var _this = _super.call(this, EditorAction.convertOptions(opts)) || this;\r\n _this.label = opts.label;\r\n _this.alias = opts.alias;\r\n return _this;\r\n }\r\n EditorAction.convertOptions = function (opts) {\r\n var menuOpts;\r\n if (Array.isArray(opts.menuOpts)) {\r\n menuOpts = opts.menuOpts;\r\n }\r\n else if (opts.menuOpts) {\r\n menuOpts = [opts.menuOpts];\r\n }\r\n else {\r\n menuOpts = [];\r\n }\r\n function withDefaults(item) {\r\n if (!item.menuId) {\r\n item.menuId = 7 /* EditorContext */;\r\n }\r\n if (!item.title) {\r\n item.title = opts.label;\r\n }\r\n item.when = ContextKeyExpr.and(opts.precondition, item.when);\r\n return item;\r\n }\r\n if (Array.isArray(opts.contextMenuOpts)) {\r\n menuOpts.push.apply(menuOpts, opts.contextMenuOpts.map(withDefaults));\r\n }\r\n else if (opts.contextMenuOpts) {\r\n menuOpts.push(withDefaults(opts.contextMenuOpts));\r\n }\r\n opts.menuOpts = menuOpts;\r\n return opts;\r\n };\r\n EditorAction.prototype.runEditorCommand = function (accessor, editor, args) {\r\n this.reportTelemetry(accessor, editor);\r\n return this.run(accessor, editor, args || {});\r\n };\r\n EditorAction.prototype.reportTelemetry = function (accessor, editor) {\r\n accessor.get(ITelemetryService).publicLog2('editorActionInvoked', { name: this.label, id: this.id });\r\n };\r\n return EditorAction;\r\n}(EditorCommand));\r\nexport { EditorAction };\r\n//#endregion EditorAction\r\n// --- Registration of commands and actions\r\nexport function registerLanguageCommand(id, handler) {\r\n CommandsRegistry.registerCommand(id, function (accessor, args) { return handler(accessor, args || {}); });\r\n}\r\nexport function registerDefaultLanguageCommand(id, handler) {\r\n registerLanguageCommand(id, function (accessor, args) {\r\n var resource = args.resource, position = args.position;\r\n if (!(resource instanceof URI)) {\r\n throw illegalArgument('resource');\r\n }\r\n if (!Position.isIPosition(position)) {\r\n throw illegalArgument('position');\r\n }\r\n var model = accessor.get(IModelService).getModel(resource);\r\n if (model) {\r\n var editorPosition = Position.lift(position);\r\n return handler(model, editorPosition, args);\r\n }\r\n return accessor.get(ITextModelService).createModelReference(resource).then(function (reference) {\r\n return new Promise(function (resolve, reject) {\r\n try {\r\n var result = handler(reference.object.textEditorModel, Position.lift(position), args);\r\n resolve(result);\r\n }\r\n catch (err) {\r\n reject(err);\r\n }\r\n }).finally(function () {\r\n reference.dispose();\r\n });\r\n });\r\n });\r\n}\r\nexport function registerEditorCommand(editorCommand) {\r\n EditorContributionRegistry.INSTANCE.registerEditorCommand(editorCommand);\r\n return editorCommand;\r\n}\r\nexport function registerEditorAction(ctor) {\r\n EditorContributionRegistry.INSTANCE.registerEditorAction(new ctor());\r\n}\r\nexport function registerInstantiatedEditorAction(editorAction) {\r\n EditorContributionRegistry.INSTANCE.registerEditorAction(editorAction);\r\n}\r\nexport function registerEditorContribution(id, ctor) {\r\n EditorContributionRegistry.INSTANCE.registerEditorContribution(id, ctor);\r\n}\r\nexport var EditorExtensionsRegistry;\r\n(function (EditorExtensionsRegistry) {\r\n function getEditorCommand(commandId) {\r\n return EditorContributionRegistry.INSTANCE.getEditorCommand(commandId);\r\n }\r\n EditorExtensionsRegistry.getEditorCommand = getEditorCommand;\r\n function getEditorActions() {\r\n return EditorContributionRegistry.INSTANCE.getEditorActions();\r\n }\r\n EditorExtensionsRegistry.getEditorActions = getEditorActions;\r\n function getEditorContributions() {\r\n return EditorContributionRegistry.INSTANCE.getEditorContributions();\r\n }\r\n EditorExtensionsRegistry.getEditorContributions = getEditorContributions;\r\n function getSomeEditorContributions(ids) {\r\n return EditorContributionRegistry.INSTANCE.getEditorContributions().filter(function (c) { return ids.indexOf(c.id) >= 0; });\r\n }\r\n EditorExtensionsRegistry.getSomeEditorContributions = getSomeEditorContributions;\r\n function getDiffEditorContributions() {\r\n return EditorContributionRegistry.INSTANCE.getDiffEditorContributions();\r\n }\r\n EditorExtensionsRegistry.getDiffEditorContributions = getDiffEditorContributions;\r\n})(EditorExtensionsRegistry || (EditorExtensionsRegistry = {}));\r\n// Editor extension points\r\nvar Extensions = {\r\n EditorCommonContributions: 'editor.contributions'\r\n};\r\nvar EditorContributionRegistry = /** @class */ (function () {\r\n function EditorContributionRegistry() {\r\n this.editorContributions = [];\r\n this.diffEditorContributions = [];\r\n this.editorActions = [];\r\n this.editorCommands = Object.create(null);\r\n }\r\n EditorContributionRegistry.prototype.registerEditorContribution = function (id, ctor) {\r\n this.editorContributions.push({ id: id, ctor: ctor });\r\n };\r\n EditorContributionRegistry.prototype.getEditorContributions = function () {\r\n return this.editorContributions.slice(0);\r\n };\r\n EditorContributionRegistry.prototype.getDiffEditorContributions = function () {\r\n return this.diffEditorContributions.slice(0);\r\n };\r\n EditorContributionRegistry.prototype.registerEditorAction = function (action) {\r\n action.register();\r\n this.editorActions.push(action);\r\n };\r\n EditorContributionRegistry.prototype.getEditorActions = function () {\r\n return this.editorActions.slice(0);\r\n };\r\n EditorContributionRegistry.prototype.registerEditorCommand = function (editorCommand) {\r\n editorCommand.register();\r\n this.editorCommands[editorCommand.id] = editorCommand;\r\n };\r\n EditorContributionRegistry.prototype.getEditorCommand = function (commandId) {\r\n return (this.editorCommands[commandId] || null);\r\n };\r\n EditorContributionRegistry.INSTANCE = new EditorContributionRegistry();\r\n return EditorContributionRegistry;\r\n}());\r\nRegistry.add(Extensions.EditorCommonContributions, EditorContributionRegistry.INSTANCE);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nexport var ITelemetryService = createDecorator('telemetryService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as dom from './dom.js';\r\nvar FastDomNode = /** @class */ (function () {\r\n function FastDomNode(domNode) {\r\n this.domNode = domNode;\r\n this._maxWidth = -1;\r\n this._width = -1;\r\n this._height = -1;\r\n this._top = -1;\r\n this._left = -1;\r\n this._bottom = -1;\r\n this._right = -1;\r\n this._fontFamily = '';\r\n this._fontWeight = '';\r\n this._fontSize = -1;\r\n this._fontFeatureSettings = '';\r\n this._lineHeight = -1;\r\n this._letterSpacing = -100;\r\n this._className = '';\r\n this._display = '';\r\n this._position = '';\r\n this._visibility = '';\r\n this._layerHint = false;\r\n this._contain = 'none';\r\n }\r\n FastDomNode.prototype.setMaxWidth = function (maxWidth) {\r\n if (this._maxWidth === maxWidth) {\r\n return;\r\n }\r\n this._maxWidth = maxWidth;\r\n this.domNode.style.maxWidth = this._maxWidth + 'px';\r\n };\r\n FastDomNode.prototype.setWidth = function (width) {\r\n if (this._width === width) {\r\n return;\r\n }\r\n this._width = width;\r\n this.domNode.style.width = this._width + 'px';\r\n };\r\n FastDomNode.prototype.setHeight = function (height) {\r\n if (this._height === height) {\r\n return;\r\n }\r\n this._height = height;\r\n this.domNode.style.height = this._height + 'px';\r\n };\r\n FastDomNode.prototype.setTop = function (top) {\r\n if (this._top === top) {\r\n return;\r\n }\r\n this._top = top;\r\n this.domNode.style.top = this._top + 'px';\r\n };\r\n FastDomNode.prototype.unsetTop = function () {\r\n if (this._top === -1) {\r\n return;\r\n }\r\n this._top = -1;\r\n this.domNode.style.top = '';\r\n };\r\n FastDomNode.prototype.setLeft = function (left) {\r\n if (this._left === left) {\r\n return;\r\n }\r\n this._left = left;\r\n this.domNode.style.left = this._left + 'px';\r\n };\r\n FastDomNode.prototype.setBottom = function (bottom) {\r\n if (this._bottom === bottom) {\r\n return;\r\n }\r\n this._bottom = bottom;\r\n this.domNode.style.bottom = this._bottom + 'px';\r\n };\r\n FastDomNode.prototype.setRight = function (right) {\r\n if (this._right === right) {\r\n return;\r\n }\r\n this._right = right;\r\n this.domNode.style.right = this._right + 'px';\r\n };\r\n FastDomNode.prototype.setFontFamily = function (fontFamily) {\r\n if (this._fontFamily === fontFamily) {\r\n return;\r\n }\r\n this._fontFamily = fontFamily;\r\n this.domNode.style.fontFamily = this._fontFamily;\r\n };\r\n FastDomNode.prototype.setFontWeight = function (fontWeight) {\r\n if (this._fontWeight === fontWeight) {\r\n return;\r\n }\r\n this._fontWeight = fontWeight;\r\n this.domNode.style.fontWeight = this._fontWeight;\r\n };\r\n FastDomNode.prototype.setFontSize = function (fontSize) {\r\n if (this._fontSize === fontSize) {\r\n return;\r\n }\r\n this._fontSize = fontSize;\r\n this.domNode.style.fontSize = this._fontSize + 'px';\r\n };\r\n FastDomNode.prototype.setFontFeatureSettings = function (fontFeatureSettings) {\r\n if (this._fontFeatureSettings === fontFeatureSettings) {\r\n return;\r\n }\r\n this._fontFeatureSettings = fontFeatureSettings;\r\n this.domNode.style.fontFeatureSettings = this._fontFeatureSettings;\r\n };\r\n FastDomNode.prototype.setLineHeight = function (lineHeight) {\r\n if (this._lineHeight === lineHeight) {\r\n return;\r\n }\r\n this._lineHeight = lineHeight;\r\n this.domNode.style.lineHeight = this._lineHeight + 'px';\r\n };\r\n FastDomNode.prototype.setLetterSpacing = function (letterSpacing) {\r\n if (this._letterSpacing === letterSpacing) {\r\n return;\r\n }\r\n this._letterSpacing = letterSpacing;\r\n this.domNode.style.letterSpacing = this._letterSpacing + 'px';\r\n };\r\n FastDomNode.prototype.setClassName = function (className) {\r\n if (this._className === className) {\r\n return;\r\n }\r\n this._className = className;\r\n this.domNode.className = this._className;\r\n };\r\n FastDomNode.prototype.toggleClassName = function (className, shouldHaveIt) {\r\n dom.toggleClass(this.domNode, className, shouldHaveIt);\r\n this._className = this.domNode.className;\r\n };\r\n FastDomNode.prototype.setDisplay = function (display) {\r\n if (this._display === display) {\r\n return;\r\n }\r\n this._display = display;\r\n this.domNode.style.display = this._display;\r\n };\r\n FastDomNode.prototype.setPosition = function (position) {\r\n if (this._position === position) {\r\n return;\r\n }\r\n this._position = position;\r\n this.domNode.style.position = this._position;\r\n };\r\n FastDomNode.prototype.setVisibility = function (visibility) {\r\n if (this._visibility === visibility) {\r\n return;\r\n }\r\n this._visibility = visibility;\r\n this.domNode.style.visibility = this._visibility;\r\n };\r\n FastDomNode.prototype.setLayerHinting = function (layerHint) {\r\n if (this._layerHint === layerHint) {\r\n return;\r\n }\r\n this._layerHint = layerHint;\r\n this.domNode.style.transform = this._layerHint ? 'translate3d(0px, 0px, 0px)' : '';\r\n };\r\n FastDomNode.prototype.setContain = function (contain) {\r\n if (this._contain === contain) {\r\n return;\r\n }\r\n this._contain = contain;\r\n this.domNode.style.contain = this._contain;\r\n };\r\n FastDomNode.prototype.setAttribute = function (name, value) {\r\n this.domNode.setAttribute(name, value);\r\n };\r\n FastDomNode.prototype.removeAttribute = function (name) {\r\n this.domNode.removeAttribute(name);\r\n };\r\n FastDomNode.prototype.appendChild = function (child) {\r\n this.domNode.appendChild(child.domNode);\r\n };\r\n FastDomNode.prototype.removeChild = function (child) {\r\n this.domNode.removeChild(child.domNode);\r\n };\r\n return FastDomNode;\r\n}());\r\nexport { FastDomNode };\r\nexport function createFastDomNode(domNode) {\r\n return new FastDomNode(domNode);\r\n}\r\n","var memoizeId = 0;\r\nexport function createMemoizer() {\r\n var memoizeKeyPrefix = \"$memoize\" + memoizeId++;\r\n var self = undefined;\r\n var result = function memoize(target, key, descriptor) {\r\n var fnKey = null;\r\n var fn = null;\r\n if (typeof descriptor.value === 'function') {\r\n fnKey = 'value';\r\n fn = descriptor.value;\r\n if (fn.length !== 0) {\r\n console.warn('Memoize should only be used in functions with zero parameters');\r\n }\r\n }\r\n else if (typeof descriptor.get === 'function') {\r\n fnKey = 'get';\r\n fn = descriptor.get;\r\n }\r\n if (!fn) {\r\n throw new Error('not supported');\r\n }\r\n var memoizeKey = memoizeKeyPrefix + \":\" + key;\r\n descriptor[fnKey] = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n self = this;\r\n if (!this.hasOwnProperty(memoizeKey)) {\r\n Object.defineProperty(this, memoizeKey, {\r\n configurable: true,\r\n enumerable: false,\r\n writable: true,\r\n value: fn.apply(this, args)\r\n });\r\n }\r\n return this[memoizeKey];\r\n };\r\n };\r\n result.clear = function () {\r\n if (typeof self === 'undefined') {\r\n return;\r\n }\r\n Object.getOwnPropertyNames(self).forEach(function (property) {\r\n if (property.indexOf(memoizeKeyPrefix) === 0) {\r\n delete self[property];\r\n }\r\n });\r\n };\r\n return result;\r\n}\r\nexport function memoize(target, key, descriptor) {\r\n return createMemoizer()(target, key, descriptor);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nimport * as arrays from '../common/arrays.js';\r\nimport { Disposable } from '../common/lifecycle.js';\r\nimport * as DomUtils from './dom.js';\r\nimport { memoize } from '../common/decorators.js';\r\nexport var EventType;\r\n(function (EventType) {\r\n EventType.Tap = '-monaco-gesturetap';\r\n EventType.Change = '-monaco-gesturechange';\r\n EventType.Start = '-monaco-gesturestart';\r\n EventType.End = '-monaco-gesturesend';\r\n EventType.Contextmenu = '-monaco-gesturecontextmenu';\r\n})(EventType || (EventType = {}));\r\nvar Gesture = /** @class */ (function (_super) {\r\n __extends(Gesture, _super);\r\n function Gesture() {\r\n var _this = _super.call(this) || this;\r\n _this.dispatched = false;\r\n _this.activeTouches = {};\r\n _this.handle = null;\r\n _this.targets = [];\r\n _this.ignoreTargets = [];\r\n _this._lastSetTapCountTime = 0;\r\n _this._register(DomUtils.addDisposableListener(document, 'touchstart', function (e) { return _this.onTouchStart(e); }));\r\n _this._register(DomUtils.addDisposableListener(document, 'touchend', function (e) { return _this.onTouchEnd(e); }));\r\n _this._register(DomUtils.addDisposableListener(document, 'touchmove', function (e) { return _this.onTouchMove(e); }));\r\n return _this;\r\n }\r\n Gesture.addTarget = function (element) {\r\n if (!Gesture.isTouchDevice()) {\r\n return Disposable.None;\r\n }\r\n if (!Gesture.INSTANCE) {\r\n Gesture.INSTANCE = new Gesture();\r\n }\r\n Gesture.INSTANCE.targets.push(element);\r\n return {\r\n dispose: function () {\r\n Gesture.INSTANCE.targets = Gesture.INSTANCE.targets.filter(function (t) { return t !== element; });\r\n }\r\n };\r\n };\r\n Gesture.ignoreTarget = function (element) {\r\n if (!Gesture.isTouchDevice()) {\r\n return Disposable.None;\r\n }\r\n if (!Gesture.INSTANCE) {\r\n Gesture.INSTANCE = new Gesture();\r\n }\r\n Gesture.INSTANCE.ignoreTargets.push(element);\r\n return {\r\n dispose: function () {\r\n Gesture.INSTANCE.ignoreTargets = Gesture.INSTANCE.ignoreTargets.filter(function (t) { return t !== element; });\r\n }\r\n };\r\n };\r\n Gesture.isTouchDevice = function () {\r\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0;\r\n };\r\n Gesture.prototype.dispose = function () {\r\n if (this.handle) {\r\n this.handle.dispose();\r\n this.handle = null;\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n Gesture.prototype.onTouchStart = function (e) {\r\n var timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\r\n if (this.handle) {\r\n this.handle.dispose();\r\n this.handle = null;\r\n }\r\n for (var i = 0, len = e.targetTouches.length; i < len; i++) {\r\n var touch = e.targetTouches.item(i);\r\n this.activeTouches[touch.identifier] = {\r\n id: touch.identifier,\r\n initialTarget: touch.target,\r\n initialTimeStamp: timestamp,\r\n initialPageX: touch.pageX,\r\n initialPageY: touch.pageY,\r\n rollingTimestamps: [timestamp],\r\n rollingPageX: [touch.pageX],\r\n rollingPageY: [touch.pageY]\r\n };\r\n var evt = this.newGestureEvent(EventType.Start, touch.target);\r\n evt.pageX = touch.pageX;\r\n evt.pageY = touch.pageY;\r\n this.dispatchEvent(evt);\r\n }\r\n if (this.dispatched) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.dispatched = false;\r\n }\r\n };\r\n Gesture.prototype.onTouchEnd = function (e) {\r\n var timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\r\n var activeTouchCount = Object.keys(this.activeTouches).length;\r\n var _loop_1 = function (i, len) {\r\n var touch = e.changedTouches.item(i);\r\n if (!this_1.activeTouches.hasOwnProperty(String(touch.identifier))) {\r\n console.warn('move of an UNKNOWN touch', touch);\r\n return \"continue\";\r\n }\r\n var data = this_1.activeTouches[touch.identifier], holdTime = Date.now() - data.initialTimeStamp;\r\n if (holdTime < Gesture.HOLD_DELAY\r\n && Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\r\n && Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\r\n var evt = this_1.newGestureEvent(EventType.Tap, data.initialTarget);\r\n evt.pageX = arrays.tail(data.rollingPageX);\r\n evt.pageY = arrays.tail(data.rollingPageY);\r\n this_1.dispatchEvent(evt);\r\n }\r\n else if (holdTime >= Gesture.HOLD_DELAY\r\n && Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\r\n && Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\r\n var evt = this_1.newGestureEvent(EventType.Contextmenu, data.initialTarget);\r\n evt.pageX = arrays.tail(data.rollingPageX);\r\n evt.pageY = arrays.tail(data.rollingPageY);\r\n this_1.dispatchEvent(evt);\r\n }\r\n else if (activeTouchCount === 1) {\r\n var finalX = arrays.tail(data.rollingPageX);\r\n var finalY = arrays.tail(data.rollingPageY);\r\n var deltaT = arrays.tail(data.rollingTimestamps) - data.rollingTimestamps[0];\r\n var deltaX = finalX - data.rollingPageX[0];\r\n var deltaY = finalY - data.rollingPageY[0];\r\n // We need to get all the dispatch targets on the start of the inertia event\r\n var dispatchTo = this_1.targets.filter(function (t) { return data.initialTarget instanceof Node && t.contains(data.initialTarget); });\r\n this_1.inertia(dispatchTo, timestamp, // time now\r\n Math.abs(deltaX) / deltaT, // speed\r\n deltaX > 0 ? 1 : -1, // x direction\r\n finalX, // x now\r\n Math.abs(deltaY) / deltaT, // y speed\r\n deltaY > 0 ? 1 : -1, // y direction\r\n finalY // y now\r\n );\r\n }\r\n this_1.dispatchEvent(this_1.newGestureEvent(EventType.End, data.initialTarget));\r\n // forget about this touch\r\n delete this_1.activeTouches[touch.identifier];\r\n };\r\n var this_1 = this;\r\n for (var i = 0, len = e.changedTouches.length; i < len; i++) {\r\n _loop_1(i, len);\r\n }\r\n if (this.dispatched) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.dispatched = false;\r\n }\r\n };\r\n Gesture.prototype.newGestureEvent = function (type, initialTarget) {\r\n var event = document.createEvent('CustomEvent');\r\n event.initEvent(type, false, true);\r\n event.initialTarget = initialTarget;\r\n event.tapCount = 0;\r\n return event;\r\n };\r\n Gesture.prototype.dispatchEvent = function (event) {\r\n var _this = this;\r\n if (event.type === EventType.Tap) {\r\n var currentTime = (new Date()).getTime();\r\n var setTapCount = 0;\r\n if (currentTime - this._lastSetTapCountTime > Gesture.CLEAR_TAP_COUNT_TIME) {\r\n setTapCount = 1;\r\n }\r\n else {\r\n setTapCount = 2;\r\n }\r\n this._lastSetTapCountTime = currentTime;\r\n event.tapCount = setTapCount;\r\n }\r\n else if (event.type === EventType.Change || event.type === EventType.Contextmenu) {\r\n // tap is canceled by scrolling or context menu\r\n this._lastSetTapCountTime = 0;\r\n }\r\n for (var i = 0; i < this.ignoreTargets.length; i++) {\r\n if (event.initialTarget instanceof Node && this.ignoreTargets[i].contains(event.initialTarget)) {\r\n return;\r\n }\r\n }\r\n this.targets.forEach(function (target) {\r\n if (event.initialTarget instanceof Node && target.contains(event.initialTarget)) {\r\n target.dispatchEvent(event);\r\n _this.dispatched = true;\r\n }\r\n });\r\n };\r\n Gesture.prototype.inertia = function (dispatchTo, t1, vX, dirX, x, vY, dirY, y) {\r\n var _this = this;\r\n this.handle = DomUtils.scheduleAtNextAnimationFrame(function () {\r\n var now = Date.now();\r\n // velocity: old speed + accel_over_time\r\n var deltaT = now - t1, delta_pos_x = 0, delta_pos_y = 0, stopped = true;\r\n vX += Gesture.SCROLL_FRICTION * deltaT;\r\n vY += Gesture.SCROLL_FRICTION * deltaT;\r\n if (vX > 0) {\r\n stopped = false;\r\n delta_pos_x = dirX * vX * deltaT;\r\n }\r\n if (vY > 0) {\r\n stopped = false;\r\n delta_pos_y = dirY * vY * deltaT;\r\n }\r\n // dispatch translation event\r\n var evt = _this.newGestureEvent(EventType.Change);\r\n evt.translationX = delta_pos_x;\r\n evt.translationY = delta_pos_y;\r\n dispatchTo.forEach(function (d) { return d.dispatchEvent(evt); });\r\n if (!stopped) {\r\n _this.inertia(dispatchTo, now, vX, dirX, x + delta_pos_x, vY, dirY, y + delta_pos_y);\r\n }\r\n });\r\n };\r\n Gesture.prototype.onTouchMove = function (e) {\r\n var timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\r\n for (var i = 0, len = e.changedTouches.length; i < len; i++) {\r\n var touch = e.changedTouches.item(i);\r\n if (!this.activeTouches.hasOwnProperty(String(touch.identifier))) {\r\n console.warn('end of an UNKNOWN touch', touch);\r\n continue;\r\n }\r\n var data = this.activeTouches[touch.identifier];\r\n var evt = this.newGestureEvent(EventType.Change, data.initialTarget);\r\n evt.translationX = touch.pageX - arrays.tail(data.rollingPageX);\r\n evt.translationY = touch.pageY - arrays.tail(data.rollingPageY);\r\n evt.pageX = touch.pageX;\r\n evt.pageY = touch.pageY;\r\n this.dispatchEvent(evt);\r\n // only keep a few data points, to average the final speed\r\n if (data.rollingPageX.length > 3) {\r\n data.rollingPageX.shift();\r\n data.rollingPageY.shift();\r\n data.rollingTimestamps.shift();\r\n }\r\n data.rollingPageX.push(touch.pageX);\r\n data.rollingPageY.push(touch.pageY);\r\n data.rollingTimestamps.push(timestamp);\r\n }\r\n if (this.dispatched) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.dispatched = false;\r\n }\r\n };\r\n Gesture.SCROLL_FRICTION = -0.005;\r\n Gesture.HOLD_DELAY = 700;\r\n Gesture.CLEAR_TAP_COUNT_TIME = 400; // ms\r\n __decorate([\r\n memoize\r\n ], Gesture, \"isTouchDevice\", null);\r\n return Gesture;\r\n}(Disposable));\r\nexport { Gesture };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as dom from './dom.js';\r\nimport * as platform from '../common/platform.js';\r\nimport { IframeUtils } from './iframe.js';\r\nimport { StandardMouseEvent } from './mouseEvent.js';\r\nimport { DisposableStore } from '../common/lifecycle.js';\r\nimport { BrowserFeatures } from './canIUse.js';\r\nexport function standardMouseMoveMerger(lastEvent, currentEvent) {\r\n var ev = new StandardMouseEvent(currentEvent);\r\n ev.preventDefault();\r\n return {\r\n leftButton: ev.leftButton,\r\n posx: ev.posx,\r\n posy: ev.posy\r\n };\r\n}\r\nvar GlobalMouseMoveMonitor = /** @class */ (function () {\r\n function GlobalMouseMoveMonitor() {\r\n this.hooks = new DisposableStore();\r\n this.mouseMoveEventMerger = null;\r\n this.mouseMoveCallback = null;\r\n this.onStopCallback = null;\r\n }\r\n GlobalMouseMoveMonitor.prototype.dispose = function () {\r\n this.stopMonitoring(false);\r\n this.hooks.dispose();\r\n };\r\n GlobalMouseMoveMonitor.prototype.stopMonitoring = function (invokeStopCallback) {\r\n if (!this.isMonitoring()) {\r\n // Not monitoring\r\n return;\r\n }\r\n // Unhook\r\n this.hooks.clear();\r\n this.mouseMoveEventMerger = null;\r\n this.mouseMoveCallback = null;\r\n var onStopCallback = this.onStopCallback;\r\n this.onStopCallback = null;\r\n if (invokeStopCallback && onStopCallback) {\r\n onStopCallback();\r\n }\r\n };\r\n GlobalMouseMoveMonitor.prototype.isMonitoring = function () {\r\n return !!this.mouseMoveEventMerger;\r\n };\r\n GlobalMouseMoveMonitor.prototype.startMonitoring = function (mouseMoveEventMerger, mouseMoveCallback, onStopCallback) {\r\n var _this = this;\r\n if (this.isMonitoring()) {\r\n // I am already hooked\r\n return;\r\n }\r\n this.mouseMoveEventMerger = mouseMoveEventMerger;\r\n this.mouseMoveCallback = mouseMoveCallback;\r\n this.onStopCallback = onStopCallback;\r\n var windowChain = IframeUtils.getSameOriginWindowChain();\r\n var mouseMove = platform.isIOS && BrowserFeatures.pointerEvents ? 'pointermove' : 'mousemove';\r\n var mouseUp = platform.isIOS && BrowserFeatures.pointerEvents ? 'pointerup' : 'mouseup';\r\n for (var _i = 0, windowChain_1 = windowChain; _i < windowChain_1.length; _i++) {\r\n var element = windowChain_1[_i];\r\n this.hooks.add(dom.addDisposableThrottledListener(element.window.document, mouseMove, function (data) { return _this.mouseMoveCallback(data); }, function (lastEvent, currentEvent) { return _this.mouseMoveEventMerger(lastEvent, currentEvent); }));\r\n this.hooks.add(dom.addDisposableListener(element.window.document, mouseUp, function (e) { return _this.stopMonitoring(true); }));\r\n }\r\n if (IframeUtils.hasDifferentOriginAncestor()) {\r\n var lastSameOriginAncestor = windowChain[windowChain.length - 1];\r\n // We might miss a mouse up if it happens outside the iframe\r\n // This one is for Chrome\r\n this.hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseout', function (browserEvent) {\r\n var e = new StandardMouseEvent(browserEvent);\r\n if (e.target.tagName.toLowerCase() === 'html') {\r\n _this.stopMonitoring(true);\r\n }\r\n }));\r\n // This one is for FF\r\n this.hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseover', function (browserEvent) {\r\n var e = new StandardMouseEvent(browserEvent);\r\n if (e.target.tagName.toLowerCase() === 'html') {\r\n _this.stopMonitoring(true);\r\n }\r\n }));\r\n // This one is for IE\r\n this.hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document.body, 'mouseleave', function (browserEvent) {\r\n _this.stopMonitoring(true);\r\n }));\r\n }\r\n };\r\n return GlobalMouseMoveMonitor;\r\n}());\r\nexport { GlobalMouseMoveMonitor };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as dom from '../../base/browser/dom.js';\r\nimport { GlobalMouseMoveMonitor } from '../../base/browser/globalMouseMoveMonitor.js';\r\nimport { StandardMouseEvent } from '../../base/browser/mouseEvent.js';\r\nimport { Disposable } from '../../base/common/lifecycle.js';\r\n/**\r\n * Coordinates relative to the whole document (e.g. mouse event's pageX and pageY)\r\n */\r\nvar PageCoordinates = /** @class */ (function () {\r\n function PageCoordinates(x, y) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n PageCoordinates.prototype.toClientCoordinates = function () {\r\n return new ClientCoordinates(this.x - dom.StandardWindow.scrollX, this.y - dom.StandardWindow.scrollY);\r\n };\r\n return PageCoordinates;\r\n}());\r\nexport { PageCoordinates };\r\n/**\r\n * Coordinates within the application's client area (i.e. origin is document's scroll position).\r\n *\r\n * For example, clicking in the top-left corner of the client area will\r\n * always result in a mouse event with a client.x value of 0, regardless\r\n * of whether the page is scrolled horizontally.\r\n */\r\nvar ClientCoordinates = /** @class */ (function () {\r\n function ClientCoordinates(clientX, clientY) {\r\n this.clientX = clientX;\r\n this.clientY = clientY;\r\n }\r\n ClientCoordinates.prototype.toPageCoordinates = function () {\r\n return new PageCoordinates(this.clientX + dom.StandardWindow.scrollX, this.clientY + dom.StandardWindow.scrollY);\r\n };\r\n return ClientCoordinates;\r\n}());\r\nexport { ClientCoordinates };\r\n/**\r\n * The position of the editor in the page.\r\n */\r\nvar EditorPagePosition = /** @class */ (function () {\r\n function EditorPagePosition(x, y, width, height) {\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n }\r\n return EditorPagePosition;\r\n}());\r\nexport { EditorPagePosition };\r\nexport function createEditorPagePosition(editorViewDomNode) {\r\n var editorPos = dom.getDomNodePagePosition(editorViewDomNode);\r\n return new EditorPagePosition(editorPos.left, editorPos.top, editorPos.width, editorPos.height);\r\n}\r\nvar EditorMouseEvent = /** @class */ (function (_super) {\r\n __extends(EditorMouseEvent, _super);\r\n function EditorMouseEvent(e, editorViewDomNode) {\r\n var _this = _super.call(this, e) || this;\r\n _this.pos = new PageCoordinates(_this.posx, _this.posy);\r\n _this.editorPos = createEditorPagePosition(editorViewDomNode);\r\n return _this;\r\n }\r\n return EditorMouseEvent;\r\n}(StandardMouseEvent));\r\nexport { EditorMouseEvent };\r\nvar EditorMouseEventFactory = /** @class */ (function () {\r\n function EditorMouseEventFactory(editorViewDomNode) {\r\n this._editorViewDomNode = editorViewDomNode;\r\n }\r\n EditorMouseEventFactory.prototype._create = function (e) {\r\n return new EditorMouseEvent(e, this._editorViewDomNode);\r\n };\r\n EditorMouseEventFactory.prototype.onContextMenu = function (target, callback) {\r\n var _this = this;\r\n return dom.addDisposableListener(target, 'contextmenu', function (e) {\r\n callback(_this._create(e));\r\n });\r\n };\r\n EditorMouseEventFactory.prototype.onMouseUp = function (target, callback) {\r\n var _this = this;\r\n return dom.addDisposableListener(target, 'mouseup', function (e) {\r\n callback(_this._create(e));\r\n });\r\n };\r\n EditorMouseEventFactory.prototype.onMouseDown = function (target, callback) {\r\n var _this = this;\r\n return dom.addDisposableListener(target, 'mousedown', function (e) {\r\n callback(_this._create(e));\r\n });\r\n };\r\n EditorMouseEventFactory.prototype.onMouseLeave = function (target, callback) {\r\n var _this = this;\r\n return dom.addDisposableNonBubblingMouseOutListener(target, function (e) {\r\n callback(_this._create(e));\r\n });\r\n };\r\n EditorMouseEventFactory.prototype.onMouseMoveThrottled = function (target, callback, merger, minimumTimeMs) {\r\n var _this = this;\r\n var myMerger = function (lastEvent, currentEvent) {\r\n return merger(lastEvent, _this._create(currentEvent));\r\n };\r\n return dom.addDisposableThrottledListener(target, 'mousemove', callback, myMerger, minimumTimeMs);\r\n };\r\n return EditorMouseEventFactory;\r\n}());\r\nexport { EditorMouseEventFactory };\r\nvar EditorPointerEventFactory = /** @class */ (function () {\r\n function EditorPointerEventFactory(editorViewDomNode) {\r\n this._editorViewDomNode = editorViewDomNode;\r\n }\r\n EditorPointerEventFactory.prototype._create = function (e) {\r\n return new EditorMouseEvent(e, this._editorViewDomNode);\r\n };\r\n EditorPointerEventFactory.prototype.onPointerUp = function (target, callback) {\r\n var _this = this;\r\n return dom.addDisposableListener(target, 'pointerup', function (e) {\r\n callback(_this._create(e));\r\n });\r\n };\r\n EditorPointerEventFactory.prototype.onPointerDown = function (target, callback) {\r\n var _this = this;\r\n return dom.addDisposableListener(target, 'pointerdown', function (e) {\r\n callback(_this._create(e));\r\n });\r\n };\r\n EditorPointerEventFactory.prototype.onPointerLeave = function (target, callback) {\r\n var _this = this;\r\n return dom.addDisposableNonBubblingPointerOutListener(target, function (e) {\r\n callback(_this._create(e));\r\n });\r\n };\r\n EditorPointerEventFactory.prototype.onPointerMoveThrottled = function (target, callback, merger, minimumTimeMs) {\r\n var _this = this;\r\n var myMerger = function (lastEvent, currentEvent) {\r\n return merger(lastEvent, _this._create(currentEvent));\r\n };\r\n return dom.addDisposableThrottledListener(target, 'pointermove', callback, myMerger, minimumTimeMs);\r\n };\r\n return EditorPointerEventFactory;\r\n}());\r\nexport { EditorPointerEventFactory };\r\nvar GlobalEditorMouseMoveMonitor = /** @class */ (function (_super) {\r\n __extends(GlobalEditorMouseMoveMonitor, _super);\r\n function GlobalEditorMouseMoveMonitor(editorViewDomNode) {\r\n var _this = _super.call(this) || this;\r\n _this._editorViewDomNode = editorViewDomNode;\r\n _this._globalMouseMoveMonitor = _this._register(new GlobalMouseMoveMonitor());\r\n _this._keydownListener = null;\r\n return _this;\r\n }\r\n GlobalEditorMouseMoveMonitor.prototype.startMonitoring = function (merger, mouseMoveCallback, onStopCallback) {\r\n var _this = this;\r\n // Add a <> keydown event listener that will cancel the monitoring\r\n // if something other than a modifier key is pressed\r\n this._keydownListener = dom.addStandardDisposableListener(document, 'keydown', function (e) {\r\n var kb = e.toKeybinding();\r\n if (kb.isModifierKey()) {\r\n // Allow modifier keys\r\n return;\r\n }\r\n _this._globalMouseMoveMonitor.stopMonitoring(true);\r\n }, true);\r\n var myMerger = function (lastEvent, currentEvent) {\r\n return merger(lastEvent, new EditorMouseEvent(currentEvent, _this._editorViewDomNode));\r\n };\r\n this._globalMouseMoveMonitor.startMonitoring(myMerger, mouseMoveCallback, function () {\r\n _this._keydownListener.dispose();\r\n onStopCallback();\r\n });\r\n };\r\n return GlobalEditorMouseMoveMonitor;\r\n}(Disposable));\r\nexport { GlobalEditorMouseMoveMonitor };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nvar ViewEventHandler = /** @class */ (function (_super) {\r\n __extends(ViewEventHandler, _super);\r\n function ViewEventHandler() {\r\n var _this = _super.call(this) || this;\r\n _this._shouldRender = true;\r\n return _this;\r\n }\r\n ViewEventHandler.prototype.shouldRender = function () {\r\n return this._shouldRender;\r\n };\r\n ViewEventHandler.prototype.forceShouldRender = function () {\r\n this._shouldRender = true;\r\n };\r\n ViewEventHandler.prototype.setShouldRender = function () {\r\n this._shouldRender = true;\r\n };\r\n ViewEventHandler.prototype.onDidRender = function () {\r\n this._shouldRender = false;\r\n };\r\n // --- begin event handlers\r\n ViewEventHandler.prototype.onConfigurationChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onCursorStateChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onDecorationsChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onFlushed = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onFocusChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onLanguageConfigurationChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onLineMappingChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onLinesChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onLinesDeleted = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onLinesInserted = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onRevealRangeRequest = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onScrollChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onTokensChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onTokensColorsChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onZonesChanged = function (e) {\r\n return false;\r\n };\r\n ViewEventHandler.prototype.onThemeChanged = function (e) {\r\n return false;\r\n };\r\n // --- end event handlers\r\n ViewEventHandler.prototype.handleEvents = function (events) {\r\n var shouldRender = false;\r\n for (var i = 0, len = events.length; i < len; i++) {\r\n var e = events[i];\r\n switch (e.type) {\r\n case 1 /* ViewConfigurationChanged */:\r\n if (this.onConfigurationChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 2 /* ViewCursorStateChanged */:\r\n if (this.onCursorStateChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 3 /* ViewDecorationsChanged */:\r\n if (this.onDecorationsChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 4 /* ViewFlushed */:\r\n if (this.onFlushed(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 5 /* ViewFocusChanged */:\r\n if (this.onFocusChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 16 /* ViewLanguageConfigurationChanged */:\r\n if (this.onLanguageConfigurationChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 6 /* ViewLineMappingChanged */:\r\n if (this.onLineMappingChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 7 /* ViewLinesChanged */:\r\n if (this.onLinesChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 8 /* ViewLinesDeleted */:\r\n if (this.onLinesDeleted(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 9 /* ViewLinesInserted */:\r\n if (this.onLinesInserted(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 10 /* ViewRevealRangeRequest */:\r\n if (this.onRevealRangeRequest(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 11 /* ViewScrollChanged */:\r\n if (this.onScrollChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 12 /* ViewTokensChanged */:\r\n if (this.onTokensChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 13 /* ViewTokensColorsChanged */:\r\n if (this.onTokensColorsChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 14 /* ViewZonesChanged */:\r\n if (this.onZonesChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n case 15 /* ViewThemeChanged */:\r\n if (this.onThemeChanged(e)) {\r\n shouldRender = true;\r\n }\r\n break;\r\n default:\r\n console.info('View received unknown event: ');\r\n console.info(e);\r\n }\r\n }\r\n if (shouldRender) {\r\n this._shouldRender = true;\r\n }\r\n };\r\n return ViewEventHandler;\r\n}(Disposable));\r\nexport { ViewEventHandler };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { FastDomNode } from '../../../base/browser/fastDomNode.js';\r\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\r\nvar ViewPart = /** @class */ (function (_super) {\r\n __extends(ViewPart, _super);\r\n function ViewPart(context) {\r\n var _this = _super.call(this) || this;\r\n _this._context = context;\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n ViewPart.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n _super.prototype.dispose.call(this);\r\n };\r\n return ViewPart;\r\n}(ViewEventHandler));\r\nexport { ViewPart };\r\nvar PartFingerprints = /** @class */ (function () {\r\n function PartFingerprints() {\r\n }\r\n PartFingerprints.write = function (target, partId) {\r\n if (target instanceof FastDomNode) {\r\n target.setAttribute('data-mprt', String(partId));\r\n }\r\n else {\r\n target.setAttribute('data-mprt', String(partId));\r\n }\r\n };\r\n PartFingerprints.read = function (target) {\r\n var r = target.getAttribute('data-mprt');\r\n if (r === null) {\r\n return 0 /* None */;\r\n }\r\n return parseInt(r, 10);\r\n };\r\n PartFingerprints.collect = function (child, stopAt) {\r\n var result = [], resultLen = 0;\r\n while (child && child !== document.body) {\r\n if (child === stopAt) {\r\n break;\r\n }\r\n if (child.nodeType === child.ELEMENT_NODE) {\r\n result[resultLen++] = this.read(child);\r\n }\r\n child = child.parentElement;\r\n }\r\n var r = new Uint8Array(resultLen);\r\n for (var i = 0; i < resultLen; i++) {\r\n r[i] = result[resultLen - i - 1];\r\n }\r\n return r;\r\n };\r\n return PartFingerprints;\r\n}());\r\nexport { PartFingerprints };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar RestrictedRenderingContext = /** @class */ (function () {\r\n function RestrictedRenderingContext(viewLayout, viewportData) {\r\n this._viewLayout = viewLayout;\r\n this.viewportData = viewportData;\r\n this.scrollWidth = this._viewLayout.getScrollWidth();\r\n this.scrollHeight = this._viewLayout.getScrollHeight();\r\n this.visibleRange = this.viewportData.visibleRange;\r\n this.bigNumbersDelta = this.viewportData.bigNumbersDelta;\r\n var vInfo = this._viewLayout.getCurrentViewport();\r\n this.scrollTop = vInfo.top;\r\n this.scrollLeft = vInfo.left;\r\n this.viewportWidth = vInfo.width;\r\n this.viewportHeight = vInfo.height;\r\n }\r\n RestrictedRenderingContext.prototype.getScrolledTopFromAbsoluteTop = function (absoluteTop) {\r\n return absoluteTop - this.scrollTop;\r\n };\r\n RestrictedRenderingContext.prototype.getVerticalOffsetForLineNumber = function (lineNumber) {\r\n return this._viewLayout.getVerticalOffsetForLineNumber(lineNumber);\r\n };\r\n RestrictedRenderingContext.prototype.getDecorationsInViewport = function () {\r\n return this.viewportData.getDecorationsInViewport();\r\n };\r\n return RestrictedRenderingContext;\r\n}());\r\nexport { RestrictedRenderingContext };\r\nvar RenderingContext = /** @class */ (function (_super) {\r\n __extends(RenderingContext, _super);\r\n function RenderingContext(viewLayout, viewportData, viewLines) {\r\n var _this = _super.call(this, viewLayout, viewportData) || this;\r\n _this._viewLines = viewLines;\r\n return _this;\r\n }\r\n RenderingContext.prototype.linesVisibleRangesForRange = function (range, includeNewLines) {\r\n return this._viewLines.linesVisibleRangesForRange(range, includeNewLines);\r\n };\r\n RenderingContext.prototype.visibleRangeForPosition = function (position) {\r\n return this._viewLines.visibleRangeForPosition(position);\r\n };\r\n return RenderingContext;\r\n}(RestrictedRenderingContext));\r\nexport { RenderingContext };\r\nvar LineVisibleRanges = /** @class */ (function () {\r\n function LineVisibleRanges(outsideRenderedLine, lineNumber, ranges) {\r\n this.outsideRenderedLine = outsideRenderedLine;\r\n this.lineNumber = lineNumber;\r\n this.ranges = ranges;\r\n }\r\n return LineVisibleRanges;\r\n}());\r\nexport { LineVisibleRanges };\r\nvar HorizontalRange = /** @class */ (function () {\r\n function HorizontalRange(left, width) {\r\n this.left = Math.round(left);\r\n this.width = Math.round(width);\r\n }\r\n HorizontalRange.prototype.toString = function () {\r\n return \"[\" + this.left + \",\" + this.width + \"]\";\r\n };\r\n return HorizontalRange;\r\n}());\r\nexport { HorizontalRange };\r\nvar HorizontalPosition = /** @class */ (function () {\r\n function HorizontalPosition(outsideRenderedLine, left) {\r\n this.outsideRenderedLine = outsideRenderedLine;\r\n this.left = Math.round(left);\r\n }\r\n return HorizontalPosition;\r\n}());\r\nexport { HorizontalPosition };\r\nvar VisibleRanges = /** @class */ (function () {\r\n function VisibleRanges(outsideRenderedLine, ranges) {\r\n this.outsideRenderedLine = outsideRenderedLine;\r\n this.ranges = ranges;\r\n }\r\n return VisibleRanges;\r\n}());\r\nexport { VisibleRanges };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { HorizontalRange } from '../../../common/view/renderingContext.js';\r\nvar FloatHorizontalRange = /** @class */ (function () {\r\n function FloatHorizontalRange(left, width) {\r\n this.left = left;\r\n this.width = width;\r\n }\r\n FloatHorizontalRange.prototype.toString = function () {\r\n return \"[\" + this.left + \",\" + this.width + \"]\";\r\n };\r\n FloatHorizontalRange.compare = function (a, b) {\r\n return a.left - b.left;\r\n };\r\n return FloatHorizontalRange;\r\n}());\r\nvar RangeUtil = /** @class */ (function () {\r\n function RangeUtil() {\r\n }\r\n RangeUtil._createRange = function () {\r\n if (!this._handyReadyRange) {\r\n this._handyReadyRange = document.createRange();\r\n }\r\n return this._handyReadyRange;\r\n };\r\n RangeUtil._detachRange = function (range, endNode) {\r\n // Move range out of the span node, IE doesn't like having many ranges in\r\n // the same spot and will act badly for lines containing dashes ('-')\r\n range.selectNodeContents(endNode);\r\n };\r\n RangeUtil._readClientRects = function (startElement, startOffset, endElement, endOffset, endNode) {\r\n var range = this._createRange();\r\n try {\r\n range.setStart(startElement, startOffset);\r\n range.setEnd(endElement, endOffset);\r\n return range.getClientRects();\r\n }\r\n catch (e) {\r\n // This is life ...\r\n return null;\r\n }\r\n finally {\r\n this._detachRange(range, endNode);\r\n }\r\n };\r\n RangeUtil._mergeAdjacentRanges = function (ranges) {\r\n if (ranges.length === 1) {\r\n // There is nothing to merge\r\n return [new HorizontalRange(ranges[0].left, ranges[0].width)];\r\n }\r\n ranges.sort(FloatHorizontalRange.compare);\r\n var result = [], resultLen = 0;\r\n var prevLeft = ranges[0].left;\r\n var prevWidth = ranges[0].width;\r\n for (var i = 1, len = ranges.length; i < len; i++) {\r\n var range = ranges[i];\r\n var myLeft = range.left;\r\n var myWidth = range.width;\r\n if (prevLeft + prevWidth + 0.9 /* account for browser's rounding errors*/ >= myLeft) {\r\n prevWidth = Math.max(prevWidth, myLeft + myWidth - prevLeft);\r\n }\r\n else {\r\n result[resultLen++] = new HorizontalRange(prevLeft, prevWidth);\r\n prevLeft = myLeft;\r\n prevWidth = myWidth;\r\n }\r\n }\r\n result[resultLen++] = new HorizontalRange(prevLeft, prevWidth);\r\n return result;\r\n };\r\n RangeUtil._createHorizontalRangesFromClientRects = function (clientRects, clientRectDeltaLeft) {\r\n if (!clientRects || clientRects.length === 0) {\r\n return null;\r\n }\r\n // We go through FloatHorizontalRange because it has been observed in bi-di text\r\n // that the clientRects are not coming in sorted from the browser\r\n var result = [];\r\n for (var i = 0, len = clientRects.length; i < len; i++) {\r\n var clientRect = clientRects[i];\r\n result[i] = new FloatHorizontalRange(Math.max(0, clientRect.left - clientRectDeltaLeft), clientRect.width);\r\n }\r\n return this._mergeAdjacentRanges(result);\r\n };\r\n RangeUtil.readHorizontalRanges = function (domNode, startChildIndex, startOffset, endChildIndex, endOffset, clientRectDeltaLeft, endNode) {\r\n // Panic check\r\n var min = 0;\r\n var max = domNode.children.length - 1;\r\n if (min > max) {\r\n return null;\r\n }\r\n startChildIndex = Math.min(max, Math.max(min, startChildIndex));\r\n endChildIndex = Math.min(max, Math.max(min, endChildIndex));\r\n // If crossing over to a span only to select offset 0, then use the previous span's maximum offset\r\n // Chrome is buggy and doesn't handle 0 offsets well sometimes.\r\n if (startChildIndex !== endChildIndex) {\r\n if (endChildIndex > 0 && endOffset === 0) {\r\n endChildIndex--;\r\n endOffset = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n }\r\n }\r\n var startElement = domNode.children[startChildIndex].firstChild;\r\n var endElement = domNode.children[endChildIndex].firstChild;\r\n if (!startElement || !endElement) {\r\n // When having an empty (without any text content), try to move to the previous \r\n if (!startElement && startOffset === 0 && startChildIndex > 0) {\r\n startElement = domNode.children[startChildIndex - 1].firstChild;\r\n startOffset = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n }\r\n if (!endElement && endOffset === 0 && endChildIndex > 0) {\r\n endElement = domNode.children[endChildIndex - 1].firstChild;\r\n endOffset = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n }\r\n }\r\n if (!startElement || !endElement) {\r\n return null;\r\n }\r\n startOffset = Math.min(startElement.textContent.length, Math.max(0, startOffset));\r\n endOffset = Math.min(endElement.textContent.length, Math.max(0, endOffset));\r\n var clientRects = this._readClientRects(startElement, startOffset, endElement, endOffset, endNode);\r\n return this._createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft);\r\n };\r\n return RangeUtil;\r\n}());\r\nexport { RangeUtil };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { toDisposable } from '../../../base/common/lifecycle.js';\r\nimport * as platform from '../../registry/common/platform.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nexport var IThemeService = createDecorator('themeService');\r\nexport function themeColorFromId(id) {\r\n return { id: id };\r\n}\r\n// base themes\r\nexport var DARK = 'dark';\r\nexport var HIGH_CONTRAST = 'hc';\r\nexport function getThemeTypeSelector(type) {\r\n switch (type) {\r\n case DARK: return 'vs-dark';\r\n case HIGH_CONTRAST: return 'hc-black';\r\n default: return 'vs';\r\n }\r\n}\r\n// static theming participant\r\nexport var Extensions = {\r\n ThemingContribution: 'base.contributions.theming'\r\n};\r\nvar ThemingRegistry = /** @class */ (function () {\r\n function ThemingRegistry() {\r\n this.themingParticipants = [];\r\n this.themingParticipants = [];\r\n this.onThemingParticipantAddedEmitter = new Emitter();\r\n }\r\n ThemingRegistry.prototype.onThemeChange = function (participant) {\r\n var _this = this;\r\n this.themingParticipants.push(participant);\r\n this.onThemingParticipantAddedEmitter.fire(participant);\r\n return toDisposable(function () {\r\n var idx = _this.themingParticipants.indexOf(participant);\r\n _this.themingParticipants.splice(idx, 1);\r\n });\r\n };\r\n ThemingRegistry.prototype.getThemingParticipants = function () {\r\n return this.themingParticipants;\r\n };\r\n return ThemingRegistry;\r\n}());\r\nvar themingRegistry = new ThemingRegistry();\r\nplatform.Registry.add(Extensions.ThemingContribution, themingRegistry);\r\nexport function registerThemingParticipant(participant) {\r\n return themingRegistry.onThemeChange(participant);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as browser from '../../../../base/browser/browser.js';\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport * as platform from '../../../../base/common/platform.js';\r\nimport { RangeUtil } from './rangeUtil.js';\r\nimport { HorizontalRange, VisibleRanges } from '../../../common/view/renderingContext.js';\r\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\r\nimport { CharacterMapping, RenderLineInput, renderViewLine, LineRange } from '../../../common/viewLayout/viewLineRenderer.js';\r\nimport { HIGH_CONTRAST } from '../../../../platform/theme/common/themeService.js';\r\nimport { EditorFontLigatures } from '../../../common/config/editorOptions.js';\r\nvar canUseFastRenderedViewLine = (function () {\r\n if (platform.isNative) {\r\n // In VSCode we know very well when the zoom level changes\r\n return true;\r\n }\r\n if (platform.isLinux || browser.isFirefox || browser.isSafari) {\r\n // On Linux, it appears that zooming affects char widths (in pixels), which is unexpected.\r\n // --\r\n // Even though we read character widths correctly, having read them at a specific zoom level\r\n // does not mean they are the same at the current zoom level.\r\n // --\r\n // This could be improved if we ever figure out how to get an event when browsers zoom,\r\n // but until then we have to stick with reading client rects.\r\n // --\r\n // The same has been observed with Firefox on Windows7\r\n // --\r\n // The same has been oversved with Safari\r\n return false;\r\n }\r\n return true;\r\n})();\r\nvar alwaysRenderInlineSelection = (browser.isEdgeOrIE);\r\nvar DomReadingContext = /** @class */ (function () {\r\n function DomReadingContext(domNode, endNode) {\r\n this._domNode = domNode;\r\n this._clientRectDeltaLeft = 0;\r\n this._clientRectDeltaLeftRead = false;\r\n this.endNode = endNode;\r\n }\r\n Object.defineProperty(DomReadingContext.prototype, \"clientRectDeltaLeft\", {\r\n get: function () {\r\n if (!this._clientRectDeltaLeftRead) {\r\n this._clientRectDeltaLeftRead = true;\r\n this._clientRectDeltaLeft = this._domNode.getBoundingClientRect().left;\r\n }\r\n return this._clientRectDeltaLeft;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return DomReadingContext;\r\n}());\r\nexport { DomReadingContext };\r\nvar ViewLineOptions = /** @class */ (function () {\r\n function ViewLineOptions(config, themeType) {\r\n this.themeType = themeType;\r\n var options = config.options;\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n this.renderWhitespace = options.get(70 /* renderWhitespace */);\r\n this.renderControlCharacters = options.get(66 /* renderControlCharacters */);\r\n this.spaceWidth = fontInfo.spaceWidth;\r\n this.useMonospaceOptimizations = (fontInfo.isMonospace\r\n && !options.get(22 /* disableMonospaceOptimizations */));\r\n this.canUseHalfwidthRightwardsArrow = fontInfo.canUseHalfwidthRightwardsArrow;\r\n this.lineHeight = options.get(47 /* lineHeight */);\r\n this.stopRenderingLineAfter = options.get(84 /* stopRenderingLineAfter */);\r\n this.fontLigatures = options.get(33 /* fontLigatures */);\r\n }\r\n ViewLineOptions.prototype.equals = function (other) {\r\n return (this.themeType === other.themeType\r\n && this.renderWhitespace === other.renderWhitespace\r\n && this.renderControlCharacters === other.renderControlCharacters\r\n && this.spaceWidth === other.spaceWidth\r\n && this.useMonospaceOptimizations === other.useMonospaceOptimizations\r\n && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\r\n && this.lineHeight === other.lineHeight\r\n && this.stopRenderingLineAfter === other.stopRenderingLineAfter\r\n && this.fontLigatures === other.fontLigatures);\r\n };\r\n return ViewLineOptions;\r\n}());\r\nexport { ViewLineOptions };\r\nvar ViewLine = /** @class */ (function () {\r\n function ViewLine(options) {\r\n this._options = options;\r\n this._isMaybeInvalid = true;\r\n this._renderedViewLine = null;\r\n }\r\n // --- begin IVisibleLineData\r\n ViewLine.prototype.getDomNode = function () {\r\n if (this._renderedViewLine && this._renderedViewLine.domNode) {\r\n return this._renderedViewLine.domNode.domNode;\r\n }\r\n return null;\r\n };\r\n ViewLine.prototype.setDomNode = function (domNode) {\r\n if (this._renderedViewLine) {\r\n this._renderedViewLine.domNode = createFastDomNode(domNode);\r\n }\r\n else {\r\n throw new Error('I have no rendered view line to set the dom node to...');\r\n }\r\n };\r\n ViewLine.prototype.onContentChanged = function () {\r\n this._isMaybeInvalid = true;\r\n };\r\n ViewLine.prototype.onTokensChanged = function () {\r\n this._isMaybeInvalid = true;\r\n };\r\n ViewLine.prototype.onDecorationsChanged = function () {\r\n this._isMaybeInvalid = true;\r\n };\r\n ViewLine.prototype.onOptionsChanged = function (newOptions) {\r\n this._isMaybeInvalid = true;\r\n this._options = newOptions;\r\n };\r\n ViewLine.prototype.onSelectionChanged = function () {\r\n if (alwaysRenderInlineSelection || this._options.themeType === HIGH_CONTRAST || this._options.renderWhitespace === 'selection') {\r\n this._isMaybeInvalid = true;\r\n return true;\r\n }\r\n return false;\r\n };\r\n ViewLine.prototype.renderLine = function (lineNumber, deltaTop, viewportData, sb) {\r\n if (this._isMaybeInvalid === false) {\r\n // it appears that nothing relevant has changed\r\n return false;\r\n }\r\n this._isMaybeInvalid = false;\r\n var lineData = viewportData.getViewLineRenderingData(lineNumber);\r\n var options = this._options;\r\n var actualInlineDecorations = LineDecoration.filter(lineData.inlineDecorations, lineNumber, lineData.minColumn, lineData.maxColumn);\r\n // Only send selection information when needed for rendering whitespace\r\n var selectionsOnLine = null;\r\n if (alwaysRenderInlineSelection || options.themeType === HIGH_CONTRAST || this._options.renderWhitespace === 'selection') {\r\n var selections = viewportData.selections;\r\n for (var _i = 0, selections_1 = selections; _i < selections_1.length; _i++) {\r\n var selection = selections_1[_i];\r\n if (selection.endLineNumber < lineNumber || selection.startLineNumber > lineNumber) {\r\n // Selection does not intersect line\r\n continue;\r\n }\r\n var startColumn = (selection.startLineNumber === lineNumber ? selection.startColumn : lineData.minColumn);\r\n var endColumn = (selection.endLineNumber === lineNumber ? selection.endColumn : lineData.maxColumn);\r\n if (startColumn < endColumn) {\r\n if (this._options.renderWhitespace !== 'selection') {\r\n actualInlineDecorations.push(new LineDecoration(startColumn, endColumn, 'inline-selected-text', 0 /* Regular */));\r\n }\r\n else {\r\n if (!selectionsOnLine) {\r\n selectionsOnLine = [];\r\n }\r\n selectionsOnLine.push(new LineRange(startColumn - 1, endColumn - 1));\r\n }\r\n }\r\n }\r\n }\r\n var renderLineInput = new RenderLineInput(options.useMonospaceOptimizations, options.canUseHalfwidthRightwardsArrow, lineData.content, lineData.continuesWithWrappedLine, lineData.isBasicASCII, lineData.containsRTL, lineData.minColumn - 1, lineData.tokens, actualInlineDecorations, lineData.tabSize, options.spaceWidth, options.stopRenderingLineAfter, options.renderWhitespace, options.renderControlCharacters, options.fontLigatures !== EditorFontLigatures.OFF, selectionsOnLine);\r\n if (this._renderedViewLine && this._renderedViewLine.input.equals(renderLineInput)) {\r\n // no need to do anything, we have the same render input\r\n return false;\r\n }\r\n sb.appendASCIIString('
');\r\n var output = renderViewLine(renderLineInput, sb);\r\n sb.appendASCIIString('
');\r\n var renderedViewLine = null;\r\n if (canUseFastRenderedViewLine && lineData.isBasicASCII && options.useMonospaceOptimizations && output.containsForeignElements === 0 /* None */) {\r\n if (lineData.content.length < 300 && renderLineInput.lineTokens.getCount() < 100) {\r\n // Browser rounding errors have been observed in Chrome and IE, so using the fast\r\n // view line only for short lines. Please test before removing the length check...\r\n // ---\r\n // Another rounding error has been observed on Linux in VSCode, where width\r\n // rounding errors add up to an observable large number...\r\n // ---\r\n // Also see another example of rounding errors on Windows in\r\n // https://github.com/Microsoft/vscode/issues/33178\r\n renderedViewLine = new FastRenderedViewLine(this._renderedViewLine ? this._renderedViewLine.domNode : null, renderLineInput, output.characterMapping);\r\n }\r\n }\r\n if (!renderedViewLine) {\r\n renderedViewLine = createRenderedLine(this._renderedViewLine ? this._renderedViewLine.domNode : null, renderLineInput, output.characterMapping, output.containsRTL, output.containsForeignElements);\r\n }\r\n this._renderedViewLine = renderedViewLine;\r\n return true;\r\n };\r\n ViewLine.prototype.layoutLine = function (lineNumber, deltaTop) {\r\n if (this._renderedViewLine && this._renderedViewLine.domNode) {\r\n this._renderedViewLine.domNode.setTop(deltaTop);\r\n this._renderedViewLine.domNode.setHeight(this._options.lineHeight);\r\n }\r\n };\r\n // --- end IVisibleLineData\r\n ViewLine.prototype.getWidth = function () {\r\n if (!this._renderedViewLine) {\r\n return 0;\r\n }\r\n return this._renderedViewLine.getWidth();\r\n };\r\n ViewLine.prototype.getWidthIsFast = function () {\r\n if (!this._renderedViewLine) {\r\n return true;\r\n }\r\n return this._renderedViewLine.getWidthIsFast();\r\n };\r\n ViewLine.prototype.getVisibleRangesForRange = function (startColumn, endColumn, context) {\r\n if (!this._renderedViewLine) {\r\n return null;\r\n }\r\n startColumn = startColumn | 0; // @perf\r\n endColumn = endColumn | 0; // @perf\r\n startColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, startColumn));\r\n endColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, endColumn));\r\n var stopRenderingLineAfter = this._renderedViewLine.input.stopRenderingLineAfter | 0; // @perf\r\n var outsideRenderedLine = false;\r\n if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter + 1 && endColumn > stopRenderingLineAfter + 1) {\r\n // This range is obviously not visible\r\n outsideRenderedLine = true;\r\n }\r\n if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter + 1) {\r\n startColumn = stopRenderingLineAfter + 1;\r\n }\r\n if (stopRenderingLineAfter !== -1 && endColumn > stopRenderingLineAfter + 1) {\r\n endColumn = stopRenderingLineAfter + 1;\r\n }\r\n var horizontalRanges = this._renderedViewLine.getVisibleRangesForRange(startColumn, endColumn, context);\r\n if (horizontalRanges && horizontalRanges.length > 0) {\r\n return new VisibleRanges(outsideRenderedLine, horizontalRanges);\r\n }\r\n return null;\r\n };\r\n ViewLine.prototype.getColumnOfNodeOffset = function (lineNumber, spanNode, offset) {\r\n if (!this._renderedViewLine) {\r\n return 1;\r\n }\r\n return this._renderedViewLine.getColumnOfNodeOffset(lineNumber, spanNode, offset);\r\n };\r\n ViewLine.CLASS_NAME = 'view-line';\r\n return ViewLine;\r\n}());\r\nexport { ViewLine };\r\n/**\r\n * A rendered line which is guaranteed to contain only regular ASCII and is rendered with a monospace font.\r\n */\r\nvar FastRenderedViewLine = /** @class */ (function () {\r\n function FastRenderedViewLine(domNode, renderLineInput, characterMapping) {\r\n this.domNode = domNode;\r\n this.input = renderLineInput;\r\n this._characterMapping = characterMapping;\r\n this._charWidth = renderLineInput.spaceWidth;\r\n }\r\n FastRenderedViewLine.prototype.getWidth = function () {\r\n return this._getCharPosition(this._characterMapping.length);\r\n };\r\n FastRenderedViewLine.prototype.getWidthIsFast = function () {\r\n return true;\r\n };\r\n FastRenderedViewLine.prototype.getVisibleRangesForRange = function (startColumn, endColumn, context) {\r\n var startPosition = this._getCharPosition(startColumn);\r\n var endPosition = this._getCharPosition(endColumn);\r\n return [new HorizontalRange(startPosition, endPosition - startPosition)];\r\n };\r\n FastRenderedViewLine.prototype._getCharPosition = function (column) {\r\n var charOffset = this._characterMapping.getAbsoluteOffsets();\r\n if (charOffset.length === 0) {\r\n // No characters on this line\r\n return 0;\r\n }\r\n return Math.round(this._charWidth * charOffset[column - 1]);\r\n };\r\n FastRenderedViewLine.prototype.getColumnOfNodeOffset = function (lineNumber, spanNode, offset) {\r\n var spanNodeTextContentLength = spanNode.textContent.length;\r\n var spanIndex = -1;\r\n while (spanNode) {\r\n spanNode = spanNode.previousSibling;\r\n spanIndex++;\r\n }\r\n var charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);\r\n return charOffset + 1;\r\n };\r\n return FastRenderedViewLine;\r\n}());\r\n/**\r\n * Every time we render a line, we save what we have rendered in an instance of this class.\r\n */\r\nvar RenderedViewLine = /** @class */ (function () {\r\n function RenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements) {\r\n this.domNode = domNode;\r\n this.input = renderLineInput;\r\n this._characterMapping = characterMapping;\r\n this._isWhitespaceOnly = /^\\s*$/.test(renderLineInput.lineContent);\r\n this._containsForeignElements = containsForeignElements;\r\n this._cachedWidth = -1;\r\n this._pixelOffsetCache = null;\r\n if (!containsRTL || this._characterMapping.length === 0 /* the line is empty */) {\r\n this._pixelOffsetCache = new Int32Array(Math.max(2, this._characterMapping.length + 1));\r\n for (var column = 0, len = this._characterMapping.length; column <= len; column++) {\r\n this._pixelOffsetCache[column] = -1;\r\n }\r\n }\r\n }\r\n // --- Reading from the DOM methods\r\n RenderedViewLine.prototype._getReadingTarget = function (myDomNode) {\r\n return myDomNode.domNode.firstChild;\r\n };\r\n /**\r\n * Width of the line in pixels\r\n */\r\n RenderedViewLine.prototype.getWidth = function () {\r\n if (!this.domNode) {\r\n return 0;\r\n }\r\n if (this._cachedWidth === -1) {\r\n this._cachedWidth = this._getReadingTarget(this.domNode).offsetWidth;\r\n }\r\n return this._cachedWidth;\r\n };\r\n RenderedViewLine.prototype.getWidthIsFast = function () {\r\n if (this._cachedWidth === -1) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n /**\r\n * Visible ranges for a model range\r\n */\r\n RenderedViewLine.prototype.getVisibleRangesForRange = function (startColumn, endColumn, context) {\r\n if (!this.domNode) {\r\n return null;\r\n }\r\n if (this._pixelOffsetCache !== null) {\r\n // the text is LTR\r\n var startOffset = this._readPixelOffset(this.domNode, startColumn, context);\r\n if (startOffset === -1) {\r\n return null;\r\n }\r\n var endOffset = this._readPixelOffset(this.domNode, endColumn, context);\r\n if (endOffset === -1) {\r\n return null;\r\n }\r\n return [new HorizontalRange(startOffset, endOffset - startOffset)];\r\n }\r\n return this._readVisibleRangesForRange(this.domNode, startColumn, endColumn, context);\r\n };\r\n RenderedViewLine.prototype._readVisibleRangesForRange = function (domNode, startColumn, endColumn, context) {\r\n if (startColumn === endColumn) {\r\n var pixelOffset = this._readPixelOffset(domNode, startColumn, context);\r\n if (pixelOffset === -1) {\r\n return null;\r\n }\r\n else {\r\n return [new HorizontalRange(pixelOffset, 0)];\r\n }\r\n }\r\n else {\r\n return this._readRawVisibleRangesForRange(domNode, startColumn, endColumn, context);\r\n }\r\n };\r\n RenderedViewLine.prototype._readPixelOffset = function (domNode, column, context) {\r\n if (this._characterMapping.length === 0) {\r\n // This line has no content\r\n if (this._containsForeignElements === 0 /* None */) {\r\n // We can assume the line is really empty\r\n return 0;\r\n }\r\n if (this._containsForeignElements === 2 /* After */) {\r\n // We have foreign elements after the (empty) line\r\n return 0;\r\n }\r\n if (this._containsForeignElements === 1 /* Before */) {\r\n // We have foreign element before the (empty) line\r\n return this.getWidth();\r\n }\r\n }\r\n if (this._pixelOffsetCache !== null) {\r\n // the text is LTR\r\n var cachedPixelOffset = this._pixelOffsetCache[column];\r\n if (cachedPixelOffset !== -1) {\r\n return cachedPixelOffset;\r\n }\r\n var result = this._actualReadPixelOffset(domNode, column, context);\r\n this._pixelOffsetCache[column] = result;\r\n return result;\r\n }\r\n return this._actualReadPixelOffset(domNode, column, context);\r\n };\r\n RenderedViewLine.prototype._actualReadPixelOffset = function (domNode, column, context) {\r\n if (this._characterMapping.length === 0) {\r\n // This line has no content\r\n var r_1 = RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), 0, 0, 0, 0, context.clientRectDeltaLeft, context.endNode);\r\n if (!r_1 || r_1.length === 0) {\r\n return -1;\r\n }\r\n return r_1[0].left;\r\n }\r\n if (column === this._characterMapping.length && this._isWhitespaceOnly && this._containsForeignElements === 0 /* None */) {\r\n // This branch helps in the case of whitespace only lines which have a width set\r\n return this.getWidth();\r\n }\r\n var partData = this._characterMapping.charOffsetToPartData(column - 1);\r\n var partIndex = CharacterMapping.getPartIndex(partData);\r\n var charOffsetInPart = CharacterMapping.getCharIndex(partData);\r\n var r = RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), partIndex, charOffsetInPart, partIndex, charOffsetInPart, context.clientRectDeltaLeft, context.endNode);\r\n if (!r || r.length === 0) {\r\n return -1;\r\n }\r\n return r[0].left;\r\n };\r\n RenderedViewLine.prototype._readRawVisibleRangesForRange = function (domNode, startColumn, endColumn, context) {\r\n if (startColumn === 1 && endColumn === this._characterMapping.length) {\r\n // This branch helps IE with bidi text & gives a performance boost to other browsers when reading visible ranges for an entire line\r\n return [new HorizontalRange(0, this.getWidth())];\r\n }\r\n var startPartData = this._characterMapping.charOffsetToPartData(startColumn - 1);\r\n var startPartIndex = CharacterMapping.getPartIndex(startPartData);\r\n var startCharOffsetInPart = CharacterMapping.getCharIndex(startPartData);\r\n var endPartData = this._characterMapping.charOffsetToPartData(endColumn - 1);\r\n var endPartIndex = CharacterMapping.getPartIndex(endPartData);\r\n var endCharOffsetInPart = CharacterMapping.getCharIndex(endPartData);\r\n return RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), startPartIndex, startCharOffsetInPart, endPartIndex, endCharOffsetInPart, context.clientRectDeltaLeft, context.endNode);\r\n };\r\n /**\r\n * Returns the column for the text found at a specific offset inside a rendered dom node\r\n */\r\n RenderedViewLine.prototype.getColumnOfNodeOffset = function (lineNumber, spanNode, offset) {\r\n var spanNodeTextContentLength = spanNode.textContent.length;\r\n var spanIndex = -1;\r\n while (spanNode) {\r\n spanNode = spanNode.previousSibling;\r\n spanIndex++;\r\n }\r\n var charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);\r\n return charOffset + 1;\r\n };\r\n return RenderedViewLine;\r\n}());\r\nvar WebKitRenderedViewLine = /** @class */ (function (_super) {\r\n __extends(WebKitRenderedViewLine, _super);\r\n function WebKitRenderedViewLine() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n WebKitRenderedViewLine.prototype._readVisibleRangesForRange = function (domNode, startColumn, endColumn, context) {\r\n var output = _super.prototype._readVisibleRangesForRange.call(this, domNode, startColumn, endColumn, context);\r\n if (!output || output.length === 0 || startColumn === endColumn || (startColumn === 1 && endColumn === this._characterMapping.length)) {\r\n return output;\r\n }\r\n // WebKit is buggy and returns an expanded range (to contain words in some cases)\r\n // The last client rect is enlarged (I think)\r\n if (!this.input.containsRTL) {\r\n // This is an attempt to patch things up\r\n // Find position of last column\r\n var endPixelOffset = this._readPixelOffset(domNode, endColumn, context);\r\n if (endPixelOffset !== -1) {\r\n var lastRange = output[output.length - 1];\r\n if (lastRange.left < endPixelOffset) {\r\n // Trim down the width of the last visible range to not go after the last column's position\r\n lastRange.width = endPixelOffset - lastRange.left;\r\n }\r\n }\r\n }\r\n return output;\r\n };\r\n return WebKitRenderedViewLine;\r\n}(RenderedViewLine));\r\nvar createRenderedLine = (function () {\r\n if (browser.isWebKit) {\r\n return createWebKitRenderedLine;\r\n }\r\n return createNormalRenderedLine;\r\n})();\r\nfunction createWebKitRenderedLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements) {\r\n return new WebKitRenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements);\r\n}\r\nfunction createNormalRenderedLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements) {\r\n return new RenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nvar EditStackElement = /** @class */ (function () {\r\n function EditStackElement(beforeVersionId, beforeCursorState) {\r\n this.beforeVersionId = beforeVersionId;\r\n this.beforeCursorState = beforeCursorState;\r\n this.afterCursorState = null;\r\n this.afterVersionId = -1;\r\n this.editOperations = [];\r\n }\r\n EditStackElement.prototype.undo = function (model) {\r\n // Apply all operations in reverse order\r\n for (var i = this.editOperations.length - 1; i >= 0; i--) {\r\n this.editOperations[i] = {\r\n operations: model.applyEdits(this.editOperations[i].operations)\r\n };\r\n }\r\n };\r\n EditStackElement.prototype.redo = function (model) {\r\n // Apply all operations\r\n for (var i = 0; i < this.editOperations.length; i++) {\r\n this.editOperations[i] = {\r\n operations: model.applyEdits(this.editOperations[i].operations)\r\n };\r\n }\r\n };\r\n return EditStackElement;\r\n}());\r\nfunction getModelEOL(model) {\r\n var eol = model.getEOL();\r\n if (eol === '\\n') {\r\n return 0 /* LF */;\r\n }\r\n else {\r\n return 1 /* CRLF */;\r\n }\r\n}\r\nvar EOLStackElement = /** @class */ (function () {\r\n function EOLStackElement(beforeVersionId, setEOL) {\r\n this.beforeVersionId = beforeVersionId;\r\n this.beforeCursorState = null;\r\n this.afterCursorState = null;\r\n this.afterVersionId = -1;\r\n this.eol = setEOL;\r\n }\r\n EOLStackElement.prototype.undo = function (model) {\r\n var redoEOL = getModelEOL(model);\r\n model.setEOL(this.eol);\r\n this.eol = redoEOL;\r\n };\r\n EOLStackElement.prototype.redo = function (model) {\r\n var undoEOL = getModelEOL(model);\r\n model.setEOL(this.eol);\r\n this.eol = undoEOL;\r\n };\r\n return EOLStackElement;\r\n}());\r\nvar EditStack = /** @class */ (function () {\r\n function EditStack(model) {\r\n this.model = model;\r\n this.currentOpenStackElement = null;\r\n this.past = [];\r\n this.future = [];\r\n }\r\n EditStack.prototype.pushStackElement = function () {\r\n if (this.currentOpenStackElement !== null) {\r\n this.past.push(this.currentOpenStackElement);\r\n this.currentOpenStackElement = null;\r\n }\r\n };\r\n EditStack.prototype.clear = function () {\r\n this.currentOpenStackElement = null;\r\n this.past = [];\r\n this.future = [];\r\n };\r\n EditStack.prototype.pushEOL = function (eol) {\r\n // No support for parallel universes :(\r\n this.future = [];\r\n if (this.currentOpenStackElement) {\r\n this.pushStackElement();\r\n }\r\n var prevEOL = getModelEOL(this.model);\r\n var stackElement = new EOLStackElement(this.model.getAlternativeVersionId(), prevEOL);\r\n this.model.setEOL(eol);\r\n stackElement.afterVersionId = this.model.getVersionId();\r\n this.currentOpenStackElement = stackElement;\r\n this.pushStackElement();\r\n };\r\n EditStack.prototype.pushEditOperation = function (beforeCursorState, editOperations, cursorStateComputer) {\r\n // No support for parallel universes :(\r\n this.future = [];\r\n var stackElement = null;\r\n if (this.currentOpenStackElement) {\r\n if (this.currentOpenStackElement instanceof EditStackElement) {\r\n stackElement = this.currentOpenStackElement;\r\n }\r\n else {\r\n this.pushStackElement();\r\n }\r\n }\r\n if (!this.currentOpenStackElement) {\r\n stackElement = new EditStackElement(this.model.getAlternativeVersionId(), beforeCursorState);\r\n this.currentOpenStackElement = stackElement;\r\n }\r\n var inverseEditOperation = {\r\n operations: this.model.applyEdits(editOperations)\r\n };\r\n stackElement.editOperations.push(inverseEditOperation);\r\n stackElement.afterCursorState = EditStack._computeCursorState(cursorStateComputer, inverseEditOperation.operations);\r\n stackElement.afterVersionId = this.model.getVersionId();\r\n return stackElement.afterCursorState;\r\n };\r\n EditStack._computeCursorState = function (cursorStateComputer, inverseEditOperations) {\r\n try {\r\n return cursorStateComputer ? cursorStateComputer(inverseEditOperations) : null;\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n return null;\r\n }\r\n };\r\n EditStack.prototype.undo = function () {\r\n this.pushStackElement();\r\n if (this.past.length > 0) {\r\n var pastStackElement = this.past.pop();\r\n try {\r\n pastStackElement.undo(this.model);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n this.clear();\r\n return null;\r\n }\r\n this.future.push(pastStackElement);\r\n return {\r\n selections: pastStackElement.beforeCursorState,\r\n recordedVersionId: pastStackElement.beforeVersionId\r\n };\r\n }\r\n return null;\r\n };\r\n EditStack.prototype.canUndo = function () {\r\n return (this.past.length > 0) || this.currentOpenStackElement !== null;\r\n };\r\n EditStack.prototype.redo = function () {\r\n if (this.future.length > 0) {\r\n var futureStackElement = this.future.pop();\r\n try {\r\n futureStackElement.redo(this.model);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n this.clear();\r\n return null;\r\n }\r\n this.past.push(futureStackElement);\r\n return {\r\n selections: futureStackElement.afterCursorState,\r\n recordedVersionId: futureStackElement.afterVersionId\r\n };\r\n }\r\n return null;\r\n };\r\n EditStack.prototype.canRedo = function () {\r\n return (this.future.length > 0);\r\n };\r\n return EditStack;\r\n}());\r\nexport { EditStack };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar SpacesDiffResult = /** @class */ (function () {\r\n function SpacesDiffResult() {\r\n this.spacesDiff = 0;\r\n this.looksLikeAlignment = false;\r\n }\r\n return SpacesDiffResult;\r\n}());\r\n/**\r\n * Compute the diff in spaces between two line's indentation.\r\n */\r\nfunction spacesDiff(a, aLength, b, bLength, result) {\r\n result.spacesDiff = 0;\r\n result.looksLikeAlignment = false;\r\n // This can go both ways (e.g.):\r\n // - a: \"\\t\"\r\n // - b: \"\\t \"\r\n // => This should count 1 tab and 4 spaces\r\n var i;\r\n for (i = 0; i < aLength && i < bLength; i++) {\r\n var aCharCode = a.charCodeAt(i);\r\n var bCharCode = b.charCodeAt(i);\r\n if (aCharCode !== bCharCode) {\r\n break;\r\n }\r\n }\r\n var aSpacesCnt = 0, aTabsCount = 0;\r\n for (var j = i; j < aLength; j++) {\r\n var aCharCode = a.charCodeAt(j);\r\n if (aCharCode === 32 /* Space */) {\r\n aSpacesCnt++;\r\n }\r\n else {\r\n aTabsCount++;\r\n }\r\n }\r\n var bSpacesCnt = 0, bTabsCount = 0;\r\n for (var j = i; j < bLength; j++) {\r\n var bCharCode = b.charCodeAt(j);\r\n if (bCharCode === 32 /* Space */) {\r\n bSpacesCnt++;\r\n }\r\n else {\r\n bTabsCount++;\r\n }\r\n }\r\n if (aSpacesCnt > 0 && aTabsCount > 0) {\r\n return;\r\n }\r\n if (bSpacesCnt > 0 && bTabsCount > 0) {\r\n return;\r\n }\r\n var tabsDiff = Math.abs(aTabsCount - bTabsCount);\r\n var spacesDiff = Math.abs(aSpacesCnt - bSpacesCnt);\r\n if (tabsDiff === 0) {\r\n // check if the indentation difference might be caused by alignment reasons\r\n // sometime folks like to align their code, but this should not be used as a hint\r\n result.spacesDiff = spacesDiff;\r\n if (spacesDiff > 0 && 0 <= bSpacesCnt - 1 && bSpacesCnt - 1 < a.length && bSpacesCnt < b.length) {\r\n if (b.charCodeAt(bSpacesCnt) !== 32 /* Space */ && a.charCodeAt(bSpacesCnt - 1) === 32 /* Space */) {\r\n // This looks like an alignment desire: e.g.\r\n // const a = b + c,\r\n // d = b - c;\r\n result.looksLikeAlignment = true;\r\n }\r\n }\r\n return;\r\n }\r\n if (spacesDiff % tabsDiff === 0) {\r\n result.spacesDiff = spacesDiff / tabsDiff;\r\n return;\r\n }\r\n}\r\nexport function guessIndentation(source, defaultTabSize, defaultInsertSpaces) {\r\n // Look at most at the first 10k lines\r\n var linesCount = Math.min(source.getLineCount(), 10000);\r\n var linesIndentedWithTabsCount = 0; // number of lines that contain at least one tab in indentation\r\n var linesIndentedWithSpacesCount = 0; // number of lines that contain only spaces in indentation\r\n var previousLineText = ''; // content of latest line that contained non-whitespace chars\r\n var previousLineIndentation = 0; // index at which latest line contained the first non-whitespace char\r\n var ALLOWED_TAB_SIZE_GUESSES = [2, 4, 6, 8, 3, 5, 7]; // prefer even guesses for `tabSize`, limit to [2, 8].\r\n var MAX_ALLOWED_TAB_SIZE_GUESS = 8; // max(ALLOWED_TAB_SIZE_GUESSES) = 8\r\n var spacesDiffCount = [0, 0, 0, 0, 0, 0, 0, 0, 0]; // `tabSize` scores\r\n var tmp = new SpacesDiffResult();\r\n for (var lineNumber = 1; lineNumber <= linesCount; lineNumber++) {\r\n var currentLineLength = source.getLineLength(lineNumber);\r\n var currentLineText = source.getLineContent(lineNumber);\r\n // if the text buffer is chunk based, so long lines are cons-string, v8 will flattern the string when we check charCode.\r\n // checking charCode on chunks directly is cheaper.\r\n var useCurrentLineText = (currentLineLength <= 65536);\r\n var currentLineHasContent = false; // does `currentLineText` contain non-whitespace chars\r\n var currentLineIndentation = 0; // index at which `currentLineText` contains the first non-whitespace char\r\n var currentLineSpacesCount = 0; // count of spaces found in `currentLineText` indentation\r\n var currentLineTabsCount = 0; // count of tabs found in `currentLineText` indentation\r\n for (var j = 0, lenJ = currentLineLength; j < lenJ; j++) {\r\n var charCode = (useCurrentLineText ? currentLineText.charCodeAt(j) : source.getLineCharCode(lineNumber, j));\r\n if (charCode === 9 /* Tab */) {\r\n currentLineTabsCount++;\r\n }\r\n else if (charCode === 32 /* Space */) {\r\n currentLineSpacesCount++;\r\n }\r\n else {\r\n // Hit non whitespace character on this line\r\n currentLineHasContent = true;\r\n currentLineIndentation = j;\r\n break;\r\n }\r\n }\r\n // Ignore empty or only whitespace lines\r\n if (!currentLineHasContent) {\r\n continue;\r\n }\r\n if (currentLineTabsCount > 0) {\r\n linesIndentedWithTabsCount++;\r\n }\r\n else if (currentLineSpacesCount > 1) {\r\n linesIndentedWithSpacesCount++;\r\n }\r\n spacesDiff(previousLineText, previousLineIndentation, currentLineText, currentLineIndentation, tmp);\r\n if (tmp.looksLikeAlignment) {\r\n // if defaultInsertSpaces === true && the spaces count == tabSize, we may want to count it as valid indentation\r\n //\r\n // - item1\r\n // - item2\r\n //\r\n // otherwise skip this line entirely\r\n //\r\n // const a = 1,\r\n // b = 2;\r\n if (!(defaultInsertSpaces && defaultTabSize === tmp.spacesDiff)) {\r\n continue;\r\n }\r\n }\r\n var currentSpacesDiff = tmp.spacesDiff;\r\n if (currentSpacesDiff <= MAX_ALLOWED_TAB_SIZE_GUESS) {\r\n spacesDiffCount[currentSpacesDiff]++;\r\n }\r\n previousLineText = currentLineText;\r\n previousLineIndentation = currentLineIndentation;\r\n }\r\n var insertSpaces = defaultInsertSpaces;\r\n if (linesIndentedWithTabsCount !== linesIndentedWithSpacesCount) {\r\n insertSpaces = (linesIndentedWithTabsCount < linesIndentedWithSpacesCount);\r\n }\r\n var tabSize = defaultTabSize;\r\n // Guess tabSize only if inserting spaces...\r\n if (insertSpaces) {\r\n var tabSizeScore_1 = (insertSpaces ? 0 : 0.1 * linesCount);\r\n // console.log(\"score threshold: \" + tabSizeScore);\r\n ALLOWED_TAB_SIZE_GUESSES.forEach(function (possibleTabSize) {\r\n var possibleTabSizeScore = spacesDiffCount[possibleTabSize];\r\n if (possibleTabSizeScore > tabSizeScore_1) {\r\n tabSizeScore_1 = possibleTabSizeScore;\r\n tabSize = possibleTabSize;\r\n }\r\n });\r\n // Let a tabSize of 2 win even if it is not the maximum\r\n // (only in case 4 was guessed)\r\n if (tabSize === 4 && spacesDiffCount[4] > 0 && spacesDiffCount[2] > 0 && spacesDiffCount[2] >= spacesDiffCount[4] / 2) {\r\n tabSize = 2;\r\n }\r\n }\r\n // console.log('--------------------------');\r\n // console.log('linesIndentedWithTabsCount: ' + linesIndentedWithTabsCount + ', linesIndentedWithSpacesCount: ' + linesIndentedWithSpacesCount);\r\n // console.log('spacesDiffCount: ' + spacesDiffCount);\r\n // console.log('tabSize: ' + tabSize + ', tabSizeScore: ' + tabSizeScore);\r\n return {\r\n insertSpaces: insertSpaces,\r\n tabSize: tabSize\r\n };\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport function getNodeColor(node) {\r\n return ((node.metadata & 1 /* ColorMask */) >>> 0 /* ColorOffset */);\r\n}\r\nfunction setNodeColor(node, color) {\r\n node.metadata = ((node.metadata & 254 /* ColorMaskInverse */) | (color << 0 /* ColorOffset */));\r\n}\r\nfunction getNodeIsVisited(node) {\r\n return ((node.metadata & 2 /* IsVisitedMask */) >>> 1 /* IsVisitedOffset */) === 1;\r\n}\r\nfunction setNodeIsVisited(node, value) {\r\n node.metadata = ((node.metadata & 253 /* IsVisitedMaskInverse */) | ((value ? 1 : 0) << 1 /* IsVisitedOffset */));\r\n}\r\nfunction getNodeIsForValidation(node) {\r\n return ((node.metadata & 4 /* IsForValidationMask */) >>> 2 /* IsForValidationOffset */) === 1;\r\n}\r\nfunction setNodeIsForValidation(node, value) {\r\n node.metadata = ((node.metadata & 251 /* IsForValidationMaskInverse */) | ((value ? 1 : 0) << 2 /* IsForValidationOffset */));\r\n}\r\nexport function getNodeIsInOverviewRuler(node) {\r\n return ((node.metadata & 8 /* IsInOverviewRulerMask */) >>> 3 /* IsInOverviewRulerOffset */) === 1;\r\n}\r\nfunction setNodeIsInOverviewRuler(node, value) {\r\n node.metadata = ((node.metadata & 247 /* IsInOverviewRulerMaskInverse */) | ((value ? 1 : 0) << 3 /* IsInOverviewRulerOffset */));\r\n}\r\nfunction getNodeStickiness(node) {\r\n return ((node.metadata & 48 /* StickinessMask */) >>> 4 /* StickinessOffset */);\r\n}\r\nfunction _setNodeStickiness(node, stickiness) {\r\n node.metadata = ((node.metadata & 207 /* StickinessMaskInverse */) | (stickiness << 4 /* StickinessOffset */));\r\n}\r\nfunction getCollapseOnReplaceEdit(node) {\r\n return ((node.metadata & 64 /* CollapseOnReplaceEditMask */) >>> 6 /* CollapseOnReplaceEditOffset */) === 1;\r\n}\r\nfunction setCollapseOnReplaceEdit(node, value) {\r\n node.metadata = ((node.metadata & 191 /* CollapseOnReplaceEditMaskInverse */) | ((value ? 1 : 0) << 6 /* CollapseOnReplaceEditOffset */));\r\n}\r\nvar IntervalNode = /** @class */ (function () {\r\n function IntervalNode(id, start, end) {\r\n this.metadata = 0;\r\n this.parent = this;\r\n this.left = this;\r\n this.right = this;\r\n setNodeColor(this, 1 /* Red */);\r\n this.start = start;\r\n this.end = end;\r\n // FORCE_OVERFLOWING_TEST: this.delta = start;\r\n this.delta = 0;\r\n this.maxEnd = end;\r\n this.id = id;\r\n this.ownerId = 0;\r\n this.options = null;\r\n setNodeIsForValidation(this, false);\r\n _setNodeStickiness(this, 1 /* NeverGrowsWhenTypingAtEdges */);\r\n setNodeIsInOverviewRuler(this, false);\r\n setCollapseOnReplaceEdit(this, false);\r\n this.cachedVersionId = 0;\r\n this.cachedAbsoluteStart = start;\r\n this.cachedAbsoluteEnd = end;\r\n this.range = null;\r\n setNodeIsVisited(this, false);\r\n }\r\n IntervalNode.prototype.reset = function (versionId, start, end, range) {\r\n this.start = start;\r\n this.end = end;\r\n this.maxEnd = end;\r\n this.cachedVersionId = versionId;\r\n this.cachedAbsoluteStart = start;\r\n this.cachedAbsoluteEnd = end;\r\n this.range = range;\r\n };\r\n IntervalNode.prototype.setOptions = function (options) {\r\n this.options = options;\r\n var className = this.options.className;\r\n setNodeIsForValidation(this, (className === \"squiggly-error\" /* EditorErrorDecoration */\r\n || className === \"squiggly-warning\" /* EditorWarningDecoration */\r\n || className === \"squiggly-info\" /* EditorInfoDecoration */));\r\n _setNodeStickiness(this, this.options.stickiness);\r\n setNodeIsInOverviewRuler(this, (this.options.overviewRuler && this.options.overviewRuler.color) ? true : false);\r\n setCollapseOnReplaceEdit(this, this.options.collapseOnReplaceEdit);\r\n };\r\n IntervalNode.prototype.setCachedOffsets = function (absoluteStart, absoluteEnd, cachedVersionId) {\r\n if (this.cachedVersionId !== cachedVersionId) {\r\n this.range = null;\r\n }\r\n this.cachedVersionId = cachedVersionId;\r\n this.cachedAbsoluteStart = absoluteStart;\r\n this.cachedAbsoluteEnd = absoluteEnd;\r\n };\r\n IntervalNode.prototype.detach = function () {\r\n this.parent = null;\r\n this.left = null;\r\n this.right = null;\r\n };\r\n return IntervalNode;\r\n}());\r\nexport { IntervalNode };\r\nexport var SENTINEL = new IntervalNode(null, 0, 0);\r\nSENTINEL.parent = SENTINEL;\r\nSENTINEL.left = SENTINEL;\r\nSENTINEL.right = SENTINEL;\r\nsetNodeColor(SENTINEL, 0 /* Black */);\r\nvar IntervalTree = /** @class */ (function () {\r\n function IntervalTree() {\r\n this.root = SENTINEL;\r\n this.requestNormalizeDelta = false;\r\n }\r\n IntervalTree.prototype.intervalSearch = function (start, end, filterOwnerId, filterOutValidation, cachedVersionId) {\r\n if (this.root === SENTINEL) {\r\n return [];\r\n }\r\n return intervalSearch(this, start, end, filterOwnerId, filterOutValidation, cachedVersionId);\r\n };\r\n IntervalTree.prototype.search = function (filterOwnerId, filterOutValidation, cachedVersionId) {\r\n if (this.root === SENTINEL) {\r\n return [];\r\n }\r\n return search(this, filterOwnerId, filterOutValidation, cachedVersionId);\r\n };\r\n /**\r\n * Will not set `cachedAbsoluteStart` nor `cachedAbsoluteEnd` on the returned nodes!\r\n */\r\n IntervalTree.prototype.collectNodesFromOwner = function (ownerId) {\r\n return collectNodesFromOwner(this, ownerId);\r\n };\r\n /**\r\n * Will not set `cachedAbsoluteStart` nor `cachedAbsoluteEnd` on the returned nodes!\r\n */\r\n IntervalTree.prototype.collectNodesPostOrder = function () {\r\n return collectNodesPostOrder(this);\r\n };\r\n IntervalTree.prototype.insert = function (node) {\r\n rbTreeInsert(this, node);\r\n this._normalizeDeltaIfNecessary();\r\n };\r\n IntervalTree.prototype.delete = function (node) {\r\n rbTreeDelete(this, node);\r\n this._normalizeDeltaIfNecessary();\r\n };\r\n IntervalTree.prototype.resolveNode = function (node, cachedVersionId) {\r\n var initialNode = node;\r\n var delta = 0;\r\n while (node !== this.root) {\r\n if (node === node.parent.right) {\r\n delta += node.parent.delta;\r\n }\r\n node = node.parent;\r\n }\r\n var nodeStart = initialNode.start + delta;\r\n var nodeEnd = initialNode.end + delta;\r\n initialNode.setCachedOffsets(nodeStart, nodeEnd, cachedVersionId);\r\n };\r\n IntervalTree.prototype.acceptReplace = function (offset, length, textLength, forceMoveMarkers) {\r\n // Our strategy is to remove all directly impacted nodes, and then add them back to the tree.\r\n // (1) collect all nodes that are intersecting this edit as nodes of interest\r\n var nodesOfInterest = searchForEditing(this, offset, offset + length);\r\n // (2) remove all nodes that are intersecting this edit\r\n for (var i = 0, len = nodesOfInterest.length; i < len; i++) {\r\n var node = nodesOfInterest[i];\r\n rbTreeDelete(this, node);\r\n }\r\n this._normalizeDeltaIfNecessary();\r\n // (3) edit all tree nodes except the nodes of interest\r\n noOverlapReplace(this, offset, offset + length, textLength);\r\n this._normalizeDeltaIfNecessary();\r\n // (4) edit the nodes of interest and insert them back in the tree\r\n for (var i = 0, len = nodesOfInterest.length; i < len; i++) {\r\n var node = nodesOfInterest[i];\r\n node.start = node.cachedAbsoluteStart;\r\n node.end = node.cachedAbsoluteEnd;\r\n nodeAcceptEdit(node, offset, (offset + length), textLength, forceMoveMarkers);\r\n node.maxEnd = node.end;\r\n rbTreeInsert(this, node);\r\n }\r\n this._normalizeDeltaIfNecessary();\r\n };\r\n IntervalTree.prototype._normalizeDeltaIfNecessary = function () {\r\n if (!this.requestNormalizeDelta) {\r\n return;\r\n }\r\n this.requestNormalizeDelta = false;\r\n normalizeDelta(this);\r\n };\r\n return IntervalTree;\r\n}());\r\nexport { IntervalTree };\r\n//#region Delta Normalization\r\nfunction normalizeDelta(T) {\r\n var node = T.root;\r\n var delta = 0;\r\n while (node !== SENTINEL) {\r\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\r\n // go left\r\n node = node.left;\r\n continue;\r\n }\r\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\r\n // go right\r\n delta += node.delta;\r\n node = node.right;\r\n continue;\r\n }\r\n // handle current node\r\n node.start = delta + node.start;\r\n node.end = delta + node.end;\r\n node.delta = 0;\r\n recomputeMaxEnd(node);\r\n setNodeIsVisited(node, true);\r\n // going up from this node\r\n setNodeIsVisited(node.left, false);\r\n setNodeIsVisited(node.right, false);\r\n if (node === node.parent.right) {\r\n delta -= node.parent.delta;\r\n }\r\n node = node.parent;\r\n }\r\n setNodeIsVisited(T.root, false);\r\n}\r\nfunction adjustMarkerBeforeColumn(markerOffset, markerStickToPreviousCharacter, checkOffset, moveSemantics) {\r\n if (markerOffset < checkOffset) {\r\n return true;\r\n }\r\n if (markerOffset > checkOffset) {\r\n return false;\r\n }\r\n if (moveSemantics === 1 /* ForceMove */) {\r\n return false;\r\n }\r\n if (moveSemantics === 2 /* ForceStay */) {\r\n return true;\r\n }\r\n return markerStickToPreviousCharacter;\r\n}\r\n/**\r\n * This is a lot more complicated than strictly necessary to maintain the same behaviour\r\n * as when decorations were implemented using two markers.\r\n */\r\nexport function nodeAcceptEdit(node, start, end, textLength, forceMoveMarkers) {\r\n var nodeStickiness = getNodeStickiness(node);\r\n var startStickToPreviousCharacter = (nodeStickiness === 0 /* AlwaysGrowsWhenTypingAtEdges */\r\n || nodeStickiness === 2 /* GrowsOnlyWhenTypingBefore */);\r\n var endStickToPreviousCharacter = (nodeStickiness === 1 /* NeverGrowsWhenTypingAtEdges */\r\n || nodeStickiness === 2 /* GrowsOnlyWhenTypingBefore */);\r\n var deletingCnt = (end - start);\r\n var insertingCnt = textLength;\r\n var commonLength = Math.min(deletingCnt, insertingCnt);\r\n var nodeStart = node.start;\r\n var startDone = false;\r\n var nodeEnd = node.end;\r\n var endDone = false;\r\n if (start <= nodeStart && nodeEnd <= end && getCollapseOnReplaceEdit(node)) {\r\n // This edit encompasses the entire decoration range\r\n // and the decoration has asked to become collapsed\r\n node.start = start;\r\n startDone = true;\r\n node.end = start;\r\n endDone = true;\r\n }\r\n {\r\n var moveSemantics = forceMoveMarkers ? 1 /* ForceMove */ : (deletingCnt > 0 ? 2 /* ForceStay */ : 0 /* MarkerDefined */);\r\n if (!startDone && adjustMarkerBeforeColumn(nodeStart, startStickToPreviousCharacter, start, moveSemantics)) {\r\n startDone = true;\r\n }\r\n if (!endDone && adjustMarkerBeforeColumn(nodeEnd, endStickToPreviousCharacter, start, moveSemantics)) {\r\n endDone = true;\r\n }\r\n }\r\n if (commonLength > 0 && !forceMoveMarkers) {\r\n var moveSemantics = (deletingCnt > insertingCnt ? 2 /* ForceStay */ : 0 /* MarkerDefined */);\r\n if (!startDone && adjustMarkerBeforeColumn(nodeStart, startStickToPreviousCharacter, start + commonLength, moveSemantics)) {\r\n startDone = true;\r\n }\r\n if (!endDone && adjustMarkerBeforeColumn(nodeEnd, endStickToPreviousCharacter, start + commonLength, moveSemantics)) {\r\n endDone = true;\r\n }\r\n }\r\n {\r\n var moveSemantics = forceMoveMarkers ? 1 /* ForceMove */ : 0 /* MarkerDefined */;\r\n if (!startDone && adjustMarkerBeforeColumn(nodeStart, startStickToPreviousCharacter, end, moveSemantics)) {\r\n node.start = start + insertingCnt;\r\n startDone = true;\r\n }\r\n if (!endDone && adjustMarkerBeforeColumn(nodeEnd, endStickToPreviousCharacter, end, moveSemantics)) {\r\n node.end = start + insertingCnt;\r\n endDone = true;\r\n }\r\n }\r\n // Finish\r\n var deltaColumn = (insertingCnt - deletingCnt);\r\n if (!startDone) {\r\n node.start = Math.max(0, nodeStart + deltaColumn);\r\n }\r\n if (!endDone) {\r\n node.end = Math.max(0, nodeEnd + deltaColumn);\r\n }\r\n if (node.start > node.end) {\r\n node.end = node.start;\r\n }\r\n}\r\nfunction searchForEditing(T, start, end) {\r\n // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree\r\n // Now, it is known that two intervals A and B overlap only when both\r\n // A.low <= B.high and A.high >= B.low. When searching the trees for\r\n // nodes overlapping with a given interval, you can immediately skip:\r\n // a) all nodes to the right of nodes whose low value is past the end of the given interval.\r\n // b) all nodes that have their maximum 'high' value below the start of the given interval.\r\n var node = T.root;\r\n var delta = 0;\r\n var nodeMaxEnd = 0;\r\n var nodeStart = 0;\r\n var nodeEnd = 0;\r\n var result = [];\r\n var resultLen = 0;\r\n while (node !== SENTINEL) {\r\n if (getNodeIsVisited(node)) {\r\n // going up from this node\r\n setNodeIsVisited(node.left, false);\r\n setNodeIsVisited(node.right, false);\r\n if (node === node.parent.right) {\r\n delta -= node.parent.delta;\r\n }\r\n node = node.parent;\r\n continue;\r\n }\r\n if (!getNodeIsVisited(node.left)) {\r\n // first time seeing this node\r\n nodeMaxEnd = delta + node.maxEnd;\r\n if (nodeMaxEnd < start) {\r\n // cover case b) from above\r\n // there is no need to search this node or its children\r\n setNodeIsVisited(node, true);\r\n continue;\r\n }\r\n if (node.left !== SENTINEL) {\r\n // go left\r\n node = node.left;\r\n continue;\r\n }\r\n }\r\n // handle current node\r\n nodeStart = delta + node.start;\r\n if (nodeStart > end) {\r\n // cover case a) from above\r\n // there is no need to search this node or its right subtree\r\n setNodeIsVisited(node, true);\r\n continue;\r\n }\r\n nodeEnd = delta + node.end;\r\n if (nodeEnd >= start) {\r\n node.setCachedOffsets(nodeStart, nodeEnd, 0);\r\n result[resultLen++] = node;\r\n }\r\n setNodeIsVisited(node, true);\r\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\r\n // go right\r\n delta += node.delta;\r\n node = node.right;\r\n continue;\r\n }\r\n }\r\n setNodeIsVisited(T.root, false);\r\n return result;\r\n}\r\nfunction noOverlapReplace(T, start, end, textLength) {\r\n // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree\r\n // Now, it is known that two intervals A and B overlap only when both\r\n // A.low <= B.high and A.high >= B.low. When searching the trees for\r\n // nodes overlapping with a given interval, you can immediately skip:\r\n // a) all nodes to the right of nodes whose low value is past the end of the given interval.\r\n // b) all nodes that have their maximum 'high' value below the start of the given interval.\r\n var node = T.root;\r\n var delta = 0;\r\n var nodeMaxEnd = 0;\r\n var nodeStart = 0;\r\n var editDelta = (textLength - (end - start));\r\n while (node !== SENTINEL) {\r\n if (getNodeIsVisited(node)) {\r\n // going up from this node\r\n setNodeIsVisited(node.left, false);\r\n setNodeIsVisited(node.right, false);\r\n if (node === node.parent.right) {\r\n delta -= node.parent.delta;\r\n }\r\n recomputeMaxEnd(node);\r\n node = node.parent;\r\n continue;\r\n }\r\n if (!getNodeIsVisited(node.left)) {\r\n // first time seeing this node\r\n nodeMaxEnd = delta + node.maxEnd;\r\n if (nodeMaxEnd < start) {\r\n // cover case b) from above\r\n // there is no need to search this node or its children\r\n setNodeIsVisited(node, true);\r\n continue;\r\n }\r\n if (node.left !== SENTINEL) {\r\n // go left\r\n node = node.left;\r\n continue;\r\n }\r\n }\r\n // handle current node\r\n nodeStart = delta + node.start;\r\n if (nodeStart > end) {\r\n node.start += editDelta;\r\n node.end += editDelta;\r\n node.delta += editDelta;\r\n if (node.delta < -1073741824 /* MIN_SAFE_DELTA */ || node.delta > 1073741824 /* MAX_SAFE_DELTA */) {\r\n T.requestNormalizeDelta = true;\r\n }\r\n // cover case a) from above\r\n // there is no need to search this node or its right subtree\r\n setNodeIsVisited(node, true);\r\n continue;\r\n }\r\n setNodeIsVisited(node, true);\r\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\r\n // go right\r\n delta += node.delta;\r\n node = node.right;\r\n continue;\r\n }\r\n }\r\n setNodeIsVisited(T.root, false);\r\n}\r\n//#endregion\r\n//#region Searching\r\nfunction collectNodesFromOwner(T, ownerId) {\r\n var node = T.root;\r\n var result = [];\r\n var resultLen = 0;\r\n while (node !== SENTINEL) {\r\n if (getNodeIsVisited(node)) {\r\n // going up from this node\r\n setNodeIsVisited(node.left, false);\r\n setNodeIsVisited(node.right, false);\r\n node = node.parent;\r\n continue;\r\n }\r\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\r\n // go left\r\n node = node.left;\r\n continue;\r\n }\r\n // handle current node\r\n if (node.ownerId === ownerId) {\r\n result[resultLen++] = node;\r\n }\r\n setNodeIsVisited(node, true);\r\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\r\n // go right\r\n node = node.right;\r\n continue;\r\n }\r\n }\r\n setNodeIsVisited(T.root, false);\r\n return result;\r\n}\r\nfunction collectNodesPostOrder(T) {\r\n var node = T.root;\r\n var result = [];\r\n var resultLen = 0;\r\n while (node !== SENTINEL) {\r\n if (getNodeIsVisited(node)) {\r\n // going up from this node\r\n setNodeIsVisited(node.left, false);\r\n setNodeIsVisited(node.right, false);\r\n node = node.parent;\r\n continue;\r\n }\r\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\r\n // go left\r\n node = node.left;\r\n continue;\r\n }\r\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\r\n // go right\r\n node = node.right;\r\n continue;\r\n }\r\n // handle current node\r\n result[resultLen++] = node;\r\n setNodeIsVisited(node, true);\r\n }\r\n setNodeIsVisited(T.root, false);\r\n return result;\r\n}\r\nfunction search(T, filterOwnerId, filterOutValidation, cachedVersionId) {\r\n var node = T.root;\r\n var delta = 0;\r\n var nodeStart = 0;\r\n var nodeEnd = 0;\r\n var result = [];\r\n var resultLen = 0;\r\n while (node !== SENTINEL) {\r\n if (getNodeIsVisited(node)) {\r\n // going up from this node\r\n setNodeIsVisited(node.left, false);\r\n setNodeIsVisited(node.right, false);\r\n if (node === node.parent.right) {\r\n delta -= node.parent.delta;\r\n }\r\n node = node.parent;\r\n continue;\r\n }\r\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\r\n // go left\r\n node = node.left;\r\n continue;\r\n }\r\n // handle current node\r\n nodeStart = delta + node.start;\r\n nodeEnd = delta + node.end;\r\n node.setCachedOffsets(nodeStart, nodeEnd, cachedVersionId);\r\n var include = true;\r\n if (filterOwnerId && node.ownerId && node.ownerId !== filterOwnerId) {\r\n include = false;\r\n }\r\n if (filterOutValidation && getNodeIsForValidation(node)) {\r\n include = false;\r\n }\r\n if (include) {\r\n result[resultLen++] = node;\r\n }\r\n setNodeIsVisited(node, true);\r\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\r\n // go right\r\n delta += node.delta;\r\n node = node.right;\r\n continue;\r\n }\r\n }\r\n setNodeIsVisited(T.root, false);\r\n return result;\r\n}\r\nfunction intervalSearch(T, intervalStart, intervalEnd, filterOwnerId, filterOutValidation, cachedVersionId) {\r\n // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree\r\n // Now, it is known that two intervals A and B overlap only when both\r\n // A.low <= B.high and A.high >= B.low. When searching the trees for\r\n // nodes overlapping with a given interval, you can immediately skip:\r\n // a) all nodes to the right of nodes whose low value is past the end of the given interval.\r\n // b) all nodes that have their maximum 'high' value below the start of the given interval.\r\n var node = T.root;\r\n var delta = 0;\r\n var nodeMaxEnd = 0;\r\n var nodeStart = 0;\r\n var nodeEnd = 0;\r\n var result = [];\r\n var resultLen = 0;\r\n while (node !== SENTINEL) {\r\n if (getNodeIsVisited(node)) {\r\n // going up from this node\r\n setNodeIsVisited(node.left, false);\r\n setNodeIsVisited(node.right, false);\r\n if (node === node.parent.right) {\r\n delta -= node.parent.delta;\r\n }\r\n node = node.parent;\r\n continue;\r\n }\r\n if (!getNodeIsVisited(node.left)) {\r\n // first time seeing this node\r\n nodeMaxEnd = delta + node.maxEnd;\r\n if (nodeMaxEnd < intervalStart) {\r\n // cover case b) from above\r\n // there is no need to search this node or its children\r\n setNodeIsVisited(node, true);\r\n continue;\r\n }\r\n if (node.left !== SENTINEL) {\r\n // go left\r\n node = node.left;\r\n continue;\r\n }\r\n }\r\n // handle current node\r\n nodeStart = delta + node.start;\r\n if (nodeStart > intervalEnd) {\r\n // cover case a) from above\r\n // there is no need to search this node or its right subtree\r\n setNodeIsVisited(node, true);\r\n continue;\r\n }\r\n nodeEnd = delta + node.end;\r\n if (nodeEnd >= intervalStart) {\r\n // There is overlap\r\n node.setCachedOffsets(nodeStart, nodeEnd, cachedVersionId);\r\n var include = true;\r\n if (filterOwnerId && node.ownerId && node.ownerId !== filterOwnerId) {\r\n include = false;\r\n }\r\n if (filterOutValidation && getNodeIsForValidation(node)) {\r\n include = false;\r\n }\r\n if (include) {\r\n result[resultLen++] = node;\r\n }\r\n }\r\n setNodeIsVisited(node, true);\r\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\r\n // go right\r\n delta += node.delta;\r\n node = node.right;\r\n continue;\r\n }\r\n }\r\n setNodeIsVisited(T.root, false);\r\n return result;\r\n}\r\n//#endregion\r\n//#region Insertion\r\nfunction rbTreeInsert(T, newNode) {\r\n if (T.root === SENTINEL) {\r\n newNode.parent = SENTINEL;\r\n newNode.left = SENTINEL;\r\n newNode.right = SENTINEL;\r\n setNodeColor(newNode, 0 /* Black */);\r\n T.root = newNode;\r\n return T.root;\r\n }\r\n treeInsert(T, newNode);\r\n recomputeMaxEndWalkToRoot(newNode.parent);\r\n // repair tree\r\n var x = newNode;\r\n while (x !== T.root && getNodeColor(x.parent) === 1 /* Red */) {\r\n if (x.parent === x.parent.parent.left) {\r\n var y = x.parent.parent.right;\r\n if (getNodeColor(y) === 1 /* Red */) {\r\n setNodeColor(x.parent, 0 /* Black */);\r\n setNodeColor(y, 0 /* Black */);\r\n setNodeColor(x.parent.parent, 1 /* Red */);\r\n x = x.parent.parent;\r\n }\r\n else {\r\n if (x === x.parent.right) {\r\n x = x.parent;\r\n leftRotate(T, x);\r\n }\r\n setNodeColor(x.parent, 0 /* Black */);\r\n setNodeColor(x.parent.parent, 1 /* Red */);\r\n rightRotate(T, x.parent.parent);\r\n }\r\n }\r\n else {\r\n var y = x.parent.parent.left;\r\n if (getNodeColor(y) === 1 /* Red */) {\r\n setNodeColor(x.parent, 0 /* Black */);\r\n setNodeColor(y, 0 /* Black */);\r\n setNodeColor(x.parent.parent, 1 /* Red */);\r\n x = x.parent.parent;\r\n }\r\n else {\r\n if (x === x.parent.left) {\r\n x = x.parent;\r\n rightRotate(T, x);\r\n }\r\n setNodeColor(x.parent, 0 /* Black */);\r\n setNodeColor(x.parent.parent, 1 /* Red */);\r\n leftRotate(T, x.parent.parent);\r\n }\r\n }\r\n }\r\n setNodeColor(T.root, 0 /* Black */);\r\n return newNode;\r\n}\r\nfunction treeInsert(T, z) {\r\n var delta = 0;\r\n var x = T.root;\r\n var zAbsoluteStart = z.start;\r\n var zAbsoluteEnd = z.end;\r\n while (true) {\r\n var cmp = intervalCompare(zAbsoluteStart, zAbsoluteEnd, x.start + delta, x.end + delta);\r\n if (cmp < 0) {\r\n // this node should be inserted to the left\r\n // => it is not affected by the node's delta\r\n if (x.left === SENTINEL) {\r\n z.start -= delta;\r\n z.end -= delta;\r\n z.maxEnd -= delta;\r\n x.left = z;\r\n break;\r\n }\r\n else {\r\n x = x.left;\r\n }\r\n }\r\n else {\r\n // this node should be inserted to the right\r\n // => it is not affected by the node's delta\r\n if (x.right === SENTINEL) {\r\n z.start -= (delta + x.delta);\r\n z.end -= (delta + x.delta);\r\n z.maxEnd -= (delta + x.delta);\r\n x.right = z;\r\n break;\r\n }\r\n else {\r\n delta += x.delta;\r\n x = x.right;\r\n }\r\n }\r\n }\r\n z.parent = x;\r\n z.left = SENTINEL;\r\n z.right = SENTINEL;\r\n setNodeColor(z, 1 /* Red */);\r\n}\r\n//#endregion\r\n//#region Deletion\r\nfunction rbTreeDelete(T, z) {\r\n var x;\r\n var y;\r\n // RB-DELETE except we don't swap z and y in case c)\r\n // i.e. we always delete what's pointed at by z.\r\n if (z.left === SENTINEL) {\r\n x = z.right;\r\n y = z;\r\n // x's delta is no longer influenced by z's delta\r\n x.delta += z.delta;\r\n if (x.delta < -1073741824 /* MIN_SAFE_DELTA */ || x.delta > 1073741824 /* MAX_SAFE_DELTA */) {\r\n T.requestNormalizeDelta = true;\r\n }\r\n x.start += z.delta;\r\n x.end += z.delta;\r\n }\r\n else if (z.right === SENTINEL) {\r\n x = z.left;\r\n y = z;\r\n }\r\n else {\r\n y = leftest(z.right);\r\n x = y.right;\r\n // y's delta is no longer influenced by z's delta,\r\n // but we don't want to walk the entire right-hand-side subtree of x.\r\n // we therefore maintain z's delta in y, and adjust only x\r\n x.start += y.delta;\r\n x.end += y.delta;\r\n x.delta += y.delta;\r\n if (x.delta < -1073741824 /* MIN_SAFE_DELTA */ || x.delta > 1073741824 /* MAX_SAFE_DELTA */) {\r\n T.requestNormalizeDelta = true;\r\n }\r\n y.start += z.delta;\r\n y.end += z.delta;\r\n y.delta = z.delta;\r\n if (y.delta < -1073741824 /* MIN_SAFE_DELTA */ || y.delta > 1073741824 /* MAX_SAFE_DELTA */) {\r\n T.requestNormalizeDelta = true;\r\n }\r\n }\r\n if (y === T.root) {\r\n T.root = x;\r\n setNodeColor(x, 0 /* Black */);\r\n z.detach();\r\n resetSentinel();\r\n recomputeMaxEnd(x);\r\n T.root.parent = SENTINEL;\r\n return;\r\n }\r\n var yWasRed = (getNodeColor(y) === 1 /* Red */);\r\n if (y === y.parent.left) {\r\n y.parent.left = x;\r\n }\r\n else {\r\n y.parent.right = x;\r\n }\r\n if (y === z) {\r\n x.parent = y.parent;\r\n }\r\n else {\r\n if (y.parent === z) {\r\n x.parent = y;\r\n }\r\n else {\r\n x.parent = y.parent;\r\n }\r\n y.left = z.left;\r\n y.right = z.right;\r\n y.parent = z.parent;\r\n setNodeColor(y, getNodeColor(z));\r\n if (z === T.root) {\r\n T.root = y;\r\n }\r\n else {\r\n if (z === z.parent.left) {\r\n z.parent.left = y;\r\n }\r\n else {\r\n z.parent.right = y;\r\n }\r\n }\r\n if (y.left !== SENTINEL) {\r\n y.left.parent = y;\r\n }\r\n if (y.right !== SENTINEL) {\r\n y.right.parent = y;\r\n }\r\n }\r\n z.detach();\r\n if (yWasRed) {\r\n recomputeMaxEndWalkToRoot(x.parent);\r\n if (y !== z) {\r\n recomputeMaxEndWalkToRoot(y);\r\n recomputeMaxEndWalkToRoot(y.parent);\r\n }\r\n resetSentinel();\r\n return;\r\n }\r\n recomputeMaxEndWalkToRoot(x);\r\n recomputeMaxEndWalkToRoot(x.parent);\r\n if (y !== z) {\r\n recomputeMaxEndWalkToRoot(y);\r\n recomputeMaxEndWalkToRoot(y.parent);\r\n }\r\n // RB-DELETE-FIXUP\r\n var w;\r\n while (x !== T.root && getNodeColor(x) === 0 /* Black */) {\r\n if (x === x.parent.left) {\r\n w = x.parent.right;\r\n if (getNodeColor(w) === 1 /* Red */) {\r\n setNodeColor(w, 0 /* Black */);\r\n setNodeColor(x.parent, 1 /* Red */);\r\n leftRotate(T, x.parent);\r\n w = x.parent.right;\r\n }\r\n if (getNodeColor(w.left) === 0 /* Black */ && getNodeColor(w.right) === 0 /* Black */) {\r\n setNodeColor(w, 1 /* Red */);\r\n x = x.parent;\r\n }\r\n else {\r\n if (getNodeColor(w.right) === 0 /* Black */) {\r\n setNodeColor(w.left, 0 /* Black */);\r\n setNodeColor(w, 1 /* Red */);\r\n rightRotate(T, w);\r\n w = x.parent.right;\r\n }\r\n setNodeColor(w, getNodeColor(x.parent));\r\n setNodeColor(x.parent, 0 /* Black */);\r\n setNodeColor(w.right, 0 /* Black */);\r\n leftRotate(T, x.parent);\r\n x = T.root;\r\n }\r\n }\r\n else {\r\n w = x.parent.left;\r\n if (getNodeColor(w) === 1 /* Red */) {\r\n setNodeColor(w, 0 /* Black */);\r\n setNodeColor(x.parent, 1 /* Red */);\r\n rightRotate(T, x.parent);\r\n w = x.parent.left;\r\n }\r\n if (getNodeColor(w.left) === 0 /* Black */ && getNodeColor(w.right) === 0 /* Black */) {\r\n setNodeColor(w, 1 /* Red */);\r\n x = x.parent;\r\n }\r\n else {\r\n if (getNodeColor(w.left) === 0 /* Black */) {\r\n setNodeColor(w.right, 0 /* Black */);\r\n setNodeColor(w, 1 /* Red */);\r\n leftRotate(T, w);\r\n w = x.parent.left;\r\n }\r\n setNodeColor(w, getNodeColor(x.parent));\r\n setNodeColor(x.parent, 0 /* Black */);\r\n setNodeColor(w.left, 0 /* Black */);\r\n rightRotate(T, x.parent);\r\n x = T.root;\r\n }\r\n }\r\n }\r\n setNodeColor(x, 0 /* Black */);\r\n resetSentinel();\r\n}\r\nfunction leftest(node) {\r\n while (node.left !== SENTINEL) {\r\n node = node.left;\r\n }\r\n return node;\r\n}\r\nfunction resetSentinel() {\r\n SENTINEL.parent = SENTINEL;\r\n SENTINEL.delta = 0; // optional\r\n SENTINEL.start = 0; // optional\r\n SENTINEL.end = 0; // optional\r\n}\r\n//#endregion\r\n//#region Rotations\r\nfunction leftRotate(T, x) {\r\n var y = x.right; // set y.\r\n y.delta += x.delta; // y's delta is no longer influenced by x's delta\r\n if (y.delta < -1073741824 /* MIN_SAFE_DELTA */ || y.delta > 1073741824 /* MAX_SAFE_DELTA */) {\r\n T.requestNormalizeDelta = true;\r\n }\r\n y.start += x.delta;\r\n y.end += x.delta;\r\n x.right = y.left; // turn y's left subtree into x's right subtree.\r\n if (y.left !== SENTINEL) {\r\n y.left.parent = x;\r\n }\r\n y.parent = x.parent; // link x's parent to y.\r\n if (x.parent === SENTINEL) {\r\n T.root = y;\r\n }\r\n else if (x === x.parent.left) {\r\n x.parent.left = y;\r\n }\r\n else {\r\n x.parent.right = y;\r\n }\r\n y.left = x; // put x on y's left.\r\n x.parent = y;\r\n recomputeMaxEnd(x);\r\n recomputeMaxEnd(y);\r\n}\r\nfunction rightRotate(T, y) {\r\n var x = y.left;\r\n y.delta -= x.delta;\r\n if (y.delta < -1073741824 /* MIN_SAFE_DELTA */ || y.delta > 1073741824 /* MAX_SAFE_DELTA */) {\r\n T.requestNormalizeDelta = true;\r\n }\r\n y.start -= x.delta;\r\n y.end -= x.delta;\r\n y.left = x.right;\r\n if (x.right !== SENTINEL) {\r\n x.right.parent = y;\r\n }\r\n x.parent = y.parent;\r\n if (y.parent === SENTINEL) {\r\n T.root = x;\r\n }\r\n else if (y === y.parent.right) {\r\n y.parent.right = x;\r\n }\r\n else {\r\n y.parent.left = x;\r\n }\r\n x.right = y;\r\n y.parent = x;\r\n recomputeMaxEnd(y);\r\n recomputeMaxEnd(x);\r\n}\r\n//#endregion\r\n//#region max end computation\r\nfunction computeMaxEnd(node) {\r\n var maxEnd = node.end;\r\n if (node.left !== SENTINEL) {\r\n var leftMaxEnd = node.left.maxEnd;\r\n if (leftMaxEnd > maxEnd) {\r\n maxEnd = leftMaxEnd;\r\n }\r\n }\r\n if (node.right !== SENTINEL) {\r\n var rightMaxEnd = node.right.maxEnd + node.delta;\r\n if (rightMaxEnd > maxEnd) {\r\n maxEnd = rightMaxEnd;\r\n }\r\n }\r\n return maxEnd;\r\n}\r\nexport function recomputeMaxEnd(node) {\r\n node.maxEnd = computeMaxEnd(node);\r\n}\r\nfunction recomputeMaxEndWalkToRoot(node) {\r\n while (node !== SENTINEL) {\r\n var maxEnd = computeMaxEnd(node);\r\n if (node.maxEnd === maxEnd) {\r\n // no need to go further\r\n return;\r\n }\r\n node.maxEnd = maxEnd;\r\n node = node.parent;\r\n }\r\n}\r\n//#endregion\r\n//#region utils\r\nexport function intervalCompare(aStart, aEnd, bStart, bEnd) {\r\n if (aStart === bStart) {\r\n return aEnd - bEnd;\r\n }\r\n return aStart - bStart;\r\n}\r\n//#endregion\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar TreeNode = /** @class */ (function () {\r\n function TreeNode(piece, color) {\r\n this.piece = piece;\r\n this.color = color;\r\n this.size_left = 0;\r\n this.lf_left = 0;\r\n this.parent = this;\r\n this.left = this;\r\n this.right = this;\r\n }\r\n TreeNode.prototype.next = function () {\r\n if (this.right !== SENTINEL) {\r\n return leftest(this.right);\r\n }\r\n var node = this;\r\n while (node.parent !== SENTINEL) {\r\n if (node.parent.left === node) {\r\n break;\r\n }\r\n node = node.parent;\r\n }\r\n if (node.parent === SENTINEL) {\r\n return SENTINEL;\r\n }\r\n else {\r\n return node.parent;\r\n }\r\n };\r\n TreeNode.prototype.prev = function () {\r\n if (this.left !== SENTINEL) {\r\n return righttest(this.left);\r\n }\r\n var node = this;\r\n while (node.parent !== SENTINEL) {\r\n if (node.parent.right === node) {\r\n break;\r\n }\r\n node = node.parent;\r\n }\r\n if (node.parent === SENTINEL) {\r\n return SENTINEL;\r\n }\r\n else {\r\n return node.parent;\r\n }\r\n };\r\n TreeNode.prototype.detach = function () {\r\n this.parent = null;\r\n this.left = null;\r\n this.right = null;\r\n };\r\n return TreeNode;\r\n}());\r\nexport { TreeNode };\r\nexport var SENTINEL = new TreeNode(null, 0 /* Black */);\r\nSENTINEL.parent = SENTINEL;\r\nSENTINEL.left = SENTINEL;\r\nSENTINEL.right = SENTINEL;\r\nSENTINEL.color = 0 /* Black */;\r\nexport function leftest(node) {\r\n while (node.left !== SENTINEL) {\r\n node = node.left;\r\n }\r\n return node;\r\n}\r\nexport function righttest(node) {\r\n while (node.right !== SENTINEL) {\r\n node = node.right;\r\n }\r\n return node;\r\n}\r\nexport function calculateSize(node) {\r\n if (node === SENTINEL) {\r\n return 0;\r\n }\r\n return node.size_left + node.piece.length + calculateSize(node.right);\r\n}\r\nexport function calculateLF(node) {\r\n if (node === SENTINEL) {\r\n return 0;\r\n }\r\n return node.lf_left + node.piece.lineFeedCnt + calculateLF(node.right);\r\n}\r\nexport function resetSentinel() {\r\n SENTINEL.parent = SENTINEL;\r\n}\r\nexport function leftRotate(tree, x) {\r\n var y = x.right;\r\n // fix size_left\r\n y.size_left += x.size_left + (x.piece ? x.piece.length : 0);\r\n y.lf_left += x.lf_left + (x.piece ? x.piece.lineFeedCnt : 0);\r\n x.right = y.left;\r\n if (y.left !== SENTINEL) {\r\n y.left.parent = x;\r\n }\r\n y.parent = x.parent;\r\n if (x.parent === SENTINEL) {\r\n tree.root = y;\r\n }\r\n else if (x.parent.left === x) {\r\n x.parent.left = y;\r\n }\r\n else {\r\n x.parent.right = y;\r\n }\r\n y.left = x;\r\n x.parent = y;\r\n}\r\nexport function rightRotate(tree, y) {\r\n var x = y.left;\r\n y.left = x.right;\r\n if (x.right !== SENTINEL) {\r\n x.right.parent = y;\r\n }\r\n x.parent = y.parent;\r\n // fix size_left\r\n y.size_left -= x.size_left + (x.piece ? x.piece.length : 0);\r\n y.lf_left -= x.lf_left + (x.piece ? x.piece.lineFeedCnt : 0);\r\n if (y.parent === SENTINEL) {\r\n tree.root = x;\r\n }\r\n else if (y === y.parent.right) {\r\n y.parent.right = x;\r\n }\r\n else {\r\n y.parent.left = x;\r\n }\r\n x.right = y;\r\n y.parent = x;\r\n}\r\nexport function rbDelete(tree, z) {\r\n var x;\r\n var y;\r\n if (z.left === SENTINEL) {\r\n y = z;\r\n x = y.right;\r\n }\r\n else if (z.right === SENTINEL) {\r\n y = z;\r\n x = y.left;\r\n }\r\n else {\r\n y = leftest(z.right);\r\n x = y.right;\r\n }\r\n if (y === tree.root) {\r\n tree.root = x;\r\n // if x is null, we are removing the only node\r\n x.color = 0 /* Black */;\r\n z.detach();\r\n resetSentinel();\r\n tree.root.parent = SENTINEL;\r\n return;\r\n }\r\n var yWasRed = (y.color === 1 /* Red */);\r\n if (y === y.parent.left) {\r\n y.parent.left = x;\r\n }\r\n else {\r\n y.parent.right = x;\r\n }\r\n if (y === z) {\r\n x.parent = y.parent;\r\n recomputeTreeMetadata(tree, x);\r\n }\r\n else {\r\n if (y.parent === z) {\r\n x.parent = y;\r\n }\r\n else {\r\n x.parent = y.parent;\r\n }\r\n // as we make changes to x's hierarchy, update size_left of subtree first\r\n recomputeTreeMetadata(tree, x);\r\n y.left = z.left;\r\n y.right = z.right;\r\n y.parent = z.parent;\r\n y.color = z.color;\r\n if (z === tree.root) {\r\n tree.root = y;\r\n }\r\n else {\r\n if (z === z.parent.left) {\r\n z.parent.left = y;\r\n }\r\n else {\r\n z.parent.right = y;\r\n }\r\n }\r\n if (y.left !== SENTINEL) {\r\n y.left.parent = y;\r\n }\r\n if (y.right !== SENTINEL) {\r\n y.right.parent = y;\r\n }\r\n // update metadata\r\n // we replace z with y, so in this sub tree, the length change is z.item.length\r\n y.size_left = z.size_left;\r\n y.lf_left = z.lf_left;\r\n recomputeTreeMetadata(tree, y);\r\n }\r\n z.detach();\r\n if (x.parent.left === x) {\r\n var newSizeLeft = calculateSize(x);\r\n var newLFLeft = calculateLF(x);\r\n if (newSizeLeft !== x.parent.size_left || newLFLeft !== x.parent.lf_left) {\r\n var delta = newSizeLeft - x.parent.size_left;\r\n var lf_delta = newLFLeft - x.parent.lf_left;\r\n x.parent.size_left = newSizeLeft;\r\n x.parent.lf_left = newLFLeft;\r\n updateTreeMetadata(tree, x.parent, delta, lf_delta);\r\n }\r\n }\r\n recomputeTreeMetadata(tree, x.parent);\r\n if (yWasRed) {\r\n resetSentinel();\r\n return;\r\n }\r\n // RB-DELETE-FIXUP\r\n var w;\r\n while (x !== tree.root && x.color === 0 /* Black */) {\r\n if (x === x.parent.left) {\r\n w = x.parent.right;\r\n if (w.color === 1 /* Red */) {\r\n w.color = 0 /* Black */;\r\n x.parent.color = 1 /* Red */;\r\n leftRotate(tree, x.parent);\r\n w = x.parent.right;\r\n }\r\n if (w.left.color === 0 /* Black */ && w.right.color === 0 /* Black */) {\r\n w.color = 1 /* Red */;\r\n x = x.parent;\r\n }\r\n else {\r\n if (w.right.color === 0 /* Black */) {\r\n w.left.color = 0 /* Black */;\r\n w.color = 1 /* Red */;\r\n rightRotate(tree, w);\r\n w = x.parent.right;\r\n }\r\n w.color = x.parent.color;\r\n x.parent.color = 0 /* Black */;\r\n w.right.color = 0 /* Black */;\r\n leftRotate(tree, x.parent);\r\n x = tree.root;\r\n }\r\n }\r\n else {\r\n w = x.parent.left;\r\n if (w.color === 1 /* Red */) {\r\n w.color = 0 /* Black */;\r\n x.parent.color = 1 /* Red */;\r\n rightRotate(tree, x.parent);\r\n w = x.parent.left;\r\n }\r\n if (w.left.color === 0 /* Black */ && w.right.color === 0 /* Black */) {\r\n w.color = 1 /* Red */;\r\n x = x.parent;\r\n }\r\n else {\r\n if (w.left.color === 0 /* Black */) {\r\n w.right.color = 0 /* Black */;\r\n w.color = 1 /* Red */;\r\n leftRotate(tree, w);\r\n w = x.parent.left;\r\n }\r\n w.color = x.parent.color;\r\n x.parent.color = 0 /* Black */;\r\n w.left.color = 0 /* Black */;\r\n rightRotate(tree, x.parent);\r\n x = tree.root;\r\n }\r\n }\r\n }\r\n x.color = 0 /* Black */;\r\n resetSentinel();\r\n}\r\nexport function fixInsert(tree, x) {\r\n recomputeTreeMetadata(tree, x);\r\n while (x !== tree.root && x.parent.color === 1 /* Red */) {\r\n if (x.parent === x.parent.parent.left) {\r\n var y = x.parent.parent.right;\r\n if (y.color === 1 /* Red */) {\r\n x.parent.color = 0 /* Black */;\r\n y.color = 0 /* Black */;\r\n x.parent.parent.color = 1 /* Red */;\r\n x = x.parent.parent;\r\n }\r\n else {\r\n if (x === x.parent.right) {\r\n x = x.parent;\r\n leftRotate(tree, x);\r\n }\r\n x.parent.color = 0 /* Black */;\r\n x.parent.parent.color = 1 /* Red */;\r\n rightRotate(tree, x.parent.parent);\r\n }\r\n }\r\n else {\r\n var y = x.parent.parent.left;\r\n if (y.color === 1 /* Red */) {\r\n x.parent.color = 0 /* Black */;\r\n y.color = 0 /* Black */;\r\n x.parent.parent.color = 1 /* Red */;\r\n x = x.parent.parent;\r\n }\r\n else {\r\n if (x === x.parent.left) {\r\n x = x.parent;\r\n rightRotate(tree, x);\r\n }\r\n x.parent.color = 0 /* Black */;\r\n x.parent.parent.color = 1 /* Red */;\r\n leftRotate(tree, x.parent.parent);\r\n }\r\n }\r\n }\r\n tree.root.color = 0 /* Black */;\r\n}\r\nexport function updateTreeMetadata(tree, x, delta, lineFeedCntDelta) {\r\n // node length change or line feed count change\r\n while (x !== tree.root && x !== SENTINEL) {\r\n if (x.parent.left === x) {\r\n x.parent.size_left += delta;\r\n x.parent.lf_left += lineFeedCntDelta;\r\n }\r\n x = x.parent;\r\n }\r\n}\r\nexport function recomputeTreeMetadata(tree, x) {\r\n var delta = 0;\r\n var lf_delta = 0;\r\n if (x === tree.root) {\r\n return;\r\n }\r\n if (delta === 0) {\r\n // go upwards till the node whose left subtree is changed.\r\n while (x !== tree.root && x === x.parent.right) {\r\n x = x.parent;\r\n }\r\n if (x === tree.root) {\r\n // well, it means we add a node to the end (inorder)\r\n return;\r\n }\r\n // x is the node whose right subtree is changed.\r\n x = x.parent;\r\n delta = calculateSize(x.left) - x.size_left;\r\n lf_delta = calculateLF(x.left) - x.lf_left;\r\n x.size_left += delta;\r\n x.lf_left += lf_delta;\r\n }\r\n // go upwards till root. O(logN)\r\n while (x !== tree.root && (delta !== 0 || lf_delta !== 0)) {\r\n if (x.parent.left === x) {\r\n x.parent.size_left += delta;\r\n x.parent.lf_left += lf_delta;\r\n }\r\n x = x.parent;\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { CharacterClassifier } from '../core/characterClassifier.js';\r\nvar WordCharacterClassifier = /** @class */ (function (_super) {\r\n __extends(WordCharacterClassifier, _super);\r\n function WordCharacterClassifier(wordSeparators) {\r\n var _this = _super.call(this, 0 /* Regular */) || this;\r\n for (var i = 0, len = wordSeparators.length; i < len; i++) {\r\n _this.set(wordSeparators.charCodeAt(i), 2 /* WordSeparator */);\r\n }\r\n _this.set(32 /* Space */, 1 /* Whitespace */);\r\n _this.set(9 /* Tab */, 1 /* Whitespace */);\r\n return _this;\r\n }\r\n return WordCharacterClassifier;\r\n}(CharacterClassifier));\r\nexport { WordCharacterClassifier };\r\nfunction once(computeFn) {\r\n var cache = {}; // TODO@Alex unbounded cache\r\n return function (input) {\r\n if (!cache.hasOwnProperty(input)) {\r\n cache[input] = computeFn(input);\r\n }\r\n return cache[input];\r\n };\r\n}\r\nexport var getMapForWordSeparators = once(function (input) { return new WordCharacterClassifier(input); });\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { getMapForWordSeparators } from '../controller/wordCharacterClassifier.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport { FindMatch } from '../model.js';\r\nvar LIMIT_FIND_COUNT = 999;\r\nvar SearchParams = /** @class */ (function () {\r\n function SearchParams(searchString, isRegex, matchCase, wordSeparators) {\r\n this.searchString = searchString;\r\n this.isRegex = isRegex;\r\n this.matchCase = matchCase;\r\n this.wordSeparators = wordSeparators;\r\n }\r\n SearchParams.prototype.parseSearchRequest = function () {\r\n if (this.searchString === '') {\r\n return null;\r\n }\r\n // Try to create a RegExp out of the params\r\n var multiline;\r\n if (this.isRegex) {\r\n multiline = isMultilineRegexSource(this.searchString);\r\n }\r\n else {\r\n multiline = (this.searchString.indexOf('\\n') >= 0);\r\n }\r\n var regex = null;\r\n try {\r\n regex = strings.createRegExp(this.searchString, this.isRegex, {\r\n matchCase: this.matchCase,\r\n wholeWord: false,\r\n multiline: multiline,\r\n global: true,\r\n unicode: true\r\n });\r\n }\r\n catch (err) {\r\n return null;\r\n }\r\n if (!regex) {\r\n return null;\r\n }\r\n var canUseSimpleSearch = (!this.isRegex && !multiline);\r\n if (canUseSimpleSearch && this.searchString.toLowerCase() !== this.searchString.toUpperCase()) {\r\n // casing might make a difference\r\n canUseSimpleSearch = this.matchCase;\r\n }\r\n return new SearchData(regex, this.wordSeparators ? getMapForWordSeparators(this.wordSeparators) : null, canUseSimpleSearch ? this.searchString : null);\r\n };\r\n return SearchParams;\r\n}());\r\nexport { SearchParams };\r\nexport function isMultilineRegexSource(searchString) {\r\n if (!searchString || searchString.length === 0) {\r\n return false;\r\n }\r\n for (var i = 0, len = searchString.length; i < len; i++) {\r\n var chCode = searchString.charCodeAt(i);\r\n if (chCode === 92 /* Backslash */) {\r\n // move to next char\r\n i++;\r\n if (i >= len) {\r\n // string ends with a \\\r\n break;\r\n }\r\n var nextChCode = searchString.charCodeAt(i);\r\n if (nextChCode === 110 /* n */ || nextChCode === 114 /* r */ || nextChCode === 87 /* W */ || nextChCode === 119 /* w */) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nvar SearchData = /** @class */ (function () {\r\n function SearchData(regex, wordSeparators, simpleSearch) {\r\n this.regex = regex;\r\n this.wordSeparators = wordSeparators;\r\n this.simpleSearch = simpleSearch;\r\n }\r\n return SearchData;\r\n}());\r\nexport { SearchData };\r\nexport function createFindMatch(range, rawMatches, captureMatches) {\r\n if (!captureMatches) {\r\n return new FindMatch(range, null);\r\n }\r\n var matches = [];\r\n for (var i = 0, len = rawMatches.length; i < len; i++) {\r\n matches[i] = rawMatches[i];\r\n }\r\n return new FindMatch(range, matches);\r\n}\r\nvar LineFeedCounter = /** @class */ (function () {\r\n function LineFeedCounter(text) {\r\n var lineFeedsOffsets = [];\r\n var lineFeedsOffsetsLen = 0;\r\n for (var i = 0, textLen = text.length; i < textLen; i++) {\r\n if (text.charCodeAt(i) === 10 /* LineFeed */) {\r\n lineFeedsOffsets[lineFeedsOffsetsLen++] = i;\r\n }\r\n }\r\n this._lineFeedsOffsets = lineFeedsOffsets;\r\n }\r\n LineFeedCounter.prototype.findLineFeedCountBeforeOffset = function (offset) {\r\n var lineFeedsOffsets = this._lineFeedsOffsets;\r\n var min = 0;\r\n var max = lineFeedsOffsets.length - 1;\r\n if (max === -1) {\r\n // no line feeds\r\n return 0;\r\n }\r\n if (offset <= lineFeedsOffsets[0]) {\r\n // before first line feed\r\n return 0;\r\n }\r\n while (min < max) {\r\n var mid = min + ((max - min) / 2 >> 0);\r\n if (lineFeedsOffsets[mid] >= offset) {\r\n max = mid - 1;\r\n }\r\n else {\r\n if (lineFeedsOffsets[mid + 1] >= offset) {\r\n // bingo!\r\n min = mid;\r\n max = mid;\r\n }\r\n else {\r\n min = mid + 1;\r\n }\r\n }\r\n }\r\n return min + 1;\r\n };\r\n return LineFeedCounter;\r\n}());\r\nvar TextModelSearch = /** @class */ (function () {\r\n function TextModelSearch() {\r\n }\r\n TextModelSearch.findMatches = function (model, searchParams, searchRange, captureMatches, limitResultCount) {\r\n var searchData = searchParams.parseSearchRequest();\r\n if (!searchData) {\r\n return [];\r\n }\r\n if (searchData.regex.multiline) {\r\n return this._doFindMatchesMultiline(model, searchRange, new Searcher(searchData.wordSeparators, searchData.regex), captureMatches, limitResultCount);\r\n }\r\n return this._doFindMatchesLineByLine(model, searchRange, searchData, captureMatches, limitResultCount);\r\n };\r\n /**\r\n * Multiline search always executes on the lines concatenated with \\n.\r\n * We must therefore compensate for the count of \\n in case the model is CRLF\r\n */\r\n TextModelSearch._getMultilineMatchRange = function (model, deltaOffset, text, lfCounter, matchIndex, match0) {\r\n var startOffset;\r\n var lineFeedCountBeforeMatch = 0;\r\n if (lfCounter) {\r\n lineFeedCountBeforeMatch = lfCounter.findLineFeedCountBeforeOffset(matchIndex);\r\n startOffset = deltaOffset + matchIndex + lineFeedCountBeforeMatch /* add as many \\r as there were \\n */;\r\n }\r\n else {\r\n startOffset = deltaOffset + matchIndex;\r\n }\r\n var endOffset;\r\n if (lfCounter) {\r\n var lineFeedCountBeforeEndOfMatch = lfCounter.findLineFeedCountBeforeOffset(matchIndex + match0.length);\r\n var lineFeedCountInMatch = lineFeedCountBeforeEndOfMatch - lineFeedCountBeforeMatch;\r\n endOffset = startOffset + match0.length + lineFeedCountInMatch /* add as many \\r as there were \\n */;\r\n }\r\n else {\r\n endOffset = startOffset + match0.length;\r\n }\r\n var startPosition = model.getPositionAt(startOffset);\r\n var endPosition = model.getPositionAt(endOffset);\r\n return new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column);\r\n };\r\n TextModelSearch._doFindMatchesMultiline = function (model, searchRange, searcher, captureMatches, limitResultCount) {\r\n var deltaOffset = model.getOffsetAt(searchRange.getStartPosition());\r\n // We always execute multiline search over the lines joined with \\n\r\n // This makes it that \\n will match the EOL for both CRLF and LF models\r\n // We compensate for offset errors in `_getMultilineMatchRange`\r\n var text = model.getValueInRange(searchRange, 1 /* LF */);\r\n var lfCounter = (model.getEOL() === '\\r\\n' ? new LineFeedCounter(text) : null);\r\n var result = [];\r\n var counter = 0;\r\n var m;\r\n searcher.reset(0);\r\n while ((m = searcher.next(text))) {\r\n result[counter++] = createFindMatch(this._getMultilineMatchRange(model, deltaOffset, text, lfCounter, m.index, m[0]), m, captureMatches);\r\n if (counter >= limitResultCount) {\r\n return result;\r\n }\r\n }\r\n return result;\r\n };\r\n TextModelSearch._doFindMatchesLineByLine = function (model, searchRange, searchData, captureMatches, limitResultCount) {\r\n var result = [];\r\n var resultLen = 0;\r\n // Early case for a search range that starts & stops on the same line number\r\n if (searchRange.startLineNumber === searchRange.endLineNumber) {\r\n var text_1 = model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn - 1, searchRange.endColumn - 1);\r\n resultLen = this._findMatchesInLine(searchData, text_1, searchRange.startLineNumber, searchRange.startColumn - 1, resultLen, result, captureMatches, limitResultCount);\r\n return result;\r\n }\r\n // Collect results from first line\r\n var text = model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn - 1);\r\n resultLen = this._findMatchesInLine(searchData, text, searchRange.startLineNumber, searchRange.startColumn - 1, resultLen, result, captureMatches, limitResultCount);\r\n // Collect results from middle lines\r\n for (var lineNumber = searchRange.startLineNumber + 1; lineNumber < searchRange.endLineNumber && resultLen < limitResultCount; lineNumber++) {\r\n resultLen = this._findMatchesInLine(searchData, model.getLineContent(lineNumber), lineNumber, 0, resultLen, result, captureMatches, limitResultCount);\r\n }\r\n // Collect results from last line\r\n if (resultLen < limitResultCount) {\r\n var text_2 = model.getLineContent(searchRange.endLineNumber).substring(0, searchRange.endColumn - 1);\r\n resultLen = this._findMatchesInLine(searchData, text_2, searchRange.endLineNumber, 0, resultLen, result, captureMatches, limitResultCount);\r\n }\r\n return result;\r\n };\r\n TextModelSearch._findMatchesInLine = function (searchData, text, lineNumber, deltaOffset, resultLen, result, captureMatches, limitResultCount) {\r\n var wordSeparators = searchData.wordSeparators;\r\n if (!captureMatches && searchData.simpleSearch) {\r\n var searchString = searchData.simpleSearch;\r\n var searchStringLen = searchString.length;\r\n var textLength = text.length;\r\n var lastMatchIndex = -searchStringLen;\r\n while ((lastMatchIndex = text.indexOf(searchString, lastMatchIndex + searchStringLen)) !== -1) {\r\n if (!wordSeparators || isValidMatch(wordSeparators, text, textLength, lastMatchIndex, searchStringLen)) {\r\n result[resultLen++] = new FindMatch(new Range(lineNumber, lastMatchIndex + 1 + deltaOffset, lineNumber, lastMatchIndex + 1 + searchStringLen + deltaOffset), null);\r\n if (resultLen >= limitResultCount) {\r\n return resultLen;\r\n }\r\n }\r\n }\r\n return resultLen;\r\n }\r\n var searcher = new Searcher(searchData.wordSeparators, searchData.regex);\r\n var m;\r\n // Reset regex to search from the beginning\r\n searcher.reset(0);\r\n do {\r\n m = searcher.next(text);\r\n if (m) {\r\n result[resultLen++] = createFindMatch(new Range(lineNumber, m.index + 1 + deltaOffset, lineNumber, m.index + 1 + m[0].length + deltaOffset), m, captureMatches);\r\n if (resultLen >= limitResultCount) {\r\n return resultLen;\r\n }\r\n }\r\n } while (m);\r\n return resultLen;\r\n };\r\n TextModelSearch.findNextMatch = function (model, searchParams, searchStart, captureMatches) {\r\n var searchData = searchParams.parseSearchRequest();\r\n if (!searchData) {\r\n return null;\r\n }\r\n var searcher = new Searcher(searchData.wordSeparators, searchData.regex);\r\n if (searchData.regex.multiline) {\r\n return this._doFindNextMatchMultiline(model, searchStart, searcher, captureMatches);\r\n }\r\n return this._doFindNextMatchLineByLine(model, searchStart, searcher, captureMatches);\r\n };\r\n TextModelSearch._doFindNextMatchMultiline = function (model, searchStart, searcher, captureMatches) {\r\n var searchTextStart = new Position(searchStart.lineNumber, 1);\r\n var deltaOffset = model.getOffsetAt(searchTextStart);\r\n var lineCount = model.getLineCount();\r\n // We always execute multiline search over the lines joined with \\n\r\n // This makes it that \\n will match the EOL for both CRLF and LF models\r\n // We compensate for offset errors in `_getMultilineMatchRange`\r\n var text = model.getValueInRange(new Range(searchTextStart.lineNumber, searchTextStart.column, lineCount, model.getLineMaxColumn(lineCount)), 1 /* LF */);\r\n var lfCounter = (model.getEOL() === '\\r\\n' ? new LineFeedCounter(text) : null);\r\n searcher.reset(searchStart.column - 1);\r\n var m = searcher.next(text);\r\n if (m) {\r\n return createFindMatch(this._getMultilineMatchRange(model, deltaOffset, text, lfCounter, m.index, m[0]), m, captureMatches);\r\n }\r\n if (searchStart.lineNumber !== 1 || searchStart.column !== 1) {\r\n // Try again from the top\r\n return this._doFindNextMatchMultiline(model, new Position(1, 1), searcher, captureMatches);\r\n }\r\n return null;\r\n };\r\n TextModelSearch._doFindNextMatchLineByLine = function (model, searchStart, searcher, captureMatches) {\r\n var lineCount = model.getLineCount();\r\n var startLineNumber = searchStart.lineNumber;\r\n // Look in first line\r\n var text = model.getLineContent(startLineNumber);\r\n var r = this._findFirstMatchInLine(searcher, text, startLineNumber, searchStart.column, captureMatches);\r\n if (r) {\r\n return r;\r\n }\r\n for (var i = 1; i <= lineCount; i++) {\r\n var lineIndex = (startLineNumber + i - 1) % lineCount;\r\n var text_3 = model.getLineContent(lineIndex + 1);\r\n var r_1 = this._findFirstMatchInLine(searcher, text_3, lineIndex + 1, 1, captureMatches);\r\n if (r_1) {\r\n return r_1;\r\n }\r\n }\r\n return null;\r\n };\r\n TextModelSearch._findFirstMatchInLine = function (searcher, text, lineNumber, fromColumn, captureMatches) {\r\n // Set regex to search from column\r\n searcher.reset(fromColumn - 1);\r\n var m = searcher.next(text);\r\n if (m) {\r\n return createFindMatch(new Range(lineNumber, m.index + 1, lineNumber, m.index + 1 + m[0].length), m, captureMatches);\r\n }\r\n return null;\r\n };\r\n TextModelSearch.findPreviousMatch = function (model, searchParams, searchStart, captureMatches) {\r\n var searchData = searchParams.parseSearchRequest();\r\n if (!searchData) {\r\n return null;\r\n }\r\n var searcher = new Searcher(searchData.wordSeparators, searchData.regex);\r\n if (searchData.regex.multiline) {\r\n return this._doFindPreviousMatchMultiline(model, searchStart, searcher, captureMatches);\r\n }\r\n return this._doFindPreviousMatchLineByLine(model, searchStart, searcher, captureMatches);\r\n };\r\n TextModelSearch._doFindPreviousMatchMultiline = function (model, searchStart, searcher, captureMatches) {\r\n var matches = this._doFindMatchesMultiline(model, new Range(1, 1, searchStart.lineNumber, searchStart.column), searcher, captureMatches, 10 * LIMIT_FIND_COUNT);\r\n if (matches.length > 0) {\r\n return matches[matches.length - 1];\r\n }\r\n var lineCount = model.getLineCount();\r\n if (searchStart.lineNumber !== lineCount || searchStart.column !== model.getLineMaxColumn(lineCount)) {\r\n // Try again with all content\r\n return this._doFindPreviousMatchMultiline(model, new Position(lineCount, model.getLineMaxColumn(lineCount)), searcher, captureMatches);\r\n }\r\n return null;\r\n };\r\n TextModelSearch._doFindPreviousMatchLineByLine = function (model, searchStart, searcher, captureMatches) {\r\n var lineCount = model.getLineCount();\r\n var startLineNumber = searchStart.lineNumber;\r\n // Look in first line\r\n var text = model.getLineContent(startLineNumber).substring(0, searchStart.column - 1);\r\n var r = this._findLastMatchInLine(searcher, text, startLineNumber, captureMatches);\r\n if (r) {\r\n return r;\r\n }\r\n for (var i = 1; i <= lineCount; i++) {\r\n var lineIndex = (lineCount + startLineNumber - i - 1) % lineCount;\r\n var text_4 = model.getLineContent(lineIndex + 1);\r\n var r_2 = this._findLastMatchInLine(searcher, text_4, lineIndex + 1, captureMatches);\r\n if (r_2) {\r\n return r_2;\r\n }\r\n }\r\n return null;\r\n };\r\n TextModelSearch._findLastMatchInLine = function (searcher, text, lineNumber, captureMatches) {\r\n var bestResult = null;\r\n var m;\r\n searcher.reset(0);\r\n while ((m = searcher.next(text))) {\r\n bestResult = createFindMatch(new Range(lineNumber, m.index + 1, lineNumber, m.index + 1 + m[0].length), m, captureMatches);\r\n }\r\n return bestResult;\r\n };\r\n return TextModelSearch;\r\n}());\r\nexport { TextModelSearch };\r\nfunction leftIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength) {\r\n if (matchStartIndex === 0) {\r\n // Match starts at start of string\r\n return true;\r\n }\r\n var charBefore = text.charCodeAt(matchStartIndex - 1);\r\n if (wordSeparators.get(charBefore) !== 0 /* Regular */) {\r\n // The character before the match is a word separator\r\n return true;\r\n }\r\n if (charBefore === 13 /* CarriageReturn */ || charBefore === 10 /* LineFeed */) {\r\n // The character before the match is line break or carriage return.\r\n return true;\r\n }\r\n if (matchLength > 0) {\r\n var firstCharInMatch = text.charCodeAt(matchStartIndex);\r\n if (wordSeparators.get(firstCharInMatch) !== 0 /* Regular */) {\r\n // The first character inside the match is a word separator\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction rightIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength) {\r\n if (matchStartIndex + matchLength === textLength) {\r\n // Match ends at end of string\r\n return true;\r\n }\r\n var charAfter = text.charCodeAt(matchStartIndex + matchLength);\r\n if (wordSeparators.get(charAfter) !== 0 /* Regular */) {\r\n // The character after the match is a word separator\r\n return true;\r\n }\r\n if (charAfter === 13 /* CarriageReturn */ || charAfter === 10 /* LineFeed */) {\r\n // The character after the match is line break or carriage return.\r\n return true;\r\n }\r\n if (matchLength > 0) {\r\n var lastCharInMatch = text.charCodeAt(matchStartIndex + matchLength - 1);\r\n if (wordSeparators.get(lastCharInMatch) !== 0 /* Regular */) {\r\n // The last character in the match is a word separator\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nexport function isValidMatch(wordSeparators, text, textLength, matchStartIndex, matchLength) {\r\n return (leftIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength)\r\n && rightIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength));\r\n}\r\nvar Searcher = /** @class */ (function () {\r\n function Searcher(wordSeparators, searchRegex) {\r\n this._wordSeparators = wordSeparators;\r\n this._searchRegex = searchRegex;\r\n this._prevMatchStartIndex = -1;\r\n this._prevMatchLength = 0;\r\n }\r\n Searcher.prototype.reset = function (lastIndex) {\r\n this._searchRegex.lastIndex = lastIndex;\r\n this._prevMatchStartIndex = -1;\r\n this._prevMatchLength = 0;\r\n };\r\n Searcher.prototype.next = function (text) {\r\n var textLength = text.length;\r\n var m;\r\n do {\r\n if (this._prevMatchStartIndex + this._prevMatchLength === textLength) {\r\n // Reached the end of the line\r\n return null;\r\n }\r\n m = this._searchRegex.exec(text);\r\n if (!m) {\r\n return null;\r\n }\r\n var matchStartIndex = m.index;\r\n var matchLength = m[0].length;\r\n if (matchStartIndex === this._prevMatchStartIndex && matchLength === this._prevMatchLength) {\r\n if (matchLength === 0) {\r\n // the search result is an empty string and won't advance `regex.lastIndex`, so `regex.exec` will stuck here\r\n // we attempt to recover from that by advancing by one\r\n this._searchRegex.lastIndex += 1;\r\n continue;\r\n }\r\n // Exit early if the regex matches the same range twice\r\n return null;\r\n }\r\n this._prevMatchStartIndex = matchStartIndex;\r\n this._prevMatchLength = matchLength;\r\n if (!this._wordSeparators || isValidMatch(this._wordSeparators, text, textLength, matchStartIndex, matchLength)) {\r\n return m;\r\n }\r\n } while (m);\r\n return null;\r\n };\r\n return Searcher;\r\n}());\r\nexport { Searcher };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Position } from '../../core/position.js';\r\nimport { Range } from '../../core/range.js';\r\nimport { FindMatch } from '../../model.js';\r\nimport { SENTINEL, TreeNode, fixInsert, leftest, rbDelete, righttest, updateTreeMetadata } from './rbTreeBase.js';\r\nimport { Searcher, createFindMatch, isValidMatch } from '../textModelSearch.js';\r\n// const lfRegex = new RegExp(/\\r\\n|\\r|\\n/g);\r\nexport var AverageBufferSize = 65535;\r\nexport function createUintArray(arr) {\r\n var r;\r\n if (arr[arr.length - 1] < 65536) {\r\n r = new Uint16Array(arr.length);\r\n }\r\n else {\r\n r = new Uint32Array(arr.length);\r\n }\r\n r.set(arr, 0);\r\n return r;\r\n}\r\nvar LineStarts = /** @class */ (function () {\r\n function LineStarts(lineStarts, cr, lf, crlf, isBasicASCII) {\r\n this.lineStarts = lineStarts;\r\n this.cr = cr;\r\n this.lf = lf;\r\n this.crlf = crlf;\r\n this.isBasicASCII = isBasicASCII;\r\n }\r\n return LineStarts;\r\n}());\r\nexport { LineStarts };\r\nexport function createLineStartsFast(str, readonly) {\r\n if (readonly === void 0) { readonly = true; }\r\n var r = [0], rLength = 1;\r\n for (var i = 0, len = str.length; i < len; i++) {\r\n var chr = str.charCodeAt(i);\r\n if (chr === 13 /* CarriageReturn */) {\r\n if (i + 1 < len && str.charCodeAt(i + 1) === 10 /* LineFeed */) {\r\n // \\r\\n... case\r\n r[rLength++] = i + 2;\r\n i++; // skip \\n\r\n }\r\n else {\r\n // \\r... case\r\n r[rLength++] = i + 1;\r\n }\r\n }\r\n else if (chr === 10 /* LineFeed */) {\r\n r[rLength++] = i + 1;\r\n }\r\n }\r\n if (readonly) {\r\n return createUintArray(r);\r\n }\r\n else {\r\n return r;\r\n }\r\n}\r\nexport function createLineStarts(r, str) {\r\n r.length = 0;\r\n r[0] = 0;\r\n var rLength = 1;\r\n var cr = 0, lf = 0, crlf = 0;\r\n var isBasicASCII = true;\r\n for (var i = 0, len = str.length; i < len; i++) {\r\n var chr = str.charCodeAt(i);\r\n if (chr === 13 /* CarriageReturn */) {\r\n if (i + 1 < len && str.charCodeAt(i + 1) === 10 /* LineFeed */) {\r\n // \\r\\n... case\r\n crlf++;\r\n r[rLength++] = i + 2;\r\n i++; // skip \\n\r\n }\r\n else {\r\n cr++;\r\n // \\r... case\r\n r[rLength++] = i + 1;\r\n }\r\n }\r\n else if (chr === 10 /* LineFeed */) {\r\n lf++;\r\n r[rLength++] = i + 1;\r\n }\r\n else {\r\n if (isBasicASCII) {\r\n if (chr !== 9 /* Tab */ && (chr < 32 || chr > 126)) {\r\n isBasicASCII = false;\r\n }\r\n }\r\n }\r\n }\r\n var result = new LineStarts(createUintArray(r), cr, lf, crlf, isBasicASCII);\r\n r.length = 0;\r\n return result;\r\n}\r\nvar Piece = /** @class */ (function () {\r\n function Piece(bufferIndex, start, end, lineFeedCnt, length) {\r\n this.bufferIndex = bufferIndex;\r\n this.start = start;\r\n this.end = end;\r\n this.lineFeedCnt = lineFeedCnt;\r\n this.length = length;\r\n }\r\n return Piece;\r\n}());\r\nexport { Piece };\r\nvar StringBuffer = /** @class */ (function () {\r\n function StringBuffer(buffer, lineStarts) {\r\n this.buffer = buffer;\r\n this.lineStarts = lineStarts;\r\n }\r\n return StringBuffer;\r\n}());\r\nexport { StringBuffer };\r\nvar PieceTreeSearchCache = /** @class */ (function () {\r\n function PieceTreeSearchCache(limit) {\r\n this._limit = limit;\r\n this._cache = [];\r\n }\r\n PieceTreeSearchCache.prototype.get = function (offset) {\r\n for (var i = this._cache.length - 1; i >= 0; i--) {\r\n var nodePos = this._cache[i];\r\n if (nodePos.nodeStartOffset <= offset && nodePos.nodeStartOffset + nodePos.node.piece.length >= offset) {\r\n return nodePos;\r\n }\r\n }\r\n return null;\r\n };\r\n PieceTreeSearchCache.prototype.get2 = function (lineNumber) {\r\n for (var i = this._cache.length - 1; i >= 0; i--) {\r\n var nodePos = this._cache[i];\r\n if (nodePos.nodeStartLineNumber && nodePos.nodeStartLineNumber < lineNumber && nodePos.nodeStartLineNumber + nodePos.node.piece.lineFeedCnt >= lineNumber) {\r\n return nodePos;\r\n }\r\n }\r\n return null;\r\n };\r\n PieceTreeSearchCache.prototype.set = function (nodePosition) {\r\n if (this._cache.length >= this._limit) {\r\n this._cache.shift();\r\n }\r\n this._cache.push(nodePosition);\r\n };\r\n PieceTreeSearchCache.prototype.valdiate = function (offset) {\r\n var hasInvalidVal = false;\r\n var tmp = this._cache;\r\n for (var i = 0; i < tmp.length; i++) {\r\n var nodePos = tmp[i];\r\n if (nodePos.node.parent === null || nodePos.nodeStartOffset >= offset) {\r\n tmp[i] = null;\r\n hasInvalidVal = true;\r\n continue;\r\n }\r\n }\r\n if (hasInvalidVal) {\r\n var newArr = [];\r\n for (var _i = 0, tmp_1 = tmp; _i < tmp_1.length; _i++) {\r\n var entry = tmp_1[_i];\r\n if (entry !== null) {\r\n newArr.push(entry);\r\n }\r\n }\r\n this._cache = newArr;\r\n }\r\n };\r\n return PieceTreeSearchCache;\r\n}());\r\nvar PieceTreeBase = /** @class */ (function () {\r\n function PieceTreeBase(chunks, eol, eolNormalized) {\r\n this.create(chunks, eol, eolNormalized);\r\n }\r\n PieceTreeBase.prototype.create = function (chunks, eol, eolNormalized) {\r\n this._buffers = [\r\n new StringBuffer('', [0])\r\n ];\r\n this._lastChangeBufferPos = { line: 0, column: 0 };\r\n this.root = SENTINEL;\r\n this._lineCnt = 1;\r\n this._length = 0;\r\n this._EOL = eol;\r\n this._EOLLength = eol.length;\r\n this._EOLNormalized = eolNormalized;\r\n var lastNode = null;\r\n for (var i = 0, len = chunks.length; i < len; i++) {\r\n if (chunks[i].buffer.length > 0) {\r\n if (!chunks[i].lineStarts) {\r\n chunks[i].lineStarts = createLineStartsFast(chunks[i].buffer);\r\n }\r\n var piece = new Piece(i + 1, { line: 0, column: 0 }, { line: chunks[i].lineStarts.length - 1, column: chunks[i].buffer.length - chunks[i].lineStarts[chunks[i].lineStarts.length - 1] }, chunks[i].lineStarts.length - 1, chunks[i].buffer.length);\r\n this._buffers.push(chunks[i]);\r\n lastNode = this.rbInsertRight(lastNode, piece);\r\n }\r\n }\r\n this._searchCache = new PieceTreeSearchCache(1);\r\n this._lastVisitedLine = { lineNumber: 0, value: '' };\r\n this.computeBufferMetadata();\r\n };\r\n PieceTreeBase.prototype.normalizeEOL = function (eol) {\r\n var _this = this;\r\n var averageBufferSize = AverageBufferSize;\r\n var min = averageBufferSize - Math.floor(averageBufferSize / 3);\r\n var max = min * 2;\r\n var tempChunk = '';\r\n var tempChunkLen = 0;\r\n var chunks = [];\r\n this.iterate(this.root, function (node) {\r\n var str = _this.getNodeContent(node);\r\n var len = str.length;\r\n if (tempChunkLen <= min || tempChunkLen + len < max) {\r\n tempChunk += str;\r\n tempChunkLen += len;\r\n return true;\r\n }\r\n // flush anyways\r\n var text = tempChunk.replace(/\\r\\n|\\r|\\n/g, eol);\r\n chunks.push(new StringBuffer(text, createLineStartsFast(text)));\r\n tempChunk = str;\r\n tempChunkLen = len;\r\n return true;\r\n });\r\n if (tempChunkLen > 0) {\r\n var text = tempChunk.replace(/\\r\\n|\\r|\\n/g, eol);\r\n chunks.push(new StringBuffer(text, createLineStartsFast(text)));\r\n }\r\n this.create(chunks, eol, true);\r\n };\r\n // #region Buffer API\r\n PieceTreeBase.prototype.getEOL = function () {\r\n return this._EOL;\r\n };\r\n PieceTreeBase.prototype.setEOL = function (newEOL) {\r\n this._EOL = newEOL;\r\n this._EOLLength = this._EOL.length;\r\n this.normalizeEOL(newEOL);\r\n };\r\n PieceTreeBase.prototype.getOffsetAt = function (lineNumber, column) {\r\n var leftLen = 0; // inorder\r\n var x = this.root;\r\n while (x !== SENTINEL) {\r\n if (x.left !== SENTINEL && x.lf_left + 1 >= lineNumber) {\r\n x = x.left;\r\n }\r\n else if (x.lf_left + x.piece.lineFeedCnt + 1 >= lineNumber) {\r\n leftLen += x.size_left;\r\n // lineNumber >= 2\r\n var accumualtedValInCurrentIndex = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\r\n return leftLen += accumualtedValInCurrentIndex + column - 1;\r\n }\r\n else {\r\n lineNumber -= x.lf_left + x.piece.lineFeedCnt;\r\n leftLen += x.size_left + x.piece.length;\r\n x = x.right;\r\n }\r\n }\r\n return leftLen;\r\n };\r\n PieceTreeBase.prototype.getPositionAt = function (offset) {\r\n offset = Math.floor(offset);\r\n offset = Math.max(0, offset);\r\n var x = this.root;\r\n var lfCnt = 0;\r\n var originalOffset = offset;\r\n while (x !== SENTINEL) {\r\n if (x.size_left !== 0 && x.size_left >= offset) {\r\n x = x.left;\r\n }\r\n else if (x.size_left + x.piece.length >= offset) {\r\n var out = this.getIndexOf(x, offset - x.size_left);\r\n lfCnt += x.lf_left + out.index;\r\n if (out.index === 0) {\r\n var lineStartOffset = this.getOffsetAt(lfCnt + 1, 1);\r\n var column = originalOffset - lineStartOffset;\r\n return new Position(lfCnt + 1, column + 1);\r\n }\r\n return new Position(lfCnt + 1, out.remainder + 1);\r\n }\r\n else {\r\n offset -= x.size_left + x.piece.length;\r\n lfCnt += x.lf_left + x.piece.lineFeedCnt;\r\n if (x.right === SENTINEL) {\r\n // last node\r\n var lineStartOffset = this.getOffsetAt(lfCnt + 1, 1);\r\n var column = originalOffset - offset - lineStartOffset;\r\n return new Position(lfCnt + 1, column + 1);\r\n }\r\n else {\r\n x = x.right;\r\n }\r\n }\r\n }\r\n return new Position(1, 1);\r\n };\r\n PieceTreeBase.prototype.getValueInRange = function (range, eol) {\r\n if (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn) {\r\n return '';\r\n }\r\n var startPosition = this.nodeAt2(range.startLineNumber, range.startColumn);\r\n var endPosition = this.nodeAt2(range.endLineNumber, range.endColumn);\r\n var value = this.getValueInRange2(startPosition, endPosition);\r\n if (eol) {\r\n if (eol !== this._EOL || !this._EOLNormalized) {\r\n return value.replace(/\\r\\n|\\r|\\n/g, eol);\r\n }\r\n if (eol === this.getEOL() && this._EOLNormalized) {\r\n if (eol === '\\r\\n') {\r\n }\r\n return value;\r\n }\r\n return value.replace(/\\r\\n|\\r|\\n/g, eol);\r\n }\r\n return value;\r\n };\r\n PieceTreeBase.prototype.getValueInRange2 = function (startPosition, endPosition) {\r\n if (startPosition.node === endPosition.node) {\r\n var node = startPosition.node;\r\n var buffer_1 = this._buffers[node.piece.bufferIndex].buffer;\r\n var startOffset_1 = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start);\r\n return buffer_1.substring(startOffset_1 + startPosition.remainder, startOffset_1 + endPosition.remainder);\r\n }\r\n var x = startPosition.node;\r\n var buffer = this._buffers[x.piece.bufferIndex].buffer;\r\n var startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\r\n var ret = buffer.substring(startOffset + startPosition.remainder, startOffset + x.piece.length);\r\n x = x.next();\r\n while (x !== SENTINEL) {\r\n var buffer_2 = this._buffers[x.piece.bufferIndex].buffer;\r\n var startOffset_2 = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\r\n if (x === endPosition.node) {\r\n ret += buffer_2.substring(startOffset_2, startOffset_2 + endPosition.remainder);\r\n break;\r\n }\r\n else {\r\n ret += buffer_2.substr(startOffset_2, x.piece.length);\r\n }\r\n x = x.next();\r\n }\r\n return ret;\r\n };\r\n PieceTreeBase.prototype.getLinesContent = function () {\r\n return this.getContentOfSubTree(this.root).split(/\\r\\n|\\r|\\n/);\r\n };\r\n PieceTreeBase.prototype.getLength = function () {\r\n return this._length;\r\n };\r\n PieceTreeBase.prototype.getLineCount = function () {\r\n return this._lineCnt;\r\n };\r\n PieceTreeBase.prototype.getLineContent = function (lineNumber) {\r\n if (this._lastVisitedLine.lineNumber === lineNumber) {\r\n return this._lastVisitedLine.value;\r\n }\r\n this._lastVisitedLine.lineNumber = lineNumber;\r\n if (lineNumber === this._lineCnt) {\r\n this._lastVisitedLine.value = this.getLineRawContent(lineNumber);\r\n }\r\n else if (this._EOLNormalized) {\r\n this._lastVisitedLine.value = this.getLineRawContent(lineNumber, this._EOLLength);\r\n }\r\n else {\r\n this._lastVisitedLine.value = this.getLineRawContent(lineNumber).replace(/(\\r\\n|\\r|\\n)$/, '');\r\n }\r\n return this._lastVisitedLine.value;\r\n };\r\n PieceTreeBase.prototype.getLineCharCode = function (lineNumber, index) {\r\n var nodePos = this.nodeAt2(lineNumber, index + 1);\r\n if (nodePos.remainder === nodePos.node.piece.length) {\r\n // the char we want to fetch is at the head of next node.\r\n var matchingNode = nodePos.node.next();\r\n if (!matchingNode) {\r\n return 0;\r\n }\r\n var buffer = this._buffers[matchingNode.piece.bufferIndex];\r\n var startOffset = this.offsetInBuffer(matchingNode.piece.bufferIndex, matchingNode.piece.start);\r\n return buffer.buffer.charCodeAt(startOffset);\r\n }\r\n else {\r\n var buffer = this._buffers[nodePos.node.piece.bufferIndex];\r\n var startOffset = this.offsetInBuffer(nodePos.node.piece.bufferIndex, nodePos.node.piece.start);\r\n var targetOffset = startOffset + nodePos.remainder;\r\n return buffer.buffer.charCodeAt(targetOffset);\r\n }\r\n };\r\n PieceTreeBase.prototype.getLineLength = function (lineNumber) {\r\n if (lineNumber === this.getLineCount()) {\r\n var startOffset = this.getOffsetAt(lineNumber, 1);\r\n return this.getLength() - startOffset;\r\n }\r\n return this.getOffsetAt(lineNumber + 1, 1) - this.getOffsetAt(lineNumber, 1) - this._EOLLength;\r\n };\r\n PieceTreeBase.prototype.findMatchesInNode = function (node, searcher, startLineNumber, startColumn, startCursor, endCursor, searchData, captureMatches, limitResultCount, resultLen, result) {\r\n var buffer = this._buffers[node.piece.bufferIndex];\r\n var startOffsetInBuffer = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start);\r\n var start = this.offsetInBuffer(node.piece.bufferIndex, startCursor);\r\n var end = this.offsetInBuffer(node.piece.bufferIndex, endCursor);\r\n var m;\r\n // Reset regex to search from the beginning\r\n var ret = { line: 0, column: 0 };\r\n var searchText;\r\n var offsetInBuffer;\r\n if (searcher._wordSeparators) {\r\n searchText = buffer.buffer.substring(start, end);\r\n offsetInBuffer = function (offset) { return offset + start; };\r\n searcher.reset(-1);\r\n }\r\n else {\r\n searchText = buffer.buffer;\r\n offsetInBuffer = function (offset) { return offset; };\r\n searcher.reset(start);\r\n }\r\n do {\r\n m = searcher.next(searchText);\r\n if (m) {\r\n if (offsetInBuffer(m.index) >= end) {\r\n return resultLen;\r\n }\r\n this.positionInBuffer(node, offsetInBuffer(m.index) - startOffsetInBuffer, ret);\r\n var lineFeedCnt = this.getLineFeedCnt(node.piece.bufferIndex, startCursor, ret);\r\n var retStartColumn = ret.line === startCursor.line ? ret.column - startCursor.column + startColumn : ret.column + 1;\r\n var retEndColumn = retStartColumn + m[0].length;\r\n result[resultLen++] = createFindMatch(new Range(startLineNumber + lineFeedCnt, retStartColumn, startLineNumber + lineFeedCnt, retEndColumn), m, captureMatches);\r\n if (offsetInBuffer(m.index) + m[0].length >= end) {\r\n return resultLen;\r\n }\r\n if (resultLen >= limitResultCount) {\r\n return resultLen;\r\n }\r\n }\r\n } while (m);\r\n return resultLen;\r\n };\r\n PieceTreeBase.prototype.findMatchesLineByLine = function (searchRange, searchData, captureMatches, limitResultCount) {\r\n var result = [];\r\n var resultLen = 0;\r\n var searcher = new Searcher(searchData.wordSeparators, searchData.regex);\r\n var startPosition = this.nodeAt2(searchRange.startLineNumber, searchRange.startColumn);\r\n if (startPosition === null) {\r\n return [];\r\n }\r\n var endPosition = this.nodeAt2(searchRange.endLineNumber, searchRange.endColumn);\r\n if (endPosition === null) {\r\n return [];\r\n }\r\n var start = this.positionInBuffer(startPosition.node, startPosition.remainder);\r\n var end = this.positionInBuffer(endPosition.node, endPosition.remainder);\r\n if (startPosition.node === endPosition.node) {\r\n this.findMatchesInNode(startPosition.node, searcher, searchRange.startLineNumber, searchRange.startColumn, start, end, searchData, captureMatches, limitResultCount, resultLen, result);\r\n return result;\r\n }\r\n var startLineNumber = searchRange.startLineNumber;\r\n var currentNode = startPosition.node;\r\n while (currentNode !== endPosition.node) {\r\n var lineBreakCnt = this.getLineFeedCnt(currentNode.piece.bufferIndex, start, currentNode.piece.end);\r\n if (lineBreakCnt >= 1) {\r\n // last line break position\r\n var lineStarts = this._buffers[currentNode.piece.bufferIndex].lineStarts;\r\n var startOffsetInBuffer = this.offsetInBuffer(currentNode.piece.bufferIndex, currentNode.piece.start);\r\n var nextLineStartOffset = lineStarts[start.line + lineBreakCnt];\r\n var startColumn_1 = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn : 1;\r\n resultLen = this.findMatchesInNode(currentNode, searcher, startLineNumber, startColumn_1, start, this.positionInBuffer(currentNode, nextLineStartOffset - startOffsetInBuffer), searchData, captureMatches, limitResultCount, resultLen, result);\r\n if (resultLen >= limitResultCount) {\r\n return result;\r\n }\r\n startLineNumber += lineBreakCnt;\r\n }\r\n var startColumn_2 = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn - 1 : 0;\r\n // search for the remaining content\r\n if (startLineNumber === searchRange.endLineNumber) {\r\n var text = this.getLineContent(startLineNumber).substring(startColumn_2, searchRange.endColumn - 1);\r\n resultLen = this._findMatchesInLine(searchData, searcher, text, searchRange.endLineNumber, startColumn_2, resultLen, result, captureMatches, limitResultCount);\r\n return result;\r\n }\r\n resultLen = this._findMatchesInLine(searchData, searcher, this.getLineContent(startLineNumber).substr(startColumn_2), startLineNumber, startColumn_2, resultLen, result, captureMatches, limitResultCount);\r\n if (resultLen >= limitResultCount) {\r\n return result;\r\n }\r\n startLineNumber++;\r\n startPosition = this.nodeAt2(startLineNumber, 1);\r\n currentNode = startPosition.node;\r\n start = this.positionInBuffer(startPosition.node, startPosition.remainder);\r\n }\r\n if (startLineNumber === searchRange.endLineNumber) {\r\n var startColumn_3 = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn - 1 : 0;\r\n var text = this.getLineContent(startLineNumber).substring(startColumn_3, searchRange.endColumn - 1);\r\n resultLen = this._findMatchesInLine(searchData, searcher, text, searchRange.endLineNumber, startColumn_3, resultLen, result, captureMatches, limitResultCount);\r\n return result;\r\n }\r\n var startColumn = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn : 1;\r\n resultLen = this.findMatchesInNode(endPosition.node, searcher, startLineNumber, startColumn, start, end, searchData, captureMatches, limitResultCount, resultLen, result);\r\n return result;\r\n };\r\n PieceTreeBase.prototype._findMatchesInLine = function (searchData, searcher, text, lineNumber, deltaOffset, resultLen, result, captureMatches, limitResultCount) {\r\n var wordSeparators = searchData.wordSeparators;\r\n if (!captureMatches && searchData.simpleSearch) {\r\n var searchString = searchData.simpleSearch;\r\n var searchStringLen = searchString.length;\r\n var textLength = text.length;\r\n var lastMatchIndex = -searchStringLen;\r\n while ((lastMatchIndex = text.indexOf(searchString, lastMatchIndex + searchStringLen)) !== -1) {\r\n if (!wordSeparators || isValidMatch(wordSeparators, text, textLength, lastMatchIndex, searchStringLen)) {\r\n result[resultLen++] = new FindMatch(new Range(lineNumber, lastMatchIndex + 1 + deltaOffset, lineNumber, lastMatchIndex + 1 + searchStringLen + deltaOffset), null);\r\n if (resultLen >= limitResultCount) {\r\n return resultLen;\r\n }\r\n }\r\n }\r\n return resultLen;\r\n }\r\n var m;\r\n // Reset regex to search from the beginning\r\n searcher.reset(0);\r\n do {\r\n m = searcher.next(text);\r\n if (m) {\r\n result[resultLen++] = createFindMatch(new Range(lineNumber, m.index + 1 + deltaOffset, lineNumber, m.index + 1 + m[0].length + deltaOffset), m, captureMatches);\r\n if (resultLen >= limitResultCount) {\r\n return resultLen;\r\n }\r\n }\r\n } while (m);\r\n return resultLen;\r\n };\r\n // #endregion\r\n // #region Piece Table\r\n PieceTreeBase.prototype.insert = function (offset, value, eolNormalized) {\r\n if (eolNormalized === void 0) { eolNormalized = false; }\r\n this._EOLNormalized = this._EOLNormalized && eolNormalized;\r\n this._lastVisitedLine.lineNumber = 0;\r\n this._lastVisitedLine.value = '';\r\n if (this.root !== SENTINEL) {\r\n var _a = this.nodeAt(offset), node = _a.node, remainder = _a.remainder, nodeStartOffset = _a.nodeStartOffset;\r\n var piece = node.piece;\r\n var bufferIndex = piece.bufferIndex;\r\n var insertPosInBuffer = this.positionInBuffer(node, remainder);\r\n if (node.piece.bufferIndex === 0 &&\r\n piece.end.line === this._lastChangeBufferPos.line &&\r\n piece.end.column === this._lastChangeBufferPos.column &&\r\n (nodeStartOffset + piece.length === offset) &&\r\n value.length < AverageBufferSize) {\r\n // changed buffer\r\n this.appendToNode(node, value);\r\n this.computeBufferMetadata();\r\n return;\r\n }\r\n if (nodeStartOffset === offset) {\r\n this.insertContentToNodeLeft(value, node);\r\n this._searchCache.valdiate(offset);\r\n }\r\n else if (nodeStartOffset + node.piece.length > offset) {\r\n // we are inserting into the middle of a node.\r\n var nodesToDel = [];\r\n var newRightPiece = new Piece(piece.bufferIndex, insertPosInBuffer, piece.end, this.getLineFeedCnt(piece.bufferIndex, insertPosInBuffer, piece.end), this.offsetInBuffer(bufferIndex, piece.end) - this.offsetInBuffer(bufferIndex, insertPosInBuffer));\r\n if (this.shouldCheckCRLF() && this.endWithCR(value)) {\r\n var headOfRight = this.nodeCharCodeAt(node, remainder);\r\n if (headOfRight === 10 /** \\n */) {\r\n var newStart = { line: newRightPiece.start.line + 1, column: 0 };\r\n newRightPiece = new Piece(newRightPiece.bufferIndex, newStart, newRightPiece.end, this.getLineFeedCnt(newRightPiece.bufferIndex, newStart, newRightPiece.end), newRightPiece.length - 1);\r\n value += '\\n';\r\n }\r\n }\r\n // reuse node for content before insertion point.\r\n if (this.shouldCheckCRLF() && this.startWithLF(value)) {\r\n var tailOfLeft = this.nodeCharCodeAt(node, remainder - 1);\r\n if (tailOfLeft === 13 /** \\r */) {\r\n var previousPos = this.positionInBuffer(node, remainder - 1);\r\n this.deleteNodeTail(node, previousPos);\r\n value = '\\r' + value;\r\n if (node.piece.length === 0) {\r\n nodesToDel.push(node);\r\n }\r\n }\r\n else {\r\n this.deleteNodeTail(node, insertPosInBuffer);\r\n }\r\n }\r\n else {\r\n this.deleteNodeTail(node, insertPosInBuffer);\r\n }\r\n var newPieces = this.createNewPieces(value);\r\n if (newRightPiece.length > 0) {\r\n this.rbInsertRight(node, newRightPiece);\r\n }\r\n var tmpNode = node;\r\n for (var k = 0; k < newPieces.length; k++) {\r\n tmpNode = this.rbInsertRight(tmpNode, newPieces[k]);\r\n }\r\n this.deleteNodes(nodesToDel);\r\n }\r\n else {\r\n this.insertContentToNodeRight(value, node);\r\n }\r\n }\r\n else {\r\n // insert new node\r\n var pieces = this.createNewPieces(value);\r\n var node = this.rbInsertLeft(null, pieces[0]);\r\n for (var k = 1; k < pieces.length; k++) {\r\n node = this.rbInsertRight(node, pieces[k]);\r\n }\r\n }\r\n // todo, this is too brutal. Total line feed count should be updated the same way as lf_left.\r\n this.computeBufferMetadata();\r\n };\r\n PieceTreeBase.prototype.delete = function (offset, cnt) {\r\n this._lastVisitedLine.lineNumber = 0;\r\n this._lastVisitedLine.value = '';\r\n if (cnt <= 0 || this.root === SENTINEL) {\r\n return;\r\n }\r\n var startPosition = this.nodeAt(offset);\r\n var endPosition = this.nodeAt(offset + cnt);\r\n var startNode = startPosition.node;\r\n var endNode = endPosition.node;\r\n if (startNode === endNode) {\r\n var startSplitPosInBuffer_1 = this.positionInBuffer(startNode, startPosition.remainder);\r\n var endSplitPosInBuffer_1 = this.positionInBuffer(startNode, endPosition.remainder);\r\n if (startPosition.nodeStartOffset === offset) {\r\n if (cnt === startNode.piece.length) { // delete node\r\n var next = startNode.next();\r\n rbDelete(this, startNode);\r\n this.validateCRLFWithPrevNode(next);\r\n this.computeBufferMetadata();\r\n return;\r\n }\r\n this.deleteNodeHead(startNode, endSplitPosInBuffer_1);\r\n this._searchCache.valdiate(offset);\r\n this.validateCRLFWithPrevNode(startNode);\r\n this.computeBufferMetadata();\r\n return;\r\n }\r\n if (startPosition.nodeStartOffset + startNode.piece.length === offset + cnt) {\r\n this.deleteNodeTail(startNode, startSplitPosInBuffer_1);\r\n this.validateCRLFWithNextNode(startNode);\r\n this.computeBufferMetadata();\r\n return;\r\n }\r\n // delete content in the middle, this node will be splitted to nodes\r\n this.shrinkNode(startNode, startSplitPosInBuffer_1, endSplitPosInBuffer_1);\r\n this.computeBufferMetadata();\r\n return;\r\n }\r\n var nodesToDel = [];\r\n var startSplitPosInBuffer = this.positionInBuffer(startNode, startPosition.remainder);\r\n this.deleteNodeTail(startNode, startSplitPosInBuffer);\r\n this._searchCache.valdiate(offset);\r\n if (startNode.piece.length === 0) {\r\n nodesToDel.push(startNode);\r\n }\r\n // update last touched node\r\n var endSplitPosInBuffer = this.positionInBuffer(endNode, endPosition.remainder);\r\n this.deleteNodeHead(endNode, endSplitPosInBuffer);\r\n if (endNode.piece.length === 0) {\r\n nodesToDel.push(endNode);\r\n }\r\n // delete nodes in between\r\n var secondNode = startNode.next();\r\n for (var node = secondNode; node !== SENTINEL && node !== endNode; node = node.next()) {\r\n nodesToDel.push(node);\r\n }\r\n var prev = startNode.piece.length === 0 ? startNode.prev() : startNode;\r\n this.deleteNodes(nodesToDel);\r\n this.validateCRLFWithNextNode(prev);\r\n this.computeBufferMetadata();\r\n };\r\n PieceTreeBase.prototype.insertContentToNodeLeft = function (value, node) {\r\n // we are inserting content to the beginning of node\r\n var nodesToDel = [];\r\n if (this.shouldCheckCRLF() && this.endWithCR(value) && this.startWithLF(node)) {\r\n // move `\\n` to new node.\r\n var piece = node.piece;\r\n var newStart = { line: piece.start.line + 1, column: 0 };\r\n var nPiece = new Piece(piece.bufferIndex, newStart, piece.end, this.getLineFeedCnt(piece.bufferIndex, newStart, piece.end), piece.length - 1);\r\n node.piece = nPiece;\r\n value += '\\n';\r\n updateTreeMetadata(this, node, -1, -1);\r\n if (node.piece.length === 0) {\r\n nodesToDel.push(node);\r\n }\r\n }\r\n var newPieces = this.createNewPieces(value);\r\n var newNode = this.rbInsertLeft(node, newPieces[newPieces.length - 1]);\r\n for (var k = newPieces.length - 2; k >= 0; k--) {\r\n newNode = this.rbInsertLeft(newNode, newPieces[k]);\r\n }\r\n this.validateCRLFWithPrevNode(newNode);\r\n this.deleteNodes(nodesToDel);\r\n };\r\n PieceTreeBase.prototype.insertContentToNodeRight = function (value, node) {\r\n // we are inserting to the right of this node.\r\n if (this.adjustCarriageReturnFromNext(value, node)) {\r\n // move \\n to the new node.\r\n value += '\\n';\r\n }\r\n var newPieces = this.createNewPieces(value);\r\n var newNode = this.rbInsertRight(node, newPieces[0]);\r\n var tmpNode = newNode;\r\n for (var k = 1; k < newPieces.length; k++) {\r\n tmpNode = this.rbInsertRight(tmpNode, newPieces[k]);\r\n }\r\n this.validateCRLFWithPrevNode(newNode);\r\n };\r\n PieceTreeBase.prototype.positionInBuffer = function (node, remainder, ret) {\r\n var piece = node.piece;\r\n var bufferIndex = node.piece.bufferIndex;\r\n var lineStarts = this._buffers[bufferIndex].lineStarts;\r\n var startOffset = lineStarts[piece.start.line] + piece.start.column;\r\n var offset = startOffset + remainder;\r\n // binary search offset between startOffset and endOffset\r\n var low = piece.start.line;\r\n var high = piece.end.line;\r\n var mid = 0;\r\n var midStop = 0;\r\n var midStart = 0;\r\n while (low <= high) {\r\n mid = low + ((high - low) / 2) | 0;\r\n midStart = lineStarts[mid];\r\n if (mid === high) {\r\n break;\r\n }\r\n midStop = lineStarts[mid + 1];\r\n if (offset < midStart) {\r\n high = mid - 1;\r\n }\r\n else if (offset >= midStop) {\r\n low = mid + 1;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n if (ret) {\r\n ret.line = mid;\r\n ret.column = offset - midStart;\r\n return null;\r\n }\r\n return {\r\n line: mid,\r\n column: offset - midStart\r\n };\r\n };\r\n PieceTreeBase.prototype.getLineFeedCnt = function (bufferIndex, start, end) {\r\n // we don't need to worry about start: abc\\r|\\n, or abc|\\r, or abc|\\n, or abc|\\r\\n doesn't change the fact that, there is one line break after start.\r\n // now let's take care of end: abc\\r|\\n, if end is in between \\r and \\n, we need to add line feed count by 1\r\n if (end.column === 0) {\r\n return end.line - start.line;\r\n }\r\n var lineStarts = this._buffers[bufferIndex].lineStarts;\r\n if (end.line === lineStarts.length - 1) { // it means, there is no \\n after end, otherwise, there will be one more lineStart.\r\n return end.line - start.line;\r\n }\r\n var nextLineStartOffset = lineStarts[end.line + 1];\r\n var endOffset = lineStarts[end.line] + end.column;\r\n if (nextLineStartOffset > endOffset + 1) { // there are more than 1 character after end, which means it can't be \\n\r\n return end.line - start.line;\r\n }\r\n // endOffset + 1 === nextLineStartOffset\r\n // character at endOffset is \\n, so we check the character before first\r\n // if character at endOffset is \\r, end.column is 0 and we can't get here.\r\n var previousCharOffset = endOffset - 1; // end.column > 0 so it's okay.\r\n var buffer = this._buffers[bufferIndex].buffer;\r\n if (buffer.charCodeAt(previousCharOffset) === 13) {\r\n return end.line - start.line + 1;\r\n }\r\n else {\r\n return end.line - start.line;\r\n }\r\n };\r\n PieceTreeBase.prototype.offsetInBuffer = function (bufferIndex, cursor) {\r\n var lineStarts = this._buffers[bufferIndex].lineStarts;\r\n return lineStarts[cursor.line] + cursor.column;\r\n };\r\n PieceTreeBase.prototype.deleteNodes = function (nodes) {\r\n for (var i = 0; i < nodes.length; i++) {\r\n rbDelete(this, nodes[i]);\r\n }\r\n };\r\n PieceTreeBase.prototype.createNewPieces = function (text) {\r\n if (text.length > AverageBufferSize) {\r\n // the content is large, operations like substring, charCode becomes slow\r\n // so here we split it into smaller chunks, just like what we did for CR/LF normalization\r\n var newPieces = [];\r\n while (text.length > AverageBufferSize) {\r\n var lastChar = text.charCodeAt(AverageBufferSize - 1);\r\n var splitText = void 0;\r\n if (lastChar === 13 /* CarriageReturn */ || (lastChar >= 0xD800 && lastChar <= 0xDBFF)) {\r\n // last character is \\r or a high surrogate => keep it back\r\n splitText = text.substring(0, AverageBufferSize - 1);\r\n text = text.substring(AverageBufferSize - 1);\r\n }\r\n else {\r\n splitText = text.substring(0, AverageBufferSize);\r\n text = text.substring(AverageBufferSize);\r\n }\r\n var lineStarts_1 = createLineStartsFast(splitText);\r\n newPieces.push(new Piece(this._buffers.length, /* buffer index */ { line: 0, column: 0 }, { line: lineStarts_1.length - 1, column: splitText.length - lineStarts_1[lineStarts_1.length - 1] }, lineStarts_1.length - 1, splitText.length));\r\n this._buffers.push(new StringBuffer(splitText, lineStarts_1));\r\n }\r\n var lineStarts_2 = createLineStartsFast(text);\r\n newPieces.push(new Piece(this._buffers.length, /* buffer index */ { line: 0, column: 0 }, { line: lineStarts_2.length - 1, column: text.length - lineStarts_2[lineStarts_2.length - 1] }, lineStarts_2.length - 1, text.length));\r\n this._buffers.push(new StringBuffer(text, lineStarts_2));\r\n return newPieces;\r\n }\r\n var startOffset = this._buffers[0].buffer.length;\r\n var lineStarts = createLineStartsFast(text, false);\r\n var start = this._lastChangeBufferPos;\r\n if (this._buffers[0].lineStarts[this._buffers[0].lineStarts.length - 1] === startOffset\r\n && startOffset !== 0\r\n && this.startWithLF(text)\r\n && this.endWithCR(this._buffers[0].buffer) // todo, we can check this._lastChangeBufferPos's column as it's the last one\r\n ) {\r\n this._lastChangeBufferPos = { line: this._lastChangeBufferPos.line, column: this._lastChangeBufferPos.column + 1 };\r\n start = this._lastChangeBufferPos;\r\n for (var i = 0; i < lineStarts.length; i++) {\r\n lineStarts[i] += startOffset + 1;\r\n }\r\n this._buffers[0].lineStarts = this._buffers[0].lineStarts.concat(lineStarts.slice(1));\r\n this._buffers[0].buffer += '_' + text;\r\n startOffset += 1;\r\n }\r\n else {\r\n if (startOffset !== 0) {\r\n for (var i = 0; i < lineStarts.length; i++) {\r\n lineStarts[i] += startOffset;\r\n }\r\n }\r\n this._buffers[0].lineStarts = this._buffers[0].lineStarts.concat(lineStarts.slice(1));\r\n this._buffers[0].buffer += text;\r\n }\r\n var endOffset = this._buffers[0].buffer.length;\r\n var endIndex = this._buffers[0].lineStarts.length - 1;\r\n var endColumn = endOffset - this._buffers[0].lineStarts[endIndex];\r\n var endPos = { line: endIndex, column: endColumn };\r\n var newPiece = new Piece(0, /** todo@peng */ start, endPos, this.getLineFeedCnt(0, start, endPos), endOffset - startOffset);\r\n this._lastChangeBufferPos = endPos;\r\n return [newPiece];\r\n };\r\n PieceTreeBase.prototype.getLineRawContent = function (lineNumber, endOffset) {\r\n if (endOffset === void 0) { endOffset = 0; }\r\n var x = this.root;\r\n var ret = '';\r\n var cache = this._searchCache.get2(lineNumber);\r\n if (cache) {\r\n x = cache.node;\r\n var prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - cache.nodeStartLineNumber - 1);\r\n var buffer = this._buffers[x.piece.bufferIndex].buffer;\r\n var startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\r\n if (cache.nodeStartLineNumber + x.piece.lineFeedCnt === lineNumber) {\r\n ret = buffer.substring(startOffset + prevAccumualtedValue, startOffset + x.piece.length);\r\n }\r\n else {\r\n var accumualtedValue = this.getAccumulatedValue(x, lineNumber - cache.nodeStartLineNumber);\r\n return buffer.substring(startOffset + prevAccumualtedValue, startOffset + accumualtedValue - endOffset);\r\n }\r\n }\r\n else {\r\n var nodeStartOffset = 0;\r\n var originalLineNumber = lineNumber;\r\n while (x !== SENTINEL) {\r\n if (x.left !== SENTINEL && x.lf_left >= lineNumber - 1) {\r\n x = x.left;\r\n }\r\n else if (x.lf_left + x.piece.lineFeedCnt > lineNumber - 1) {\r\n var prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\r\n var accumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 1);\r\n var buffer = this._buffers[x.piece.bufferIndex].buffer;\r\n var startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\r\n nodeStartOffset += x.size_left;\r\n this._searchCache.set({\r\n node: x,\r\n nodeStartOffset: nodeStartOffset,\r\n nodeStartLineNumber: originalLineNumber - (lineNumber - 1 - x.lf_left)\r\n });\r\n return buffer.substring(startOffset + prevAccumualtedValue, startOffset + accumualtedValue - endOffset);\r\n }\r\n else if (x.lf_left + x.piece.lineFeedCnt === lineNumber - 1) {\r\n var prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\r\n var buffer = this._buffers[x.piece.bufferIndex].buffer;\r\n var startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\r\n ret = buffer.substring(startOffset + prevAccumualtedValue, startOffset + x.piece.length);\r\n break;\r\n }\r\n else {\r\n lineNumber -= x.lf_left + x.piece.lineFeedCnt;\r\n nodeStartOffset += x.size_left + x.piece.length;\r\n x = x.right;\r\n }\r\n }\r\n }\r\n // search in order, to find the node contains end column\r\n x = x.next();\r\n while (x !== SENTINEL) {\r\n var buffer = this._buffers[x.piece.bufferIndex].buffer;\r\n if (x.piece.lineFeedCnt > 0) {\r\n var accumualtedValue = this.getAccumulatedValue(x, 0);\r\n var startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\r\n ret += buffer.substring(startOffset, startOffset + accumualtedValue - endOffset);\r\n return ret;\r\n }\r\n else {\r\n var startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\r\n ret += buffer.substr(startOffset, x.piece.length);\r\n }\r\n x = x.next();\r\n }\r\n return ret;\r\n };\r\n PieceTreeBase.prototype.computeBufferMetadata = function () {\r\n var x = this.root;\r\n var lfCnt = 1;\r\n var len = 0;\r\n while (x !== SENTINEL) {\r\n lfCnt += x.lf_left + x.piece.lineFeedCnt;\r\n len += x.size_left + x.piece.length;\r\n x = x.right;\r\n }\r\n this._lineCnt = lfCnt;\r\n this._length = len;\r\n this._searchCache.valdiate(this._length);\r\n };\r\n // #region node operations\r\n PieceTreeBase.prototype.getIndexOf = function (node, accumulatedValue) {\r\n var piece = node.piece;\r\n var pos = this.positionInBuffer(node, accumulatedValue);\r\n var lineCnt = pos.line - piece.start.line;\r\n if (this.offsetInBuffer(piece.bufferIndex, piece.end) - this.offsetInBuffer(piece.bufferIndex, piece.start) === accumulatedValue) {\r\n // we are checking the end of this node, so a CRLF check is necessary.\r\n var realLineCnt = this.getLineFeedCnt(node.piece.bufferIndex, piece.start, pos);\r\n if (realLineCnt !== lineCnt) {\r\n // aha yes, CRLF\r\n return { index: realLineCnt, remainder: 0 };\r\n }\r\n }\r\n return { index: lineCnt, remainder: pos.column };\r\n };\r\n PieceTreeBase.prototype.getAccumulatedValue = function (node, index) {\r\n if (index < 0) {\r\n return 0;\r\n }\r\n var piece = node.piece;\r\n var lineStarts = this._buffers[piece.bufferIndex].lineStarts;\r\n var expectedLineStartIndex = piece.start.line + index + 1;\r\n if (expectedLineStartIndex > piece.end.line) {\r\n return lineStarts[piece.end.line] + piece.end.column - lineStarts[piece.start.line] - piece.start.column;\r\n }\r\n else {\r\n return lineStarts[expectedLineStartIndex] - lineStarts[piece.start.line] - piece.start.column;\r\n }\r\n };\r\n PieceTreeBase.prototype.deleteNodeTail = function (node, pos) {\r\n var piece = node.piece;\r\n var originalLFCnt = piece.lineFeedCnt;\r\n var originalEndOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\r\n var newEnd = pos;\r\n var newEndOffset = this.offsetInBuffer(piece.bufferIndex, newEnd);\r\n var newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, piece.start, newEnd);\r\n var lf_delta = newLineFeedCnt - originalLFCnt;\r\n var size_delta = newEndOffset - originalEndOffset;\r\n var newLength = piece.length + size_delta;\r\n node.piece = new Piece(piece.bufferIndex, piece.start, newEnd, newLineFeedCnt, newLength);\r\n updateTreeMetadata(this, node, size_delta, lf_delta);\r\n };\r\n PieceTreeBase.prototype.deleteNodeHead = function (node, pos) {\r\n var piece = node.piece;\r\n var originalLFCnt = piece.lineFeedCnt;\r\n var originalStartOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\r\n var newStart = pos;\r\n var newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, newStart, piece.end);\r\n var newStartOffset = this.offsetInBuffer(piece.bufferIndex, newStart);\r\n var lf_delta = newLineFeedCnt - originalLFCnt;\r\n var size_delta = originalStartOffset - newStartOffset;\r\n var newLength = piece.length + size_delta;\r\n node.piece = new Piece(piece.bufferIndex, newStart, piece.end, newLineFeedCnt, newLength);\r\n updateTreeMetadata(this, node, size_delta, lf_delta);\r\n };\r\n PieceTreeBase.prototype.shrinkNode = function (node, start, end) {\r\n var piece = node.piece;\r\n var originalStartPos = piece.start;\r\n var originalEndPos = piece.end;\r\n // old piece, originalStartPos, start\r\n var oldLength = piece.length;\r\n var oldLFCnt = piece.lineFeedCnt;\r\n var newEnd = start;\r\n var newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, piece.start, newEnd);\r\n var newLength = this.offsetInBuffer(piece.bufferIndex, start) - this.offsetInBuffer(piece.bufferIndex, originalStartPos);\r\n node.piece = new Piece(piece.bufferIndex, piece.start, newEnd, newLineFeedCnt, newLength);\r\n updateTreeMetadata(this, node, newLength - oldLength, newLineFeedCnt - oldLFCnt);\r\n // new right piece, end, originalEndPos\r\n var newPiece = new Piece(piece.bufferIndex, end, originalEndPos, this.getLineFeedCnt(piece.bufferIndex, end, originalEndPos), this.offsetInBuffer(piece.bufferIndex, originalEndPos) - this.offsetInBuffer(piece.bufferIndex, end));\r\n var newNode = this.rbInsertRight(node, newPiece);\r\n this.validateCRLFWithPrevNode(newNode);\r\n };\r\n PieceTreeBase.prototype.appendToNode = function (node, value) {\r\n if (this.adjustCarriageReturnFromNext(value, node)) {\r\n value += '\\n';\r\n }\r\n var hitCRLF = this.shouldCheckCRLF() && this.startWithLF(value) && this.endWithCR(node);\r\n var startOffset = this._buffers[0].buffer.length;\r\n this._buffers[0].buffer += value;\r\n var lineStarts = createLineStartsFast(value, false);\r\n for (var i = 0; i < lineStarts.length; i++) {\r\n lineStarts[i] += startOffset;\r\n }\r\n if (hitCRLF) {\r\n var prevStartOffset = this._buffers[0].lineStarts[this._buffers[0].lineStarts.length - 2];\r\n this._buffers[0].lineStarts.pop();\r\n // _lastChangeBufferPos is already wrong\r\n this._lastChangeBufferPos = { line: this._lastChangeBufferPos.line - 1, column: startOffset - prevStartOffset };\r\n }\r\n this._buffers[0].lineStarts = this._buffers[0].lineStarts.concat(lineStarts.slice(1));\r\n var endIndex = this._buffers[0].lineStarts.length - 1;\r\n var endColumn = this._buffers[0].buffer.length - this._buffers[0].lineStarts[endIndex];\r\n var newEnd = { line: endIndex, column: endColumn };\r\n var newLength = node.piece.length + value.length;\r\n var oldLineFeedCnt = node.piece.lineFeedCnt;\r\n var newLineFeedCnt = this.getLineFeedCnt(0, node.piece.start, newEnd);\r\n var lf_delta = newLineFeedCnt - oldLineFeedCnt;\r\n node.piece = new Piece(node.piece.bufferIndex, node.piece.start, newEnd, newLineFeedCnt, newLength);\r\n this._lastChangeBufferPos = newEnd;\r\n updateTreeMetadata(this, node, value.length, lf_delta);\r\n };\r\n PieceTreeBase.prototype.nodeAt = function (offset) {\r\n var x = this.root;\r\n var cache = this._searchCache.get(offset);\r\n if (cache) {\r\n return {\r\n node: cache.node,\r\n nodeStartOffset: cache.nodeStartOffset,\r\n remainder: offset - cache.nodeStartOffset\r\n };\r\n }\r\n var nodeStartOffset = 0;\r\n while (x !== SENTINEL) {\r\n if (x.size_left > offset) {\r\n x = x.left;\r\n }\r\n else if (x.size_left + x.piece.length >= offset) {\r\n nodeStartOffset += x.size_left;\r\n var ret = {\r\n node: x,\r\n remainder: offset - x.size_left,\r\n nodeStartOffset: nodeStartOffset\r\n };\r\n this._searchCache.set(ret);\r\n return ret;\r\n }\r\n else {\r\n offset -= x.size_left + x.piece.length;\r\n nodeStartOffset += x.size_left + x.piece.length;\r\n x = x.right;\r\n }\r\n }\r\n return null;\r\n };\r\n PieceTreeBase.prototype.nodeAt2 = function (lineNumber, column) {\r\n var x = this.root;\r\n var nodeStartOffset = 0;\r\n while (x !== SENTINEL) {\r\n if (x.left !== SENTINEL && x.lf_left >= lineNumber - 1) {\r\n x = x.left;\r\n }\r\n else if (x.lf_left + x.piece.lineFeedCnt > lineNumber - 1) {\r\n var prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\r\n var accumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 1);\r\n nodeStartOffset += x.size_left;\r\n return {\r\n node: x,\r\n remainder: Math.min(prevAccumualtedValue + column - 1, accumualtedValue),\r\n nodeStartOffset: nodeStartOffset\r\n };\r\n }\r\n else if (x.lf_left + x.piece.lineFeedCnt === lineNumber - 1) {\r\n var prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\r\n if (prevAccumualtedValue + column - 1 <= x.piece.length) {\r\n return {\r\n node: x,\r\n remainder: prevAccumualtedValue + column - 1,\r\n nodeStartOffset: nodeStartOffset\r\n };\r\n }\r\n else {\r\n column -= x.piece.length - prevAccumualtedValue;\r\n break;\r\n }\r\n }\r\n else {\r\n lineNumber -= x.lf_left + x.piece.lineFeedCnt;\r\n nodeStartOffset += x.size_left + x.piece.length;\r\n x = x.right;\r\n }\r\n }\r\n // search in order, to find the node contains position.column\r\n x = x.next();\r\n while (x !== SENTINEL) {\r\n if (x.piece.lineFeedCnt > 0) {\r\n var accumualtedValue = this.getAccumulatedValue(x, 0);\r\n var nodeStartOffset_1 = this.offsetOfNode(x);\r\n return {\r\n node: x,\r\n remainder: Math.min(column - 1, accumualtedValue),\r\n nodeStartOffset: nodeStartOffset_1\r\n };\r\n }\r\n else {\r\n if (x.piece.length >= column - 1) {\r\n var nodeStartOffset_2 = this.offsetOfNode(x);\r\n return {\r\n node: x,\r\n remainder: column - 1,\r\n nodeStartOffset: nodeStartOffset_2\r\n };\r\n }\r\n else {\r\n column -= x.piece.length;\r\n }\r\n }\r\n x = x.next();\r\n }\r\n return null;\r\n };\r\n PieceTreeBase.prototype.nodeCharCodeAt = function (node, offset) {\r\n if (node.piece.lineFeedCnt < 1) {\r\n return -1;\r\n }\r\n var buffer = this._buffers[node.piece.bufferIndex];\r\n var newOffset = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start) + offset;\r\n return buffer.buffer.charCodeAt(newOffset);\r\n };\r\n PieceTreeBase.prototype.offsetOfNode = function (node) {\r\n if (!node) {\r\n return 0;\r\n }\r\n var pos = node.size_left;\r\n while (node !== this.root) {\r\n if (node.parent.right === node) {\r\n pos += node.parent.size_left + node.parent.piece.length;\r\n }\r\n node = node.parent;\r\n }\r\n return pos;\r\n };\r\n // #endregion\r\n // #region CRLF\r\n PieceTreeBase.prototype.shouldCheckCRLF = function () {\r\n return !(this._EOLNormalized && this._EOL === '\\n');\r\n };\r\n PieceTreeBase.prototype.startWithLF = function (val) {\r\n if (typeof val === 'string') {\r\n return val.charCodeAt(0) === 10;\r\n }\r\n if (val === SENTINEL || val.piece.lineFeedCnt === 0) {\r\n return false;\r\n }\r\n var piece = val.piece;\r\n var lineStarts = this._buffers[piece.bufferIndex].lineStarts;\r\n var line = piece.start.line;\r\n var startOffset = lineStarts[line] + piece.start.column;\r\n if (line === lineStarts.length - 1) {\r\n // last line, so there is no line feed at the end of this line\r\n return false;\r\n }\r\n var nextLineOffset = lineStarts[line + 1];\r\n if (nextLineOffset > startOffset + 1) {\r\n return false;\r\n }\r\n return this._buffers[piece.bufferIndex].buffer.charCodeAt(startOffset) === 10;\r\n };\r\n PieceTreeBase.prototype.endWithCR = function (val) {\r\n if (typeof val === 'string') {\r\n return val.charCodeAt(val.length - 1) === 13;\r\n }\r\n if (val === SENTINEL || val.piece.lineFeedCnt === 0) {\r\n return false;\r\n }\r\n return this.nodeCharCodeAt(val, val.piece.length - 1) === 13;\r\n };\r\n PieceTreeBase.prototype.validateCRLFWithPrevNode = function (nextNode) {\r\n if (this.shouldCheckCRLF() && this.startWithLF(nextNode)) {\r\n var node = nextNode.prev();\r\n if (this.endWithCR(node)) {\r\n this.fixCRLF(node, nextNode);\r\n }\r\n }\r\n };\r\n PieceTreeBase.prototype.validateCRLFWithNextNode = function (node) {\r\n if (this.shouldCheckCRLF() && this.endWithCR(node)) {\r\n var nextNode = node.next();\r\n if (this.startWithLF(nextNode)) {\r\n this.fixCRLF(node, nextNode);\r\n }\r\n }\r\n };\r\n PieceTreeBase.prototype.fixCRLF = function (prev, next) {\r\n var nodesToDel = [];\r\n // update node\r\n var lineStarts = this._buffers[prev.piece.bufferIndex].lineStarts;\r\n var newEnd;\r\n if (prev.piece.end.column === 0) {\r\n // it means, last line ends with \\r, not \\r\\n\r\n newEnd = { line: prev.piece.end.line - 1, column: lineStarts[prev.piece.end.line] - lineStarts[prev.piece.end.line - 1] - 1 };\r\n }\r\n else {\r\n // \\r\\n\r\n newEnd = { line: prev.piece.end.line, column: prev.piece.end.column - 1 };\r\n }\r\n var prevNewLength = prev.piece.length - 1;\r\n var prevNewLFCnt = prev.piece.lineFeedCnt - 1;\r\n prev.piece = new Piece(prev.piece.bufferIndex, prev.piece.start, newEnd, prevNewLFCnt, prevNewLength);\r\n updateTreeMetadata(this, prev, -1, -1);\r\n if (prev.piece.length === 0) {\r\n nodesToDel.push(prev);\r\n }\r\n // update nextNode\r\n var newStart = { line: next.piece.start.line + 1, column: 0 };\r\n var newLength = next.piece.length - 1;\r\n var newLineFeedCnt = this.getLineFeedCnt(next.piece.bufferIndex, newStart, next.piece.end);\r\n next.piece = new Piece(next.piece.bufferIndex, newStart, next.piece.end, newLineFeedCnt, newLength);\r\n updateTreeMetadata(this, next, -1, -1);\r\n if (next.piece.length === 0) {\r\n nodesToDel.push(next);\r\n }\r\n // create new piece which contains \\r\\n\r\n var pieces = this.createNewPieces('\\r\\n');\r\n this.rbInsertRight(prev, pieces[0]);\r\n // delete empty nodes\r\n for (var i = 0; i < nodesToDel.length; i++) {\r\n rbDelete(this, nodesToDel[i]);\r\n }\r\n };\r\n PieceTreeBase.prototype.adjustCarriageReturnFromNext = function (value, node) {\r\n if (this.shouldCheckCRLF() && this.endWithCR(value)) {\r\n var nextNode = node.next();\r\n if (this.startWithLF(nextNode)) {\r\n // move `\\n` forward\r\n value += '\\n';\r\n if (nextNode.piece.length === 1) {\r\n rbDelete(this, nextNode);\r\n }\r\n else {\r\n var piece = nextNode.piece;\r\n var newStart = { line: piece.start.line + 1, column: 0 };\r\n var newLength = piece.length - 1;\r\n var newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, newStart, piece.end);\r\n nextNode.piece = new Piece(piece.bufferIndex, newStart, piece.end, newLineFeedCnt, newLength);\r\n updateTreeMetadata(this, nextNode, -1, -1);\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n // #endregion\r\n // #endregion\r\n // #region Tree operations\r\n PieceTreeBase.prototype.iterate = function (node, callback) {\r\n if (node === SENTINEL) {\r\n return callback(SENTINEL);\r\n }\r\n var leftRet = this.iterate(node.left, callback);\r\n if (!leftRet) {\r\n return leftRet;\r\n }\r\n return callback(node) && this.iterate(node.right, callback);\r\n };\r\n PieceTreeBase.prototype.getNodeContent = function (node) {\r\n if (node === SENTINEL) {\r\n return '';\r\n }\r\n var buffer = this._buffers[node.piece.bufferIndex];\r\n var currentContent;\r\n var piece = node.piece;\r\n var startOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\r\n var endOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\r\n currentContent = buffer.buffer.substring(startOffset, endOffset);\r\n return currentContent;\r\n };\r\n /**\r\n * node node\r\n * / \\ / \\\r\n * a b <---- a b\r\n * /\r\n * z\r\n */\r\n PieceTreeBase.prototype.rbInsertRight = function (node, p) {\r\n var z = new TreeNode(p, 1 /* Red */);\r\n z.left = SENTINEL;\r\n z.right = SENTINEL;\r\n z.parent = SENTINEL;\r\n z.size_left = 0;\r\n z.lf_left = 0;\r\n var x = this.root;\r\n if (x === SENTINEL) {\r\n this.root = z;\r\n z.color = 0 /* Black */;\r\n }\r\n else if (node.right === SENTINEL) {\r\n node.right = z;\r\n z.parent = node;\r\n }\r\n else {\r\n var nextNode = leftest(node.right);\r\n nextNode.left = z;\r\n z.parent = nextNode;\r\n }\r\n fixInsert(this, z);\r\n return z;\r\n };\r\n /**\r\n * node node\r\n * / \\ / \\\r\n * a b ----> a b\r\n * \\\r\n * z\r\n */\r\n PieceTreeBase.prototype.rbInsertLeft = function (node, p) {\r\n var z = new TreeNode(p, 1 /* Red */);\r\n z.left = SENTINEL;\r\n z.right = SENTINEL;\r\n z.parent = SENTINEL;\r\n z.size_left = 0;\r\n z.lf_left = 0;\r\n if (this.root === SENTINEL) {\r\n this.root = z;\r\n z.color = 0 /* Black */;\r\n }\r\n else if (node.left === SENTINEL) {\r\n node.left = z;\r\n z.parent = node;\r\n }\r\n else {\r\n var prevNode = righttest(node.left); // a\r\n prevNode.right = z;\r\n z.parent = prevNode;\r\n }\r\n fixInsert(this, z);\r\n return z;\r\n };\r\n PieceTreeBase.prototype.getContentOfSubTree = function (node) {\r\n var _this = this;\r\n var str = '';\r\n this.iterate(node, function (node) {\r\n str += _this.getNodeContent(node);\r\n return true;\r\n });\r\n return str;\r\n };\r\n return PieceTreeBase;\r\n}());\r\nexport { PieceTreeBase };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../../base/common/strings.js';\r\nimport { Range } from '../../core/range.js';\r\nimport { ApplyEditsResult } from '../../model.js';\r\nimport { PieceTreeBase } from './pieceTreeBase.js';\r\nvar PieceTreeTextBuffer = /** @class */ (function () {\r\n function PieceTreeTextBuffer(chunks, BOM, eol, containsRTL, isBasicASCII, eolNormalized) {\r\n this._BOM = BOM;\r\n this._mightContainNonBasicASCII = !isBasicASCII;\r\n this._mightContainRTL = containsRTL;\r\n this._pieceTree = new PieceTreeBase(chunks, eol, eolNormalized);\r\n }\r\n PieceTreeTextBuffer.prototype.mightContainRTL = function () {\r\n return this._mightContainRTL;\r\n };\r\n PieceTreeTextBuffer.prototype.mightContainNonBasicASCII = function () {\r\n return this._mightContainNonBasicASCII;\r\n };\r\n PieceTreeTextBuffer.prototype.getBOM = function () {\r\n return this._BOM;\r\n };\r\n PieceTreeTextBuffer.prototype.getEOL = function () {\r\n return this._pieceTree.getEOL();\r\n };\r\n PieceTreeTextBuffer.prototype.getOffsetAt = function (lineNumber, column) {\r\n return this._pieceTree.getOffsetAt(lineNumber, column);\r\n };\r\n PieceTreeTextBuffer.prototype.getPositionAt = function (offset) {\r\n return this._pieceTree.getPositionAt(offset);\r\n };\r\n PieceTreeTextBuffer.prototype.getRangeAt = function (start, length) {\r\n var end = start + length;\r\n var startPosition = this.getPositionAt(start);\r\n var endPosition = this.getPositionAt(end);\r\n return new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column);\r\n };\r\n PieceTreeTextBuffer.prototype.getValueInRange = function (range, eol) {\r\n if (eol === void 0) { eol = 0 /* TextDefined */; }\r\n if (range.isEmpty()) {\r\n return '';\r\n }\r\n var lineEnding = this._getEndOfLine(eol);\r\n return this._pieceTree.getValueInRange(range, lineEnding);\r\n };\r\n PieceTreeTextBuffer.prototype.getValueLengthInRange = function (range, eol) {\r\n if (eol === void 0) { eol = 0 /* TextDefined */; }\r\n if (range.isEmpty()) {\r\n return 0;\r\n }\r\n if (range.startLineNumber === range.endLineNumber) {\r\n return (range.endColumn - range.startColumn);\r\n }\r\n var startOffset = this.getOffsetAt(range.startLineNumber, range.startColumn);\r\n var endOffset = this.getOffsetAt(range.endLineNumber, range.endColumn);\r\n return endOffset - startOffset;\r\n };\r\n PieceTreeTextBuffer.prototype.getCharacterCountInRange = function (range, eol) {\r\n if (eol === void 0) { eol = 0 /* TextDefined */; }\r\n if (this._mightContainNonBasicASCII) {\r\n // we must count by iterating\r\n var result = 0;\r\n var fromLineNumber = range.startLineNumber;\r\n var toLineNumber = range.endLineNumber;\r\n for (var lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\r\n var lineContent = this.getLineContent(lineNumber);\r\n var fromOffset = (lineNumber === fromLineNumber ? range.startColumn - 1 : 0);\r\n var toOffset = (lineNumber === toLineNumber ? range.endColumn - 1 : lineContent.length);\r\n for (var offset = fromOffset; offset < toOffset; offset++) {\r\n if (strings.isHighSurrogate(lineContent.charCodeAt(offset))) {\r\n result = result + 1;\r\n offset = offset + 1;\r\n }\r\n else {\r\n result = result + 1;\r\n }\r\n }\r\n }\r\n result += this._getEndOfLine(eol).length * (toLineNumber - fromLineNumber);\r\n return result;\r\n }\r\n return this.getValueLengthInRange(range, eol);\r\n };\r\n PieceTreeTextBuffer.prototype.getLength = function () {\r\n return this._pieceTree.getLength();\r\n };\r\n PieceTreeTextBuffer.prototype.getLineCount = function () {\r\n return this._pieceTree.getLineCount();\r\n };\r\n PieceTreeTextBuffer.prototype.getLinesContent = function () {\r\n return this._pieceTree.getLinesContent();\r\n };\r\n PieceTreeTextBuffer.prototype.getLineContent = function (lineNumber) {\r\n return this._pieceTree.getLineContent(lineNumber);\r\n };\r\n PieceTreeTextBuffer.prototype.getLineCharCode = function (lineNumber, index) {\r\n return this._pieceTree.getLineCharCode(lineNumber, index);\r\n };\r\n PieceTreeTextBuffer.prototype.getLineLength = function (lineNumber) {\r\n return this._pieceTree.getLineLength(lineNumber);\r\n };\r\n PieceTreeTextBuffer.prototype.getLineFirstNonWhitespaceColumn = function (lineNumber) {\r\n var result = strings.firstNonWhitespaceIndex(this.getLineContent(lineNumber));\r\n if (result === -1) {\r\n return 0;\r\n }\r\n return result + 1;\r\n };\r\n PieceTreeTextBuffer.prototype.getLineLastNonWhitespaceColumn = function (lineNumber) {\r\n var result = strings.lastNonWhitespaceIndex(this.getLineContent(lineNumber));\r\n if (result === -1) {\r\n return 0;\r\n }\r\n return result + 2;\r\n };\r\n PieceTreeTextBuffer.prototype._getEndOfLine = function (eol) {\r\n switch (eol) {\r\n case 1 /* LF */:\r\n return '\\n';\r\n case 2 /* CRLF */:\r\n return '\\r\\n';\r\n case 0 /* TextDefined */:\r\n return this.getEOL();\r\n }\r\n throw new Error('Unknown EOL preference');\r\n };\r\n PieceTreeTextBuffer.prototype.setEOL = function (newEOL) {\r\n this._pieceTree.setEOL(newEOL);\r\n };\r\n PieceTreeTextBuffer.prototype.applyEdits = function (rawOperations, recordTrimAutoWhitespace) {\r\n var mightContainRTL = this._mightContainRTL;\r\n var mightContainNonBasicASCII = this._mightContainNonBasicASCII;\r\n var canReduceOperations = true;\r\n var operations = [];\r\n for (var i = 0; i < rawOperations.length; i++) {\r\n var op = rawOperations[i];\r\n if (canReduceOperations && op._isTracked) {\r\n canReduceOperations = false;\r\n }\r\n var validatedRange = op.range;\r\n if (!mightContainRTL && op.text) {\r\n // check if the new inserted text contains RTL\r\n mightContainRTL = strings.containsRTL(op.text);\r\n }\r\n if (!mightContainNonBasicASCII && op.text) {\r\n mightContainNonBasicASCII = !strings.isBasicASCII(op.text);\r\n }\r\n operations[i] = {\r\n sortIndex: i,\r\n identifier: op.identifier || null,\r\n range: validatedRange,\r\n rangeOffset: this.getOffsetAt(validatedRange.startLineNumber, validatedRange.startColumn),\r\n rangeLength: this.getValueLengthInRange(validatedRange),\r\n lines: op.text ? op.text.split(/\\r\\n|\\r|\\n/) : null,\r\n forceMoveMarkers: Boolean(op.forceMoveMarkers),\r\n isAutoWhitespaceEdit: op.isAutoWhitespaceEdit || false\r\n };\r\n }\r\n // Sort operations ascending\r\n operations.sort(PieceTreeTextBuffer._sortOpsAscending);\r\n var hasTouchingRanges = false;\r\n for (var i = 0, count = operations.length - 1; i < count; i++) {\r\n var rangeEnd = operations[i].range.getEndPosition();\r\n var nextRangeStart = operations[i + 1].range.getStartPosition();\r\n if (nextRangeStart.isBeforeOrEqual(rangeEnd)) {\r\n if (nextRangeStart.isBefore(rangeEnd)) {\r\n // overlapping ranges\r\n throw new Error('Overlapping ranges are not allowed!');\r\n }\r\n hasTouchingRanges = true;\r\n }\r\n }\r\n if (canReduceOperations) {\r\n operations = this._reduceOperations(operations);\r\n }\r\n // Delta encode operations\r\n var reverseRanges = PieceTreeTextBuffer._getInverseEditRanges(operations);\r\n var newTrimAutoWhitespaceCandidates = [];\r\n for (var i = 0; i < operations.length; i++) {\r\n var op = operations[i];\r\n var reverseRange = reverseRanges[i];\r\n if (recordTrimAutoWhitespace && op.isAutoWhitespaceEdit && op.range.isEmpty()) {\r\n // Record already the future line numbers that might be auto whitespace removal candidates on next edit\r\n for (var lineNumber = reverseRange.startLineNumber; lineNumber <= reverseRange.endLineNumber; lineNumber++) {\r\n var currentLineContent = '';\r\n if (lineNumber === reverseRange.startLineNumber) {\r\n currentLineContent = this.getLineContent(op.range.startLineNumber);\r\n if (strings.firstNonWhitespaceIndex(currentLineContent) !== -1) {\r\n continue;\r\n }\r\n }\r\n newTrimAutoWhitespaceCandidates.push({ lineNumber: lineNumber, oldContent: currentLineContent });\r\n }\r\n }\r\n }\r\n var reverseOperations = [];\r\n for (var i = 0; i < operations.length; i++) {\r\n var op = operations[i];\r\n var reverseRange = reverseRanges[i];\r\n reverseOperations[i] = {\r\n sortIndex: op.sortIndex,\r\n identifier: op.identifier,\r\n range: reverseRange,\r\n text: this.getValueInRange(op.range),\r\n forceMoveMarkers: op.forceMoveMarkers\r\n };\r\n }\r\n // Can only sort reverse operations when the order is not significant\r\n if (!hasTouchingRanges) {\r\n reverseOperations.sort(function (a, b) { return a.sortIndex - b.sortIndex; });\r\n }\r\n this._mightContainRTL = mightContainRTL;\r\n this._mightContainNonBasicASCII = mightContainNonBasicASCII;\r\n var contentChanges = this._doApplyEdits(operations);\r\n var trimAutoWhitespaceLineNumbers = null;\r\n if (recordTrimAutoWhitespace && newTrimAutoWhitespaceCandidates.length > 0) {\r\n // sort line numbers auto whitespace removal candidates for next edit descending\r\n newTrimAutoWhitespaceCandidates.sort(function (a, b) { return b.lineNumber - a.lineNumber; });\r\n trimAutoWhitespaceLineNumbers = [];\r\n for (var i = 0, len = newTrimAutoWhitespaceCandidates.length; i < len; i++) {\r\n var lineNumber = newTrimAutoWhitespaceCandidates[i].lineNumber;\r\n if (i > 0 && newTrimAutoWhitespaceCandidates[i - 1].lineNumber === lineNumber) {\r\n // Do not have the same line number twice\r\n continue;\r\n }\r\n var prevContent = newTrimAutoWhitespaceCandidates[i].oldContent;\r\n var lineContent = this.getLineContent(lineNumber);\r\n if (lineContent.length === 0 || lineContent === prevContent || strings.firstNonWhitespaceIndex(lineContent) !== -1) {\r\n continue;\r\n }\r\n trimAutoWhitespaceLineNumbers.push(lineNumber);\r\n }\r\n }\r\n return new ApplyEditsResult(reverseOperations, contentChanges, trimAutoWhitespaceLineNumbers);\r\n };\r\n /**\r\n * Transform operations such that they represent the same logic edit,\r\n * but that they also do not cause OOM crashes.\r\n */\r\n PieceTreeTextBuffer.prototype._reduceOperations = function (operations) {\r\n if (operations.length < 1000) {\r\n // We know from empirical testing that a thousand edits work fine regardless of their shape.\r\n return operations;\r\n }\r\n // At one point, due to how events are emitted and how each operation is handled,\r\n // some operations can trigger a high amount of temporary string allocations,\r\n // that will immediately get edited again.\r\n // e.g. a formatter inserting ridiculous ammounts of \\n on a model with a single line\r\n // Therefore, the strategy is to collapse all the operations into a huge single edit operation\r\n return [this._toSingleEditOperation(operations)];\r\n };\r\n PieceTreeTextBuffer.prototype._toSingleEditOperation = function (operations) {\r\n var forceMoveMarkers = false, firstEditRange = operations[0].range, lastEditRange = operations[operations.length - 1].range, entireEditRange = new Range(firstEditRange.startLineNumber, firstEditRange.startColumn, lastEditRange.endLineNumber, lastEditRange.endColumn), lastEndLineNumber = firstEditRange.startLineNumber, lastEndColumn = firstEditRange.startColumn, result = [];\r\n for (var i = 0, len = operations.length; i < len; i++) {\r\n var operation = operations[i], range = operation.range;\r\n forceMoveMarkers = forceMoveMarkers || operation.forceMoveMarkers;\r\n // (1) -- Push old text\r\n for (var lineNumber = lastEndLineNumber; lineNumber < range.startLineNumber; lineNumber++) {\r\n if (lineNumber === lastEndLineNumber) {\r\n result.push(this.getLineContent(lineNumber).substring(lastEndColumn - 1));\r\n }\r\n else {\r\n result.push('\\n');\r\n result.push(this.getLineContent(lineNumber));\r\n }\r\n }\r\n if (range.startLineNumber === lastEndLineNumber) {\r\n result.push(this.getLineContent(range.startLineNumber).substring(lastEndColumn - 1, range.startColumn - 1));\r\n }\r\n else {\r\n result.push('\\n');\r\n result.push(this.getLineContent(range.startLineNumber).substring(0, range.startColumn - 1));\r\n }\r\n // (2) -- Push new text\r\n if (operation.lines) {\r\n for (var j = 0, lenJ = operation.lines.length; j < lenJ; j++) {\r\n if (j !== 0) {\r\n result.push('\\n');\r\n }\r\n result.push(operation.lines[j]);\r\n }\r\n }\r\n lastEndLineNumber = operation.range.endLineNumber;\r\n lastEndColumn = operation.range.endColumn;\r\n }\r\n return {\r\n sortIndex: 0,\r\n identifier: operations[0].identifier,\r\n range: entireEditRange,\r\n rangeOffset: this.getOffsetAt(entireEditRange.startLineNumber, entireEditRange.startColumn),\r\n rangeLength: this.getValueLengthInRange(entireEditRange, 0 /* TextDefined */),\r\n lines: result.join('').split('\\n'),\r\n forceMoveMarkers: forceMoveMarkers,\r\n isAutoWhitespaceEdit: false\r\n };\r\n };\r\n PieceTreeTextBuffer.prototype._doApplyEdits = function (operations) {\r\n operations.sort(PieceTreeTextBuffer._sortOpsDescending);\r\n var contentChanges = [];\r\n // operations are from bottom to top\r\n for (var i = 0; i < operations.length; i++) {\r\n var op = operations[i];\r\n var startLineNumber = op.range.startLineNumber;\r\n var startColumn = op.range.startColumn;\r\n var endLineNumber = op.range.endLineNumber;\r\n var endColumn = op.range.endColumn;\r\n if (startLineNumber === endLineNumber && startColumn === endColumn && (!op.lines || op.lines.length === 0)) {\r\n // no-op\r\n continue;\r\n }\r\n var deletingLinesCnt = endLineNumber - startLineNumber;\r\n var insertingLinesCnt = (op.lines ? op.lines.length - 1 : 0);\r\n var editingLinesCnt = Math.min(deletingLinesCnt, insertingLinesCnt);\r\n var text = (op.lines ? op.lines.join(this.getEOL()) : '');\r\n if (text) {\r\n // replacement\r\n this._pieceTree.delete(op.rangeOffset, op.rangeLength);\r\n this._pieceTree.insert(op.rangeOffset, text, true);\r\n }\r\n else {\r\n // deletion\r\n this._pieceTree.delete(op.rangeOffset, op.rangeLength);\r\n }\r\n if (editingLinesCnt < insertingLinesCnt) {\r\n var newLinesContent = [];\r\n for (var j = editingLinesCnt + 1; j <= insertingLinesCnt; j++) {\r\n newLinesContent.push(op.lines[j]);\r\n }\r\n newLinesContent[newLinesContent.length - 1] = this.getLineContent(startLineNumber + insertingLinesCnt - 1);\r\n }\r\n var contentChangeRange = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\r\n contentChanges.push({\r\n range: contentChangeRange,\r\n rangeLength: op.rangeLength,\r\n text: text,\r\n rangeOffset: op.rangeOffset,\r\n forceMoveMarkers: op.forceMoveMarkers\r\n });\r\n }\r\n return contentChanges;\r\n };\r\n PieceTreeTextBuffer.prototype.findMatchesLineByLine = function (searchRange, searchData, captureMatches, limitResultCount) {\r\n return this._pieceTree.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);\r\n };\r\n /**\r\n * Assumes `operations` are validated and sorted ascending\r\n */\r\n PieceTreeTextBuffer._getInverseEditRanges = function (operations) {\r\n var result = [];\r\n var prevOpEndLineNumber = 0;\r\n var prevOpEndColumn = 0;\r\n var prevOp = null;\r\n for (var i = 0, len = operations.length; i < len; i++) {\r\n var op = operations[i];\r\n var startLineNumber = void 0;\r\n var startColumn = void 0;\r\n if (prevOp) {\r\n if (prevOp.range.endLineNumber === op.range.startLineNumber) {\r\n startLineNumber = prevOpEndLineNumber;\r\n startColumn = prevOpEndColumn + (op.range.startColumn - prevOp.range.endColumn);\r\n }\r\n else {\r\n startLineNumber = prevOpEndLineNumber + (op.range.startLineNumber - prevOp.range.endLineNumber);\r\n startColumn = op.range.startColumn;\r\n }\r\n }\r\n else {\r\n startLineNumber = op.range.startLineNumber;\r\n startColumn = op.range.startColumn;\r\n }\r\n var resultRange = void 0;\r\n if (op.lines && op.lines.length > 0) {\r\n // the operation inserts something\r\n var lineCount = op.lines.length;\r\n var firstLine = op.lines[0];\r\n var lastLine = op.lines[lineCount - 1];\r\n if (lineCount === 1) {\r\n // single line insert\r\n resultRange = new Range(startLineNumber, startColumn, startLineNumber, startColumn + firstLine.length);\r\n }\r\n else {\r\n // multi line insert\r\n resultRange = new Range(startLineNumber, startColumn, startLineNumber + lineCount - 1, lastLine.length + 1);\r\n }\r\n }\r\n else {\r\n // There is nothing to insert\r\n resultRange = new Range(startLineNumber, startColumn, startLineNumber, startColumn);\r\n }\r\n prevOpEndLineNumber = resultRange.endLineNumber;\r\n prevOpEndColumn = resultRange.endColumn;\r\n result.push(resultRange);\r\n prevOp = op;\r\n }\r\n return result;\r\n };\r\n PieceTreeTextBuffer._sortOpsAscending = function (a, b) {\r\n var r = Range.compareRangesUsingEnds(a.range, b.range);\r\n if (r === 0) {\r\n return a.sortIndex - b.sortIndex;\r\n }\r\n return r;\r\n };\r\n PieceTreeTextBuffer._sortOpsDescending = function (a, b) {\r\n var r = Range.compareRangesUsingEnds(a.range, b.range);\r\n if (r === 0) {\r\n return b.sortIndex - a.sortIndex;\r\n }\r\n return -r;\r\n };\r\n return PieceTreeTextBuffer;\r\n}());\r\nexport { PieceTreeTextBuffer };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../../base/common/strings.js';\r\nimport { StringBuffer, createLineStarts, createLineStartsFast } from './pieceTreeBase.js';\r\nimport { PieceTreeTextBuffer } from './pieceTreeTextBuffer.js';\r\nvar PieceTreeTextBufferFactory = /** @class */ (function () {\r\n function PieceTreeTextBufferFactory(_chunks, _bom, _cr, _lf, _crlf, _containsRTL, _isBasicASCII, _normalizeEOL) {\r\n this._chunks = _chunks;\r\n this._bom = _bom;\r\n this._cr = _cr;\r\n this._lf = _lf;\r\n this._crlf = _crlf;\r\n this._containsRTL = _containsRTL;\r\n this._isBasicASCII = _isBasicASCII;\r\n this._normalizeEOL = _normalizeEOL;\r\n }\r\n PieceTreeTextBufferFactory.prototype._getEOL = function (defaultEOL) {\r\n var totalEOLCount = this._cr + this._lf + this._crlf;\r\n var totalCRCount = this._cr + this._crlf;\r\n if (totalEOLCount === 0) {\r\n // This is an empty file or a file with precisely one line\r\n return (defaultEOL === 1 /* LF */ ? '\\n' : '\\r\\n');\r\n }\r\n if (totalCRCount > totalEOLCount / 2) {\r\n // More than half of the file contains \\r\\n ending lines\r\n return '\\r\\n';\r\n }\r\n // At least one line more ends in \\n\r\n return '\\n';\r\n };\r\n PieceTreeTextBufferFactory.prototype.create = function (defaultEOL) {\r\n var eol = this._getEOL(defaultEOL);\r\n var chunks = this._chunks;\r\n if (this._normalizeEOL &&\r\n ((eol === '\\r\\n' && (this._cr > 0 || this._lf > 0))\r\n || (eol === '\\n' && (this._cr > 0 || this._crlf > 0)))) {\r\n // Normalize pieces\r\n for (var i = 0, len = chunks.length; i < len; i++) {\r\n var str = chunks[i].buffer.replace(/\\r\\n|\\r|\\n/g, eol);\r\n var newLineStart = createLineStartsFast(str);\r\n chunks[i] = new StringBuffer(str, newLineStart);\r\n }\r\n }\r\n return new PieceTreeTextBuffer(chunks, this._bom, eol, this._containsRTL, this._isBasicASCII, this._normalizeEOL);\r\n };\r\n return PieceTreeTextBufferFactory;\r\n}());\r\nexport { PieceTreeTextBufferFactory };\r\nvar PieceTreeTextBufferBuilder = /** @class */ (function () {\r\n function PieceTreeTextBufferBuilder() {\r\n this.chunks = [];\r\n this.BOM = '';\r\n this._hasPreviousChar = false;\r\n this._previousChar = 0;\r\n this._tmpLineStarts = [];\r\n this.cr = 0;\r\n this.lf = 0;\r\n this.crlf = 0;\r\n this.containsRTL = false;\r\n this.isBasicASCII = true;\r\n }\r\n PieceTreeTextBufferBuilder.prototype.acceptChunk = function (chunk) {\r\n if (chunk.length === 0) {\r\n return;\r\n }\r\n if (this.chunks.length === 0) {\r\n if (strings.startsWithUTF8BOM(chunk)) {\r\n this.BOM = strings.UTF8_BOM_CHARACTER;\r\n chunk = chunk.substr(1);\r\n }\r\n }\r\n var lastChar = chunk.charCodeAt(chunk.length - 1);\r\n if (lastChar === 13 /* CarriageReturn */ || (lastChar >= 0xD800 && lastChar <= 0xDBFF)) {\r\n // last character is \\r or a high surrogate => keep it back\r\n this._acceptChunk1(chunk.substr(0, chunk.length - 1), false);\r\n this._hasPreviousChar = true;\r\n this._previousChar = lastChar;\r\n }\r\n else {\r\n this._acceptChunk1(chunk, false);\r\n this._hasPreviousChar = false;\r\n this._previousChar = lastChar;\r\n }\r\n };\r\n PieceTreeTextBufferBuilder.prototype._acceptChunk1 = function (chunk, allowEmptyStrings) {\r\n if (!allowEmptyStrings && chunk.length === 0) {\r\n // Nothing to do\r\n return;\r\n }\r\n if (this._hasPreviousChar) {\r\n this._acceptChunk2(String.fromCharCode(this._previousChar) + chunk);\r\n }\r\n else {\r\n this._acceptChunk2(chunk);\r\n }\r\n };\r\n PieceTreeTextBufferBuilder.prototype._acceptChunk2 = function (chunk) {\r\n var lineStarts = createLineStarts(this._tmpLineStarts, chunk);\r\n this.chunks.push(new StringBuffer(chunk, lineStarts.lineStarts));\r\n this.cr += lineStarts.cr;\r\n this.lf += lineStarts.lf;\r\n this.crlf += lineStarts.crlf;\r\n if (this.isBasicASCII) {\r\n this.isBasicASCII = lineStarts.isBasicASCII;\r\n }\r\n if (!this.isBasicASCII && !this.containsRTL) {\r\n // No need to check if is basic ASCII\r\n this.containsRTL = strings.containsRTL(chunk);\r\n }\r\n };\r\n PieceTreeTextBufferBuilder.prototype.finish = function (normalizeEOL) {\r\n if (normalizeEOL === void 0) { normalizeEOL = true; }\r\n this._finish();\r\n return new PieceTreeTextBufferFactory(this.chunks, this.BOM, this.cr, this.lf, this.crlf, this.containsRTL, this.isBasicASCII, normalizeEOL);\r\n };\r\n PieceTreeTextBufferBuilder.prototype._finish = function () {\r\n if (this.chunks.length === 0) {\r\n this._acceptChunk1('', true);\r\n }\r\n if (this._hasPreviousChar) {\r\n this._hasPreviousChar = false;\r\n // recreate last chunk\r\n var lastChunk = this.chunks[this.chunks.length - 1];\r\n lastChunk.buffer += String.fromCharCode(this._previousChar);\r\n var newLineStarts = createLineStartsFast(lastChunk.buffer);\r\n lastChunk.lineStarts = newLineStarts;\r\n if (this._previousChar === 13 /* CarriageReturn */) {\r\n this.cr++;\r\n }\r\n }\r\n };\r\n return PieceTreeTextBufferBuilder;\r\n}());\r\nexport { PieceTreeTextBufferBuilder };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * An event describing that a model has been reset to a new value.\r\n * @internal\r\n */\r\nvar ModelRawFlush = /** @class */ (function () {\r\n function ModelRawFlush() {\r\n this.changeType = 1 /* Flush */;\r\n }\r\n return ModelRawFlush;\r\n}());\r\nexport { ModelRawFlush };\r\n/**\r\n * An event describing that a line has changed in a model.\r\n * @internal\r\n */\r\nvar ModelRawLineChanged = /** @class */ (function () {\r\n function ModelRawLineChanged(lineNumber, detail) {\r\n this.changeType = 2 /* LineChanged */;\r\n this.lineNumber = lineNumber;\r\n this.detail = detail;\r\n }\r\n return ModelRawLineChanged;\r\n}());\r\nexport { ModelRawLineChanged };\r\n/**\r\n * An event describing that line(s) have been deleted in a model.\r\n * @internal\r\n */\r\nvar ModelRawLinesDeleted = /** @class */ (function () {\r\n function ModelRawLinesDeleted(fromLineNumber, toLineNumber) {\r\n this.changeType = 3 /* LinesDeleted */;\r\n this.fromLineNumber = fromLineNumber;\r\n this.toLineNumber = toLineNumber;\r\n }\r\n return ModelRawLinesDeleted;\r\n}());\r\nexport { ModelRawLinesDeleted };\r\n/**\r\n * An event describing that line(s) have been inserted in a model.\r\n * @internal\r\n */\r\nvar ModelRawLinesInserted = /** @class */ (function () {\r\n function ModelRawLinesInserted(fromLineNumber, toLineNumber, detail) {\r\n this.changeType = 4 /* LinesInserted */;\r\n this.fromLineNumber = fromLineNumber;\r\n this.toLineNumber = toLineNumber;\r\n this.detail = detail;\r\n }\r\n return ModelRawLinesInserted;\r\n}());\r\nexport { ModelRawLinesInserted };\r\n/**\r\n * An event describing that a model has had its EOL changed.\r\n * @internal\r\n */\r\nvar ModelRawEOLChanged = /** @class */ (function () {\r\n function ModelRawEOLChanged() {\r\n this.changeType = 5 /* EOLChanged */;\r\n }\r\n return ModelRawEOLChanged;\r\n}());\r\nexport { ModelRawEOLChanged };\r\n/**\r\n * An event describing a change in the text of a model.\r\n * @internal\r\n */\r\nvar ModelRawContentChangedEvent = /** @class */ (function () {\r\n function ModelRawContentChangedEvent(changes, versionId, isUndoing, isRedoing) {\r\n this.changes = changes;\r\n this.versionId = versionId;\r\n this.isUndoing = isUndoing;\r\n this.isRedoing = isRedoing;\r\n }\r\n ModelRawContentChangedEvent.prototype.containsEvent = function (type) {\r\n for (var i = 0, len = this.changes.length; i < len; i++) {\r\n var change = this.changes[i];\r\n if (change.changeType === type) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n ModelRawContentChangedEvent.merge = function (a, b) {\r\n var changes = [].concat(a.changes).concat(b.changes);\r\n var versionId = b.versionId;\r\n var isUndoing = (a.isUndoing || b.isUndoing);\r\n var isRedoing = (a.isRedoing || b.isRedoing);\r\n return new ModelRawContentChangedEvent(changes, versionId, isUndoing, isRedoing);\r\n };\r\n return ModelRawContentChangedEvent;\r\n}());\r\nexport { ModelRawContentChangedEvent };\r\n/**\r\n * @internal\r\n */\r\nvar InternalModelContentChangeEvent = /** @class */ (function () {\r\n function InternalModelContentChangeEvent(rawContentChangedEvent, contentChangedEvent) {\r\n this.rawContentChangedEvent = rawContentChangedEvent;\r\n this.contentChangedEvent = contentChangedEvent;\r\n }\r\n InternalModelContentChangeEvent.prototype.merge = function (other) {\r\n var rawContentChangedEvent = ModelRawContentChangedEvent.merge(this.rawContentChangedEvent, other.rawContentChangedEvent);\r\n var contentChangedEvent = InternalModelContentChangeEvent._mergeChangeEvents(this.contentChangedEvent, other.contentChangedEvent);\r\n return new InternalModelContentChangeEvent(rawContentChangedEvent, contentChangedEvent);\r\n };\r\n InternalModelContentChangeEvent._mergeChangeEvents = function (a, b) {\r\n var changes = [].concat(a.changes).concat(b.changes);\r\n var eol = b.eol;\r\n var versionId = b.versionId;\r\n var isUndoing = (a.isUndoing || b.isUndoing);\r\n var isRedoing = (a.isRedoing || b.isRedoing);\r\n var isFlush = (a.isFlush || b.isFlush);\r\n return {\r\n changes: changes,\r\n eol: eol,\r\n versionId: versionId,\r\n isUndoing: isUndoing,\r\n isRedoing: isRedoing,\r\n isFlush: isFlush\r\n };\r\n };\r\n return InternalModelContentChangeEvent;\r\n}());\r\nexport { InternalModelContentChangeEvent };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as arrays from '../../../base/common/arrays.js';\r\nimport { LineTokens } from '../core/lineTokens.js';\r\nimport { Position } from '../core/position.js';\r\nimport { TokenMetadata } from '../modes.js';\r\nexport function countEOL(text) {\r\n var eolCount = 0;\r\n var firstLineLength = 0;\r\n var lastLineStart = 0;\r\n for (var i = 0, len = text.length; i < len; i++) {\r\n var chr = text.charCodeAt(i);\r\n if (chr === 13 /* CarriageReturn */) {\r\n if (eolCount === 0) {\r\n firstLineLength = i;\r\n }\r\n eolCount++;\r\n if (i + 1 < len && text.charCodeAt(i + 1) === 10 /* LineFeed */) {\r\n // \\r\\n... case\r\n i++; // skip \\n\r\n }\r\n else {\r\n // \\r... case\r\n }\r\n lastLineStart = i + 1;\r\n }\r\n else if (chr === 10 /* LineFeed */) {\r\n if (eolCount === 0) {\r\n firstLineLength = i;\r\n }\r\n eolCount++;\r\n lastLineStart = i + 1;\r\n }\r\n }\r\n if (eolCount === 0) {\r\n firstLineLength = text.length;\r\n }\r\n return [eolCount, firstLineLength, text.length - lastLineStart];\r\n}\r\nfunction getDefaultMetadata(topLevelLanguageId) {\r\n return ((topLevelLanguageId << 0 /* LANGUAGEID_OFFSET */)\r\n | (0 /* Other */ << 8 /* TOKEN_TYPE_OFFSET */)\r\n | (0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\r\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\r\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\r\n}\r\nvar EMPTY_LINE_TOKENS = (new Uint32Array(0)).buffer;\r\nvar MultilineTokensBuilder = /** @class */ (function () {\r\n function MultilineTokensBuilder() {\r\n this.tokens = [];\r\n }\r\n MultilineTokensBuilder.prototype.add = function (lineNumber, lineTokens) {\r\n if (this.tokens.length > 0) {\r\n var last = this.tokens[this.tokens.length - 1];\r\n var lastLineNumber = last.startLineNumber + last.tokens.length - 1;\r\n if (lastLineNumber + 1 === lineNumber) {\r\n // append\r\n last.tokens.push(lineTokens);\r\n return;\r\n }\r\n }\r\n this.tokens.push(new MultilineTokens(lineNumber, [lineTokens]));\r\n };\r\n return MultilineTokensBuilder;\r\n}());\r\nexport { MultilineTokensBuilder };\r\nvar SparseEncodedTokens = /** @class */ (function () {\r\n function SparseEncodedTokens(tokens) {\r\n this._tokens = tokens;\r\n this._tokenCount = tokens.length / 4;\r\n }\r\n SparseEncodedTokens.prototype.getMaxDeltaLine = function () {\r\n var tokenCount = this.getTokenCount();\r\n if (tokenCount === 0) {\r\n return -1;\r\n }\r\n return this.getDeltaLine(tokenCount - 1);\r\n };\r\n SparseEncodedTokens.prototype.getTokenCount = function () {\r\n return this._tokenCount;\r\n };\r\n SparseEncodedTokens.prototype.getDeltaLine = function (tokenIndex) {\r\n return this._tokens[4 * tokenIndex];\r\n };\r\n SparseEncodedTokens.prototype.getStartCharacter = function (tokenIndex) {\r\n return this._tokens[4 * tokenIndex + 1];\r\n };\r\n SparseEncodedTokens.prototype.getEndCharacter = function (tokenIndex) {\r\n return this._tokens[4 * tokenIndex + 2];\r\n };\r\n SparseEncodedTokens.prototype.getMetadata = function (tokenIndex) {\r\n return this._tokens[4 * tokenIndex + 3];\r\n };\r\n SparseEncodedTokens.prototype.clear = function () {\r\n this._tokenCount = 0;\r\n };\r\n SparseEncodedTokens.prototype.acceptDeleteRange = function (horizontalShiftForFirstLineTokens, startDeltaLine, startCharacter, endDeltaLine, endCharacter) {\r\n // This is a bit complex, here are the cases I used to think about this:\r\n //\r\n // 1. The token starts before the deletion range\r\n // 1a. The token is completely before the deletion range\r\n // -----------\r\n // xxxxxxxxxxx\r\n // 1b. The token starts before, the deletion range ends after the token\r\n // -----------\r\n // xxxxxxxxxxx\r\n // 1c. The token starts before, the deletion range ends precisely with the token\r\n // ---------------\r\n // xxxxxxxx\r\n // 1d. The token starts before, the deletion range is inside the token\r\n // ---------------\r\n // xxxxx\r\n //\r\n // 2. The token starts at the same position with the deletion range\r\n // 2a. The token starts at the same position, and ends inside the deletion range\r\n // -------\r\n // xxxxxxxxxxx\r\n // 2b. The token starts at the same position, and ends at the same position as the deletion range\r\n // ----------\r\n // xxxxxxxxxx\r\n // 2c. The token starts at the same position, and ends after the deletion range\r\n // -------------\r\n // xxxxxxx\r\n //\r\n // 3. The token starts inside the deletion range\r\n // 3a. The token is inside the deletion range\r\n // -------\r\n // xxxxxxxxxxxxx\r\n // 3b. The token starts inside the deletion range, and ends at the same position as the deletion range\r\n // ----------\r\n // xxxxxxxxxxxxx\r\n // 3c. The token starts inside the deletion range, and ends after the deletion range\r\n // ------------\r\n // xxxxxxxxxxx\r\n //\r\n // 4. The token starts after the deletion range\r\n // -----------\r\n // xxxxxxxx\r\n //\r\n var tokens = this._tokens;\r\n var tokenCount = this._tokenCount;\r\n var deletedLineCount = (endDeltaLine - startDeltaLine);\r\n var newTokenCount = 0;\r\n var hasDeletedTokens = false;\r\n for (var i = 0; i < tokenCount; i++) {\r\n var srcOffset = 4 * i;\r\n var tokenDeltaLine = tokens[srcOffset];\r\n var tokenStartCharacter = tokens[srcOffset + 1];\r\n var tokenEndCharacter = tokens[srcOffset + 2];\r\n var tokenMetadata = tokens[srcOffset + 3];\r\n if (tokenDeltaLine < startDeltaLine || (tokenDeltaLine === startDeltaLine && tokenEndCharacter <= startCharacter)) {\r\n // 1a. The token is completely before the deletion range\r\n // => nothing to do\r\n newTokenCount++;\r\n continue;\r\n }\r\n else if (tokenDeltaLine === startDeltaLine && tokenStartCharacter < startCharacter) {\r\n // 1b, 1c, 1d\r\n // => the token survives, but it needs to shrink\r\n if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) {\r\n // 1d. The token starts before, the deletion range is inside the token\r\n // => the token shrinks by the deletion character count\r\n tokenEndCharacter -= (endCharacter - startCharacter);\r\n }\r\n else {\r\n // 1b. The token starts before, the deletion range ends after the token\r\n // 1c. The token starts before, the deletion range ends precisely with the token\r\n // => the token shrinks its ending to the deletion start\r\n tokenEndCharacter = startCharacter;\r\n }\r\n }\r\n else if (tokenDeltaLine === startDeltaLine && tokenStartCharacter === startCharacter) {\r\n // 2a, 2b, 2c\r\n if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) {\r\n // 2c. The token starts at the same position, and ends after the deletion range\r\n // => the token shrinks by the deletion character count\r\n tokenEndCharacter -= (endCharacter - startCharacter);\r\n }\r\n else {\r\n // 2a. The token starts at the same position, and ends inside the deletion range\r\n // 2b. The token starts at the same position, and ends at the same position as the deletion range\r\n // => the token is deleted\r\n hasDeletedTokens = true;\r\n continue;\r\n }\r\n }\r\n else if (tokenDeltaLine < endDeltaLine || (tokenDeltaLine === endDeltaLine && tokenStartCharacter < endCharacter)) {\r\n // 3a, 3b, 3c\r\n if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) {\r\n // 3c. The token starts inside the deletion range, and ends after the deletion range\r\n // => the token moves left and shrinks\r\n if (tokenDeltaLine === startDeltaLine) {\r\n // the deletion started on the same line as the token\r\n // => the token moves left and shrinks\r\n tokenStartCharacter = startCharacter;\r\n tokenEndCharacter = tokenStartCharacter + (tokenEndCharacter - endCharacter);\r\n }\r\n else {\r\n // the deletion started on a line above the token\r\n // => the token moves to the beginning of the line\r\n tokenStartCharacter = 0;\r\n tokenEndCharacter = tokenStartCharacter + (tokenEndCharacter - endCharacter);\r\n }\r\n }\r\n else {\r\n // 3a. The token is inside the deletion range\r\n // 3b. The token starts inside the deletion range, and ends at the same position as the deletion range\r\n // => the token is deleted\r\n hasDeletedTokens = true;\r\n continue;\r\n }\r\n }\r\n else if (tokenDeltaLine > endDeltaLine) {\r\n // 4. (partial) The token starts after the deletion range, on a line below...\r\n if (deletedLineCount === 0 && !hasDeletedTokens) {\r\n // early stop, there is no need to walk all the tokens and do nothing...\r\n newTokenCount = tokenCount;\r\n break;\r\n }\r\n tokenDeltaLine -= deletedLineCount;\r\n }\r\n else if (tokenDeltaLine === endDeltaLine && tokenStartCharacter >= endCharacter) {\r\n // 4. (continued) The token starts after the deletion range, on the last line where a deletion occurs\r\n if (horizontalShiftForFirstLineTokens && tokenDeltaLine === 0) {\r\n tokenStartCharacter += horizontalShiftForFirstLineTokens;\r\n tokenEndCharacter += horizontalShiftForFirstLineTokens;\r\n }\r\n tokenDeltaLine -= deletedLineCount;\r\n tokenStartCharacter -= (endCharacter - startCharacter);\r\n tokenEndCharacter -= (endCharacter - startCharacter);\r\n }\r\n else {\r\n throw new Error(\"Not possible!\");\r\n }\r\n var destOffset = 4 * newTokenCount;\r\n tokens[destOffset] = tokenDeltaLine;\r\n tokens[destOffset + 1] = tokenStartCharacter;\r\n tokens[destOffset + 2] = tokenEndCharacter;\r\n tokens[destOffset + 3] = tokenMetadata;\r\n newTokenCount++;\r\n }\r\n this._tokenCount = newTokenCount;\r\n };\r\n SparseEncodedTokens.prototype.acceptInsertText = function (deltaLine, character, eolCount, firstLineLength, lastLineLength, firstCharCode) {\r\n // Here are the cases I used to think about this:\r\n //\r\n // 1. The token is completely before the insertion point\r\n // ----------- |\r\n // 2. The token ends precisely at the insertion point\r\n // -----------|\r\n // 3. The token contains the insertion point\r\n // -----|------\r\n // 4. The token starts precisely at the insertion point\r\n // |-----------\r\n // 5. The token is completely after the insertion point\r\n // | -----------\r\n //\r\n var isInsertingPreciselyOneWordCharacter = (eolCount === 0\r\n && firstLineLength === 1\r\n && ((firstCharCode >= 48 /* Digit0 */ && firstCharCode <= 57 /* Digit9 */)\r\n || (firstCharCode >= 65 /* A */ && firstCharCode <= 90 /* Z */)\r\n || (firstCharCode >= 97 /* a */ && firstCharCode <= 122 /* z */)));\r\n var tokens = this._tokens;\r\n var tokenCount = this._tokenCount;\r\n for (var i = 0; i < tokenCount; i++) {\r\n var offset = 4 * i;\r\n var tokenDeltaLine = tokens[offset];\r\n var tokenStartCharacter = tokens[offset + 1];\r\n var tokenEndCharacter = tokens[offset + 2];\r\n if (tokenDeltaLine < deltaLine || (tokenDeltaLine === deltaLine && tokenEndCharacter < character)) {\r\n // 1. The token is completely before the insertion point\r\n // => nothing to do\r\n continue;\r\n }\r\n else if (tokenDeltaLine === deltaLine && tokenEndCharacter === character) {\r\n // 2. The token ends precisely at the insertion point\r\n // => expand the end character only if inserting precisely one character that is a word character\r\n if (isInsertingPreciselyOneWordCharacter) {\r\n tokenEndCharacter += 1;\r\n }\r\n else {\r\n continue;\r\n }\r\n }\r\n else if (tokenDeltaLine === deltaLine && tokenStartCharacter < character && character < tokenEndCharacter) {\r\n // 3. The token contains the insertion point\r\n if (eolCount === 0) {\r\n // => just expand the end character\r\n tokenEndCharacter += firstLineLength;\r\n }\r\n else {\r\n // => cut off the token\r\n tokenEndCharacter = character;\r\n }\r\n }\r\n else {\r\n // 4. or 5.\r\n if (tokenDeltaLine === deltaLine && tokenStartCharacter === character) {\r\n // 4. The token starts precisely at the insertion point\r\n // => grow the token (by keeping its start constant) only if inserting precisely one character that is a word character\r\n // => otherwise behave as in case 5.\r\n if (isInsertingPreciselyOneWordCharacter) {\r\n continue;\r\n }\r\n }\r\n // => the token must move and keep its size constant\r\n if (tokenDeltaLine === deltaLine) {\r\n tokenDeltaLine += eolCount;\r\n // this token is on the line where the insertion is taking place\r\n if (eolCount === 0) {\r\n tokenStartCharacter += firstLineLength;\r\n tokenEndCharacter += firstLineLength;\r\n }\r\n else {\r\n var tokenLength = tokenEndCharacter - tokenStartCharacter;\r\n tokenStartCharacter = lastLineLength + (tokenStartCharacter - character);\r\n tokenEndCharacter = tokenStartCharacter + tokenLength;\r\n }\r\n }\r\n else {\r\n tokenDeltaLine += eolCount;\r\n }\r\n }\r\n tokens[offset] = tokenDeltaLine;\r\n tokens[offset + 1] = tokenStartCharacter;\r\n tokens[offset + 2] = tokenEndCharacter;\r\n }\r\n };\r\n return SparseEncodedTokens;\r\n}());\r\nexport { SparseEncodedTokens };\r\nvar LineTokens2 = /** @class */ (function () {\r\n function LineTokens2(actual, startTokenIndex, endTokenIndex) {\r\n this._actual = actual;\r\n this._startTokenIndex = startTokenIndex;\r\n this._endTokenIndex = endTokenIndex;\r\n }\r\n LineTokens2.prototype.getCount = function () {\r\n return this._endTokenIndex - this._startTokenIndex + 1;\r\n };\r\n LineTokens2.prototype.getStartCharacter = function (tokenIndex) {\r\n return this._actual.getStartCharacter(this._startTokenIndex + tokenIndex);\r\n };\r\n LineTokens2.prototype.getEndCharacter = function (tokenIndex) {\r\n return this._actual.getEndCharacter(this._startTokenIndex + tokenIndex);\r\n };\r\n LineTokens2.prototype.getMetadata = function (tokenIndex) {\r\n return this._actual.getMetadata(this._startTokenIndex + tokenIndex);\r\n };\r\n return LineTokens2;\r\n}());\r\nexport { LineTokens2 };\r\nvar MultilineTokens2 = /** @class */ (function () {\r\n function MultilineTokens2(startLineNumber, tokens) {\r\n this.startLineNumber = startLineNumber;\r\n this.tokens = tokens;\r\n this.endLineNumber = this.startLineNumber + this.tokens.getMaxDeltaLine();\r\n }\r\n MultilineTokens2.prototype._updateEndLineNumber = function () {\r\n this.endLineNumber = this.startLineNumber + this.tokens.getMaxDeltaLine();\r\n };\r\n MultilineTokens2.prototype.getLineTokens = function (lineNumber) {\r\n if (this.startLineNumber <= lineNumber && lineNumber <= this.endLineNumber) {\r\n var findResult = MultilineTokens2._findTokensWithLine(this.tokens, lineNumber - this.startLineNumber);\r\n if (findResult) {\r\n var startTokenIndex = findResult[0], endTokenIndex = findResult[1];\r\n return new LineTokens2(this.tokens, startTokenIndex, endTokenIndex);\r\n }\r\n }\r\n return null;\r\n };\r\n MultilineTokens2._findTokensWithLine = function (tokens, deltaLine) {\r\n var low = 0;\r\n var high = tokens.getTokenCount() - 1;\r\n while (low < high) {\r\n var mid = low + Math.floor((high - low) / 2);\r\n var midDeltaLine = tokens.getDeltaLine(mid);\r\n if (midDeltaLine < deltaLine) {\r\n low = mid + 1;\r\n }\r\n else if (midDeltaLine > deltaLine) {\r\n high = mid - 1;\r\n }\r\n else {\r\n var min = mid;\r\n while (min > low && tokens.getDeltaLine(min - 1) === deltaLine) {\r\n min--;\r\n }\r\n var max = mid;\r\n while (max < high && tokens.getDeltaLine(max + 1) === deltaLine) {\r\n max++;\r\n }\r\n return [min, max];\r\n }\r\n }\r\n if (tokens.getDeltaLine(low) === deltaLine) {\r\n return [low, low];\r\n }\r\n return null;\r\n };\r\n MultilineTokens2.prototype.applyEdit = function (range, text) {\r\n var _a = countEOL(text), eolCount = _a[0], firstLineLength = _a[1], lastLineLength = _a[2];\r\n this.acceptEdit(range, eolCount, firstLineLength, lastLineLength, text.length > 0 ? text.charCodeAt(0) : 0 /* Null */);\r\n };\r\n MultilineTokens2.prototype.acceptEdit = function (range, eolCount, firstLineLength, lastLineLength, firstCharCode) {\r\n this._acceptDeleteRange(range);\r\n this._acceptInsertText(new Position(range.startLineNumber, range.startColumn), eolCount, firstLineLength, lastLineLength, firstCharCode);\r\n this._updateEndLineNumber();\r\n };\r\n MultilineTokens2.prototype._acceptDeleteRange = function (range) {\r\n if (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn) {\r\n // Nothing to delete\r\n return;\r\n }\r\n var firstLineIndex = range.startLineNumber - this.startLineNumber;\r\n var lastLineIndex = range.endLineNumber - this.startLineNumber;\r\n if (lastLineIndex < 0) {\r\n // this deletion occurs entirely before this block, so we only need to adjust line numbers\r\n var deletedLinesCount = lastLineIndex - firstLineIndex;\r\n this.startLineNumber -= deletedLinesCount;\r\n return;\r\n }\r\n var tokenMaxDeltaLine = this.tokens.getMaxDeltaLine();\r\n if (firstLineIndex >= tokenMaxDeltaLine + 1) {\r\n // this deletion occurs entirely after this block, so there is nothing to do\r\n return;\r\n }\r\n if (firstLineIndex < 0 && lastLineIndex >= tokenMaxDeltaLine + 1) {\r\n // this deletion completely encompasses this block\r\n this.startLineNumber = 0;\r\n this.tokens.clear();\r\n return;\r\n }\r\n if (firstLineIndex < 0) {\r\n var deletedBefore = -firstLineIndex;\r\n this.startLineNumber -= deletedBefore;\r\n this.tokens.acceptDeleteRange(range.startColumn - 1, 0, 0, lastLineIndex, range.endColumn - 1);\r\n }\r\n else {\r\n this.tokens.acceptDeleteRange(0, firstLineIndex, range.startColumn - 1, lastLineIndex, range.endColumn - 1);\r\n }\r\n };\r\n MultilineTokens2.prototype._acceptInsertText = function (position, eolCount, firstLineLength, lastLineLength, firstCharCode) {\r\n if (eolCount === 0 && firstLineLength === 0) {\r\n // Nothing to insert\r\n return;\r\n }\r\n var lineIndex = position.lineNumber - this.startLineNumber;\r\n if (lineIndex < 0) {\r\n // this insertion occurs before this block, so we only need to adjust line numbers\r\n this.startLineNumber += eolCount;\r\n return;\r\n }\r\n var tokenMaxDeltaLine = this.tokens.getMaxDeltaLine();\r\n if (lineIndex >= tokenMaxDeltaLine + 1) {\r\n // this insertion occurs after this block, so there is nothing to do\r\n return;\r\n }\r\n this.tokens.acceptInsertText(lineIndex, position.column - 1, eolCount, firstLineLength, lastLineLength, firstCharCode);\r\n };\r\n return MultilineTokens2;\r\n}());\r\nexport { MultilineTokens2 };\r\nvar MultilineTokens = /** @class */ (function () {\r\n function MultilineTokens(startLineNumber, tokens) {\r\n this.startLineNumber = startLineNumber;\r\n this.tokens = tokens;\r\n }\r\n return MultilineTokens;\r\n}());\r\nexport { MultilineTokens };\r\nfunction toUint32Array(arr) {\r\n if (arr instanceof Uint32Array) {\r\n return arr;\r\n }\r\n else {\r\n return new Uint32Array(arr);\r\n }\r\n}\r\nvar TokensStore2 = /** @class */ (function () {\r\n function TokensStore2() {\r\n this._pieces = [];\r\n }\r\n TokensStore2.prototype.flush = function () {\r\n this._pieces = [];\r\n };\r\n TokensStore2.prototype.set = function (pieces) {\r\n this._pieces = pieces || [];\r\n };\r\n TokensStore2.prototype.addSemanticTokens = function (lineNumber, aTokens) {\r\n var pieces = this._pieces;\r\n if (pieces.length === 0) {\r\n return aTokens;\r\n }\r\n var pieceIndex = TokensStore2._findFirstPieceWithLine(pieces, lineNumber);\r\n var bTokens = this._pieces[pieceIndex].getLineTokens(lineNumber);\r\n if (!bTokens) {\r\n return aTokens;\r\n }\r\n var aLen = aTokens.getCount();\r\n var bLen = bTokens.getCount();\r\n var aIndex = 0;\r\n var result = [], resultLen = 0;\r\n for (var bIndex = 0; bIndex < bLen; bIndex++) {\r\n var bStartCharacter = bTokens.getStartCharacter(bIndex);\r\n var bEndCharacter = bTokens.getEndCharacter(bIndex);\r\n var bMetadata = bTokens.getMetadata(bIndex);\r\n // push any token from `a` that is before `b`\r\n while (aIndex < aLen && aTokens.getEndOffset(aIndex) <= bStartCharacter) {\r\n result[resultLen++] = aTokens.getEndOffset(aIndex);\r\n result[resultLen++] = aTokens.getMetadata(aIndex);\r\n aIndex++;\r\n }\r\n // push the token from `a` if it intersects the token from `b`\r\n if (aIndex < aLen && aTokens.getStartOffset(aIndex) < bStartCharacter) {\r\n result[resultLen++] = bStartCharacter;\r\n result[resultLen++] = aTokens.getMetadata(aIndex);\r\n }\r\n // skip any tokens from `a` that are contained inside `b`\r\n while (aIndex < aLen && aTokens.getEndOffset(aIndex) <= bEndCharacter) {\r\n aIndex++;\r\n }\r\n var aMetadata = aTokens.getMetadata(aIndex - 1 > 0 ? aIndex - 1 : aIndex);\r\n var languageId = TokenMetadata.getLanguageId(aMetadata);\r\n var tokenType = TokenMetadata.getTokenType(aMetadata);\r\n // push the token from `b`\r\n result[resultLen++] = bEndCharacter;\r\n result[resultLen++] = ((bMetadata & 4294965248 /* LANG_TTYPE_CMPL */)\r\n | ((languageId << 0 /* LANGUAGEID_OFFSET */) >>> 0)\r\n | ((tokenType << 8 /* TOKEN_TYPE_OFFSET */) >>> 0));\r\n }\r\n // push the remaining tokens from `a`\r\n while (aIndex < aLen) {\r\n result[resultLen++] = aTokens.getEndOffset(aIndex);\r\n result[resultLen++] = aTokens.getMetadata(aIndex);\r\n aIndex++;\r\n }\r\n return new LineTokens(new Uint32Array(result), aTokens.getLineContent());\r\n };\r\n TokensStore2._findFirstPieceWithLine = function (pieces, lineNumber) {\r\n var low = 0;\r\n var high = pieces.length - 1;\r\n while (low < high) {\r\n var mid = low + Math.floor((high - low) / 2);\r\n if (pieces[mid].endLineNumber < lineNumber) {\r\n low = mid + 1;\r\n }\r\n else if (pieces[mid].startLineNumber > lineNumber) {\r\n high = mid - 1;\r\n }\r\n else {\r\n while (mid > low && pieces[mid - 1].startLineNumber <= lineNumber && lineNumber <= pieces[mid - 1].endLineNumber) {\r\n mid--;\r\n }\r\n return mid;\r\n }\r\n }\r\n return low;\r\n };\r\n //#region Editing\r\n TokensStore2.prototype.acceptEdit = function (range, eolCount, firstLineLength, lastLineLength, firstCharCode) {\r\n for (var _i = 0, _a = this._pieces; _i < _a.length; _i++) {\r\n var piece = _a[_i];\r\n piece.acceptEdit(range, eolCount, firstLineLength, lastLineLength, firstCharCode);\r\n }\r\n };\r\n return TokensStore2;\r\n}());\r\nexport { TokensStore2 };\r\nvar TokensStore = /** @class */ (function () {\r\n function TokensStore() {\r\n this._lineTokens = [];\r\n this._len = 0;\r\n }\r\n TokensStore.prototype.flush = function () {\r\n this._lineTokens = [];\r\n this._len = 0;\r\n };\r\n TokensStore.prototype.getTokens = function (topLevelLanguageId, lineIndex, lineText) {\r\n var rawLineTokens = null;\r\n if (lineIndex < this._len) {\r\n rawLineTokens = this._lineTokens[lineIndex];\r\n }\r\n if (rawLineTokens !== null && rawLineTokens !== EMPTY_LINE_TOKENS) {\r\n return new LineTokens(toUint32Array(rawLineTokens), lineText);\r\n }\r\n var lineTokens = new Uint32Array(2);\r\n lineTokens[0] = lineText.length;\r\n lineTokens[1] = getDefaultMetadata(topLevelLanguageId);\r\n return new LineTokens(lineTokens, lineText);\r\n };\r\n TokensStore._massageTokens = function (topLevelLanguageId, lineTextLength, _tokens) {\r\n var tokens = _tokens ? toUint32Array(_tokens) : null;\r\n if (lineTextLength === 0) {\r\n var hasDifferentLanguageId = false;\r\n if (tokens && tokens.length > 1) {\r\n hasDifferentLanguageId = (TokenMetadata.getLanguageId(tokens[1]) !== topLevelLanguageId);\r\n }\r\n if (!hasDifferentLanguageId) {\r\n return EMPTY_LINE_TOKENS;\r\n }\r\n }\r\n if (!tokens || tokens.length === 0) {\r\n var tokens_1 = new Uint32Array(2);\r\n tokens_1[0] = lineTextLength;\r\n tokens_1[1] = getDefaultMetadata(topLevelLanguageId);\r\n return tokens_1.buffer;\r\n }\r\n // Ensure the last token covers the end of the text\r\n tokens[tokens.length - 2] = lineTextLength;\r\n if (tokens.byteOffset === 0 && tokens.byteLength === tokens.buffer.byteLength) {\r\n // Store directly the ArrayBuffer pointer to save an object\r\n return tokens.buffer;\r\n }\r\n return tokens;\r\n };\r\n TokensStore.prototype._ensureLine = function (lineIndex) {\r\n while (lineIndex >= this._len) {\r\n this._lineTokens[this._len] = null;\r\n this._len++;\r\n }\r\n };\r\n TokensStore.prototype._deleteLines = function (start, deleteCount) {\r\n if (deleteCount === 0) {\r\n return;\r\n }\r\n if (start + deleteCount > this._len) {\r\n deleteCount = this._len - start;\r\n }\r\n this._lineTokens.splice(start, deleteCount);\r\n this._len -= deleteCount;\r\n };\r\n TokensStore.prototype._insertLines = function (insertIndex, insertCount) {\r\n if (insertCount === 0) {\r\n return;\r\n }\r\n var lineTokens = [];\r\n for (var i = 0; i < insertCount; i++) {\r\n lineTokens[i] = null;\r\n }\r\n this._lineTokens = arrays.arrayInsert(this._lineTokens, insertIndex, lineTokens);\r\n this._len += insertCount;\r\n };\r\n TokensStore.prototype.setTokens = function (topLevelLanguageId, lineIndex, lineTextLength, _tokens) {\r\n var tokens = TokensStore._massageTokens(topLevelLanguageId, lineTextLength, _tokens);\r\n this._ensureLine(lineIndex);\r\n this._lineTokens[lineIndex] = tokens;\r\n };\r\n //#region Editing\r\n TokensStore.prototype.acceptEdit = function (range, eolCount, firstLineLength) {\r\n this._acceptDeleteRange(range);\r\n this._acceptInsertText(new Position(range.startLineNumber, range.startColumn), eolCount, firstLineLength);\r\n };\r\n TokensStore.prototype._acceptDeleteRange = function (range) {\r\n var firstLineIndex = range.startLineNumber - 1;\r\n if (firstLineIndex >= this._len) {\r\n return;\r\n }\r\n if (range.startLineNumber === range.endLineNumber) {\r\n if (range.startColumn === range.endColumn) {\r\n // Nothing to delete\r\n return;\r\n }\r\n this._lineTokens[firstLineIndex] = TokensStore._delete(this._lineTokens[firstLineIndex], range.startColumn - 1, range.endColumn - 1);\r\n return;\r\n }\r\n this._lineTokens[firstLineIndex] = TokensStore._deleteEnding(this._lineTokens[firstLineIndex], range.startColumn - 1);\r\n var lastLineIndex = range.endLineNumber - 1;\r\n var lastLineTokens = null;\r\n if (lastLineIndex < this._len) {\r\n lastLineTokens = TokensStore._deleteBeginning(this._lineTokens[lastLineIndex], range.endColumn - 1);\r\n }\r\n // Take remaining text on last line and append it to remaining text on first line\r\n this._lineTokens[firstLineIndex] = TokensStore._append(this._lineTokens[firstLineIndex], lastLineTokens);\r\n // Delete middle lines\r\n this._deleteLines(range.startLineNumber, range.endLineNumber - range.startLineNumber);\r\n };\r\n TokensStore.prototype._acceptInsertText = function (position, eolCount, firstLineLength) {\r\n if (eolCount === 0 && firstLineLength === 0) {\r\n // Nothing to insert\r\n return;\r\n }\r\n var lineIndex = position.lineNumber - 1;\r\n if (lineIndex >= this._len) {\r\n return;\r\n }\r\n if (eolCount === 0) {\r\n // Inserting text on one line\r\n this._lineTokens[lineIndex] = TokensStore._insert(this._lineTokens[lineIndex], position.column - 1, firstLineLength);\r\n return;\r\n }\r\n this._lineTokens[lineIndex] = TokensStore._deleteEnding(this._lineTokens[lineIndex], position.column - 1);\r\n this._lineTokens[lineIndex] = TokensStore._insert(this._lineTokens[lineIndex], position.column - 1, firstLineLength);\r\n this._insertLines(position.lineNumber, eolCount);\r\n };\r\n TokensStore._deleteBeginning = function (lineTokens, toChIndex) {\r\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\r\n return lineTokens;\r\n }\r\n return TokensStore._delete(lineTokens, 0, toChIndex);\r\n };\r\n TokensStore._deleteEnding = function (lineTokens, fromChIndex) {\r\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\r\n return lineTokens;\r\n }\r\n var tokens = toUint32Array(lineTokens);\r\n var lineTextLength = tokens[tokens.length - 2];\r\n return TokensStore._delete(lineTokens, fromChIndex, lineTextLength);\r\n };\r\n TokensStore._delete = function (lineTokens, fromChIndex, toChIndex) {\r\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS || fromChIndex === toChIndex) {\r\n return lineTokens;\r\n }\r\n var tokens = toUint32Array(lineTokens);\r\n var tokensCount = (tokens.length >>> 1);\r\n // special case: deleting everything\r\n if (fromChIndex === 0 && tokens[tokens.length - 2] === toChIndex) {\r\n return EMPTY_LINE_TOKENS;\r\n }\r\n var fromTokenIndex = LineTokens.findIndexInTokensArray(tokens, fromChIndex);\r\n var fromTokenStartOffset = (fromTokenIndex > 0 ? tokens[(fromTokenIndex - 1) << 1] : 0);\r\n var fromTokenEndOffset = tokens[fromTokenIndex << 1];\r\n if (toChIndex < fromTokenEndOffset) {\r\n // the delete range is inside a single token\r\n var delta_1 = (toChIndex - fromChIndex);\r\n for (var i = fromTokenIndex; i < tokensCount; i++) {\r\n tokens[i << 1] -= delta_1;\r\n }\r\n return lineTokens;\r\n }\r\n var dest;\r\n var lastEnd;\r\n if (fromTokenStartOffset !== fromChIndex) {\r\n tokens[fromTokenIndex << 1] = fromChIndex;\r\n dest = ((fromTokenIndex + 1) << 1);\r\n lastEnd = fromChIndex;\r\n }\r\n else {\r\n dest = (fromTokenIndex << 1);\r\n lastEnd = fromTokenStartOffset;\r\n }\r\n var delta = (toChIndex - fromChIndex);\r\n for (var tokenIndex = fromTokenIndex + 1; tokenIndex < tokensCount; tokenIndex++) {\r\n var tokenEndOffset = tokens[tokenIndex << 1] - delta;\r\n if (tokenEndOffset > lastEnd) {\r\n tokens[dest++] = tokenEndOffset;\r\n tokens[dest++] = tokens[(tokenIndex << 1) + 1];\r\n lastEnd = tokenEndOffset;\r\n }\r\n }\r\n if (dest === tokens.length) {\r\n // nothing to trim\r\n return lineTokens;\r\n }\r\n var tmp = new Uint32Array(dest);\r\n tmp.set(tokens.subarray(0, dest), 0);\r\n return tmp.buffer;\r\n };\r\n TokensStore._append = function (lineTokens, _otherTokens) {\r\n if (_otherTokens === EMPTY_LINE_TOKENS) {\r\n return lineTokens;\r\n }\r\n if (lineTokens === EMPTY_LINE_TOKENS) {\r\n return _otherTokens;\r\n }\r\n if (lineTokens === null) {\r\n return lineTokens;\r\n }\r\n if (_otherTokens === null) {\r\n // cannot determine combined line length...\r\n return null;\r\n }\r\n var myTokens = toUint32Array(lineTokens);\r\n var otherTokens = toUint32Array(_otherTokens);\r\n var otherTokensCount = (otherTokens.length >>> 1);\r\n var result = new Uint32Array(myTokens.length + otherTokens.length);\r\n result.set(myTokens, 0);\r\n var dest = myTokens.length;\r\n var delta = myTokens[myTokens.length - 2];\r\n for (var i = 0; i < otherTokensCount; i++) {\r\n result[dest++] = otherTokens[(i << 1)] + delta;\r\n result[dest++] = otherTokens[(i << 1) + 1];\r\n }\r\n return result.buffer;\r\n };\r\n TokensStore._insert = function (lineTokens, chIndex, textLength) {\r\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\r\n // nothing to do\r\n return lineTokens;\r\n }\r\n var tokens = toUint32Array(lineTokens);\r\n var tokensCount = (tokens.length >>> 1);\r\n var fromTokenIndex = LineTokens.findIndexInTokensArray(tokens, chIndex);\r\n if (fromTokenIndex > 0) {\r\n var fromTokenStartOffset = tokens[(fromTokenIndex - 1) << 1];\r\n if (fromTokenStartOffset === chIndex) {\r\n fromTokenIndex--;\r\n }\r\n }\r\n for (var tokenIndex = fromTokenIndex; tokenIndex < tokensCount; tokenIndex++) {\r\n tokens[tokenIndex << 1] += textLength;\r\n }\r\n return lineTokens;\r\n };\r\n return TokensStore;\r\n}());\r\nexport { TokensStore };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as arrays from '../../../base/common/arrays.js';\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nimport { LineTokens } from '../core/lineTokens.js';\r\nimport { Position } from '../core/position.js';\r\nimport { TokenizationRegistry } from '../modes.js';\r\nimport { nullTokenize2 } from '../modes/nullMode.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { StopWatch } from '../../../base/common/stopwatch.js';\r\nimport { MultilineTokensBuilder, countEOL } from './tokensStore.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nvar TokenizationStateStore = /** @class */ (function () {\r\n function TokenizationStateStore() {\r\n this._beginState = [];\r\n this._valid = [];\r\n this._len = 0;\r\n this._invalidLineStartIndex = 0;\r\n }\r\n TokenizationStateStore.prototype._reset = function (initialState) {\r\n this._beginState = [];\r\n this._valid = [];\r\n this._len = 0;\r\n this._invalidLineStartIndex = 0;\r\n if (initialState) {\r\n this._setBeginState(0, initialState);\r\n }\r\n };\r\n TokenizationStateStore.prototype.flush = function (initialState) {\r\n this._reset(initialState);\r\n };\r\n Object.defineProperty(TokenizationStateStore.prototype, \"invalidLineStartIndex\", {\r\n get: function () {\r\n return this._invalidLineStartIndex;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TokenizationStateStore.prototype._invalidateLine = function (lineIndex) {\r\n if (lineIndex < this._len) {\r\n this._valid[lineIndex] = false;\r\n }\r\n if (lineIndex < this._invalidLineStartIndex) {\r\n this._invalidLineStartIndex = lineIndex;\r\n }\r\n };\r\n TokenizationStateStore.prototype._isValid = function (lineIndex) {\r\n if (lineIndex < this._len) {\r\n return this._valid[lineIndex];\r\n }\r\n return false;\r\n };\r\n TokenizationStateStore.prototype.getBeginState = function (lineIndex) {\r\n if (lineIndex < this._len) {\r\n return this._beginState[lineIndex];\r\n }\r\n return null;\r\n };\r\n TokenizationStateStore.prototype._ensureLine = function (lineIndex) {\r\n while (lineIndex >= this._len) {\r\n this._beginState[this._len] = null;\r\n this._valid[this._len] = false;\r\n this._len++;\r\n }\r\n };\r\n TokenizationStateStore.prototype._deleteLines = function (start, deleteCount) {\r\n if (deleteCount === 0) {\r\n return;\r\n }\r\n if (start + deleteCount > this._len) {\r\n deleteCount = this._len - start;\r\n }\r\n this._beginState.splice(start, deleteCount);\r\n this._valid.splice(start, deleteCount);\r\n this._len -= deleteCount;\r\n };\r\n TokenizationStateStore.prototype._insertLines = function (insertIndex, insertCount) {\r\n if (insertCount === 0) {\r\n return;\r\n }\r\n var beginState = [];\r\n var valid = [];\r\n for (var i = 0; i < insertCount; i++) {\r\n beginState[i] = null;\r\n valid[i] = false;\r\n }\r\n this._beginState = arrays.arrayInsert(this._beginState, insertIndex, beginState);\r\n this._valid = arrays.arrayInsert(this._valid, insertIndex, valid);\r\n this._len += insertCount;\r\n };\r\n TokenizationStateStore.prototype._setValid = function (lineIndex, valid) {\r\n this._ensureLine(lineIndex);\r\n this._valid[lineIndex] = valid;\r\n };\r\n TokenizationStateStore.prototype._setBeginState = function (lineIndex, beginState) {\r\n this._ensureLine(lineIndex);\r\n this._beginState[lineIndex] = beginState;\r\n };\r\n TokenizationStateStore.prototype.setEndState = function (linesLength, lineIndex, endState) {\r\n this._setValid(lineIndex, true);\r\n this._invalidLineStartIndex = lineIndex + 1;\r\n // Check if this was the last line\r\n if (lineIndex === linesLength - 1) {\r\n return;\r\n }\r\n // Check if the end state has changed\r\n var previousEndState = this.getBeginState(lineIndex + 1);\r\n if (previousEndState === null || !endState.equals(previousEndState)) {\r\n this._setBeginState(lineIndex + 1, endState);\r\n this._invalidateLine(lineIndex + 1);\r\n return;\r\n }\r\n // Perhaps we can skip tokenizing some lines...\r\n var i = lineIndex + 1;\r\n while (i < linesLength) {\r\n if (!this._isValid(i)) {\r\n break;\r\n }\r\n i++;\r\n }\r\n this._invalidLineStartIndex = i;\r\n };\r\n TokenizationStateStore.prototype.setFakeTokens = function (lineIndex) {\r\n this._setValid(lineIndex, false);\r\n };\r\n //#region Editing\r\n TokenizationStateStore.prototype.applyEdits = function (range, eolCount) {\r\n var deletingLinesCnt = range.endLineNumber - range.startLineNumber;\r\n var insertingLinesCnt = eolCount;\r\n var editingLinesCnt = Math.min(deletingLinesCnt, insertingLinesCnt);\r\n for (var j = editingLinesCnt; j >= 0; j--) {\r\n this._invalidateLine(range.startLineNumber + j - 1);\r\n }\r\n this._acceptDeleteRange(range);\r\n this._acceptInsertText(new Position(range.startLineNumber, range.startColumn), eolCount);\r\n };\r\n TokenizationStateStore.prototype._acceptDeleteRange = function (range) {\r\n var firstLineIndex = range.startLineNumber - 1;\r\n if (firstLineIndex >= this._len) {\r\n return;\r\n }\r\n this._deleteLines(range.startLineNumber, range.endLineNumber - range.startLineNumber);\r\n };\r\n TokenizationStateStore.prototype._acceptInsertText = function (position, eolCount) {\r\n var lineIndex = position.lineNumber - 1;\r\n if (lineIndex >= this._len) {\r\n return;\r\n }\r\n this._insertLines(position.lineNumber, eolCount);\r\n };\r\n return TokenizationStateStore;\r\n}());\r\nexport { TokenizationStateStore };\r\nvar TextModelTokenization = /** @class */ (function (_super) {\r\n __extends(TextModelTokenization, _super);\r\n function TextModelTokenization(textModel) {\r\n var _this = _super.call(this) || this;\r\n _this._isDisposed = false;\r\n _this._textModel = textModel;\r\n _this._tokenizationStateStore = new TokenizationStateStore();\r\n _this._tokenizationSupport = null;\r\n _this._register(TokenizationRegistry.onDidChange(function (e) {\r\n var languageIdentifier = _this._textModel.getLanguageIdentifier();\r\n if (e.changedLanguages.indexOf(languageIdentifier.language) === -1) {\r\n return;\r\n }\r\n _this._resetTokenizationState();\r\n _this._textModel.clearTokens();\r\n }));\r\n _this._register(_this._textModel.onDidChangeRawContentFast(function (e) {\r\n if (e.containsEvent(1 /* Flush */)) {\r\n _this._resetTokenizationState();\r\n return;\r\n }\r\n }));\r\n _this._register(_this._textModel.onDidChangeContentFast(function (e) {\r\n for (var i = 0, len = e.changes.length; i < len; i++) {\r\n var change = e.changes[i];\r\n var eolCount = countEOL(change.text)[0];\r\n _this._tokenizationStateStore.applyEdits(change.range, eolCount);\r\n }\r\n _this._beginBackgroundTokenization();\r\n }));\r\n _this._register(_this._textModel.onDidChangeAttached(function () {\r\n _this._beginBackgroundTokenization();\r\n }));\r\n _this._register(_this._textModel.onDidChangeLanguage(function () {\r\n _this._resetTokenizationState();\r\n _this._textModel.clearTokens();\r\n }));\r\n _this._resetTokenizationState();\r\n return _this;\r\n }\r\n TextModelTokenization.prototype.dispose = function () {\r\n this._isDisposed = true;\r\n _super.prototype.dispose.call(this);\r\n };\r\n TextModelTokenization.prototype._resetTokenizationState = function () {\r\n var _a = initializeTokenization(this._textModel), tokenizationSupport = _a[0], initialState = _a[1];\r\n this._tokenizationSupport = tokenizationSupport;\r\n this._tokenizationStateStore.flush(initialState);\r\n this._beginBackgroundTokenization();\r\n };\r\n TextModelTokenization.prototype._beginBackgroundTokenization = function () {\r\n var _this = this;\r\n if (this._textModel.isAttachedToEditor() && this._hasLinesToTokenize()) {\r\n platform.setImmediate(function () {\r\n if (_this._isDisposed) {\r\n // disposed in the meantime\r\n return;\r\n }\r\n _this._revalidateTokensNow();\r\n });\r\n }\r\n };\r\n TextModelTokenization.prototype._revalidateTokensNow = function (toLineNumber) {\r\n if (toLineNumber === void 0) { toLineNumber = this._textModel.getLineCount(); }\r\n var MAX_ALLOWED_TIME = 1;\r\n var builder = new MultilineTokensBuilder();\r\n var sw = StopWatch.create(false);\r\n while (this._hasLinesToTokenize()) {\r\n if (sw.elapsed() > MAX_ALLOWED_TIME) {\r\n // Stop if MAX_ALLOWED_TIME is reached\r\n break;\r\n }\r\n var tokenizedLineNumber = this._tokenizeOneInvalidLine(builder);\r\n if (tokenizedLineNumber >= toLineNumber) {\r\n break;\r\n }\r\n }\r\n this._beginBackgroundTokenization();\r\n this._textModel.setTokens(builder.tokens);\r\n };\r\n TextModelTokenization.prototype.tokenizeViewport = function (startLineNumber, endLineNumber) {\r\n var builder = new MultilineTokensBuilder();\r\n this._tokenizeViewport(builder, startLineNumber, endLineNumber);\r\n this._textModel.setTokens(builder.tokens);\r\n };\r\n TextModelTokenization.prototype.reset = function () {\r\n this._resetTokenizationState();\r\n this._textModel.clearTokens();\r\n };\r\n TextModelTokenization.prototype.forceTokenization = function (lineNumber) {\r\n var builder = new MultilineTokensBuilder();\r\n this._updateTokensUntilLine(builder, lineNumber);\r\n this._textModel.setTokens(builder.tokens);\r\n };\r\n TextModelTokenization.prototype.isCheapToTokenize = function (lineNumber) {\r\n if (!this._tokenizationSupport) {\r\n return true;\r\n }\r\n var firstInvalidLineNumber = this._tokenizationStateStore.invalidLineStartIndex + 1;\r\n if (lineNumber > firstInvalidLineNumber) {\r\n return false;\r\n }\r\n if (lineNumber < firstInvalidLineNumber) {\r\n return true;\r\n }\r\n if (this._textModel.getLineLength(lineNumber) < 2048 /* CHEAP_TOKENIZATION_LENGTH_LIMIT */) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n TextModelTokenization.prototype._hasLinesToTokenize = function () {\r\n if (!this._tokenizationSupport) {\r\n return false;\r\n }\r\n return (this._tokenizationStateStore.invalidLineStartIndex < this._textModel.getLineCount());\r\n };\r\n TextModelTokenization.prototype._tokenizeOneInvalidLine = function (builder) {\r\n if (!this._hasLinesToTokenize()) {\r\n return this._textModel.getLineCount() + 1;\r\n }\r\n var lineNumber = this._tokenizationStateStore.invalidLineStartIndex + 1;\r\n this._updateTokensUntilLine(builder, lineNumber);\r\n return lineNumber;\r\n };\r\n TextModelTokenization.prototype._updateTokensUntilLine = function (builder, lineNumber) {\r\n if (!this._tokenizationSupport) {\r\n return;\r\n }\r\n var languageIdentifier = this._textModel.getLanguageIdentifier();\r\n var linesLength = this._textModel.getLineCount();\r\n var endLineIndex = lineNumber - 1;\r\n // Validate all states up to and including endLineIndex\r\n for (var lineIndex = this._tokenizationStateStore.invalidLineStartIndex; lineIndex <= endLineIndex; lineIndex++) {\r\n var text = this._textModel.getLineContent(lineIndex + 1);\r\n var lineStartState = this._tokenizationStateStore.getBeginState(lineIndex);\r\n var r = safeTokenize(languageIdentifier, this._tokenizationSupport, text, lineStartState);\r\n builder.add(lineIndex + 1, r.tokens);\r\n this._tokenizationStateStore.setEndState(linesLength, lineIndex, r.endState);\r\n lineIndex = this._tokenizationStateStore.invalidLineStartIndex - 1; // -1 because the outer loop increments it\r\n }\r\n };\r\n TextModelTokenization.prototype._tokenizeViewport = function (builder, startLineNumber, endLineNumber) {\r\n if (!this._tokenizationSupport) {\r\n // nothing to do\r\n return;\r\n }\r\n if (endLineNumber <= this._tokenizationStateStore.invalidLineStartIndex) {\r\n // nothing to do\r\n return;\r\n }\r\n if (startLineNumber <= this._tokenizationStateStore.invalidLineStartIndex) {\r\n // tokenization has reached the viewport start...\r\n this._updateTokensUntilLine(builder, endLineNumber);\r\n return;\r\n }\r\n var nonWhitespaceColumn = this._textModel.getLineFirstNonWhitespaceColumn(startLineNumber);\r\n var fakeLines = [];\r\n var initialState = null;\r\n for (var i = startLineNumber - 1; nonWhitespaceColumn > 0 && i >= 1; i--) {\r\n var newNonWhitespaceIndex = this._textModel.getLineFirstNonWhitespaceColumn(i);\r\n if (newNonWhitespaceIndex === 0) {\r\n continue;\r\n }\r\n if (newNonWhitespaceIndex < nonWhitespaceColumn) {\r\n initialState = this._tokenizationStateStore.getBeginState(i - 1);\r\n if (initialState) {\r\n break;\r\n }\r\n fakeLines.push(this._textModel.getLineContent(i));\r\n nonWhitespaceColumn = newNonWhitespaceIndex;\r\n }\r\n }\r\n if (!initialState) {\r\n initialState = this._tokenizationSupport.getInitialState();\r\n }\r\n var languageIdentifier = this._textModel.getLanguageIdentifier();\r\n var state = initialState;\r\n for (var i = fakeLines.length - 1; i >= 0; i--) {\r\n var r = safeTokenize(languageIdentifier, this._tokenizationSupport, fakeLines[i], state);\r\n state = r.endState;\r\n }\r\n for (var lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\r\n var text = this._textModel.getLineContent(lineNumber);\r\n var r = safeTokenize(languageIdentifier, this._tokenizationSupport, text, state);\r\n builder.add(lineNumber, r.tokens);\r\n this._tokenizationStateStore.setFakeTokens(lineNumber - 1);\r\n state = r.endState;\r\n }\r\n };\r\n return TextModelTokenization;\r\n}(Disposable));\r\nexport { TextModelTokenization };\r\nfunction initializeTokenization(textModel) {\r\n var languageIdentifier = textModel.getLanguageIdentifier();\r\n var tokenizationSupport = (textModel.isTooLargeForTokenization()\r\n ? null\r\n : TokenizationRegistry.get(languageIdentifier.language));\r\n var initialState = null;\r\n if (tokenizationSupport) {\r\n try {\r\n initialState = tokenizationSupport.getInitialState();\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n tokenizationSupport = null;\r\n }\r\n }\r\n return [tokenizationSupport, initialState];\r\n}\r\nfunction safeTokenize(languageIdentifier, tokenizationSupport, text, state) {\r\n var r = null;\r\n if (tokenizationSupport) {\r\n try {\r\n r = tokenizationSupport.tokenize2(text, state.clone(), 0);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n }\r\n }\r\n if (!r) {\r\n r = nullTokenize2(languageIdentifier.id, text, state, 0);\r\n }\r\n LineTokens.convertToEndOffset(r.tokens, text.length);\r\n return r;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nfunction roundFloat(number, decimalPoints) {\r\n var decimal = Math.pow(10, decimalPoints);\r\n return Math.round(number * decimal) / decimal;\r\n}\r\nvar RGBA = /** @class */ (function () {\r\n function RGBA(r, g, b, a) {\r\n if (a === void 0) { a = 1; }\r\n this.r = Math.min(255, Math.max(0, r)) | 0;\r\n this.g = Math.min(255, Math.max(0, g)) | 0;\r\n this.b = Math.min(255, Math.max(0, b)) | 0;\r\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\r\n }\r\n RGBA.equals = function (a, b) {\r\n return a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;\r\n };\r\n return RGBA;\r\n}());\r\nexport { RGBA };\r\nvar HSLA = /** @class */ (function () {\r\n function HSLA(h, s, l, a) {\r\n this.h = Math.max(Math.min(360, h), 0) | 0;\r\n this.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\r\n this.l = roundFloat(Math.max(Math.min(1, l), 0), 3);\r\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\r\n }\r\n HSLA.equals = function (a, b) {\r\n return a.h === b.h && a.s === b.s && a.l === b.l && a.a === b.a;\r\n };\r\n /**\r\n * Converts an RGB color value to HSL. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes r, g, and b are contained in the set [0, 255] and\r\n * returns h in the set [0, 360], s, and l in the set [0, 1].\r\n */\r\n HSLA.fromRGBA = function (rgba) {\r\n var r = rgba.r / 255;\r\n var g = rgba.g / 255;\r\n var b = rgba.b / 255;\r\n var a = rgba.a;\r\n var max = Math.max(r, g, b);\r\n var min = Math.min(r, g, b);\r\n var h = 0;\r\n var s = 0;\r\n var l = (min + max) / 2;\r\n var chroma = max - min;\r\n if (chroma > 0) {\r\n s = Math.min((l <= 0.5 ? chroma / (2 * l) : chroma / (2 - (2 * l))), 1);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / chroma + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / chroma + 2;\r\n break;\r\n case b:\r\n h = (r - g) / chroma + 4;\r\n break;\r\n }\r\n h *= 60;\r\n h = Math.round(h);\r\n }\r\n return new HSLA(h, s, l, a);\r\n };\r\n HSLA._hue2rgb = function (p, q, t) {\r\n if (t < 0) {\r\n t += 1;\r\n }\r\n if (t > 1) {\r\n t -= 1;\r\n }\r\n if (t < 1 / 6) {\r\n return p + (q - p) * 6 * t;\r\n }\r\n if (t < 1 / 2) {\r\n return q;\r\n }\r\n if (t < 2 / 3) {\r\n return p + (q - p) * (2 / 3 - t) * 6;\r\n }\r\n return p;\r\n };\r\n /**\r\n * Converts an HSL color value to RGB. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes h in the set [0, 360] s, and l are contained in the set [0, 1] and\r\n * returns r, g, and b in the set [0, 255].\r\n */\r\n HSLA.toRGBA = function (hsla) {\r\n var h = hsla.h / 360;\r\n var s = hsla.s, l = hsla.l, a = hsla.a;\r\n var r, g, b;\r\n if (s === 0) {\r\n r = g = b = l; // achromatic\r\n }\r\n else {\r\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n var p = 2 * l - q;\r\n r = HSLA._hue2rgb(p, q, h + 1 / 3);\r\n g = HSLA._hue2rgb(p, q, h);\r\n b = HSLA._hue2rgb(p, q, h - 1 / 3);\r\n }\r\n return new RGBA(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), a);\r\n };\r\n return HSLA;\r\n}());\r\nexport { HSLA };\r\nvar HSVA = /** @class */ (function () {\r\n function HSVA(h, s, v, a) {\r\n this.h = Math.max(Math.min(360, h), 0) | 0;\r\n this.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\r\n this.v = roundFloat(Math.max(Math.min(1, v), 0), 3);\r\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\r\n }\r\n HSVA.equals = function (a, b) {\r\n return a.h === b.h && a.s === b.s && a.v === b.v && a.a === b.a;\r\n };\r\n // from http://www.rapidtables.com/convert/color/rgb-to-hsv.htm\r\n HSVA.fromRGBA = function (rgba) {\r\n var r = rgba.r / 255;\r\n var g = rgba.g / 255;\r\n var b = rgba.b / 255;\r\n var cmax = Math.max(r, g, b);\r\n var cmin = Math.min(r, g, b);\r\n var delta = cmax - cmin;\r\n var s = cmax === 0 ? 0 : (delta / cmax);\r\n var m;\r\n if (delta === 0) {\r\n m = 0;\r\n }\r\n else if (cmax === r) {\r\n m = ((((g - b) / delta) % 6) + 6) % 6;\r\n }\r\n else if (cmax === g) {\r\n m = ((b - r) / delta) + 2;\r\n }\r\n else {\r\n m = ((r - g) / delta) + 4;\r\n }\r\n return new HSVA(Math.round(m * 60), s, cmax, rgba.a);\r\n };\r\n // from http://www.rapidtables.com/convert/color/hsv-to-rgb.htm\r\n HSVA.toRGBA = function (hsva) {\r\n var h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a;\r\n var c = v * s;\r\n var x = c * (1 - Math.abs((h / 60) % 2 - 1));\r\n var m = v - c;\r\n var _a = [0, 0, 0], r = _a[0], g = _a[1], b = _a[2];\r\n if (h < 60) {\r\n r = c;\r\n g = x;\r\n }\r\n else if (h < 120) {\r\n r = x;\r\n g = c;\r\n }\r\n else if (h < 180) {\r\n g = c;\r\n b = x;\r\n }\r\n else if (h < 240) {\r\n g = x;\r\n b = c;\r\n }\r\n else if (h < 300) {\r\n r = x;\r\n b = c;\r\n }\r\n else if (h < 360) {\r\n r = c;\r\n b = x;\r\n }\r\n r = Math.round((r + m) * 255);\r\n g = Math.round((g + m) * 255);\r\n b = Math.round((b + m) * 255);\r\n return new RGBA(r, g, b, a);\r\n };\r\n return HSVA;\r\n}());\r\nexport { HSVA };\r\nvar Color = /** @class */ (function () {\r\n function Color(arg) {\r\n if (!arg) {\r\n throw new Error('Color needs a value');\r\n }\r\n else if (arg instanceof RGBA) {\r\n this.rgba = arg;\r\n }\r\n else if (arg instanceof HSLA) {\r\n this._hsla = arg;\r\n this.rgba = HSLA.toRGBA(arg);\r\n }\r\n else if (arg instanceof HSVA) {\r\n this._hsva = arg;\r\n this.rgba = HSVA.toRGBA(arg);\r\n }\r\n else {\r\n throw new Error('Invalid color ctor argument');\r\n }\r\n }\r\n Color.fromHex = function (hex) {\r\n return Color.Format.CSS.parseHex(hex) || Color.red;\r\n };\r\n Object.defineProperty(Color.prototype, \"hsla\", {\r\n get: function () {\r\n if (this._hsla) {\r\n return this._hsla;\r\n }\r\n else {\r\n return HSLA.fromRGBA(this.rgba);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Color.prototype, \"hsva\", {\r\n get: function () {\r\n if (this._hsva) {\r\n return this._hsva;\r\n }\r\n return HSVA.fromRGBA(this.rgba);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Color.prototype.equals = function (other) {\r\n return !!other && RGBA.equals(this.rgba, other.rgba) && HSLA.equals(this.hsla, other.hsla) && HSVA.equals(this.hsva, other.hsva);\r\n };\r\n /**\r\n * http://www.w3.org/TR/WCAG20/#relativeluminancedef\r\n * Returns the number in the set [0, 1]. O => Darkest Black. 1 => Lightest white.\r\n */\r\n Color.prototype.getRelativeLuminance = function () {\r\n var R = Color._relativeLuminanceForComponent(this.rgba.r);\r\n var G = Color._relativeLuminanceForComponent(this.rgba.g);\r\n var B = Color._relativeLuminanceForComponent(this.rgba.b);\r\n var luminance = 0.2126 * R + 0.7152 * G + 0.0722 * B;\r\n return roundFloat(luminance, 4);\r\n };\r\n Color._relativeLuminanceForComponent = function (color) {\r\n var c = color / 255;\r\n return (c <= 0.03928) ? c / 12.92 : Math.pow(((c + 0.055) / 1.055), 2.4);\r\n };\r\n /**\r\n *\thttp://24ways.org/2010/calculating-color-contrast\r\n * Return 'true' if lighter color otherwise 'false'\r\n */\r\n Color.prototype.isLighter = function () {\r\n var yiq = (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1000;\r\n return yiq >= 128;\r\n };\r\n Color.prototype.isLighterThan = function (another) {\r\n var lum1 = this.getRelativeLuminance();\r\n var lum2 = another.getRelativeLuminance();\r\n return lum1 > lum2;\r\n };\r\n Color.prototype.isDarkerThan = function (another) {\r\n var lum1 = this.getRelativeLuminance();\r\n var lum2 = another.getRelativeLuminance();\r\n return lum1 < lum2;\r\n };\r\n Color.prototype.lighten = function (factor) {\r\n return new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l + this.hsla.l * factor, this.hsla.a));\r\n };\r\n Color.prototype.darken = function (factor) {\r\n return new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l - this.hsla.l * factor, this.hsla.a));\r\n };\r\n Color.prototype.transparent = function (factor) {\r\n var _a = this.rgba, r = _a.r, g = _a.g, b = _a.b, a = _a.a;\r\n return new Color(new RGBA(r, g, b, a * factor));\r\n };\r\n Color.prototype.isTransparent = function () {\r\n return this.rgba.a === 0;\r\n };\r\n Color.prototype.isOpaque = function () {\r\n return this.rgba.a === 1;\r\n };\r\n Color.prototype.opposite = function () {\r\n return new Color(new RGBA(255 - this.rgba.r, 255 - this.rgba.g, 255 - this.rgba.b, this.rgba.a));\r\n };\r\n Color.prototype.toString = function () {\r\n return '' + Color.Format.CSS.format(this);\r\n };\r\n Color.getLighterColor = function (of, relative, factor) {\r\n if (of.isLighterThan(relative)) {\r\n return of;\r\n }\r\n factor = factor ? factor : 0.5;\r\n var lum1 = of.getRelativeLuminance();\r\n var lum2 = relative.getRelativeLuminance();\r\n factor = factor * (lum2 - lum1) / lum2;\r\n return of.lighten(factor);\r\n };\r\n Color.getDarkerColor = function (of, relative, factor) {\r\n if (of.isDarkerThan(relative)) {\r\n return of;\r\n }\r\n factor = factor ? factor : 0.5;\r\n var lum1 = of.getRelativeLuminance();\r\n var lum2 = relative.getRelativeLuminance();\r\n factor = factor * (lum1 - lum2) / lum1;\r\n return of.darken(factor);\r\n };\r\n Color.white = new Color(new RGBA(255, 255, 255, 1));\r\n Color.black = new Color(new RGBA(0, 0, 0, 1));\r\n Color.red = new Color(new RGBA(255, 0, 0, 1));\r\n Color.blue = new Color(new RGBA(0, 0, 255, 1));\r\n Color.cyan = new Color(new RGBA(0, 255, 255, 1));\r\n Color.lightgrey = new Color(new RGBA(211, 211, 211, 1));\r\n Color.transparent = new Color(new RGBA(0, 0, 0, 0));\r\n return Color;\r\n}());\r\nexport { Color };\r\n(function (Color) {\r\n var Format;\r\n (function (Format) {\r\n var CSS;\r\n (function (CSS) {\r\n function formatRGB(color) {\r\n if (color.rgba.a === 1) {\r\n return \"rgb(\" + color.rgba.r + \", \" + color.rgba.g + \", \" + color.rgba.b + \")\";\r\n }\r\n return Color.Format.CSS.formatRGBA(color);\r\n }\r\n CSS.formatRGB = formatRGB;\r\n function formatRGBA(color) {\r\n return \"rgba(\" + color.rgba.r + \", \" + color.rgba.g + \", \" + color.rgba.b + \", \" + +(color.rgba.a).toFixed(2) + \")\";\r\n }\r\n CSS.formatRGBA = formatRGBA;\r\n function formatHSL(color) {\r\n if (color.hsla.a === 1) {\r\n return \"hsl(\" + color.hsla.h + \", \" + (color.hsla.s * 100).toFixed(2) + \"%, \" + (color.hsla.l * 100).toFixed(2) + \"%)\";\r\n }\r\n return Color.Format.CSS.formatHSLA(color);\r\n }\r\n CSS.formatHSL = formatHSL;\r\n function formatHSLA(color) {\r\n return \"hsla(\" + color.hsla.h + \", \" + (color.hsla.s * 100).toFixed(2) + \"%, \" + (color.hsla.l * 100).toFixed(2) + \"%, \" + color.hsla.a.toFixed(2) + \")\";\r\n }\r\n CSS.formatHSLA = formatHSLA;\r\n function _toTwoDigitHex(n) {\r\n var r = n.toString(16);\r\n return r.length !== 2 ? '0' + r : r;\r\n }\r\n /**\r\n * Formats the color as #RRGGBB\r\n */\r\n function formatHex(color) {\r\n return \"#\" + _toTwoDigitHex(color.rgba.r) + _toTwoDigitHex(color.rgba.g) + _toTwoDigitHex(color.rgba.b);\r\n }\r\n CSS.formatHex = formatHex;\r\n /**\r\n * Formats the color as #RRGGBBAA\r\n * If 'compact' is set, colors without transparancy will be printed as #RRGGBB\r\n */\r\n function formatHexA(color, compact) {\r\n if (compact === void 0) { compact = false; }\r\n if (compact && color.rgba.a === 1) {\r\n return Color.Format.CSS.formatHex(color);\r\n }\r\n return \"#\" + _toTwoDigitHex(color.rgba.r) + _toTwoDigitHex(color.rgba.g) + _toTwoDigitHex(color.rgba.b) + _toTwoDigitHex(Math.round(color.rgba.a * 255));\r\n }\r\n CSS.formatHexA = formatHexA;\r\n /**\r\n * The default format will use HEX if opaque and RGBA otherwise.\r\n */\r\n function format(color) {\r\n if (color.isOpaque()) {\r\n return Color.Format.CSS.formatHex(color);\r\n }\r\n return Color.Format.CSS.formatRGBA(color);\r\n }\r\n CSS.format = format;\r\n /**\r\n * Converts an Hex color value to a Color.\r\n * returns r, g, and b are contained in the set [0, 255]\r\n * @param hex string (#RGB, #RGBA, #RRGGBB or #RRGGBBAA).\r\n */\r\n function parseHex(hex) {\r\n var length = hex.length;\r\n if (length === 0) {\r\n // Invalid color\r\n return null;\r\n }\r\n if (hex.charCodeAt(0) !== 35 /* Hash */) {\r\n // Does not begin with a #\r\n return null;\r\n }\r\n if (length === 7) {\r\n // #RRGGBB format\r\n var r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\r\n var g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\r\n var b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\r\n return new Color(new RGBA(r, g, b, 1));\r\n }\r\n if (length === 9) {\r\n // #RRGGBBAA format\r\n var r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\r\n var g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\r\n var b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\r\n var a = 16 * _parseHexDigit(hex.charCodeAt(7)) + _parseHexDigit(hex.charCodeAt(8));\r\n return new Color(new RGBA(r, g, b, a / 255));\r\n }\r\n if (length === 4) {\r\n // #RGB format\r\n var r = _parseHexDigit(hex.charCodeAt(1));\r\n var g = _parseHexDigit(hex.charCodeAt(2));\r\n var b = _parseHexDigit(hex.charCodeAt(3));\r\n return new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b));\r\n }\r\n if (length === 5) {\r\n // #RGBA format\r\n var r = _parseHexDigit(hex.charCodeAt(1));\r\n var g = _parseHexDigit(hex.charCodeAt(2));\r\n var b = _parseHexDigit(hex.charCodeAt(3));\r\n var a = _parseHexDigit(hex.charCodeAt(4));\r\n return new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b, (16 * a + a) / 255));\r\n }\r\n // Invalid color\r\n return null;\r\n }\r\n CSS.parseHex = parseHex;\r\n function _parseHexDigit(charCode) {\r\n switch (charCode) {\r\n case 48 /* Digit0 */: return 0;\r\n case 49 /* Digit1 */: return 1;\r\n case 50 /* Digit2 */: return 2;\r\n case 51 /* Digit3 */: return 3;\r\n case 52 /* Digit4 */: return 4;\r\n case 53 /* Digit5 */: return 5;\r\n case 54 /* Digit6 */: return 6;\r\n case 55 /* Digit7 */: return 7;\r\n case 56 /* Digit8 */: return 8;\r\n case 57 /* Digit9 */: return 9;\r\n case 97 /* a */: return 10;\r\n case 65 /* A */: return 10;\r\n case 98 /* b */: return 11;\r\n case 66 /* B */: return 11;\r\n case 99 /* c */: return 12;\r\n case 67 /* C */: return 12;\r\n case 100 /* d */: return 13;\r\n case 68 /* D */: return 13;\r\n case 101 /* e */: return 14;\r\n case 69 /* E */: return 14;\r\n case 102 /* f */: return 15;\r\n case 70 /* F */: return 15;\r\n }\r\n return 0;\r\n }\r\n })(CSS = Format.CSS || (Format.CSS = {}));\r\n })(Format = Color.Format || (Color.Format = {}));\r\n})(Color || (Color = {}));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { URI } from '../../../base/common/uri.js';\r\nimport { EDITOR_MODEL_DEFAULTS } from '../config/editorOptions.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport { Selection } from '../core/selection.js';\r\nimport * as model from '../model.js';\r\nimport { EditStack } from './editStack.js';\r\nimport { guessIndentation } from './indentationGuesser.js';\r\nimport { IntervalNode, IntervalTree, getNodeIsInOverviewRuler, recomputeMaxEnd } from './intervalTree.js';\r\nimport { PieceTreeTextBufferBuilder } from './pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js';\r\nimport { InternalModelContentChangeEvent, ModelRawContentChangedEvent, ModelRawEOLChanged, ModelRawFlush, ModelRawLineChanged, ModelRawLinesDeleted, ModelRawLinesInserted } from './textModelEvents.js';\r\nimport { SearchParams, TextModelSearch } from './textModelSearch.js';\r\nimport { TextModelTokenization } from './textModelTokens.js';\r\nimport { getWordAtText } from './wordHelper.js';\r\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\r\nimport { NULL_LANGUAGE_IDENTIFIER } from '../modes/nullMode.js';\r\nimport { ignoreBracketsInToken } from '../modes/supports.js';\r\nimport { BracketsUtils } from '../modes/supports/richEditBrackets.js';\r\nimport { withUndefinedAsNull } from '../../../base/common/types.js';\r\nimport { TokensStore, countEOL, TokensStore2 } from './tokensStore.js';\r\nimport { Color } from '../../../base/common/color.js';\r\nfunction createTextBufferBuilder() {\r\n return new PieceTreeTextBufferBuilder();\r\n}\r\nexport function createTextBufferFactory(text) {\r\n var builder = createTextBufferBuilder();\r\n builder.acceptChunk(text);\r\n return builder.finish();\r\n}\r\nexport function createTextBuffer(value, defaultEOL) {\r\n var factory = (typeof value === 'string' ? createTextBufferFactory(value) : value);\r\n return factory.create(defaultEOL);\r\n}\r\nvar MODEL_ID = 0;\r\nvar LIMIT_FIND_COUNT = 999;\r\nexport var LONG_LINE_BOUNDARY = 10000;\r\nvar invalidFunc = function () { throw new Error(\"Invalid change accessor\"); };\r\nvar TextModel = /** @class */ (function (_super) {\r\n __extends(TextModel, _super);\r\n //#endregion\r\n function TextModel(source, creationOptions, languageIdentifier, associatedResource) {\r\n if (associatedResource === void 0) { associatedResource = null; }\r\n var _this = _super.call(this) || this;\r\n //#region Events\r\n _this._onWillDispose = _this._register(new Emitter());\r\n _this.onWillDispose = _this._onWillDispose.event;\r\n _this._onDidChangeDecorations = _this._register(new DidChangeDecorationsEmitter());\r\n _this.onDidChangeDecorations = _this._onDidChangeDecorations.event;\r\n _this._onDidChangeLanguage = _this._register(new Emitter());\r\n _this.onDidChangeLanguage = _this._onDidChangeLanguage.event;\r\n _this._onDidChangeLanguageConfiguration = _this._register(new Emitter());\r\n _this.onDidChangeLanguageConfiguration = _this._onDidChangeLanguageConfiguration.event;\r\n _this._onDidChangeTokens = _this._register(new Emitter());\r\n _this.onDidChangeTokens = _this._onDidChangeTokens.event;\r\n _this._onDidChangeOptions = _this._register(new Emitter());\r\n _this.onDidChangeOptions = _this._onDidChangeOptions.event;\r\n _this._onDidChangeAttached = _this._register(new Emitter());\r\n _this.onDidChangeAttached = _this._onDidChangeAttached.event;\r\n _this._eventEmitter = _this._register(new DidChangeContentEmitter());\r\n // Generate a new unique model id\r\n MODEL_ID++;\r\n _this.id = '$model' + MODEL_ID;\r\n _this.isForSimpleWidget = creationOptions.isForSimpleWidget;\r\n if (typeof associatedResource === 'undefined' || associatedResource === null) {\r\n _this._associatedResource = URI.parse('inmemory://model/' + MODEL_ID);\r\n }\r\n else {\r\n _this._associatedResource = associatedResource;\r\n }\r\n _this._attachedEditorCount = 0;\r\n _this._buffer = createTextBuffer(source, creationOptions.defaultEOL);\r\n _this._options = TextModel.resolveOptions(_this._buffer, creationOptions);\r\n var bufferLineCount = _this._buffer.getLineCount();\r\n var bufferTextLength = _this._buffer.getValueLengthInRange(new Range(1, 1, bufferLineCount, _this._buffer.getLineLength(bufferLineCount) + 1), 0 /* TextDefined */);\r\n // !!! Make a decision in the ctor and permanently respect this decision !!!\r\n // If a model is too large at construction time, it will never get tokenized,\r\n // under no circumstances.\r\n if (creationOptions.largeFileOptimizations) {\r\n _this._isTooLargeForTokenization = ((bufferTextLength > TextModel.LARGE_FILE_SIZE_THRESHOLD)\r\n || (bufferLineCount > TextModel.LARGE_FILE_LINE_COUNT_THRESHOLD));\r\n }\r\n else {\r\n _this._isTooLargeForTokenization = false;\r\n }\r\n _this._isTooLargeForSyncing = (bufferTextLength > TextModel.MODEL_SYNC_LIMIT);\r\n _this._versionId = 1;\r\n _this._alternativeVersionId = 1;\r\n _this._isDisposed = false;\r\n _this._isDisposing = false;\r\n _this._languageIdentifier = languageIdentifier || NULL_LANGUAGE_IDENTIFIER;\r\n _this._languageRegistryListener = LanguageConfigurationRegistry.onDidChange(function (e) {\r\n if (e.languageIdentifier.id === _this._languageIdentifier.id) {\r\n _this._onDidChangeLanguageConfiguration.fire({});\r\n }\r\n });\r\n _this._instanceId = strings.singleLetterHash(MODEL_ID);\r\n _this._lastDecorationId = 0;\r\n _this._decorations = Object.create(null);\r\n _this._decorationsTree = new DecorationsTrees();\r\n _this._commandManager = new EditStack(_this);\r\n _this._isUndoing = false;\r\n _this._isRedoing = false;\r\n _this._trimAutoWhitespaceLines = null;\r\n _this._tokens = new TokensStore();\r\n _this._tokens2 = new TokensStore2();\r\n _this._tokenization = new TextModelTokenization(_this);\r\n return _this;\r\n }\r\n TextModel.createFromString = function (text, options, languageIdentifier, uri) {\r\n if (options === void 0) { options = TextModel.DEFAULT_CREATION_OPTIONS; }\r\n if (languageIdentifier === void 0) { languageIdentifier = null; }\r\n if (uri === void 0) { uri = null; }\r\n return new TextModel(text, options, languageIdentifier, uri);\r\n };\r\n TextModel.resolveOptions = function (textBuffer, options) {\r\n if (options.detectIndentation) {\r\n var guessedIndentation = guessIndentation(textBuffer, options.tabSize, options.insertSpaces);\r\n return new model.TextModelResolvedOptions({\r\n tabSize: guessedIndentation.tabSize,\r\n indentSize: guessedIndentation.tabSize,\r\n insertSpaces: guessedIndentation.insertSpaces,\r\n trimAutoWhitespace: options.trimAutoWhitespace,\r\n defaultEOL: options.defaultEOL\r\n });\r\n }\r\n return new model.TextModelResolvedOptions({\r\n tabSize: options.tabSize,\r\n indentSize: options.indentSize,\r\n insertSpaces: options.insertSpaces,\r\n trimAutoWhitespace: options.trimAutoWhitespace,\r\n defaultEOL: options.defaultEOL\r\n });\r\n };\r\n TextModel.prototype.onDidChangeRawContentFast = function (listener) {\r\n return this._eventEmitter.fastEvent(function (e) { return listener(e.rawContentChangedEvent); });\r\n };\r\n TextModel.prototype.onDidChangeRawContent = function (listener) {\r\n return this._eventEmitter.slowEvent(function (e) { return listener(e.rawContentChangedEvent); });\r\n };\r\n TextModel.prototype.onDidChangeContentFast = function (listener) {\r\n return this._eventEmitter.fastEvent(function (e) { return listener(e.contentChangedEvent); });\r\n };\r\n TextModel.prototype.onDidChangeContent = function (listener) {\r\n return this._eventEmitter.slowEvent(function (e) { return listener(e.contentChangedEvent); });\r\n };\r\n TextModel.prototype.dispose = function () {\r\n this._isDisposing = true;\r\n this._onWillDispose.fire();\r\n this._languageRegistryListener.dispose();\r\n this._tokenization.dispose();\r\n this._isDisposed = true;\r\n _super.prototype.dispose.call(this);\r\n this._isDisposing = false;\r\n };\r\n TextModel.prototype._assertNotDisposed = function () {\r\n if (this._isDisposed) {\r\n throw new Error('Model is disposed!');\r\n }\r\n };\r\n TextModel.prototype._emitContentChangedEvent = function (rawChange, change) {\r\n if (this._isDisposing) {\r\n // Do not confuse listeners by emitting any event after disposing\r\n return;\r\n }\r\n this._eventEmitter.fire(new InternalModelContentChangeEvent(rawChange, change));\r\n };\r\n TextModel.prototype.setValue = function (value) {\r\n this._assertNotDisposed();\r\n if (value === null) {\r\n // There's nothing to do\r\n return;\r\n }\r\n var textBuffer = createTextBuffer(value, this._options.defaultEOL);\r\n this.setValueFromTextBuffer(textBuffer);\r\n };\r\n TextModel.prototype._createContentChanged2 = function (range, rangeOffset, rangeLength, text, isUndoing, isRedoing, isFlush) {\r\n return {\r\n changes: [{\r\n range: range,\r\n rangeOffset: rangeOffset,\r\n rangeLength: rangeLength,\r\n text: text,\r\n }],\r\n eol: this._buffer.getEOL(),\r\n versionId: this.getVersionId(),\r\n isUndoing: isUndoing,\r\n isRedoing: isRedoing,\r\n isFlush: isFlush\r\n };\r\n };\r\n TextModel.prototype.setValueFromTextBuffer = function (textBuffer) {\r\n this._assertNotDisposed();\r\n if (textBuffer === null) {\r\n // There's nothing to do\r\n return;\r\n }\r\n var oldFullModelRange = this.getFullModelRange();\r\n var oldModelValueLength = this.getValueLengthInRange(oldFullModelRange);\r\n var endLineNumber = this.getLineCount();\r\n var endColumn = this.getLineMaxColumn(endLineNumber);\r\n this._buffer = textBuffer;\r\n this._increaseVersionId();\r\n // Flush all tokens\r\n this._tokens.flush();\r\n this._tokens2.flush();\r\n // Destroy all my decorations\r\n this._decorations = Object.create(null);\r\n this._decorationsTree = new DecorationsTrees();\r\n // Destroy my edit history and settings\r\n this._commandManager = new EditStack(this);\r\n this._trimAutoWhitespaceLines = null;\r\n this._emitContentChangedEvent(new ModelRawContentChangedEvent([\r\n new ModelRawFlush()\r\n ], this._versionId, false, false), this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, true));\r\n };\r\n TextModel.prototype.setEOL = function (eol) {\r\n this._assertNotDisposed();\r\n var newEOL = (eol === 1 /* CRLF */ ? '\\r\\n' : '\\n');\r\n if (this._buffer.getEOL() === newEOL) {\r\n // Nothing to do\r\n return;\r\n }\r\n var oldFullModelRange = this.getFullModelRange();\r\n var oldModelValueLength = this.getValueLengthInRange(oldFullModelRange);\r\n var endLineNumber = this.getLineCount();\r\n var endColumn = this.getLineMaxColumn(endLineNumber);\r\n this._onBeforeEOLChange();\r\n this._buffer.setEOL(newEOL);\r\n this._increaseVersionId();\r\n this._onAfterEOLChange();\r\n this._emitContentChangedEvent(new ModelRawContentChangedEvent([\r\n new ModelRawEOLChanged()\r\n ], this._versionId, false, false), this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, false));\r\n };\r\n TextModel.prototype._onBeforeEOLChange = function () {\r\n // Ensure all decorations get their `range` set.\r\n var versionId = this.getVersionId();\r\n var allDecorations = this._decorationsTree.search(0, false, false, versionId);\r\n this._ensureNodesHaveRanges(allDecorations);\r\n };\r\n TextModel.prototype._onAfterEOLChange = function () {\r\n // Transform back `range` to offsets\r\n var versionId = this.getVersionId();\r\n var allDecorations = this._decorationsTree.collectNodesPostOrder();\r\n for (var i = 0, len = allDecorations.length; i < len; i++) {\r\n var node = allDecorations[i];\r\n var delta = node.cachedAbsoluteStart - node.start;\r\n var startOffset = this._buffer.getOffsetAt(node.range.startLineNumber, node.range.startColumn);\r\n var endOffset = this._buffer.getOffsetAt(node.range.endLineNumber, node.range.endColumn);\r\n node.cachedAbsoluteStart = startOffset;\r\n node.cachedAbsoluteEnd = endOffset;\r\n node.cachedVersionId = versionId;\r\n node.start = startOffset - delta;\r\n node.end = endOffset - delta;\r\n recomputeMaxEnd(node);\r\n }\r\n };\r\n TextModel.prototype.onBeforeAttached = function () {\r\n this._attachedEditorCount++;\r\n if (this._attachedEditorCount === 1) {\r\n this._onDidChangeAttached.fire(undefined);\r\n }\r\n };\r\n TextModel.prototype.onBeforeDetached = function () {\r\n this._attachedEditorCount--;\r\n if (this._attachedEditorCount === 0) {\r\n this._onDidChangeAttached.fire(undefined);\r\n }\r\n };\r\n TextModel.prototype.isAttachedToEditor = function () {\r\n return this._attachedEditorCount > 0;\r\n };\r\n TextModel.prototype.getAttachedEditorCount = function () {\r\n return this._attachedEditorCount;\r\n };\r\n TextModel.prototype.isTooLargeForSyncing = function () {\r\n return this._isTooLargeForSyncing;\r\n };\r\n TextModel.prototype.isTooLargeForTokenization = function () {\r\n return this._isTooLargeForTokenization;\r\n };\r\n TextModel.prototype.isDisposed = function () {\r\n return this._isDisposed;\r\n };\r\n TextModel.prototype.isDominatedByLongLines = function () {\r\n this._assertNotDisposed();\r\n if (this.isTooLargeForTokenization()) {\r\n // Cannot word wrap huge files anyways, so it doesn't really matter\r\n return false;\r\n }\r\n var smallLineCharCount = 0;\r\n var longLineCharCount = 0;\r\n var lineCount = this._buffer.getLineCount();\r\n for (var lineNumber = 1; lineNumber <= lineCount; lineNumber++) {\r\n var lineLength = this._buffer.getLineLength(lineNumber);\r\n if (lineLength >= LONG_LINE_BOUNDARY) {\r\n longLineCharCount += lineLength;\r\n }\r\n else {\r\n smallLineCharCount += lineLength;\r\n }\r\n }\r\n return (longLineCharCount > smallLineCharCount);\r\n };\r\n Object.defineProperty(TextModel.prototype, \"uri\", {\r\n get: function () {\r\n return this._associatedResource;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n //#region Options\r\n TextModel.prototype.getOptions = function () {\r\n this._assertNotDisposed();\r\n return this._options;\r\n };\r\n TextModel.prototype.getFormattingOptions = function () {\r\n return {\r\n tabSize: this._options.indentSize,\r\n insertSpaces: this._options.insertSpaces\r\n };\r\n };\r\n TextModel.prototype.updateOptions = function (_newOpts) {\r\n this._assertNotDisposed();\r\n var tabSize = (typeof _newOpts.tabSize !== 'undefined') ? _newOpts.tabSize : this._options.tabSize;\r\n var indentSize = (typeof _newOpts.indentSize !== 'undefined') ? _newOpts.indentSize : this._options.indentSize;\r\n var insertSpaces = (typeof _newOpts.insertSpaces !== 'undefined') ? _newOpts.insertSpaces : this._options.insertSpaces;\r\n var trimAutoWhitespace = (typeof _newOpts.trimAutoWhitespace !== 'undefined') ? _newOpts.trimAutoWhitespace : this._options.trimAutoWhitespace;\r\n var newOpts = new model.TextModelResolvedOptions({\r\n tabSize: tabSize,\r\n indentSize: indentSize,\r\n insertSpaces: insertSpaces,\r\n defaultEOL: this._options.defaultEOL,\r\n trimAutoWhitespace: trimAutoWhitespace\r\n });\r\n if (this._options.equals(newOpts)) {\r\n return;\r\n }\r\n var e = this._options.createChangeEvent(newOpts);\r\n this._options = newOpts;\r\n this._onDidChangeOptions.fire(e);\r\n };\r\n TextModel.prototype.detectIndentation = function (defaultInsertSpaces, defaultTabSize) {\r\n this._assertNotDisposed();\r\n var guessedIndentation = guessIndentation(this._buffer, defaultTabSize, defaultInsertSpaces);\r\n this.updateOptions({\r\n insertSpaces: guessedIndentation.insertSpaces,\r\n tabSize: guessedIndentation.tabSize,\r\n indentSize: guessedIndentation.tabSize,\r\n });\r\n };\r\n TextModel._normalizeIndentationFromWhitespace = function (str, indentSize, insertSpaces) {\r\n var spacesCnt = 0;\r\n for (var i = 0; i < str.length; i++) {\r\n if (str.charAt(i) === '\\t') {\r\n spacesCnt += indentSize;\r\n }\r\n else {\r\n spacesCnt++;\r\n }\r\n }\r\n var result = '';\r\n if (!insertSpaces) {\r\n var tabsCnt = Math.floor(spacesCnt / indentSize);\r\n spacesCnt = spacesCnt % indentSize;\r\n for (var i = 0; i < tabsCnt; i++) {\r\n result += '\\t';\r\n }\r\n }\r\n for (var i = 0; i < spacesCnt; i++) {\r\n result += ' ';\r\n }\r\n return result;\r\n };\r\n TextModel.normalizeIndentation = function (str, indentSize, insertSpaces) {\r\n var firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(str);\r\n if (firstNonWhitespaceIndex === -1) {\r\n firstNonWhitespaceIndex = str.length;\r\n }\r\n return TextModel._normalizeIndentationFromWhitespace(str.substring(0, firstNonWhitespaceIndex), indentSize, insertSpaces) + str.substring(firstNonWhitespaceIndex);\r\n };\r\n TextModel.prototype.normalizeIndentation = function (str) {\r\n this._assertNotDisposed();\r\n return TextModel.normalizeIndentation(str, this._options.indentSize, this._options.insertSpaces);\r\n };\r\n //#endregion\r\n //#region Reading\r\n TextModel.prototype.getVersionId = function () {\r\n this._assertNotDisposed();\r\n return this._versionId;\r\n };\r\n TextModel.prototype.mightContainRTL = function () {\r\n return this._buffer.mightContainRTL();\r\n };\r\n TextModel.prototype.mightContainNonBasicASCII = function () {\r\n return this._buffer.mightContainNonBasicASCII();\r\n };\r\n TextModel.prototype.getAlternativeVersionId = function () {\r\n this._assertNotDisposed();\r\n return this._alternativeVersionId;\r\n };\r\n TextModel.prototype.getOffsetAt = function (rawPosition) {\r\n this._assertNotDisposed();\r\n var position = this._validatePosition(rawPosition.lineNumber, rawPosition.column, false);\r\n return this._buffer.getOffsetAt(position.lineNumber, position.column);\r\n };\r\n TextModel.prototype.getPositionAt = function (rawOffset) {\r\n this._assertNotDisposed();\r\n var offset = (Math.min(this._buffer.getLength(), Math.max(0, rawOffset)));\r\n return this._buffer.getPositionAt(offset);\r\n };\r\n TextModel.prototype._increaseVersionId = function () {\r\n this._versionId = this._versionId + 1;\r\n this._alternativeVersionId = this._versionId;\r\n };\r\n TextModel.prototype._overwriteAlternativeVersionId = function (newAlternativeVersionId) {\r\n this._alternativeVersionId = newAlternativeVersionId;\r\n };\r\n TextModel.prototype.getValue = function (eol, preserveBOM) {\r\n if (preserveBOM === void 0) { preserveBOM = false; }\r\n this._assertNotDisposed();\r\n var fullModelRange = this.getFullModelRange();\r\n var fullModelValue = this.getValueInRange(fullModelRange, eol);\r\n if (preserveBOM) {\r\n return this._buffer.getBOM() + fullModelValue;\r\n }\r\n return fullModelValue;\r\n };\r\n TextModel.prototype.getValueLength = function (eol, preserveBOM) {\r\n if (preserveBOM === void 0) { preserveBOM = false; }\r\n this._assertNotDisposed();\r\n var fullModelRange = this.getFullModelRange();\r\n var fullModelValue = this.getValueLengthInRange(fullModelRange, eol);\r\n if (preserveBOM) {\r\n return this._buffer.getBOM().length + fullModelValue;\r\n }\r\n return fullModelValue;\r\n };\r\n TextModel.prototype.getValueInRange = function (rawRange, eol) {\r\n if (eol === void 0) { eol = 0 /* TextDefined */; }\r\n this._assertNotDisposed();\r\n return this._buffer.getValueInRange(this.validateRange(rawRange), eol);\r\n };\r\n TextModel.prototype.getValueLengthInRange = function (rawRange, eol) {\r\n if (eol === void 0) { eol = 0 /* TextDefined */; }\r\n this._assertNotDisposed();\r\n return this._buffer.getValueLengthInRange(this.validateRange(rawRange), eol);\r\n };\r\n TextModel.prototype.getCharacterCountInRange = function (rawRange, eol) {\r\n if (eol === void 0) { eol = 0 /* TextDefined */; }\r\n this._assertNotDisposed();\r\n return this._buffer.getCharacterCountInRange(this.validateRange(rawRange), eol);\r\n };\r\n TextModel.prototype.getLineCount = function () {\r\n this._assertNotDisposed();\r\n return this._buffer.getLineCount();\r\n };\r\n TextModel.prototype.getLineContent = function (lineNumber) {\r\n this._assertNotDisposed();\r\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n return this._buffer.getLineContent(lineNumber);\r\n };\r\n TextModel.prototype.getLineLength = function (lineNumber) {\r\n this._assertNotDisposed();\r\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n return this._buffer.getLineLength(lineNumber);\r\n };\r\n TextModel.prototype.getLinesContent = function () {\r\n this._assertNotDisposed();\r\n return this._buffer.getLinesContent();\r\n };\r\n TextModel.prototype.getEOL = function () {\r\n this._assertNotDisposed();\r\n return this._buffer.getEOL();\r\n };\r\n TextModel.prototype.getLineMinColumn = function (lineNumber) {\r\n this._assertNotDisposed();\r\n return 1;\r\n };\r\n TextModel.prototype.getLineMaxColumn = function (lineNumber) {\r\n this._assertNotDisposed();\r\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n return this._buffer.getLineLength(lineNumber) + 1;\r\n };\r\n TextModel.prototype.getLineFirstNonWhitespaceColumn = function (lineNumber) {\r\n this._assertNotDisposed();\r\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n return this._buffer.getLineFirstNonWhitespaceColumn(lineNumber);\r\n };\r\n TextModel.prototype.getLineLastNonWhitespaceColumn = function (lineNumber) {\r\n this._assertNotDisposed();\r\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n return this._buffer.getLineLastNonWhitespaceColumn(lineNumber);\r\n };\r\n /**\r\n * Validates `range` is within buffer bounds, but allows it to sit in between surrogate pairs, etc.\r\n * Will try to not allocate if possible.\r\n */\r\n TextModel.prototype._validateRangeRelaxedNoAllocations = function (range) {\r\n var linesCount = this._buffer.getLineCount();\r\n var initialStartLineNumber = range.startLineNumber;\r\n var initialStartColumn = range.startColumn;\r\n var startLineNumber;\r\n var startColumn;\r\n if (initialStartLineNumber < 1) {\r\n startLineNumber = 1;\r\n startColumn = 1;\r\n }\r\n else if (initialStartLineNumber > linesCount) {\r\n startLineNumber = linesCount;\r\n startColumn = this.getLineMaxColumn(startLineNumber);\r\n }\r\n else {\r\n startLineNumber = initialStartLineNumber | 0;\r\n if (initialStartColumn <= 1) {\r\n startColumn = 1;\r\n }\r\n else {\r\n var maxColumn = this.getLineMaxColumn(startLineNumber);\r\n if (initialStartColumn >= maxColumn) {\r\n startColumn = maxColumn;\r\n }\r\n else {\r\n startColumn = initialStartColumn | 0;\r\n }\r\n }\r\n }\r\n var initialEndLineNumber = range.endLineNumber;\r\n var initialEndColumn = range.endColumn;\r\n var endLineNumber;\r\n var endColumn;\r\n if (initialEndLineNumber < 1) {\r\n endLineNumber = 1;\r\n endColumn = 1;\r\n }\r\n else if (initialEndLineNumber > linesCount) {\r\n endLineNumber = linesCount;\r\n endColumn = this.getLineMaxColumn(endLineNumber);\r\n }\r\n else {\r\n endLineNumber = initialEndLineNumber | 0;\r\n if (initialEndColumn <= 1) {\r\n endColumn = 1;\r\n }\r\n else {\r\n var maxColumn = this.getLineMaxColumn(endLineNumber);\r\n if (initialEndColumn >= maxColumn) {\r\n endColumn = maxColumn;\r\n }\r\n else {\r\n endColumn = initialEndColumn | 0;\r\n }\r\n }\r\n }\r\n if (initialStartLineNumber === startLineNumber\r\n && initialStartColumn === startColumn\r\n && initialEndLineNumber === endLineNumber\r\n && initialEndColumn === endColumn\r\n && range instanceof Range\r\n && !(range instanceof Selection)) {\r\n return range;\r\n }\r\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\r\n };\r\n /**\r\n * @param strict Do NOT allow a position inside a high-low surrogate pair\r\n */\r\n TextModel.prototype._isValidPosition = function (lineNumber, column, strict) {\r\n if (typeof lineNumber !== 'number' || typeof column !== 'number') {\r\n return false;\r\n }\r\n if (isNaN(lineNumber) || isNaN(column)) {\r\n return false;\r\n }\r\n if (lineNumber < 1 || column < 1) {\r\n return false;\r\n }\r\n if ((lineNumber | 0) !== lineNumber || (column | 0) !== column) {\r\n return false;\r\n }\r\n var lineCount = this._buffer.getLineCount();\r\n if (lineNumber > lineCount) {\r\n return false;\r\n }\r\n var maxColumn = this.getLineMaxColumn(lineNumber);\r\n if (column > maxColumn) {\r\n return false;\r\n }\r\n if (strict) {\r\n var charStartOffset = strings.getCharContainingOffset(this._buffer.getLineContent(lineNumber), column - 1)[0];\r\n if (column !== charStartOffset + 1) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * @param strict Do NOT allow a position inside a high-low surrogate pair\r\n */\r\n TextModel.prototype._validatePosition = function (_lineNumber, _column, strict) {\r\n var lineNumber = Math.floor((typeof _lineNumber === 'number' && !isNaN(_lineNumber)) ? _lineNumber : 1);\r\n var column = Math.floor((typeof _column === 'number' && !isNaN(_column)) ? _column : 1);\r\n var lineCount = this._buffer.getLineCount();\r\n if (lineNumber < 1) {\r\n return new Position(1, 1);\r\n }\r\n if (lineNumber > lineCount) {\r\n return new Position(lineCount, this.getLineMaxColumn(lineCount));\r\n }\r\n if (column <= 1) {\r\n return new Position(lineNumber, 1);\r\n }\r\n var maxColumn = this.getLineMaxColumn(lineNumber);\r\n if (column >= maxColumn) {\r\n return new Position(lineNumber, maxColumn);\r\n }\r\n if (strict) {\r\n var charStartOffset = strings.getCharContainingOffset(this._buffer.getLineContent(lineNumber), column - 1)[0];\r\n if (column !== charStartOffset + 1) {\r\n return new Position(lineNumber, charStartOffset + 1);\r\n }\r\n }\r\n return new Position(lineNumber, column);\r\n };\r\n TextModel.prototype.validatePosition = function (position) {\r\n this._assertNotDisposed();\r\n // Avoid object allocation and cover most likely case\r\n if (position instanceof Position) {\r\n if (this._isValidPosition(position.lineNumber, position.column, true)) {\r\n return position;\r\n }\r\n }\r\n return this._validatePosition(position.lineNumber, position.column, true);\r\n };\r\n /**\r\n * @param strict Do NOT allow a range to have its boundaries inside a high-low surrogate pair\r\n */\r\n TextModel.prototype._isValidRange = function (range, strict) {\r\n var startLineNumber = range.startLineNumber;\r\n var startColumn = range.startColumn;\r\n var endLineNumber = range.endLineNumber;\r\n var endColumn = range.endColumn;\r\n if (!this._isValidPosition(startLineNumber, startColumn, false)) {\r\n return false;\r\n }\r\n if (!this._isValidPosition(endLineNumber, endColumn, false)) {\r\n return false;\r\n }\r\n if (strict) {\r\n var startLineContent = this._buffer.getLineContent(startLineNumber);\r\n if (startColumn < startLineContent.length + 1) {\r\n var charStartOffset = strings.getCharContainingOffset(startLineContent, startColumn - 1)[0];\r\n if (startColumn !== charStartOffset + 1) {\r\n return false;\r\n }\r\n }\r\n if (endColumn >= 2) {\r\n var endLineContent = (endLineNumber === startLineNumber ? startLineContent : this._buffer.getLineContent(endLineNumber));\r\n var _a = strings.getCharContainingOffset(endLineContent, endColumn - 2), charEndOffset = _a[1];\r\n if (endColumn !== charEndOffset + 1) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return true;\r\n };\r\n TextModel.prototype.validateRange = function (_range) {\r\n this._assertNotDisposed();\r\n // Avoid object allocation and cover most likely case\r\n if ((_range instanceof Range) && !(_range instanceof Selection)) {\r\n if (this._isValidRange(_range, true)) {\r\n return _range;\r\n }\r\n }\r\n var start = this._validatePosition(_range.startLineNumber, _range.startColumn, false);\r\n var end = this._validatePosition(_range.endLineNumber, _range.endColumn, false);\r\n var startLineNumber = start.lineNumber;\r\n var startColumn = start.column;\r\n var endLineNumber = end.lineNumber;\r\n var endColumn = end.column;\r\n var isEmpty = (startLineNumber === endLineNumber && startColumn === endColumn);\r\n var startLineContent = this._buffer.getLineContent(startLineNumber);\r\n if (startColumn < startLineContent.length + 1) {\r\n var charStartOffset = strings.getCharContainingOffset(startLineContent, startColumn - 1)[0];\r\n if (startColumn !== charStartOffset + 1) {\r\n if (isEmpty) {\r\n // do not expand a collapsed range, simply move it to a valid location\r\n return new Range(startLineNumber, charStartOffset + 1, startLineNumber, charStartOffset + 1);\r\n }\r\n startColumn = charStartOffset + 1;\r\n }\r\n }\r\n if (endColumn >= 2) {\r\n var endLineContent = (endLineNumber === startLineNumber ? startLineContent : this._buffer.getLineContent(endLineNumber));\r\n var _a = strings.getCharContainingOffset(endLineContent, endColumn - 2), charEndOffset = _a[1];\r\n if (endColumn !== charEndOffset + 1) {\r\n endColumn = charEndOffset + 1;\r\n }\r\n }\r\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\r\n };\r\n TextModel.prototype.modifyPosition = function (rawPosition, offset) {\r\n this._assertNotDisposed();\r\n var candidate = this.getOffsetAt(rawPosition) + offset;\r\n return this.getPositionAt(Math.min(this._buffer.getLength(), Math.max(0, candidate)));\r\n };\r\n TextModel.prototype.getFullModelRange = function () {\r\n this._assertNotDisposed();\r\n var lineCount = this.getLineCount();\r\n return new Range(1, 1, lineCount, this.getLineMaxColumn(lineCount));\r\n };\r\n TextModel.prototype.findMatchesLineByLine = function (searchRange, searchData, captureMatches, limitResultCount) {\r\n return this._buffer.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);\r\n };\r\n TextModel.prototype.findMatches = function (searchString, rawSearchScope, isRegex, matchCase, wordSeparators, captureMatches, limitResultCount) {\r\n if (limitResultCount === void 0) { limitResultCount = LIMIT_FIND_COUNT; }\r\n this._assertNotDisposed();\r\n var searchRange;\r\n if (Range.isIRange(rawSearchScope)) {\r\n searchRange = this.validateRange(rawSearchScope);\r\n }\r\n else {\r\n searchRange = this.getFullModelRange();\r\n }\r\n if (!isRegex && searchString.indexOf('\\n') < 0) {\r\n // not regex, not multi line\r\n var searchParams = new SearchParams(searchString, isRegex, matchCase, wordSeparators);\r\n var searchData = searchParams.parseSearchRequest();\r\n if (!searchData) {\r\n return [];\r\n }\r\n return this.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);\r\n }\r\n return TextModelSearch.findMatches(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchRange, captureMatches, limitResultCount);\r\n };\r\n TextModel.prototype.findNextMatch = function (searchString, rawSearchStart, isRegex, matchCase, wordSeparators, captureMatches) {\r\n this._assertNotDisposed();\r\n var searchStart = this.validatePosition(rawSearchStart);\r\n if (!isRegex && searchString.indexOf('\\n') < 0) {\r\n var searchParams = new SearchParams(searchString, isRegex, matchCase, wordSeparators);\r\n var searchData = searchParams.parseSearchRequest();\r\n if (!searchData) {\r\n return null;\r\n }\r\n var lineCount = this.getLineCount();\r\n var searchRange = new Range(searchStart.lineNumber, searchStart.column, lineCount, this.getLineMaxColumn(lineCount));\r\n var ret = this.findMatchesLineByLine(searchRange, searchData, captureMatches, 1);\r\n TextModelSearch.findNextMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\r\n if (ret.length > 0) {\r\n return ret[0];\r\n }\r\n searchRange = new Range(1, 1, searchStart.lineNumber, this.getLineMaxColumn(searchStart.lineNumber));\r\n ret = this.findMatchesLineByLine(searchRange, searchData, captureMatches, 1);\r\n if (ret.length > 0) {\r\n return ret[0];\r\n }\r\n return null;\r\n }\r\n return TextModelSearch.findNextMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\r\n };\r\n TextModel.prototype.findPreviousMatch = function (searchString, rawSearchStart, isRegex, matchCase, wordSeparators, captureMatches) {\r\n this._assertNotDisposed();\r\n var searchStart = this.validatePosition(rawSearchStart);\r\n return TextModelSearch.findPreviousMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\r\n };\r\n //#endregion\r\n //#region Editing\r\n TextModel.prototype.pushStackElement = function () {\r\n this._commandManager.pushStackElement();\r\n };\r\n TextModel.prototype.pushEOL = function (eol) {\r\n var currentEOL = (this.getEOL() === '\\n' ? 0 /* LF */ : 1 /* CRLF */);\r\n if (currentEOL === eol) {\r\n return;\r\n }\r\n try {\r\n this._onDidChangeDecorations.beginDeferredEmit();\r\n this._eventEmitter.beginDeferredEmit();\r\n this._commandManager.pushEOL(eol);\r\n }\r\n finally {\r\n this._eventEmitter.endDeferredEmit();\r\n this._onDidChangeDecorations.endDeferredEmit();\r\n }\r\n };\r\n TextModel.prototype.pushEditOperations = function (beforeCursorState, editOperations, cursorStateComputer) {\r\n try {\r\n this._onDidChangeDecorations.beginDeferredEmit();\r\n this._eventEmitter.beginDeferredEmit();\r\n return this._pushEditOperations(beforeCursorState, editOperations, cursorStateComputer);\r\n }\r\n finally {\r\n this._eventEmitter.endDeferredEmit();\r\n this._onDidChangeDecorations.endDeferredEmit();\r\n }\r\n };\r\n TextModel.prototype._pushEditOperations = function (beforeCursorState, editOperations, cursorStateComputer) {\r\n var _this = this;\r\n if (this._options.trimAutoWhitespace && this._trimAutoWhitespaceLines) {\r\n // Go through each saved line number and insert a trim whitespace edit\r\n // if it is safe to do so (no conflicts with other edits).\r\n var incomingEdits = editOperations.map(function (op) {\r\n return {\r\n range: _this.validateRange(op.range),\r\n text: op.text\r\n };\r\n });\r\n // Sometimes, auto-formatters change ranges automatically which can cause undesired auto whitespace trimming near the cursor\r\n // We'll use the following heuristic: if the edits occur near the cursor, then it's ok to trim auto whitespace\r\n var editsAreNearCursors = true;\r\n for (var i = 0, len = beforeCursorState.length; i < len; i++) {\r\n var sel = beforeCursorState[i];\r\n var foundEditNearSel = false;\r\n for (var j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\r\n var editRange = incomingEdits[j].range;\r\n var selIsAbove = editRange.startLineNumber > sel.endLineNumber;\r\n var selIsBelow = sel.startLineNumber > editRange.endLineNumber;\r\n if (!selIsAbove && !selIsBelow) {\r\n foundEditNearSel = true;\r\n break;\r\n }\r\n }\r\n if (!foundEditNearSel) {\r\n editsAreNearCursors = false;\r\n break;\r\n }\r\n }\r\n if (editsAreNearCursors) {\r\n for (var i = 0, len = this._trimAutoWhitespaceLines.length; i < len; i++) {\r\n var trimLineNumber = this._trimAutoWhitespaceLines[i];\r\n var maxLineColumn = this.getLineMaxColumn(trimLineNumber);\r\n var allowTrimLine = true;\r\n for (var j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\r\n var editRange = incomingEdits[j].range;\r\n var editText = incomingEdits[j].text;\r\n if (trimLineNumber < editRange.startLineNumber || trimLineNumber > editRange.endLineNumber) {\r\n // `trimLine` is completely outside this edit\r\n continue;\r\n }\r\n // At this point:\r\n // editRange.startLineNumber <= trimLine <= editRange.endLineNumber\r\n if (trimLineNumber === editRange.startLineNumber && editRange.startColumn === maxLineColumn\r\n && editRange.isEmpty() && editText && editText.length > 0 && editText.charAt(0) === '\\n') {\r\n // This edit inserts a new line (and maybe other text) after `trimLine`\r\n continue;\r\n }\r\n if (trimLineNumber === editRange.startLineNumber && editRange.startColumn === 1\r\n && editRange.isEmpty() && editText && editText.length > 0 && editText.charAt(editText.length - 1) === '\\n') {\r\n // This edit inserts a new line (and maybe other text) before `trimLine`\r\n continue;\r\n }\r\n // Looks like we can't trim this line as it would interfere with an incoming edit\r\n allowTrimLine = false;\r\n break;\r\n }\r\n if (allowTrimLine) {\r\n editOperations.push({\r\n range: new Range(trimLineNumber, 1, trimLineNumber, maxLineColumn),\r\n text: null\r\n });\r\n }\r\n }\r\n }\r\n this._trimAutoWhitespaceLines = null;\r\n }\r\n return this._commandManager.pushEditOperation(beforeCursorState, editOperations, cursorStateComputer);\r\n };\r\n TextModel.prototype.applyEdits = function (rawOperations) {\r\n try {\r\n this._onDidChangeDecorations.beginDeferredEmit();\r\n this._eventEmitter.beginDeferredEmit();\r\n return this._applyEdits(rawOperations);\r\n }\r\n finally {\r\n this._eventEmitter.endDeferredEmit();\r\n this._onDidChangeDecorations.endDeferredEmit();\r\n }\r\n };\r\n TextModel.prototype._applyEdits = function (rawOperations) {\r\n for (var i = 0, len = rawOperations.length; i < len; i++) {\r\n rawOperations[i].range = this.validateRange(rawOperations[i].range);\r\n }\r\n var oldLineCount = this._buffer.getLineCount();\r\n var result = this._buffer.applyEdits(rawOperations, this._options.trimAutoWhitespace);\r\n var newLineCount = this._buffer.getLineCount();\r\n var contentChanges = result.changes;\r\n this._trimAutoWhitespaceLines = result.trimAutoWhitespaceLineNumbers;\r\n if (contentChanges.length !== 0) {\r\n var rawContentChanges = [];\r\n var lineCount = oldLineCount;\r\n for (var i = 0, len = contentChanges.length; i < len; i++) {\r\n var change = contentChanges[i];\r\n var _a = countEOL(change.text), eolCount = _a[0], firstLineLength = _a[1], lastLineLength = _a[2];\r\n this._tokens.acceptEdit(change.range, eolCount, firstLineLength);\r\n this._tokens2.acceptEdit(change.range, eolCount, firstLineLength, lastLineLength, change.text.length > 0 ? change.text.charCodeAt(0) : 0 /* Null */);\r\n this._onDidChangeDecorations.fire();\r\n this._decorationsTree.acceptReplace(change.rangeOffset, change.rangeLength, change.text.length, change.forceMoveMarkers);\r\n var startLineNumber = change.range.startLineNumber;\r\n var endLineNumber = change.range.endLineNumber;\r\n var deletingLinesCnt = endLineNumber - startLineNumber;\r\n var insertingLinesCnt = eolCount;\r\n var editingLinesCnt = Math.min(deletingLinesCnt, insertingLinesCnt);\r\n var changeLineCountDelta = (insertingLinesCnt - deletingLinesCnt);\r\n for (var j = editingLinesCnt; j >= 0; j--) {\r\n var editLineNumber = startLineNumber + j;\r\n var currentEditLineNumber = newLineCount - lineCount - changeLineCountDelta + editLineNumber;\r\n rawContentChanges.push(new ModelRawLineChanged(editLineNumber, this.getLineContent(currentEditLineNumber)));\r\n }\r\n if (editingLinesCnt < deletingLinesCnt) {\r\n // Must delete some lines\r\n var spliceStartLineNumber = startLineNumber + editingLinesCnt;\r\n rawContentChanges.push(new ModelRawLinesDeleted(spliceStartLineNumber + 1, endLineNumber));\r\n }\r\n if (editingLinesCnt < insertingLinesCnt) {\r\n // Must insert some lines\r\n var spliceLineNumber = startLineNumber + editingLinesCnt;\r\n var cnt = insertingLinesCnt - editingLinesCnt;\r\n var fromLineNumber = newLineCount - lineCount - cnt + spliceLineNumber + 1;\r\n var newLines = [];\r\n for (var i_1 = 0; i_1 < cnt; i_1++) {\r\n var lineNumber = fromLineNumber + i_1;\r\n newLines[lineNumber - fromLineNumber] = this.getLineContent(lineNumber);\r\n }\r\n rawContentChanges.push(new ModelRawLinesInserted(spliceLineNumber + 1, startLineNumber + insertingLinesCnt, newLines));\r\n }\r\n lineCount += changeLineCountDelta;\r\n }\r\n this._increaseVersionId();\r\n this._emitContentChangedEvent(new ModelRawContentChangedEvent(rawContentChanges, this.getVersionId(), this._isUndoing, this._isRedoing), {\r\n changes: contentChanges,\r\n eol: this._buffer.getEOL(),\r\n versionId: this.getVersionId(),\r\n isUndoing: this._isUndoing,\r\n isRedoing: this._isRedoing,\r\n isFlush: false\r\n });\r\n }\r\n return result.reverseEdits;\r\n };\r\n TextModel.prototype._undo = function () {\r\n this._isUndoing = true;\r\n var r = this._commandManager.undo();\r\n this._isUndoing = false;\r\n if (!r) {\r\n return null;\r\n }\r\n this._overwriteAlternativeVersionId(r.recordedVersionId);\r\n return r.selections;\r\n };\r\n TextModel.prototype.undo = function () {\r\n try {\r\n this._onDidChangeDecorations.beginDeferredEmit();\r\n this._eventEmitter.beginDeferredEmit();\r\n return this._undo();\r\n }\r\n finally {\r\n this._eventEmitter.endDeferredEmit();\r\n this._onDidChangeDecorations.endDeferredEmit();\r\n }\r\n };\r\n TextModel.prototype.canUndo = function () {\r\n return this._commandManager.canUndo();\r\n };\r\n TextModel.prototype._redo = function () {\r\n this._isRedoing = true;\r\n var r = this._commandManager.redo();\r\n this._isRedoing = false;\r\n if (!r) {\r\n return null;\r\n }\r\n this._overwriteAlternativeVersionId(r.recordedVersionId);\r\n return r.selections;\r\n };\r\n TextModel.prototype.redo = function () {\r\n try {\r\n this._onDidChangeDecorations.beginDeferredEmit();\r\n this._eventEmitter.beginDeferredEmit();\r\n return this._redo();\r\n }\r\n finally {\r\n this._eventEmitter.endDeferredEmit();\r\n this._onDidChangeDecorations.endDeferredEmit();\r\n }\r\n };\r\n TextModel.prototype.canRedo = function () {\r\n return this._commandManager.canRedo();\r\n };\r\n //#endregion\r\n //#region Decorations\r\n TextModel.prototype.changeDecorations = function (callback, ownerId) {\r\n if (ownerId === void 0) { ownerId = 0; }\r\n this._assertNotDisposed();\r\n try {\r\n this._onDidChangeDecorations.beginDeferredEmit();\r\n return this._changeDecorations(ownerId, callback);\r\n }\r\n finally {\r\n this._onDidChangeDecorations.endDeferredEmit();\r\n }\r\n };\r\n TextModel.prototype._changeDecorations = function (ownerId, callback) {\r\n var _this = this;\r\n var changeAccessor = {\r\n addDecoration: function (range, options) {\r\n _this._onDidChangeDecorations.fire();\r\n return _this._deltaDecorationsImpl(ownerId, [], [{ range: range, options: options }])[0];\r\n },\r\n changeDecoration: function (id, newRange) {\r\n _this._onDidChangeDecorations.fire();\r\n _this._changeDecorationImpl(id, newRange);\r\n },\r\n changeDecorationOptions: function (id, options) {\r\n _this._onDidChangeDecorations.fire();\r\n _this._changeDecorationOptionsImpl(id, _normalizeOptions(options));\r\n },\r\n removeDecoration: function (id) {\r\n _this._onDidChangeDecorations.fire();\r\n _this._deltaDecorationsImpl(ownerId, [id], []);\r\n },\r\n deltaDecorations: function (oldDecorations, newDecorations) {\r\n if (oldDecorations.length === 0 && newDecorations.length === 0) {\r\n // nothing to do\r\n return [];\r\n }\r\n _this._onDidChangeDecorations.fire();\r\n return _this._deltaDecorationsImpl(ownerId, oldDecorations, newDecorations);\r\n }\r\n };\r\n var result = null;\r\n try {\r\n result = callback(changeAccessor);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n }\r\n // Invalidate change accessor\r\n changeAccessor.addDecoration = invalidFunc;\r\n changeAccessor.changeDecoration = invalidFunc;\r\n changeAccessor.changeDecorationOptions = invalidFunc;\r\n changeAccessor.removeDecoration = invalidFunc;\r\n changeAccessor.deltaDecorations = invalidFunc;\r\n return result;\r\n };\r\n TextModel.prototype.deltaDecorations = function (oldDecorations, newDecorations, ownerId) {\r\n if (ownerId === void 0) { ownerId = 0; }\r\n this._assertNotDisposed();\r\n if (!oldDecorations) {\r\n oldDecorations = [];\r\n }\r\n if (oldDecorations.length === 0 && newDecorations.length === 0) {\r\n // nothing to do\r\n return [];\r\n }\r\n try {\r\n this._onDidChangeDecorations.beginDeferredEmit();\r\n this._onDidChangeDecorations.fire();\r\n return this._deltaDecorationsImpl(ownerId, oldDecorations, newDecorations);\r\n }\r\n finally {\r\n this._onDidChangeDecorations.endDeferredEmit();\r\n }\r\n };\r\n TextModel.prototype._getTrackedRange = function (id) {\r\n return this.getDecorationRange(id);\r\n };\r\n TextModel.prototype._setTrackedRange = function (id, newRange, newStickiness) {\r\n var node = (id ? this._decorations[id] : null);\r\n if (!node) {\r\n if (!newRange) {\r\n // node doesn't exist, the request is to delete => nothing to do\r\n return null;\r\n }\r\n // node doesn't exist, the request is to set => add the tracked range\r\n return this._deltaDecorationsImpl(0, [], [{ range: newRange, options: TRACKED_RANGE_OPTIONS[newStickiness] }])[0];\r\n }\r\n if (!newRange) {\r\n // node exists, the request is to delete => delete node\r\n this._decorationsTree.delete(node);\r\n delete this._decorations[node.id];\r\n return null;\r\n }\r\n // node exists, the request is to set => change the tracked range and its options\r\n var range = this._validateRangeRelaxedNoAllocations(newRange);\r\n var startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\r\n var endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\r\n this._decorationsTree.delete(node);\r\n node.reset(this.getVersionId(), startOffset, endOffset, range);\r\n node.setOptions(TRACKED_RANGE_OPTIONS[newStickiness]);\r\n this._decorationsTree.insert(node);\r\n return node.id;\r\n };\r\n TextModel.prototype.removeAllDecorationsWithOwnerId = function (ownerId) {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n var nodes = this._decorationsTree.collectNodesFromOwner(ownerId);\r\n for (var i = 0, len = nodes.length; i < len; i++) {\r\n var node = nodes[i];\r\n this._decorationsTree.delete(node);\r\n delete this._decorations[node.id];\r\n }\r\n };\r\n TextModel.prototype.getDecorationOptions = function (decorationId) {\r\n var node = this._decorations[decorationId];\r\n if (!node) {\r\n return null;\r\n }\r\n return node.options;\r\n };\r\n TextModel.prototype.getDecorationRange = function (decorationId) {\r\n var node = this._decorations[decorationId];\r\n if (!node) {\r\n return null;\r\n }\r\n var versionId = this.getVersionId();\r\n if (node.cachedVersionId !== versionId) {\r\n this._decorationsTree.resolveNode(node, versionId);\r\n }\r\n if (node.range === null) {\r\n node.range = this._getRangeAt(node.cachedAbsoluteStart, node.cachedAbsoluteEnd);\r\n }\r\n return node.range;\r\n };\r\n TextModel.prototype.getLineDecorations = function (lineNumber, ownerId, filterOutValidation) {\r\n if (ownerId === void 0) { ownerId = 0; }\r\n if (filterOutValidation === void 0) { filterOutValidation = false; }\r\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\r\n return [];\r\n }\r\n return this.getLinesDecorations(lineNumber, lineNumber, ownerId, filterOutValidation);\r\n };\r\n TextModel.prototype.getLinesDecorations = function (_startLineNumber, _endLineNumber, ownerId, filterOutValidation) {\r\n if (ownerId === void 0) { ownerId = 0; }\r\n if (filterOutValidation === void 0) { filterOutValidation = false; }\r\n var lineCount = this.getLineCount();\r\n var startLineNumber = Math.min(lineCount, Math.max(1, _startLineNumber));\r\n var endLineNumber = Math.min(lineCount, Math.max(1, _endLineNumber));\r\n var endColumn = this.getLineMaxColumn(endLineNumber);\r\n return this._getDecorationsInRange(new Range(startLineNumber, 1, endLineNumber, endColumn), ownerId, filterOutValidation);\r\n };\r\n TextModel.prototype.getDecorationsInRange = function (range, ownerId, filterOutValidation) {\r\n if (ownerId === void 0) { ownerId = 0; }\r\n if (filterOutValidation === void 0) { filterOutValidation = false; }\r\n var validatedRange = this.validateRange(range);\r\n return this._getDecorationsInRange(validatedRange, ownerId, filterOutValidation);\r\n };\r\n TextModel.prototype.getOverviewRulerDecorations = function (ownerId, filterOutValidation) {\r\n if (ownerId === void 0) { ownerId = 0; }\r\n if (filterOutValidation === void 0) { filterOutValidation = false; }\r\n var versionId = this.getVersionId();\r\n var result = this._decorationsTree.search(ownerId, filterOutValidation, true, versionId);\r\n return this._ensureNodesHaveRanges(result);\r\n };\r\n TextModel.prototype.getAllDecorations = function (ownerId, filterOutValidation) {\r\n if (ownerId === void 0) { ownerId = 0; }\r\n if (filterOutValidation === void 0) { filterOutValidation = false; }\r\n var versionId = this.getVersionId();\r\n var result = this._decorationsTree.search(ownerId, filterOutValidation, false, versionId);\r\n return this._ensureNodesHaveRanges(result);\r\n };\r\n TextModel.prototype._getDecorationsInRange = function (filterRange, filterOwnerId, filterOutValidation) {\r\n var startOffset = this._buffer.getOffsetAt(filterRange.startLineNumber, filterRange.startColumn);\r\n var endOffset = this._buffer.getOffsetAt(filterRange.endLineNumber, filterRange.endColumn);\r\n var versionId = this.getVersionId();\r\n var result = this._decorationsTree.intervalSearch(startOffset, endOffset, filterOwnerId, filterOutValidation, versionId);\r\n return this._ensureNodesHaveRanges(result);\r\n };\r\n TextModel.prototype._ensureNodesHaveRanges = function (nodes) {\r\n for (var i = 0, len = nodes.length; i < len; i++) {\r\n var node = nodes[i];\r\n if (node.range === null) {\r\n node.range = this._getRangeAt(node.cachedAbsoluteStart, node.cachedAbsoluteEnd);\r\n }\r\n }\r\n return nodes;\r\n };\r\n TextModel.prototype._getRangeAt = function (start, end) {\r\n return this._buffer.getRangeAt(start, end - start);\r\n };\r\n TextModel.prototype._changeDecorationImpl = function (decorationId, _range) {\r\n var node = this._decorations[decorationId];\r\n if (!node) {\r\n return;\r\n }\r\n var range = this._validateRangeRelaxedNoAllocations(_range);\r\n var startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\r\n var endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\r\n this._decorationsTree.delete(node);\r\n node.reset(this.getVersionId(), startOffset, endOffset, range);\r\n this._decorationsTree.insert(node);\r\n };\r\n TextModel.prototype._changeDecorationOptionsImpl = function (decorationId, options) {\r\n var node = this._decorations[decorationId];\r\n if (!node) {\r\n return;\r\n }\r\n var nodeWasInOverviewRuler = (node.options.overviewRuler && node.options.overviewRuler.color ? true : false);\r\n var nodeIsInOverviewRuler = (options.overviewRuler && options.overviewRuler.color ? true : false);\r\n if (nodeWasInOverviewRuler !== nodeIsInOverviewRuler) {\r\n // Delete + Insert due to an overview ruler status change\r\n this._decorationsTree.delete(node);\r\n node.setOptions(options);\r\n this._decorationsTree.insert(node);\r\n }\r\n else {\r\n node.setOptions(options);\r\n }\r\n };\r\n TextModel.prototype._deltaDecorationsImpl = function (ownerId, oldDecorationsIds, newDecorations) {\r\n var versionId = this.getVersionId();\r\n var oldDecorationsLen = oldDecorationsIds.length;\r\n var oldDecorationIndex = 0;\r\n var newDecorationsLen = newDecorations.length;\r\n var newDecorationIndex = 0;\r\n var result = new Array(newDecorationsLen);\r\n while (oldDecorationIndex < oldDecorationsLen || newDecorationIndex < newDecorationsLen) {\r\n var node = null;\r\n if (oldDecorationIndex < oldDecorationsLen) {\r\n // (1) get ourselves an old node\r\n do {\r\n node = this._decorations[oldDecorationsIds[oldDecorationIndex++]];\r\n } while (!node && oldDecorationIndex < oldDecorationsLen);\r\n // (2) remove the node from the tree (if it exists)\r\n if (node) {\r\n this._decorationsTree.delete(node);\r\n }\r\n }\r\n if (newDecorationIndex < newDecorationsLen) {\r\n // (3) create a new node if necessary\r\n if (!node) {\r\n var internalDecorationId = (++this._lastDecorationId);\r\n var decorationId = this._instanceId + \";\" + internalDecorationId;\r\n node = new IntervalNode(decorationId, 0, 0);\r\n this._decorations[decorationId] = node;\r\n }\r\n // (4) initialize node\r\n var newDecoration = newDecorations[newDecorationIndex];\r\n var range = this._validateRangeRelaxedNoAllocations(newDecoration.range);\r\n var options = _normalizeOptions(newDecoration.options);\r\n var startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\r\n var endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\r\n node.ownerId = ownerId;\r\n node.reset(versionId, startOffset, endOffset, range);\r\n node.setOptions(options);\r\n this._decorationsTree.insert(node);\r\n result[newDecorationIndex] = node.id;\r\n newDecorationIndex++;\r\n }\r\n else {\r\n if (node) {\r\n delete this._decorations[node.id];\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n //#endregion\r\n //#region Tokenization\r\n TextModel.prototype.setLineTokens = function (lineNumber, tokens) {\r\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n this._tokens.setTokens(this._languageIdentifier.id, lineNumber - 1, this._buffer.getLineLength(lineNumber), tokens);\r\n };\r\n TextModel.prototype.setTokens = function (tokens) {\r\n if (tokens.length === 0) {\r\n return;\r\n }\r\n var ranges = [];\r\n for (var i = 0, len = tokens.length; i < len; i++) {\r\n var element = tokens[i];\r\n ranges.push({ fromLineNumber: element.startLineNumber, toLineNumber: element.startLineNumber + element.tokens.length - 1 });\r\n for (var j = 0, lenJ = element.tokens.length; j < lenJ; j++) {\r\n this.setLineTokens(element.startLineNumber + j, element.tokens[j]);\r\n }\r\n }\r\n this._emitModelTokensChangedEvent({\r\n tokenizationSupportChanged: false,\r\n ranges: ranges\r\n });\r\n };\r\n TextModel.prototype.setSemanticTokens = function (tokens) {\r\n this._tokens2.set(tokens);\r\n this._emitModelTokensChangedEvent({\r\n tokenizationSupportChanged: false,\r\n ranges: [{ fromLineNumber: 1, toLineNumber: this.getLineCount() }]\r\n });\r\n };\r\n TextModel.prototype.tokenizeViewport = function (startLineNumber, endLineNumber) {\r\n startLineNumber = Math.max(1, startLineNumber);\r\n endLineNumber = Math.min(this._buffer.getLineCount(), endLineNumber);\r\n this._tokenization.tokenizeViewport(startLineNumber, endLineNumber);\r\n };\r\n TextModel.prototype.clearTokens = function () {\r\n this._tokens.flush();\r\n this._emitModelTokensChangedEvent({\r\n tokenizationSupportChanged: true,\r\n ranges: [{\r\n fromLineNumber: 1,\r\n toLineNumber: this._buffer.getLineCount()\r\n }]\r\n });\r\n };\r\n TextModel.prototype._emitModelTokensChangedEvent = function (e) {\r\n if (!this._isDisposing) {\r\n this._onDidChangeTokens.fire(e);\r\n }\r\n };\r\n TextModel.prototype.resetTokenization = function () {\r\n this._tokenization.reset();\r\n };\r\n TextModel.prototype.forceTokenization = function (lineNumber) {\r\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n this._tokenization.forceTokenization(lineNumber);\r\n };\r\n TextModel.prototype.isCheapToTokenize = function (lineNumber) {\r\n return this._tokenization.isCheapToTokenize(lineNumber);\r\n };\r\n TextModel.prototype.tokenizeIfCheap = function (lineNumber) {\r\n if (this.isCheapToTokenize(lineNumber)) {\r\n this.forceTokenization(lineNumber);\r\n }\r\n };\r\n TextModel.prototype.getLineTokens = function (lineNumber) {\r\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n return this._getLineTokens(lineNumber);\r\n };\r\n TextModel.prototype._getLineTokens = function (lineNumber) {\r\n var lineText = this.getLineContent(lineNumber);\r\n var syntacticTokens = this._tokens.getTokens(this._languageIdentifier.id, lineNumber - 1, lineText);\r\n return this._tokens2.addSemanticTokens(lineNumber, syntacticTokens);\r\n };\r\n TextModel.prototype.getLanguageIdentifier = function () {\r\n return this._languageIdentifier;\r\n };\r\n TextModel.prototype.getModeId = function () {\r\n return this._languageIdentifier.language;\r\n };\r\n TextModel.prototype.setMode = function (languageIdentifier) {\r\n if (this._languageIdentifier.id === languageIdentifier.id) {\r\n // There's nothing to do\r\n return;\r\n }\r\n var e = {\r\n oldLanguage: this._languageIdentifier.language,\r\n newLanguage: languageIdentifier.language\r\n };\r\n this._languageIdentifier = languageIdentifier;\r\n this._onDidChangeLanguage.fire(e);\r\n this._onDidChangeLanguageConfiguration.fire({});\r\n };\r\n TextModel.prototype.getLanguageIdAtPosition = function (lineNumber, column) {\r\n var position = this.validatePosition(new Position(lineNumber, column));\r\n var lineTokens = this.getLineTokens(position.lineNumber);\r\n return lineTokens.getLanguageId(lineTokens.findTokenIndexAtOffset(position.column - 1));\r\n };\r\n // Having tokens allows implementing additional helper methods\r\n TextModel.prototype.getWordAtPosition = function (_position) {\r\n this._assertNotDisposed();\r\n var position = this.validatePosition(_position);\r\n var lineContent = this.getLineContent(position.lineNumber);\r\n var lineTokens = this._getLineTokens(position.lineNumber);\r\n var tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\r\n // (1). First try checking right biased word\r\n var _a = TextModel._findLanguageBoundaries(lineTokens, tokenIndex), rbStartOffset = _a[0], rbEndOffset = _a[1];\r\n var rightBiasedWord = getWordAtText(position.column, LanguageConfigurationRegistry.getWordDefinition(lineTokens.getLanguageId(tokenIndex)), lineContent.substring(rbStartOffset, rbEndOffset), rbStartOffset);\r\n // Make sure the result touches the original passed in position\r\n if (rightBiasedWord && rightBiasedWord.startColumn <= _position.column && _position.column <= rightBiasedWord.endColumn) {\r\n return rightBiasedWord;\r\n }\r\n // (2). Else, if we were at a language boundary, check the left biased word\r\n if (tokenIndex > 0 && rbStartOffset === position.column - 1) {\r\n // edge case, where `position` sits between two tokens belonging to two different languages\r\n var _b = TextModel._findLanguageBoundaries(lineTokens, tokenIndex - 1), lbStartOffset = _b[0], lbEndOffset = _b[1];\r\n var leftBiasedWord = getWordAtText(position.column, LanguageConfigurationRegistry.getWordDefinition(lineTokens.getLanguageId(tokenIndex - 1)), lineContent.substring(lbStartOffset, lbEndOffset), lbStartOffset);\r\n // Make sure the result touches the original passed in position\r\n if (leftBiasedWord && leftBiasedWord.startColumn <= _position.column && _position.column <= leftBiasedWord.endColumn) {\r\n return leftBiasedWord;\r\n }\r\n }\r\n return null;\r\n };\r\n TextModel._findLanguageBoundaries = function (lineTokens, tokenIndex) {\r\n var languageId = lineTokens.getLanguageId(tokenIndex);\r\n // go left until a different language is hit\r\n var startOffset = 0;\r\n for (var i = tokenIndex; i >= 0 && lineTokens.getLanguageId(i) === languageId; i--) {\r\n startOffset = lineTokens.getStartOffset(i);\r\n }\r\n // go right until a different language is hit\r\n var endOffset = lineTokens.getLineContent().length;\r\n for (var i = tokenIndex, tokenCount = lineTokens.getCount(); i < tokenCount && lineTokens.getLanguageId(i) === languageId; i++) {\r\n endOffset = lineTokens.getEndOffset(i);\r\n }\r\n return [startOffset, endOffset];\r\n };\r\n TextModel.prototype.getWordUntilPosition = function (position) {\r\n var wordAtPosition = this.getWordAtPosition(position);\r\n if (!wordAtPosition) {\r\n return {\r\n word: '',\r\n startColumn: position.column,\r\n endColumn: position.column\r\n };\r\n }\r\n return {\r\n word: wordAtPosition.word.substr(0, position.column - wordAtPosition.startColumn),\r\n startColumn: wordAtPosition.startColumn,\r\n endColumn: position.column\r\n };\r\n };\r\n TextModel.prototype.findMatchingBracketUp = function (_bracket, _position) {\r\n var bracket = _bracket.toLowerCase();\r\n var position = this.validatePosition(_position);\r\n var lineTokens = this._getLineTokens(position.lineNumber);\r\n var languageId = lineTokens.getLanguageId(lineTokens.findTokenIndexAtOffset(position.column - 1));\r\n var bracketsSupport = LanguageConfigurationRegistry.getBracketsSupport(languageId);\r\n if (!bracketsSupport) {\r\n return null;\r\n }\r\n var data = bracketsSupport.textIsBracket[bracket];\r\n if (!data) {\r\n return null;\r\n }\r\n return this._findMatchingBracketUp(data, position);\r\n };\r\n TextModel.prototype.matchBracket = function (position) {\r\n return this._matchBracket(this.validatePosition(position));\r\n };\r\n TextModel.prototype._matchBracket = function (position) {\r\n var lineNumber = position.lineNumber;\r\n var lineTokens = this._getLineTokens(lineNumber);\r\n var lineText = this._buffer.getLineContent(lineNumber);\r\n var tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\r\n if (tokenIndex < 0) {\r\n return null;\r\n }\r\n var currentModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(lineTokens.getLanguageId(tokenIndex));\r\n // check that the token is not to be ignored\r\n if (currentModeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex))) {\r\n // limit search to not go before `maxBracketLength`\r\n var searchStartOffset = Math.max(0, position.column - 1 - currentModeBrackets.maxBracketLength);\r\n // limit search to not go after `maxBracketLength`\r\n var searchEndOffset = Math.min(lineText.length, position.column - 1 + currentModeBrackets.maxBracketLength);\r\n // it might be the case that [currentTokenStart -> currentTokenEnd] contains multiple brackets\r\n // `bestResult` will contain the most right-side result\r\n var bestResult = null;\r\n while (true) {\r\n var foundBracket = BracketsUtils.findNextBracketInRange(currentModeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (!foundBracket) {\r\n // there are no more brackets in this text\r\n break;\r\n }\r\n // check that we didn't hit a bracket too far away from position\r\n if (foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {\r\n var foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1).toLowerCase();\r\n var r = this._matchFoundBracket(foundBracket, currentModeBrackets.textIsBracket[foundBracketText], currentModeBrackets.textIsOpenBracket[foundBracketText]);\r\n if (r) {\r\n bestResult = r;\r\n }\r\n }\r\n searchStartOffset = foundBracket.endColumn - 1;\r\n }\r\n if (bestResult) {\r\n return bestResult;\r\n }\r\n }\r\n // If position is in between two tokens, try also looking in the previous token\r\n if (tokenIndex > 0 && lineTokens.getStartOffset(tokenIndex) === position.column - 1) {\r\n var prevTokenIndex = tokenIndex - 1;\r\n var prevModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(lineTokens.getLanguageId(prevTokenIndex));\r\n // check that previous token is not to be ignored\r\n if (prevModeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(prevTokenIndex))) {\r\n // limit search in case previous token is very large, there's no need to go beyond `maxBracketLength`\r\n var searchStartOffset = Math.max(0, position.column - 1 - prevModeBrackets.maxBracketLength);\r\n var searchEndOffset = Math.min(lineText.length, position.column - 1 + prevModeBrackets.maxBracketLength);\r\n var foundBracket = BracketsUtils.findPrevBracketInRange(prevModeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n // check that we didn't hit a bracket too far away from position\r\n if (foundBracket && foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {\r\n var foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1).toLowerCase();\r\n var r = this._matchFoundBracket(foundBracket, prevModeBrackets.textIsBracket[foundBracketText], prevModeBrackets.textIsOpenBracket[foundBracketText]);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n TextModel.prototype._matchFoundBracket = function (foundBracket, data, isOpen) {\r\n if (!data) {\r\n return null;\r\n }\r\n if (isOpen) {\r\n var matched = this._findMatchingBracketDown(data, foundBracket.getEndPosition());\r\n if (matched) {\r\n return [foundBracket, matched];\r\n }\r\n }\r\n else {\r\n var matched = this._findMatchingBracketUp(data, foundBracket.getStartPosition());\r\n if (matched) {\r\n return [foundBracket, matched];\r\n }\r\n }\r\n return null;\r\n };\r\n TextModel.prototype._findMatchingBracketUp = function (bracket, position) {\r\n // console.log('_findMatchingBracketUp: ', 'bracket: ', JSON.stringify(bracket), 'startPosition: ', String(position));\r\n var languageId = bracket.languageIdentifier.id;\r\n var reversedBracketRegex = bracket.reversedRegex;\r\n var count = -1;\r\n var searchPrevMatchingBracketInRange = function (lineNumber, lineText, searchStartOffset, searchEndOffset) {\r\n while (true) {\r\n var r = BracketsUtils.findPrevBracketInRange(reversedBracketRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (!r) {\r\n break;\r\n }\r\n var hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\r\n if (bracket.isOpen(hitText)) {\r\n count++;\r\n }\r\n else if (bracket.isClose(hitText)) {\r\n count--;\r\n }\r\n if (count === 0) {\r\n return r;\r\n }\r\n searchEndOffset = r.startColumn - 1;\r\n }\r\n return null;\r\n };\r\n for (var lineNumber = position.lineNumber; lineNumber >= 1; lineNumber--) {\r\n var lineTokens = this._getLineTokens(lineNumber);\r\n var tokenCount = lineTokens.getCount();\r\n var lineText = this._buffer.getLineContent(lineNumber);\r\n var tokenIndex = tokenCount - 1;\r\n var searchStartOffset = lineText.length;\r\n var searchEndOffset = lineText.length;\r\n if (lineNumber === position.lineNumber) {\r\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\r\n searchStartOffset = position.column - 1;\r\n searchEndOffset = position.column - 1;\r\n }\r\n var prevSearchInToken = true;\r\n for (; tokenIndex >= 0; tokenIndex--) {\r\n var searchInToken = (lineTokens.getLanguageId(tokenIndex) === languageId && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\r\n if (searchInToken) {\r\n // this token should be searched\r\n if (prevSearchInToken) {\r\n // the previous token should be searched, simply extend searchStartOffset\r\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\r\n }\r\n else {\r\n // the previous token should not be searched\r\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\r\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\r\n }\r\n }\r\n else {\r\n // this token should not be searched\r\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = searchPrevMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n prevSearchInToken = searchInToken;\r\n }\r\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = searchPrevMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n TextModel.prototype._findMatchingBracketDown = function (bracket, position) {\r\n // console.log('_findMatchingBracketDown: ', 'bracket: ', JSON.stringify(bracket), 'startPosition: ', String(position));\r\n var languageId = bracket.languageIdentifier.id;\r\n var bracketRegex = bracket.forwardRegex;\r\n var count = 1;\r\n var searchNextMatchingBracketInRange = function (lineNumber, lineText, searchStartOffset, searchEndOffset) {\r\n while (true) {\r\n var r = BracketsUtils.findNextBracketInRange(bracketRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (!r) {\r\n break;\r\n }\r\n var hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\r\n if (bracket.isOpen(hitText)) {\r\n count++;\r\n }\r\n else if (bracket.isClose(hitText)) {\r\n count--;\r\n }\r\n if (count === 0) {\r\n return r;\r\n }\r\n searchStartOffset = r.endColumn - 1;\r\n }\r\n return null;\r\n };\r\n var lineCount = this.getLineCount();\r\n for (var lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\r\n var lineTokens = this._getLineTokens(lineNumber);\r\n var tokenCount = lineTokens.getCount();\r\n var lineText = this._buffer.getLineContent(lineNumber);\r\n var tokenIndex = 0;\r\n var searchStartOffset = 0;\r\n var searchEndOffset = 0;\r\n if (lineNumber === position.lineNumber) {\r\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\r\n searchStartOffset = position.column - 1;\r\n searchEndOffset = position.column - 1;\r\n }\r\n var prevSearchInToken = true;\r\n for (; tokenIndex < tokenCount; tokenIndex++) {\r\n var searchInToken = (lineTokens.getLanguageId(tokenIndex) === languageId && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\r\n if (searchInToken) {\r\n // this token should be searched\r\n if (prevSearchInToken) {\r\n // the previous token should be searched, simply extend searchEndOffset\r\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\r\n }\r\n else {\r\n // the previous token should not be searched\r\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\r\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\r\n }\r\n }\r\n else {\r\n // this token should not be searched\r\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = searchNextMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n prevSearchInToken = searchInToken;\r\n }\r\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = searchNextMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n TextModel.prototype.findPrevBracket = function (_position) {\r\n var position = this.validatePosition(_position);\r\n var languageId = -1;\r\n var modeBrackets = null;\r\n for (var lineNumber = position.lineNumber; lineNumber >= 1; lineNumber--) {\r\n var lineTokens = this._getLineTokens(lineNumber);\r\n var tokenCount = lineTokens.getCount();\r\n var lineText = this._buffer.getLineContent(lineNumber);\r\n var tokenIndex = tokenCount - 1;\r\n var searchStartOffset = lineText.length;\r\n var searchEndOffset = lineText.length;\r\n if (lineNumber === position.lineNumber) {\r\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\r\n searchStartOffset = position.column - 1;\r\n searchEndOffset = position.column - 1;\r\n var tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\r\n if (languageId !== tokenLanguageId) {\r\n languageId = tokenLanguageId;\r\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\r\n }\r\n }\r\n var prevSearchInToken = true;\r\n for (; tokenIndex >= 0; tokenIndex--) {\r\n var tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\r\n if (languageId !== tokenLanguageId) {\r\n // language id change!\r\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return this._toFoundBracket(modeBrackets, r);\r\n }\r\n prevSearchInToken = false;\r\n }\r\n languageId = tokenLanguageId;\r\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\r\n }\r\n var searchInToken = (!!modeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\r\n if (searchInToken) {\r\n // this token should be searched\r\n if (prevSearchInToken) {\r\n // the previous token should be searched, simply extend searchStartOffset\r\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\r\n }\r\n else {\r\n // the previous token should not be searched\r\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\r\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\r\n }\r\n }\r\n else {\r\n // this token should not be searched\r\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return this._toFoundBracket(modeBrackets, r);\r\n }\r\n }\r\n }\r\n prevSearchInToken = searchInToken;\r\n }\r\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return this._toFoundBracket(modeBrackets, r);\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n TextModel.prototype.findNextBracket = function (_position) {\r\n var position = this.validatePosition(_position);\r\n var lineCount = this.getLineCount();\r\n var languageId = -1;\r\n var modeBrackets = null;\r\n for (var lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\r\n var lineTokens = this._getLineTokens(lineNumber);\r\n var tokenCount = lineTokens.getCount();\r\n var lineText = this._buffer.getLineContent(lineNumber);\r\n var tokenIndex = 0;\r\n var searchStartOffset = 0;\r\n var searchEndOffset = 0;\r\n if (lineNumber === position.lineNumber) {\r\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\r\n searchStartOffset = position.column - 1;\r\n searchEndOffset = position.column - 1;\r\n var tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\r\n if (languageId !== tokenLanguageId) {\r\n languageId = tokenLanguageId;\r\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\r\n }\r\n }\r\n var prevSearchInToken = true;\r\n for (; tokenIndex < tokenCount; tokenIndex++) {\r\n var tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\r\n if (languageId !== tokenLanguageId) {\r\n // language id change!\r\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return this._toFoundBracket(modeBrackets, r);\r\n }\r\n prevSearchInToken = false;\r\n }\r\n languageId = tokenLanguageId;\r\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\r\n }\r\n var searchInToken = (!!modeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\r\n if (searchInToken) {\r\n // this token should be searched\r\n if (prevSearchInToken) {\r\n // the previous token should be searched, simply extend searchEndOffset\r\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\r\n }\r\n else {\r\n // the previous token should not be searched\r\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\r\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\r\n }\r\n }\r\n else {\r\n // this token should not be searched\r\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return this._toFoundBracket(modeBrackets, r);\r\n }\r\n }\r\n }\r\n prevSearchInToken = searchInToken;\r\n }\r\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return this._toFoundBracket(modeBrackets, r);\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n TextModel.prototype.findEnclosingBrackets = function (_position, maxDuration) {\r\n var _this = this;\r\n if (maxDuration === void 0) { maxDuration = 1073741824 /* MAX_SAFE_SMALL_INTEGER */; }\r\n var position = this.validatePosition(_position);\r\n var lineCount = this.getLineCount();\r\n var savedCounts = new Map();\r\n var counts = [];\r\n var resetCounts = function (languageId, modeBrackets) {\r\n if (!savedCounts.has(languageId)) {\r\n var tmp = [];\r\n for (var i = 0, len = modeBrackets ? modeBrackets.brackets.length : 0; i < len; i++) {\r\n tmp[i] = 0;\r\n }\r\n savedCounts.set(languageId, tmp);\r\n }\r\n counts = savedCounts.get(languageId);\r\n };\r\n var searchInRange = function (modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset) {\r\n while (true) {\r\n var r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (!r) {\r\n break;\r\n }\r\n var hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\r\n var bracket = modeBrackets.textIsBracket[hitText];\r\n if (bracket) {\r\n if (bracket.isOpen(hitText)) {\r\n counts[bracket.index]++;\r\n }\r\n else if (bracket.isClose(hitText)) {\r\n counts[bracket.index]--;\r\n }\r\n if (counts[bracket.index] === -1) {\r\n return _this._matchFoundBracket(r, bracket, false);\r\n }\r\n }\r\n searchStartOffset = r.endColumn - 1;\r\n }\r\n return null;\r\n };\r\n var languageId = -1;\r\n var modeBrackets = null;\r\n var startTime = Date.now();\r\n for (var lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\r\n var elapsedTime = Date.now() - startTime;\r\n if (elapsedTime > maxDuration) {\r\n return null;\r\n }\r\n var lineTokens = this._getLineTokens(lineNumber);\r\n var tokenCount = lineTokens.getCount();\r\n var lineText = this._buffer.getLineContent(lineNumber);\r\n var tokenIndex = 0;\r\n var searchStartOffset = 0;\r\n var searchEndOffset = 0;\r\n if (lineNumber === position.lineNumber) {\r\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\r\n searchStartOffset = position.column - 1;\r\n searchEndOffset = position.column - 1;\r\n var tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\r\n if (languageId !== tokenLanguageId) {\r\n languageId = tokenLanguageId;\r\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\r\n resetCounts(languageId, modeBrackets);\r\n }\r\n }\r\n var prevSearchInToken = true;\r\n for (; tokenIndex < tokenCount; tokenIndex++) {\r\n var tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\r\n if (languageId !== tokenLanguageId) {\r\n // language id change!\r\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = searchInRange(modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return r;\r\n }\r\n prevSearchInToken = false;\r\n }\r\n languageId = tokenLanguageId;\r\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\r\n resetCounts(languageId, modeBrackets);\r\n }\r\n var searchInToken = (!!modeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\r\n if (searchInToken) {\r\n // this token should be searched\r\n if (prevSearchInToken) {\r\n // the previous token should be searched, simply extend searchEndOffset\r\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\r\n }\r\n else {\r\n // the previous token should not be searched\r\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\r\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\r\n }\r\n }\r\n else {\r\n // this token should not be searched\r\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = searchInRange(modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n prevSearchInToken = searchInToken;\r\n }\r\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\r\n var r = searchInRange(modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n TextModel.prototype._toFoundBracket = function (modeBrackets, r) {\r\n if (!r) {\r\n return null;\r\n }\r\n var text = this.getValueInRange(r);\r\n text = text.toLowerCase();\r\n var data = modeBrackets.textIsBracket[text];\r\n if (!data) {\r\n return null;\r\n }\r\n return {\r\n range: r,\r\n open: data.open,\r\n close: data.close,\r\n isOpen: modeBrackets.textIsOpenBracket[text]\r\n };\r\n };\r\n /**\r\n * Returns:\r\n * - -1 => the line consists of whitespace\r\n * - otherwise => the indent level is returned value\r\n */\r\n TextModel.computeIndentLevel = function (line, tabSize) {\r\n var indent = 0;\r\n var i = 0;\r\n var len = line.length;\r\n while (i < len) {\r\n var chCode = line.charCodeAt(i);\r\n if (chCode === 32 /* Space */) {\r\n indent++;\r\n }\r\n else if (chCode === 9 /* Tab */) {\r\n indent = indent - indent % tabSize + tabSize;\r\n }\r\n else {\r\n break;\r\n }\r\n i++;\r\n }\r\n if (i === len) {\r\n return -1; // line only consists of whitespace\r\n }\r\n return indent;\r\n };\r\n TextModel.prototype._computeIndentLevel = function (lineIndex) {\r\n return TextModel.computeIndentLevel(this._buffer.getLineContent(lineIndex + 1), this._options.tabSize);\r\n };\r\n TextModel.prototype.getActiveIndentGuide = function (lineNumber, minLineNumber, maxLineNumber) {\r\n var _this = this;\r\n this._assertNotDisposed();\r\n var lineCount = this.getLineCount();\r\n if (lineNumber < 1 || lineNumber > lineCount) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n var foldingRules = LanguageConfigurationRegistry.getFoldingRules(this._languageIdentifier.id);\r\n var offSide = Boolean(foldingRules && foldingRules.offSide);\r\n var up_aboveContentLineIndex = -2; /* -2 is a marker for not having computed it */\r\n var up_aboveContentLineIndent = -1;\r\n var up_belowContentLineIndex = -2; /* -2 is a marker for not having computed it */\r\n var up_belowContentLineIndent = -1;\r\n var up_resolveIndents = function (lineNumber) {\r\n if (up_aboveContentLineIndex !== -1 && (up_aboveContentLineIndex === -2 || up_aboveContentLineIndex > lineNumber - 1)) {\r\n up_aboveContentLineIndex = -1;\r\n up_aboveContentLineIndent = -1;\r\n // must find previous line with content\r\n for (var lineIndex = lineNumber - 2; lineIndex >= 0; lineIndex--) {\r\n var indent_1 = _this._computeIndentLevel(lineIndex);\r\n if (indent_1 >= 0) {\r\n up_aboveContentLineIndex = lineIndex;\r\n up_aboveContentLineIndent = indent_1;\r\n break;\r\n }\r\n }\r\n }\r\n if (up_belowContentLineIndex === -2) {\r\n up_belowContentLineIndex = -1;\r\n up_belowContentLineIndent = -1;\r\n // must find next line with content\r\n for (var lineIndex = lineNumber; lineIndex < lineCount; lineIndex++) {\r\n var indent_2 = _this._computeIndentLevel(lineIndex);\r\n if (indent_2 >= 0) {\r\n up_belowContentLineIndex = lineIndex;\r\n up_belowContentLineIndent = indent_2;\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n var down_aboveContentLineIndex = -2; /* -2 is a marker for not having computed it */\r\n var down_aboveContentLineIndent = -1;\r\n var down_belowContentLineIndex = -2; /* -2 is a marker for not having computed it */\r\n var down_belowContentLineIndent = -1;\r\n var down_resolveIndents = function (lineNumber) {\r\n if (down_aboveContentLineIndex === -2) {\r\n down_aboveContentLineIndex = -1;\r\n down_aboveContentLineIndent = -1;\r\n // must find previous line with content\r\n for (var lineIndex = lineNumber - 2; lineIndex >= 0; lineIndex--) {\r\n var indent_3 = _this._computeIndentLevel(lineIndex);\r\n if (indent_3 >= 0) {\r\n down_aboveContentLineIndex = lineIndex;\r\n down_aboveContentLineIndent = indent_3;\r\n break;\r\n }\r\n }\r\n }\r\n if (down_belowContentLineIndex !== -1 && (down_belowContentLineIndex === -2 || down_belowContentLineIndex < lineNumber - 1)) {\r\n down_belowContentLineIndex = -1;\r\n down_belowContentLineIndent = -1;\r\n // must find next line with content\r\n for (var lineIndex = lineNumber; lineIndex < lineCount; lineIndex++) {\r\n var indent_4 = _this._computeIndentLevel(lineIndex);\r\n if (indent_4 >= 0) {\r\n down_belowContentLineIndex = lineIndex;\r\n down_belowContentLineIndent = indent_4;\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n var startLineNumber = 0;\r\n var goUp = true;\r\n var endLineNumber = 0;\r\n var goDown = true;\r\n var indent = 0;\r\n for (var distance = 0; goUp || goDown; distance++) {\r\n var upLineNumber = lineNumber - distance;\r\n var downLineNumber = lineNumber + distance;\r\n if (distance !== 0 && (upLineNumber < 1 || upLineNumber < minLineNumber)) {\r\n goUp = false;\r\n }\r\n if (distance !== 0 && (downLineNumber > lineCount || downLineNumber > maxLineNumber)) {\r\n goDown = false;\r\n }\r\n if (distance > 50000) {\r\n // stop processing\r\n goUp = false;\r\n goDown = false;\r\n }\r\n if (goUp) {\r\n // compute indent level going up\r\n var upLineIndentLevel = void 0;\r\n var currentIndent = this._computeIndentLevel(upLineNumber - 1);\r\n if (currentIndent >= 0) {\r\n // This line has content (besides whitespace)\r\n // Use the line's indent\r\n up_belowContentLineIndex = upLineNumber - 1;\r\n up_belowContentLineIndent = currentIndent;\r\n upLineIndentLevel = Math.ceil(currentIndent / this._options.indentSize);\r\n }\r\n else {\r\n up_resolveIndents(upLineNumber);\r\n upLineIndentLevel = this._getIndentLevelForWhitespaceLine(offSide, up_aboveContentLineIndent, up_belowContentLineIndent);\r\n }\r\n if (distance === 0) {\r\n // This is the initial line number\r\n startLineNumber = upLineNumber;\r\n endLineNumber = downLineNumber;\r\n indent = upLineIndentLevel;\r\n if (indent === 0) {\r\n // No need to continue\r\n return { startLineNumber: startLineNumber, endLineNumber: endLineNumber, indent: indent };\r\n }\r\n continue;\r\n }\r\n if (upLineIndentLevel >= indent) {\r\n startLineNumber = upLineNumber;\r\n }\r\n else {\r\n goUp = false;\r\n }\r\n }\r\n if (goDown) {\r\n // compute indent level going down\r\n var downLineIndentLevel = void 0;\r\n var currentIndent = this._computeIndentLevel(downLineNumber - 1);\r\n if (currentIndent >= 0) {\r\n // This line has content (besides whitespace)\r\n // Use the line's indent\r\n down_aboveContentLineIndex = downLineNumber - 1;\r\n down_aboveContentLineIndent = currentIndent;\r\n downLineIndentLevel = Math.ceil(currentIndent / this._options.indentSize);\r\n }\r\n else {\r\n down_resolveIndents(downLineNumber);\r\n downLineIndentLevel = this._getIndentLevelForWhitespaceLine(offSide, down_aboveContentLineIndent, down_belowContentLineIndent);\r\n }\r\n if (downLineIndentLevel >= indent) {\r\n endLineNumber = downLineNumber;\r\n }\r\n else {\r\n goDown = false;\r\n }\r\n }\r\n }\r\n return { startLineNumber: startLineNumber, endLineNumber: endLineNumber, indent: indent };\r\n };\r\n TextModel.prototype.getLinesIndentGuides = function (startLineNumber, endLineNumber) {\r\n this._assertNotDisposed();\r\n var lineCount = this.getLineCount();\r\n if (startLineNumber < 1 || startLineNumber > lineCount) {\r\n throw new Error('Illegal value for startLineNumber');\r\n }\r\n if (endLineNumber < 1 || endLineNumber > lineCount) {\r\n throw new Error('Illegal value for endLineNumber');\r\n }\r\n var foldingRules = LanguageConfigurationRegistry.getFoldingRules(this._languageIdentifier.id);\r\n var offSide = Boolean(foldingRules && foldingRules.offSide);\r\n var result = new Array(endLineNumber - startLineNumber + 1);\r\n var aboveContentLineIndex = -2; /* -2 is a marker for not having computed it */\r\n var aboveContentLineIndent = -1;\r\n var belowContentLineIndex = -2; /* -2 is a marker for not having computed it */\r\n var belowContentLineIndent = -1;\r\n for (var lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\r\n var resultIndex = lineNumber - startLineNumber;\r\n var currentIndent = this._computeIndentLevel(lineNumber - 1);\r\n if (currentIndent >= 0) {\r\n // This line has content (besides whitespace)\r\n // Use the line's indent\r\n aboveContentLineIndex = lineNumber - 1;\r\n aboveContentLineIndent = currentIndent;\r\n result[resultIndex] = Math.ceil(currentIndent / this._options.indentSize);\r\n continue;\r\n }\r\n if (aboveContentLineIndex === -2) {\r\n aboveContentLineIndex = -1;\r\n aboveContentLineIndent = -1;\r\n // must find previous line with content\r\n for (var lineIndex = lineNumber - 2; lineIndex >= 0; lineIndex--) {\r\n var indent = this._computeIndentLevel(lineIndex);\r\n if (indent >= 0) {\r\n aboveContentLineIndex = lineIndex;\r\n aboveContentLineIndent = indent;\r\n break;\r\n }\r\n }\r\n }\r\n if (belowContentLineIndex !== -1 && (belowContentLineIndex === -2 || belowContentLineIndex < lineNumber - 1)) {\r\n belowContentLineIndex = -1;\r\n belowContentLineIndent = -1;\r\n // must find next line with content\r\n for (var lineIndex = lineNumber; lineIndex < lineCount; lineIndex++) {\r\n var indent = this._computeIndentLevel(lineIndex);\r\n if (indent >= 0) {\r\n belowContentLineIndex = lineIndex;\r\n belowContentLineIndent = indent;\r\n break;\r\n }\r\n }\r\n }\r\n result[resultIndex] = this._getIndentLevelForWhitespaceLine(offSide, aboveContentLineIndent, belowContentLineIndent);\r\n }\r\n return result;\r\n };\r\n TextModel.prototype._getIndentLevelForWhitespaceLine = function (offSide, aboveContentLineIndent, belowContentLineIndent) {\r\n if (aboveContentLineIndent === -1 || belowContentLineIndent === -1) {\r\n // At the top or bottom of the file\r\n return 0;\r\n }\r\n else if (aboveContentLineIndent < belowContentLineIndent) {\r\n // we are inside the region above\r\n return (1 + Math.floor(aboveContentLineIndent / this._options.indentSize));\r\n }\r\n else if (aboveContentLineIndent === belowContentLineIndent) {\r\n // we are in between two regions\r\n return Math.ceil(belowContentLineIndent / this._options.indentSize);\r\n }\r\n else {\r\n if (offSide) {\r\n // same level as region below\r\n return Math.ceil(belowContentLineIndent / this._options.indentSize);\r\n }\r\n else {\r\n // we are inside the region that ends below\r\n return (1 + Math.floor(belowContentLineIndent / this._options.indentSize));\r\n }\r\n }\r\n };\r\n TextModel.MODEL_SYNC_LIMIT = 50 * 1024 * 1024; // 50 MB\r\n TextModel.LARGE_FILE_SIZE_THRESHOLD = 20 * 1024 * 1024; // 20 MB;\r\n TextModel.LARGE_FILE_LINE_COUNT_THRESHOLD = 300 * 1000; // 300K lines\r\n TextModel.DEFAULT_CREATION_OPTIONS = {\r\n isForSimpleWidget: false,\r\n tabSize: EDITOR_MODEL_DEFAULTS.tabSize,\r\n indentSize: EDITOR_MODEL_DEFAULTS.indentSize,\r\n insertSpaces: EDITOR_MODEL_DEFAULTS.insertSpaces,\r\n detectIndentation: false,\r\n defaultEOL: 1 /* LF */,\r\n trimAutoWhitespace: EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,\r\n largeFileOptimizations: EDITOR_MODEL_DEFAULTS.largeFileOptimizations,\r\n };\r\n return TextModel;\r\n}(Disposable));\r\nexport { TextModel };\r\n//#region Decorations\r\nvar DecorationsTrees = /** @class */ (function () {\r\n function DecorationsTrees() {\r\n this._decorationsTree0 = new IntervalTree();\r\n this._decorationsTree1 = new IntervalTree();\r\n }\r\n DecorationsTrees.prototype.intervalSearch = function (start, end, filterOwnerId, filterOutValidation, cachedVersionId) {\r\n var r0 = this._decorationsTree0.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId);\r\n var r1 = this._decorationsTree1.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId);\r\n return r0.concat(r1);\r\n };\r\n DecorationsTrees.prototype.search = function (filterOwnerId, filterOutValidation, overviewRulerOnly, cachedVersionId) {\r\n if (overviewRulerOnly) {\r\n return this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId);\r\n }\r\n else {\r\n var r0 = this._decorationsTree0.search(filterOwnerId, filterOutValidation, cachedVersionId);\r\n var r1 = this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId);\r\n return r0.concat(r1);\r\n }\r\n };\r\n DecorationsTrees.prototype.collectNodesFromOwner = function (ownerId) {\r\n var r0 = this._decorationsTree0.collectNodesFromOwner(ownerId);\r\n var r1 = this._decorationsTree1.collectNodesFromOwner(ownerId);\r\n return r0.concat(r1);\r\n };\r\n DecorationsTrees.prototype.collectNodesPostOrder = function () {\r\n var r0 = this._decorationsTree0.collectNodesPostOrder();\r\n var r1 = this._decorationsTree1.collectNodesPostOrder();\r\n return r0.concat(r1);\r\n };\r\n DecorationsTrees.prototype.insert = function (node) {\r\n if (getNodeIsInOverviewRuler(node)) {\r\n this._decorationsTree1.insert(node);\r\n }\r\n else {\r\n this._decorationsTree0.insert(node);\r\n }\r\n };\r\n DecorationsTrees.prototype.delete = function (node) {\r\n if (getNodeIsInOverviewRuler(node)) {\r\n this._decorationsTree1.delete(node);\r\n }\r\n else {\r\n this._decorationsTree0.delete(node);\r\n }\r\n };\r\n DecorationsTrees.prototype.resolveNode = function (node, cachedVersionId) {\r\n if (getNodeIsInOverviewRuler(node)) {\r\n this._decorationsTree1.resolveNode(node, cachedVersionId);\r\n }\r\n else {\r\n this._decorationsTree0.resolveNode(node, cachedVersionId);\r\n }\r\n };\r\n DecorationsTrees.prototype.acceptReplace = function (offset, length, textLength, forceMoveMarkers) {\r\n this._decorationsTree0.acceptReplace(offset, length, textLength, forceMoveMarkers);\r\n this._decorationsTree1.acceptReplace(offset, length, textLength, forceMoveMarkers);\r\n };\r\n return DecorationsTrees;\r\n}());\r\nfunction cleanClassName(className) {\r\n return className.replace(/[^a-z0-9\\-_]/gi, ' ');\r\n}\r\nvar DecorationOptions = /** @class */ (function () {\r\n function DecorationOptions(options) {\r\n this.color = options.color || '';\r\n this.darkColor = options.darkColor || '';\r\n }\r\n return DecorationOptions;\r\n}());\r\nvar ModelDecorationOverviewRulerOptions = /** @class */ (function (_super) {\r\n __extends(ModelDecorationOverviewRulerOptions, _super);\r\n function ModelDecorationOverviewRulerOptions(options) {\r\n var _this = _super.call(this, options) || this;\r\n _this._resolvedColor = null;\r\n _this.position = (typeof options.position === 'number' ? options.position : model.OverviewRulerLane.Center);\r\n return _this;\r\n }\r\n ModelDecorationOverviewRulerOptions.prototype.getColor = function (theme) {\r\n if (!this._resolvedColor) {\r\n if (theme.type !== 'light' && this.darkColor) {\r\n this._resolvedColor = this._resolveColor(this.darkColor, theme);\r\n }\r\n else {\r\n this._resolvedColor = this._resolveColor(this.color, theme);\r\n }\r\n }\r\n return this._resolvedColor;\r\n };\r\n ModelDecorationOverviewRulerOptions.prototype.invalidateCachedColor = function () {\r\n this._resolvedColor = null;\r\n };\r\n ModelDecorationOverviewRulerOptions.prototype._resolveColor = function (color, theme) {\r\n if (typeof color === 'string') {\r\n return color;\r\n }\r\n var c = color ? theme.getColor(color.id) : null;\r\n if (!c) {\r\n return '';\r\n }\r\n return c.toString();\r\n };\r\n return ModelDecorationOverviewRulerOptions;\r\n}(DecorationOptions));\r\nexport { ModelDecorationOverviewRulerOptions };\r\nvar ModelDecorationMinimapOptions = /** @class */ (function (_super) {\r\n __extends(ModelDecorationMinimapOptions, _super);\r\n function ModelDecorationMinimapOptions(options) {\r\n var _this = _super.call(this, options) || this;\r\n _this.position = options.position;\r\n return _this;\r\n }\r\n ModelDecorationMinimapOptions.prototype.getColor = function (theme) {\r\n if (!this._resolvedColor) {\r\n if (theme.type !== 'light' && this.darkColor) {\r\n this._resolvedColor = this._resolveColor(this.darkColor, theme);\r\n }\r\n else {\r\n this._resolvedColor = this._resolveColor(this.color, theme);\r\n }\r\n }\r\n return this._resolvedColor;\r\n };\r\n ModelDecorationMinimapOptions.prototype.invalidateCachedColor = function () {\r\n this._resolvedColor = undefined;\r\n };\r\n ModelDecorationMinimapOptions.prototype._resolveColor = function (color, theme) {\r\n if (typeof color === 'string') {\r\n return Color.fromHex(color);\r\n }\r\n return theme.getColor(color.id);\r\n };\r\n return ModelDecorationMinimapOptions;\r\n}(DecorationOptions));\r\nexport { ModelDecorationMinimapOptions };\r\nvar ModelDecorationOptions = /** @class */ (function () {\r\n function ModelDecorationOptions(options) {\r\n this.stickiness = options.stickiness || 0 /* AlwaysGrowsWhenTypingAtEdges */;\r\n this.zIndex = options.zIndex || 0;\r\n this.className = options.className ? cleanClassName(options.className) : null;\r\n this.hoverMessage = withUndefinedAsNull(options.hoverMessage);\r\n this.glyphMarginHoverMessage = withUndefinedAsNull(options.glyphMarginHoverMessage);\r\n this.isWholeLine = options.isWholeLine || false;\r\n this.showIfCollapsed = options.showIfCollapsed || false;\r\n this.collapseOnReplaceEdit = options.collapseOnReplaceEdit || false;\r\n this.overviewRuler = options.overviewRuler ? new ModelDecorationOverviewRulerOptions(options.overviewRuler) : null;\r\n this.minimap = options.minimap ? new ModelDecorationMinimapOptions(options.minimap) : null;\r\n this.glyphMarginClassName = options.glyphMarginClassName ? cleanClassName(options.glyphMarginClassName) : null;\r\n this.linesDecorationsClassName = options.linesDecorationsClassName ? cleanClassName(options.linesDecorationsClassName) : null;\r\n this.marginClassName = options.marginClassName ? cleanClassName(options.marginClassName) : null;\r\n this.inlineClassName = options.inlineClassName ? cleanClassName(options.inlineClassName) : null;\r\n this.inlineClassNameAffectsLetterSpacing = options.inlineClassNameAffectsLetterSpacing || false;\r\n this.beforeContentClassName = options.beforeContentClassName ? cleanClassName(options.beforeContentClassName) : null;\r\n this.afterContentClassName = options.afterContentClassName ? cleanClassName(options.afterContentClassName) : null;\r\n }\r\n ModelDecorationOptions.register = function (options) {\r\n return new ModelDecorationOptions(options);\r\n };\r\n ModelDecorationOptions.createDynamic = function (options) {\r\n return new ModelDecorationOptions(options);\r\n };\r\n return ModelDecorationOptions;\r\n}());\r\nexport { ModelDecorationOptions };\r\nModelDecorationOptions.EMPTY = ModelDecorationOptions.register({});\r\n/**\r\n * The order carefully matches the values of the enum.\r\n */\r\nvar TRACKED_RANGE_OPTIONS = [\r\n ModelDecorationOptions.register({ stickiness: 0 /* AlwaysGrowsWhenTypingAtEdges */ }),\r\n ModelDecorationOptions.register({ stickiness: 1 /* NeverGrowsWhenTypingAtEdges */ }),\r\n ModelDecorationOptions.register({ stickiness: 2 /* GrowsOnlyWhenTypingBefore */ }),\r\n ModelDecorationOptions.register({ stickiness: 3 /* GrowsOnlyWhenTypingAfter */ }),\r\n];\r\nfunction _normalizeOptions(options) {\r\n if (options instanceof ModelDecorationOptions) {\r\n return options;\r\n }\r\n return ModelDecorationOptions.createDynamic(options);\r\n}\r\nvar DidChangeDecorationsEmitter = /** @class */ (function (_super) {\r\n __extends(DidChangeDecorationsEmitter, _super);\r\n function DidChangeDecorationsEmitter() {\r\n var _this = _super.call(this) || this;\r\n _this._actual = _this._register(new Emitter());\r\n _this.event = _this._actual.event;\r\n _this._deferredCnt = 0;\r\n _this._shouldFire = false;\r\n return _this;\r\n }\r\n DidChangeDecorationsEmitter.prototype.beginDeferredEmit = function () {\r\n this._deferredCnt++;\r\n };\r\n DidChangeDecorationsEmitter.prototype.endDeferredEmit = function () {\r\n this._deferredCnt--;\r\n if (this._deferredCnt === 0) {\r\n if (this._shouldFire) {\r\n this._shouldFire = false;\r\n this._actual.fire({});\r\n }\r\n }\r\n };\r\n DidChangeDecorationsEmitter.prototype.fire = function () {\r\n this._shouldFire = true;\r\n };\r\n return DidChangeDecorationsEmitter;\r\n}(Disposable));\r\nexport { DidChangeDecorationsEmitter };\r\n//#endregion\r\nvar DidChangeContentEmitter = /** @class */ (function (_super) {\r\n __extends(DidChangeContentEmitter, _super);\r\n function DidChangeContentEmitter() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Both `fastEvent` and `slowEvent` work the same way and contain the same events, but first we invoke `fastEvent` and then `slowEvent`.\r\n */\r\n _this._fastEmitter = _this._register(new Emitter());\r\n _this.fastEvent = _this._fastEmitter.event;\r\n _this._slowEmitter = _this._register(new Emitter());\r\n _this.slowEvent = _this._slowEmitter.event;\r\n _this._deferredCnt = 0;\r\n _this._deferredEvent = null;\r\n return _this;\r\n }\r\n DidChangeContentEmitter.prototype.beginDeferredEmit = function () {\r\n this._deferredCnt++;\r\n };\r\n DidChangeContentEmitter.prototype.endDeferredEmit = function () {\r\n this._deferredCnt--;\r\n if (this._deferredCnt === 0) {\r\n if (this._deferredEvent !== null) {\r\n var e = this._deferredEvent;\r\n this._deferredEvent = null;\r\n this._fastEmitter.fire(e);\r\n this._slowEmitter.fire(e);\r\n }\r\n }\r\n };\r\n DidChangeContentEmitter.prototype.fire = function (e) {\r\n if (this._deferredCnt > 0) {\r\n if (this._deferredEvent) {\r\n this._deferredEvent = this._deferredEvent.merge(e);\r\n }\r\n else {\r\n this._deferredEvent = e;\r\n }\r\n return;\r\n }\r\n this._fastEmitter.fire(e);\r\n this._slowEmitter.fire(e);\r\n };\r\n return DidChangeContentEmitter;\r\n}(Disposable));\r\nexport { DidChangeContentEmitter };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport { Selection } from '../core/selection.js';\r\nimport { TextModel } from '../model/textModel.js';\r\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\r\nvar autoCloseAlways = function () { return true; };\r\nvar autoCloseNever = function () { return false; };\r\nvar autoCloseBeforeWhitespace = function (chr) { return (chr === ' ' || chr === '\\t'); };\r\nfunction appendEntry(target, key, value) {\r\n if (target.has(key)) {\r\n target.get(key).push(value);\r\n }\r\n else {\r\n target.set(key, [value]);\r\n }\r\n}\r\nvar CursorConfiguration = /** @class */ (function () {\r\n function CursorConfiguration(languageIdentifier, modelOptions, configuration) {\r\n this._languageIdentifier = languageIdentifier;\r\n var options = configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this.readOnly = options.get(65 /* readOnly */);\r\n this.tabSize = modelOptions.tabSize;\r\n this.indentSize = modelOptions.indentSize;\r\n this.insertSpaces = modelOptions.insertSpaces;\r\n this.lineHeight = options.get(47 /* lineHeight */);\r\n this.pageSize = Math.max(1, Math.floor(layoutInfo.height / this.lineHeight) - 2);\r\n this.useTabStops = options.get(91 /* useTabStops */);\r\n this.wordSeparators = options.get(92 /* wordSeparators */);\r\n this.emptySelectionClipboard = options.get(24 /* emptySelectionClipboard */);\r\n this.copyWithSyntaxHighlighting = options.get(14 /* copyWithSyntaxHighlighting */);\r\n this.multiCursorMergeOverlapping = options.get(56 /* multiCursorMergeOverlapping */);\r\n this.multiCursorPaste = options.get(58 /* multiCursorPaste */);\r\n this.autoClosingBrackets = options.get(5 /* autoClosingBrackets */);\r\n this.autoClosingQuotes = options.get(7 /* autoClosingQuotes */);\r\n this.autoClosingOvertype = options.get(6 /* autoClosingOvertype */);\r\n this.autoSurround = options.get(10 /* autoSurround */);\r\n this.autoIndent = options.get(8 /* autoIndent */);\r\n this.autoClosingPairsOpen2 = new Map();\r\n this.autoClosingPairsClose2 = new Map();\r\n this.surroundingPairs = {};\r\n this._electricChars = null;\r\n this.shouldAutoCloseBefore = {\r\n quote: CursorConfiguration._getShouldAutoClose(languageIdentifier, this.autoClosingQuotes),\r\n bracket: CursorConfiguration._getShouldAutoClose(languageIdentifier, this.autoClosingBrackets)\r\n };\r\n var autoClosingPairs = CursorConfiguration._getAutoClosingPairs(languageIdentifier);\r\n if (autoClosingPairs) {\r\n for (var _i = 0, autoClosingPairs_1 = autoClosingPairs; _i < autoClosingPairs_1.length; _i++) {\r\n var pair = autoClosingPairs_1[_i];\r\n appendEntry(this.autoClosingPairsOpen2, pair.open.charAt(pair.open.length - 1), pair);\r\n if (pair.close.length === 1) {\r\n appendEntry(this.autoClosingPairsClose2, pair.close, pair);\r\n }\r\n }\r\n }\r\n var surroundingPairs = CursorConfiguration._getSurroundingPairs(languageIdentifier);\r\n if (surroundingPairs) {\r\n for (var _a = 0, surroundingPairs_1 = surroundingPairs; _a < surroundingPairs_1.length; _a++) {\r\n var pair = surroundingPairs_1[_a];\r\n this.surroundingPairs[pair.open] = pair.close;\r\n }\r\n }\r\n }\r\n CursorConfiguration.shouldRecreate = function (e) {\r\n return (e.hasChanged(103 /* layoutInfo */)\r\n || e.hasChanged(92 /* wordSeparators */)\r\n || e.hasChanged(24 /* emptySelectionClipboard */)\r\n || e.hasChanged(56 /* multiCursorMergeOverlapping */)\r\n || e.hasChanged(58 /* multiCursorPaste */)\r\n || e.hasChanged(5 /* autoClosingBrackets */)\r\n || e.hasChanged(7 /* autoClosingQuotes */)\r\n || e.hasChanged(6 /* autoClosingOvertype */)\r\n || e.hasChanged(10 /* autoSurround */)\r\n || e.hasChanged(91 /* useTabStops */)\r\n || e.hasChanged(47 /* lineHeight */)\r\n || e.hasChanged(65 /* readOnly */));\r\n };\r\n Object.defineProperty(CursorConfiguration.prototype, \"electricChars\", {\r\n get: function () {\r\n if (!this._electricChars) {\r\n this._electricChars = {};\r\n var electricChars = CursorConfiguration._getElectricCharacters(this._languageIdentifier);\r\n if (electricChars) {\r\n for (var _i = 0, electricChars_1 = electricChars; _i < electricChars_1.length; _i++) {\r\n var char = electricChars_1[_i];\r\n this._electricChars[char] = true;\r\n }\r\n }\r\n }\r\n return this._electricChars;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n CursorConfiguration.prototype.normalizeIndentation = function (str) {\r\n return TextModel.normalizeIndentation(str, this.indentSize, this.insertSpaces);\r\n };\r\n CursorConfiguration._getElectricCharacters = function (languageIdentifier) {\r\n try {\r\n return LanguageConfigurationRegistry.getElectricCharacters(languageIdentifier.id);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n return null;\r\n }\r\n };\r\n CursorConfiguration._getAutoClosingPairs = function (languageIdentifier) {\r\n try {\r\n return LanguageConfigurationRegistry.getAutoClosingPairs(languageIdentifier.id);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n return null;\r\n }\r\n };\r\n CursorConfiguration._getShouldAutoClose = function (languageIdentifier, autoCloseConfig) {\r\n switch (autoCloseConfig) {\r\n case 'beforeWhitespace':\r\n return autoCloseBeforeWhitespace;\r\n case 'languageDefined':\r\n return CursorConfiguration._getLanguageDefinedShouldAutoClose(languageIdentifier);\r\n case 'always':\r\n return autoCloseAlways;\r\n case 'never':\r\n return autoCloseNever;\r\n }\r\n };\r\n CursorConfiguration._getLanguageDefinedShouldAutoClose = function (languageIdentifier) {\r\n try {\r\n var autoCloseBeforeSet_1 = LanguageConfigurationRegistry.getAutoCloseBeforeSet(languageIdentifier.id);\r\n return function (c) { return autoCloseBeforeSet_1.indexOf(c) !== -1; };\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n return autoCloseNever;\r\n }\r\n };\r\n CursorConfiguration._getSurroundingPairs = function (languageIdentifier) {\r\n try {\r\n return LanguageConfigurationRegistry.getSurroundingPairs(languageIdentifier.id);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n return null;\r\n }\r\n };\r\n return CursorConfiguration;\r\n}());\r\nexport { CursorConfiguration };\r\n/**\r\n * Represents the cursor state on either the model or on the view model.\r\n */\r\nvar SingleCursorState = /** @class */ (function () {\r\n function SingleCursorState(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns) {\r\n this.selectionStart = selectionStart;\r\n this.selectionStartLeftoverVisibleColumns = selectionStartLeftoverVisibleColumns;\r\n this.position = position;\r\n this.leftoverVisibleColumns = leftoverVisibleColumns;\r\n this.selection = SingleCursorState._computeSelection(this.selectionStart, this.position);\r\n }\r\n SingleCursorState.prototype.equals = function (other) {\r\n return (this.selectionStartLeftoverVisibleColumns === other.selectionStartLeftoverVisibleColumns\r\n && this.leftoverVisibleColumns === other.leftoverVisibleColumns\r\n && this.position.equals(other.position)\r\n && this.selectionStart.equalsRange(other.selectionStart));\r\n };\r\n SingleCursorState.prototype.hasSelection = function () {\r\n return (!this.selection.isEmpty() || !this.selectionStart.isEmpty());\r\n };\r\n SingleCursorState.prototype.move = function (inSelectionMode, lineNumber, column, leftoverVisibleColumns) {\r\n if (inSelectionMode) {\r\n // move just position\r\n return new SingleCursorState(this.selectionStart, this.selectionStartLeftoverVisibleColumns, new Position(lineNumber, column), leftoverVisibleColumns);\r\n }\r\n else {\r\n // move everything\r\n return new SingleCursorState(new Range(lineNumber, column, lineNumber, column), leftoverVisibleColumns, new Position(lineNumber, column), leftoverVisibleColumns);\r\n }\r\n };\r\n SingleCursorState._computeSelection = function (selectionStart, position) {\r\n var startLineNumber, startColumn, endLineNumber, endColumn;\r\n if (selectionStart.isEmpty()) {\r\n startLineNumber = selectionStart.startLineNumber;\r\n startColumn = selectionStart.startColumn;\r\n endLineNumber = position.lineNumber;\r\n endColumn = position.column;\r\n }\r\n else {\r\n if (position.isBeforeOrEqual(selectionStart.getStartPosition())) {\r\n startLineNumber = selectionStart.endLineNumber;\r\n startColumn = selectionStart.endColumn;\r\n endLineNumber = position.lineNumber;\r\n endColumn = position.column;\r\n }\r\n else {\r\n startLineNumber = selectionStart.startLineNumber;\r\n startColumn = selectionStart.startColumn;\r\n endLineNumber = position.lineNumber;\r\n endColumn = position.column;\r\n }\r\n }\r\n return new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\r\n };\r\n return SingleCursorState;\r\n}());\r\nexport { SingleCursorState };\r\nvar CursorContext = /** @class */ (function () {\r\n function CursorContext(configuration, model, viewModel) {\r\n this.model = model;\r\n this.viewModel = viewModel;\r\n this.config = new CursorConfiguration(this.model.getLanguageIdentifier(), this.model.getOptions(), configuration);\r\n }\r\n CursorContext.prototype.validateViewPosition = function (viewPosition, modelPosition) {\r\n return this.viewModel.coordinatesConverter.validateViewPosition(viewPosition, modelPosition);\r\n };\r\n CursorContext.prototype.validateViewRange = function (viewRange, expectedModelRange) {\r\n return this.viewModel.coordinatesConverter.validateViewRange(viewRange, expectedModelRange);\r\n };\r\n CursorContext.prototype.convertViewRangeToModelRange = function (viewRange) {\r\n return this.viewModel.coordinatesConverter.convertViewRangeToModelRange(viewRange);\r\n };\r\n CursorContext.prototype.convertViewPositionToModelPosition = function (lineNumber, column) {\r\n return this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber, column));\r\n };\r\n CursorContext.prototype.convertModelPositionToViewPosition = function (modelPosition) {\r\n return this.viewModel.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\r\n };\r\n CursorContext.prototype.convertModelRangeToViewRange = function (modelRange) {\r\n return this.viewModel.coordinatesConverter.convertModelRangeToViewRange(modelRange);\r\n };\r\n CursorContext.prototype.getCurrentScrollTop = function () {\r\n return this.viewModel.viewLayout.getCurrentScrollTop();\r\n };\r\n CursorContext.prototype.getCompletelyVisibleViewRange = function () {\r\n return this.viewModel.getCompletelyVisibleViewRange();\r\n };\r\n CursorContext.prototype.getCompletelyVisibleModelRange = function () {\r\n var viewRange = this.viewModel.getCompletelyVisibleViewRange();\r\n return this.viewModel.coordinatesConverter.convertViewRangeToModelRange(viewRange);\r\n };\r\n CursorContext.prototype.getCompletelyVisibleViewRangeAtScrollTop = function (scrollTop) {\r\n return this.viewModel.getCompletelyVisibleViewRangeAtScrollTop(scrollTop);\r\n };\r\n CursorContext.prototype.getVerticalOffsetForViewLine = function (viewLineNumber) {\r\n return this.viewModel.viewLayout.getVerticalOffsetForLineNumber(viewLineNumber);\r\n };\r\n return CursorContext;\r\n}());\r\nexport { CursorContext };\r\nvar PartialModelCursorState = /** @class */ (function () {\r\n function PartialModelCursorState(modelState) {\r\n this.modelState = modelState;\r\n this.viewState = null;\r\n }\r\n return PartialModelCursorState;\r\n}());\r\nexport { PartialModelCursorState };\r\nvar PartialViewCursorState = /** @class */ (function () {\r\n function PartialViewCursorState(viewState) {\r\n this.modelState = null;\r\n this.viewState = viewState;\r\n }\r\n return PartialViewCursorState;\r\n}());\r\nexport { PartialViewCursorState };\r\nvar CursorState = /** @class */ (function () {\r\n function CursorState(modelState, viewState) {\r\n this.modelState = modelState;\r\n this.viewState = viewState;\r\n }\r\n CursorState.fromModelState = function (modelState) {\r\n return new PartialModelCursorState(modelState);\r\n };\r\n CursorState.fromViewState = function (viewState) {\r\n return new PartialViewCursorState(viewState);\r\n };\r\n CursorState.fromModelSelection = function (modelSelection) {\r\n var selectionStartLineNumber = modelSelection.selectionStartLineNumber;\r\n var selectionStartColumn = modelSelection.selectionStartColumn;\r\n var positionLineNumber = modelSelection.positionLineNumber;\r\n var positionColumn = modelSelection.positionColumn;\r\n var modelState = new SingleCursorState(new Range(selectionStartLineNumber, selectionStartColumn, selectionStartLineNumber, selectionStartColumn), 0, new Position(positionLineNumber, positionColumn), 0);\r\n return CursorState.fromModelState(modelState);\r\n };\r\n CursorState.fromModelSelections = function (modelSelections) {\r\n var states = [];\r\n for (var i = 0, len = modelSelections.length; i < len; i++) {\r\n states[i] = this.fromModelSelection(modelSelections[i]);\r\n }\r\n return states;\r\n };\r\n CursorState.prototype.equals = function (other) {\r\n return (this.viewState.equals(other.viewState) && this.modelState.equals(other.modelState));\r\n };\r\n return CursorState;\r\n}());\r\nexport { CursorState };\r\nvar EditOperationResult = /** @class */ (function () {\r\n function EditOperationResult(type, commands, opts) {\r\n this.type = type;\r\n this.commands = commands;\r\n this.shouldPushStackElementBefore = opts.shouldPushStackElementBefore;\r\n this.shouldPushStackElementAfter = opts.shouldPushStackElementAfter;\r\n }\r\n return EditOperationResult;\r\n}());\r\nexport { EditOperationResult };\r\n/**\r\n * Common operations that work and make sense both on the model and on the view model.\r\n */\r\nvar CursorColumns = /** @class */ (function () {\r\n function CursorColumns() {\r\n }\r\n CursorColumns.visibleColumnFromColumn = function (lineContent, column, tabSize) {\r\n var lineContentLength = lineContent.length;\r\n var endOffset = column - 1 < lineContentLength ? column - 1 : lineContentLength;\r\n var result = 0;\r\n var i = 0;\r\n while (i < endOffset) {\r\n var codePoint = strings.getNextCodePoint(lineContent, endOffset, i);\r\n i += (codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n if (codePoint === 9 /* Tab */) {\r\n result = CursorColumns.nextRenderTabStop(result, tabSize);\r\n }\r\n else {\r\n var graphemeBreakType = strings.getGraphemeBreakType(codePoint);\r\n while (i < endOffset) {\r\n var nextCodePoint = strings.getNextCodePoint(lineContent, endOffset, i);\r\n var nextGraphemeBreakType = strings.getGraphemeBreakType(nextCodePoint);\r\n if (strings.breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\r\n break;\r\n }\r\n i += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n graphemeBreakType = nextGraphemeBreakType;\r\n }\r\n if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {\r\n result = result + 2;\r\n }\r\n else {\r\n result = result + 1;\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n CursorColumns.visibleColumnFromColumn2 = function (config, model, position) {\r\n return this.visibleColumnFromColumn(model.getLineContent(position.lineNumber), position.column, config.tabSize);\r\n };\r\n CursorColumns.columnFromVisibleColumn = function (lineContent, visibleColumn, tabSize) {\r\n if (visibleColumn <= 0) {\r\n return 1;\r\n }\r\n var lineLength = lineContent.length;\r\n var beforeVisibleColumn = 0;\r\n var beforeColumn = 1;\r\n var i = 0;\r\n while (i < lineLength) {\r\n var codePoint = strings.getNextCodePoint(lineContent, lineLength, i);\r\n i += (codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n var afterVisibleColumn = void 0;\r\n if (codePoint === 9 /* Tab */) {\r\n afterVisibleColumn = CursorColumns.nextRenderTabStop(beforeVisibleColumn, tabSize);\r\n }\r\n else {\r\n var graphemeBreakType = strings.getGraphemeBreakType(codePoint);\r\n while (i < lineLength) {\r\n var nextCodePoint = strings.getNextCodePoint(lineContent, lineLength, i);\r\n var nextGraphemeBreakType = strings.getGraphemeBreakType(nextCodePoint);\r\n if (strings.breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\r\n break;\r\n }\r\n i += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\r\n graphemeBreakType = nextGraphemeBreakType;\r\n }\r\n if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {\r\n afterVisibleColumn = beforeVisibleColumn + 2;\r\n }\r\n else {\r\n afterVisibleColumn = beforeVisibleColumn + 1;\r\n }\r\n }\r\n var afterColumn = i + 1;\r\n if (afterVisibleColumn >= visibleColumn) {\r\n var beforeDelta = visibleColumn - beforeVisibleColumn;\r\n var afterDelta = afterVisibleColumn - visibleColumn;\r\n if (afterDelta < beforeDelta) {\r\n return afterColumn;\r\n }\r\n else {\r\n return beforeColumn;\r\n }\r\n }\r\n beforeVisibleColumn = afterVisibleColumn;\r\n beforeColumn = afterColumn;\r\n }\r\n // walked the entire string\r\n return lineLength + 1;\r\n };\r\n CursorColumns.columnFromVisibleColumn2 = function (config, model, lineNumber, visibleColumn) {\r\n var result = this.columnFromVisibleColumn(model.getLineContent(lineNumber), visibleColumn, config.tabSize);\r\n var minColumn = model.getLineMinColumn(lineNumber);\r\n if (result < minColumn) {\r\n return minColumn;\r\n }\r\n var maxColumn = model.getLineMaxColumn(lineNumber);\r\n if (result > maxColumn) {\r\n return maxColumn;\r\n }\r\n return result;\r\n };\r\n /**\r\n * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\r\n */\r\n CursorColumns.nextRenderTabStop = function (visibleColumn, tabSize) {\r\n return visibleColumn + tabSize - visibleColumn % tabSize;\r\n };\r\n /**\r\n * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\r\n */\r\n CursorColumns.nextIndentTabStop = function (visibleColumn, indentSize) {\r\n return visibleColumn + indentSize - visibleColumn % indentSize;\r\n };\r\n /**\r\n * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\r\n */\r\n CursorColumns.prevRenderTabStop = function (column, tabSize) {\r\n return column - 1 - (column - 1) % tabSize;\r\n };\r\n /**\r\n * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\r\n */\r\n CursorColumns.prevIndentTabStop = function (column, indentSize) {\r\n return column - 1 - (column - 1) % indentSize;\r\n };\r\n return CursorColumns;\r\n}());\r\nexport { CursorColumns };\r\nexport function isQuote(ch) {\r\n return (ch === '\\'' || ch === '\"' || ch === '`');\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as browser from '../../../base/browser/browser.js';\r\nimport { PageCoordinates } from '../editorDom.js';\r\nimport { PartFingerprints } from '../view/viewPart.js';\r\nimport { ViewLine } from '../viewParts/lines/viewLine.js';\r\nimport { Position } from '../../common/core/position.js';\r\nimport { Range as EditorRange } from '../../common/core/range.js';\r\nimport { CursorColumns } from '../../common/controller/cursorCommon.js';\r\nvar PointerHandlerLastRenderData = /** @class */ (function () {\r\n function PointerHandlerLastRenderData(lastViewCursorsRenderData, lastTextareaPosition) {\r\n this.lastViewCursorsRenderData = lastViewCursorsRenderData;\r\n this.lastTextareaPosition = lastTextareaPosition;\r\n }\r\n return PointerHandlerLastRenderData;\r\n}());\r\nexport { PointerHandlerLastRenderData };\r\nvar MouseTarget = /** @class */ (function () {\r\n function MouseTarget(element, type, mouseColumn, position, range, detail) {\r\n if (mouseColumn === void 0) { mouseColumn = 0; }\r\n if (position === void 0) { position = null; }\r\n if (range === void 0) { range = null; }\r\n if (detail === void 0) { detail = null; }\r\n this.element = element;\r\n this.type = type;\r\n this.mouseColumn = mouseColumn;\r\n this.position = position;\r\n if (!range && position) {\r\n range = new EditorRange(position.lineNumber, position.column, position.lineNumber, position.column);\r\n }\r\n this.range = range;\r\n this.detail = detail;\r\n }\r\n MouseTarget._typeToString = function (type) {\r\n if (type === 1 /* TEXTAREA */) {\r\n return 'TEXTAREA';\r\n }\r\n if (type === 2 /* GUTTER_GLYPH_MARGIN */) {\r\n return 'GUTTER_GLYPH_MARGIN';\r\n }\r\n if (type === 3 /* GUTTER_LINE_NUMBERS */) {\r\n return 'GUTTER_LINE_NUMBERS';\r\n }\r\n if (type === 4 /* GUTTER_LINE_DECORATIONS */) {\r\n return 'GUTTER_LINE_DECORATIONS';\r\n }\r\n if (type === 5 /* GUTTER_VIEW_ZONE */) {\r\n return 'GUTTER_VIEW_ZONE';\r\n }\r\n if (type === 6 /* CONTENT_TEXT */) {\r\n return 'CONTENT_TEXT';\r\n }\r\n if (type === 7 /* CONTENT_EMPTY */) {\r\n return 'CONTENT_EMPTY';\r\n }\r\n if (type === 8 /* CONTENT_VIEW_ZONE */) {\r\n return 'CONTENT_VIEW_ZONE';\r\n }\r\n if (type === 9 /* CONTENT_WIDGET */) {\r\n return 'CONTENT_WIDGET';\r\n }\r\n if (type === 10 /* OVERVIEW_RULER */) {\r\n return 'OVERVIEW_RULER';\r\n }\r\n if (type === 11 /* SCROLLBAR */) {\r\n return 'SCROLLBAR';\r\n }\r\n if (type === 12 /* OVERLAY_WIDGET */) {\r\n return 'OVERLAY_WIDGET';\r\n }\r\n return 'UNKNOWN';\r\n };\r\n MouseTarget.toString = function (target) {\r\n return this._typeToString(target.type) + ': ' + target.position + ' - ' + target.range + ' - ' + target.detail;\r\n };\r\n MouseTarget.prototype.toString = function () {\r\n return MouseTarget.toString(this);\r\n };\r\n return MouseTarget;\r\n}());\r\nexport { MouseTarget };\r\nvar ElementPath = /** @class */ (function () {\r\n function ElementPath() {\r\n }\r\n ElementPath.isTextArea = function (path) {\r\n return (path.length === 2\r\n && path[0] === 3 /* OverflowGuard */\r\n && path[1] === 6 /* TextArea */);\r\n };\r\n ElementPath.isChildOfViewLines = function (path) {\r\n return (path.length >= 4\r\n && path[0] === 3 /* OverflowGuard */\r\n && path[3] === 7 /* ViewLines */);\r\n };\r\n ElementPath.isStrictChildOfViewLines = function (path) {\r\n return (path.length > 4\r\n && path[0] === 3 /* OverflowGuard */\r\n && path[3] === 7 /* ViewLines */);\r\n };\r\n ElementPath.isChildOfScrollableElement = function (path) {\r\n return (path.length >= 2\r\n && path[0] === 3 /* OverflowGuard */\r\n && path[1] === 5 /* ScrollableElement */);\r\n };\r\n ElementPath.isChildOfMinimap = function (path) {\r\n return (path.length >= 2\r\n && path[0] === 3 /* OverflowGuard */\r\n && path[1] === 8 /* Minimap */);\r\n };\r\n ElementPath.isChildOfContentWidgets = function (path) {\r\n return (path.length >= 4\r\n && path[0] === 3 /* OverflowGuard */\r\n && path[3] === 1 /* ContentWidgets */);\r\n };\r\n ElementPath.isChildOfOverflowingContentWidgets = function (path) {\r\n return (path.length >= 1\r\n && path[0] === 2 /* OverflowingContentWidgets */);\r\n };\r\n ElementPath.isChildOfOverlayWidgets = function (path) {\r\n return (path.length >= 2\r\n && path[0] === 3 /* OverflowGuard */\r\n && path[1] === 4 /* OverlayWidgets */);\r\n };\r\n return ElementPath;\r\n}());\r\nvar HitTestContext = /** @class */ (function () {\r\n function HitTestContext(context, viewHelper, lastRenderData) {\r\n this.model = context.model;\r\n var options = context.configuration.options;\r\n this.layoutInfo = options.get(103 /* layoutInfo */);\r\n this.viewDomNode = viewHelper.viewDomNode;\r\n this.lineHeight = options.get(47 /* lineHeight */);\r\n this.typicalHalfwidthCharacterWidth = options.get(32 /* fontInfo */).typicalHalfwidthCharacterWidth;\r\n this.lastRenderData = lastRenderData;\r\n this._context = context;\r\n this._viewHelper = viewHelper;\r\n }\r\n HitTestContext.prototype.getZoneAtCoord = function (mouseVerticalOffset) {\r\n return HitTestContext.getZoneAtCoord(this._context, mouseVerticalOffset);\r\n };\r\n HitTestContext.getZoneAtCoord = function (context, mouseVerticalOffset) {\r\n // The target is either a view zone or the empty space after the last view-line\r\n var viewZoneWhitespace = context.viewLayout.getWhitespaceAtVerticalOffset(mouseVerticalOffset);\r\n if (viewZoneWhitespace) {\r\n var viewZoneMiddle = viewZoneWhitespace.verticalOffset + viewZoneWhitespace.height / 2, lineCount = context.model.getLineCount(), positionBefore = null, position = void 0, positionAfter = null;\r\n if (viewZoneWhitespace.afterLineNumber !== lineCount) {\r\n // There are more lines after this view zone\r\n positionAfter = new Position(viewZoneWhitespace.afterLineNumber + 1, 1);\r\n }\r\n if (viewZoneWhitespace.afterLineNumber > 0) {\r\n // There are more lines above this view zone\r\n positionBefore = new Position(viewZoneWhitespace.afterLineNumber, context.model.getLineMaxColumn(viewZoneWhitespace.afterLineNumber));\r\n }\r\n if (positionAfter === null) {\r\n position = positionBefore;\r\n }\r\n else if (positionBefore === null) {\r\n position = positionAfter;\r\n }\r\n else if (mouseVerticalOffset < viewZoneMiddle) {\r\n position = positionBefore;\r\n }\r\n else {\r\n position = positionAfter;\r\n }\r\n return {\r\n viewZoneId: viewZoneWhitespace.id,\r\n afterLineNumber: viewZoneWhitespace.afterLineNumber,\r\n positionBefore: positionBefore,\r\n positionAfter: positionAfter,\r\n position: position\r\n };\r\n }\r\n return null;\r\n };\r\n HitTestContext.prototype.getFullLineRangeAtCoord = function (mouseVerticalOffset) {\r\n if (this._context.viewLayout.isAfterLines(mouseVerticalOffset)) {\r\n // Below the last line\r\n var lineNumber_1 = this._context.model.getLineCount();\r\n var maxLineColumn_1 = this._context.model.getLineMaxColumn(lineNumber_1);\r\n return {\r\n range: new EditorRange(lineNumber_1, maxLineColumn_1, lineNumber_1, maxLineColumn_1),\r\n isAfterLines: true\r\n };\r\n }\r\n var lineNumber = this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);\r\n var maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);\r\n return {\r\n range: new EditorRange(lineNumber, 1, lineNumber, maxLineColumn),\r\n isAfterLines: false\r\n };\r\n };\r\n HitTestContext.prototype.getLineNumberAtVerticalOffset = function (mouseVerticalOffset) {\r\n return this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);\r\n };\r\n HitTestContext.prototype.isAfterLines = function (mouseVerticalOffset) {\r\n return this._context.viewLayout.isAfterLines(mouseVerticalOffset);\r\n };\r\n HitTestContext.prototype.getVerticalOffsetForLineNumber = function (lineNumber) {\r\n return this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber);\r\n };\r\n HitTestContext.prototype.findAttribute = function (element, attr) {\r\n return HitTestContext._findAttribute(element, attr, this._viewHelper.viewDomNode);\r\n };\r\n HitTestContext._findAttribute = function (element, attr, stopAt) {\r\n while (element && element !== document.body) {\r\n if (element.hasAttribute && element.hasAttribute(attr)) {\r\n return element.getAttribute(attr);\r\n }\r\n if (element === stopAt) {\r\n return null;\r\n }\r\n element = element.parentNode;\r\n }\r\n return null;\r\n };\r\n HitTestContext.prototype.getLineWidth = function (lineNumber) {\r\n return this._viewHelper.getLineWidth(lineNumber);\r\n };\r\n HitTestContext.prototype.visibleRangeForPosition = function (lineNumber, column) {\r\n return this._viewHelper.visibleRangeForPosition(lineNumber, column);\r\n };\r\n HitTestContext.prototype.getPositionFromDOMInfo = function (spanNode, offset) {\r\n return this._viewHelper.getPositionFromDOMInfo(spanNode, offset);\r\n };\r\n HitTestContext.prototype.getCurrentScrollTop = function () {\r\n return this._context.viewLayout.getCurrentScrollTop();\r\n };\r\n HitTestContext.prototype.getCurrentScrollLeft = function () {\r\n return this._context.viewLayout.getCurrentScrollLeft();\r\n };\r\n return HitTestContext;\r\n}());\r\nexport { HitTestContext };\r\nvar BareHitTestRequest = /** @class */ (function () {\r\n function BareHitTestRequest(ctx, editorPos, pos) {\r\n this.editorPos = editorPos;\r\n this.pos = pos;\r\n this.mouseVerticalOffset = Math.max(0, ctx.getCurrentScrollTop() + pos.y - editorPos.y);\r\n this.mouseContentHorizontalOffset = ctx.getCurrentScrollLeft() + pos.x - editorPos.x - ctx.layoutInfo.contentLeft;\r\n this.isInMarginArea = (pos.x - editorPos.x < ctx.layoutInfo.contentLeft && pos.x - editorPos.x >= ctx.layoutInfo.glyphMarginLeft);\r\n this.isInContentArea = !this.isInMarginArea;\r\n this.mouseColumn = Math.max(0, MouseTargetFactory._getMouseColumn(this.mouseContentHorizontalOffset, ctx.typicalHalfwidthCharacterWidth));\r\n }\r\n return BareHitTestRequest;\r\n}());\r\nvar HitTestRequest = /** @class */ (function (_super) {\r\n __extends(HitTestRequest, _super);\r\n function HitTestRequest(ctx, editorPos, pos, target) {\r\n var _this = _super.call(this, ctx, editorPos, pos) || this;\r\n _this._ctx = ctx;\r\n if (target) {\r\n _this.target = target;\r\n _this.targetPath = PartFingerprints.collect(target, ctx.viewDomNode);\r\n }\r\n else {\r\n _this.target = null;\r\n _this.targetPath = new Uint8Array(0);\r\n }\r\n return _this;\r\n }\r\n HitTestRequest.prototype.toString = function () {\r\n return \"pos(\" + this.pos.x + \",\" + this.pos.y + \"), editorPos(\" + this.editorPos.x + \",\" + this.editorPos.y + \"), mouseVerticalOffset: \" + this.mouseVerticalOffset + \", mouseContentHorizontalOffset: \" + this.mouseContentHorizontalOffset + \"\\n\\ttarget: \" + (this.target ? this.target.outerHTML : null);\r\n };\r\n HitTestRequest.prototype.fulfill = function (type, position, range, detail) {\r\n if (position === void 0) { position = null; }\r\n if (range === void 0) { range = null; }\r\n if (detail === void 0) { detail = null; }\r\n var mouseColumn = this.mouseColumn;\r\n if (position && position.column < this._ctx.model.getLineMaxColumn(position.lineNumber)) {\r\n // Most likely, the line contains foreign decorations...\r\n mouseColumn = CursorColumns.visibleColumnFromColumn(this._ctx.model.getLineContent(position.lineNumber), position.column, this._ctx.model.getOptions().tabSize) + 1;\r\n }\r\n return new MouseTarget(this.target, type, mouseColumn, position, range, detail);\r\n };\r\n HitTestRequest.prototype.withTarget = function (target) {\r\n return new HitTestRequest(this._ctx, this.editorPos, this.pos, target);\r\n };\r\n return HitTestRequest;\r\n}(BareHitTestRequest));\r\nvar EMPTY_CONTENT_AFTER_LINES = { isAfterLines: true };\r\nfunction createEmptyContentDataInLines(horizontalDistanceToText) {\r\n return {\r\n isAfterLines: false,\r\n horizontalDistanceToText: horizontalDistanceToText\r\n };\r\n}\r\nvar MouseTargetFactory = /** @class */ (function () {\r\n function MouseTargetFactory(context, viewHelper) {\r\n this._context = context;\r\n this._viewHelper = viewHelper;\r\n }\r\n MouseTargetFactory.prototype.mouseTargetIsWidget = function (e) {\r\n var t = e.target;\r\n var path = PartFingerprints.collect(t, this._viewHelper.viewDomNode);\r\n // Is it a content widget?\r\n if (ElementPath.isChildOfContentWidgets(path) || ElementPath.isChildOfOverflowingContentWidgets(path)) {\r\n return true;\r\n }\r\n // Is it an overlay widget?\r\n if (ElementPath.isChildOfOverlayWidgets(path)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n MouseTargetFactory.prototype.createMouseTarget = function (lastRenderData, editorPos, pos, target) {\r\n var ctx = new HitTestContext(this._context, this._viewHelper, lastRenderData);\r\n var request = new HitTestRequest(ctx, editorPos, pos, target);\r\n try {\r\n var r = MouseTargetFactory._createMouseTarget(ctx, request, false);\r\n // console.log(r.toString());\r\n return r;\r\n }\r\n catch (err) {\r\n // console.log(err);\r\n return request.fulfill(0 /* UNKNOWN */);\r\n }\r\n };\r\n MouseTargetFactory._createMouseTarget = function (ctx, request, domHitTestExecuted) {\r\n // console.log(`${domHitTestExecuted ? '=>' : ''}CAME IN REQUEST: ${request}`);\r\n // First ensure the request has a target\r\n if (request.target === null) {\r\n if (domHitTestExecuted) {\r\n // Still no target... and we have already executed hit test...\r\n return request.fulfill(0 /* UNKNOWN */);\r\n }\r\n var hitTestResult = MouseTargetFactory._doHitTest(ctx, request);\r\n if (hitTestResult.position) {\r\n return MouseTargetFactory.createMouseTargetFromHitTestPosition(ctx, request, hitTestResult.position.lineNumber, hitTestResult.position.column);\r\n }\r\n return this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true);\r\n }\r\n // we know for a fact that request.target is not null\r\n var resolvedRequest = request;\r\n var result = null;\r\n result = result || MouseTargetFactory._hitTestContentWidget(ctx, resolvedRequest);\r\n result = result || MouseTargetFactory._hitTestOverlayWidget(ctx, resolvedRequest);\r\n result = result || MouseTargetFactory._hitTestMinimap(ctx, resolvedRequest);\r\n result = result || MouseTargetFactory._hitTestScrollbarSlider(ctx, resolvedRequest);\r\n result = result || MouseTargetFactory._hitTestViewZone(ctx, resolvedRequest);\r\n result = result || MouseTargetFactory._hitTestMargin(ctx, resolvedRequest);\r\n result = result || MouseTargetFactory._hitTestViewCursor(ctx, resolvedRequest);\r\n result = result || MouseTargetFactory._hitTestTextArea(ctx, resolvedRequest);\r\n result = result || MouseTargetFactory._hitTestViewLines(ctx, resolvedRequest, domHitTestExecuted);\r\n result = result || MouseTargetFactory._hitTestScrollbar(ctx, resolvedRequest);\r\n return (result || request.fulfill(0 /* UNKNOWN */));\r\n };\r\n MouseTargetFactory._hitTestContentWidget = function (ctx, request) {\r\n // Is it a content widget?\r\n if (ElementPath.isChildOfContentWidgets(request.targetPath) || ElementPath.isChildOfOverflowingContentWidgets(request.targetPath)) {\r\n var widgetId = ctx.findAttribute(request.target, 'widgetId');\r\n if (widgetId) {\r\n return request.fulfill(9 /* CONTENT_WIDGET */, null, null, widgetId);\r\n }\r\n else {\r\n return request.fulfill(0 /* UNKNOWN */);\r\n }\r\n }\r\n return null;\r\n };\r\n MouseTargetFactory._hitTestOverlayWidget = function (ctx, request) {\r\n // Is it an overlay widget?\r\n if (ElementPath.isChildOfOverlayWidgets(request.targetPath)) {\r\n var widgetId = ctx.findAttribute(request.target, 'widgetId');\r\n if (widgetId) {\r\n return request.fulfill(12 /* OVERLAY_WIDGET */, null, null, widgetId);\r\n }\r\n else {\r\n return request.fulfill(0 /* UNKNOWN */);\r\n }\r\n }\r\n return null;\r\n };\r\n MouseTargetFactory._hitTestViewCursor = function (ctx, request) {\r\n if (request.target) {\r\n // Check if we've hit a painted cursor\r\n var lastViewCursorsRenderData = ctx.lastRenderData.lastViewCursorsRenderData;\r\n for (var _i = 0, lastViewCursorsRenderData_1 = lastViewCursorsRenderData; _i < lastViewCursorsRenderData_1.length; _i++) {\r\n var d = lastViewCursorsRenderData_1[_i];\r\n if (request.target === d.domNode) {\r\n return request.fulfill(6 /* CONTENT_TEXT */, d.position);\r\n }\r\n }\r\n }\r\n if (request.isInContentArea) {\r\n // Edge has a bug when hit-testing the exact position of a cursor,\r\n // instead of returning the correct dom node, it returns the\r\n // first or last rendered view line dom node, therefore help it out\r\n // and first check if we are on top of a cursor\r\n var lastViewCursorsRenderData = ctx.lastRenderData.lastViewCursorsRenderData;\r\n var mouseContentHorizontalOffset = request.mouseContentHorizontalOffset;\r\n var mouseVerticalOffset = request.mouseVerticalOffset;\r\n for (var _a = 0, lastViewCursorsRenderData_2 = lastViewCursorsRenderData; _a < lastViewCursorsRenderData_2.length; _a++) {\r\n var d = lastViewCursorsRenderData_2[_a];\r\n if (mouseContentHorizontalOffset < d.contentLeft) {\r\n // mouse position is to the left of the cursor\r\n continue;\r\n }\r\n if (mouseContentHorizontalOffset > d.contentLeft + d.width) {\r\n // mouse position is to the right of the cursor\r\n continue;\r\n }\r\n var cursorVerticalOffset = ctx.getVerticalOffsetForLineNumber(d.position.lineNumber);\r\n if (cursorVerticalOffset <= mouseVerticalOffset\r\n && mouseVerticalOffset <= cursorVerticalOffset + d.height) {\r\n return request.fulfill(6 /* CONTENT_TEXT */, d.position);\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n MouseTargetFactory._hitTestViewZone = function (ctx, request) {\r\n var viewZoneData = ctx.getZoneAtCoord(request.mouseVerticalOffset);\r\n if (viewZoneData) {\r\n var mouseTargetType = (request.isInContentArea ? 8 /* CONTENT_VIEW_ZONE */ : 5 /* GUTTER_VIEW_ZONE */);\r\n return request.fulfill(mouseTargetType, viewZoneData.position, null, viewZoneData);\r\n }\r\n return null;\r\n };\r\n MouseTargetFactory._hitTestTextArea = function (ctx, request) {\r\n // Is it the textarea?\r\n if (ElementPath.isTextArea(request.targetPath)) {\r\n if (ctx.lastRenderData.lastTextareaPosition) {\r\n return request.fulfill(6 /* CONTENT_TEXT */, ctx.lastRenderData.lastTextareaPosition);\r\n }\r\n return request.fulfill(1 /* TEXTAREA */, ctx.lastRenderData.lastTextareaPosition);\r\n }\r\n return null;\r\n };\r\n MouseTargetFactory._hitTestMargin = function (ctx, request) {\r\n if (request.isInMarginArea) {\r\n var res = ctx.getFullLineRangeAtCoord(request.mouseVerticalOffset);\r\n var pos = res.range.getStartPosition();\r\n var offset = Math.abs(request.pos.x - request.editorPos.x);\r\n var detail = {\r\n isAfterLines: res.isAfterLines,\r\n glyphMarginLeft: ctx.layoutInfo.glyphMarginLeft,\r\n glyphMarginWidth: ctx.layoutInfo.glyphMarginWidth,\r\n lineNumbersWidth: ctx.layoutInfo.lineNumbersWidth,\r\n offsetX: offset\r\n };\r\n offset -= ctx.layoutInfo.glyphMarginLeft;\r\n if (offset <= ctx.layoutInfo.glyphMarginWidth) {\r\n // On the glyph margin\r\n return request.fulfill(2 /* GUTTER_GLYPH_MARGIN */, pos, res.range, detail);\r\n }\r\n offset -= ctx.layoutInfo.glyphMarginWidth;\r\n if (offset <= ctx.layoutInfo.lineNumbersWidth) {\r\n // On the line numbers\r\n return request.fulfill(3 /* GUTTER_LINE_NUMBERS */, pos, res.range, detail);\r\n }\r\n offset -= ctx.layoutInfo.lineNumbersWidth;\r\n // On the line decorations\r\n return request.fulfill(4 /* GUTTER_LINE_DECORATIONS */, pos, res.range, detail);\r\n }\r\n return null;\r\n };\r\n MouseTargetFactory._hitTestViewLines = function (ctx, request, domHitTestExecuted) {\r\n if (!ElementPath.isChildOfViewLines(request.targetPath)) {\r\n return null;\r\n }\r\n // Check if it is below any lines and any view zones\r\n if (ctx.isAfterLines(request.mouseVerticalOffset)) {\r\n // This most likely indicates it happened after the last view-line\r\n var lineCount = ctx.model.getLineCount();\r\n var maxLineColumn = ctx.model.getLineMaxColumn(lineCount);\r\n return request.fulfill(7 /* CONTENT_EMPTY */, new Position(lineCount, maxLineColumn), undefined, EMPTY_CONTENT_AFTER_LINES);\r\n }\r\n if (domHitTestExecuted) {\r\n // Check if we are hitting a view-line (can happen in the case of inline decorations on empty lines)\r\n // See https://github.com/Microsoft/vscode/issues/46942\r\n if (ElementPath.isStrictChildOfViewLines(request.targetPath)) {\r\n var lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\r\n if (ctx.model.getLineLength(lineNumber) === 0) {\r\n var lineWidth_1 = ctx.getLineWidth(lineNumber);\r\n var detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth_1);\r\n return request.fulfill(7 /* CONTENT_EMPTY */, new Position(lineNumber, 1), undefined, detail);\r\n }\r\n var lineWidth = ctx.getLineWidth(lineNumber);\r\n if (request.mouseContentHorizontalOffset >= lineWidth) {\r\n var detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\r\n var pos = new Position(lineNumber, ctx.model.getLineMaxColumn(lineNumber));\r\n return request.fulfill(7 /* CONTENT_EMPTY */, pos, undefined, detail);\r\n }\r\n }\r\n // We have already executed hit test...\r\n return request.fulfill(0 /* UNKNOWN */);\r\n }\r\n var hitTestResult = MouseTargetFactory._doHitTest(ctx, request);\r\n if (hitTestResult.position) {\r\n return MouseTargetFactory.createMouseTargetFromHitTestPosition(ctx, request, hitTestResult.position.lineNumber, hitTestResult.position.column);\r\n }\r\n return this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true);\r\n };\r\n MouseTargetFactory._hitTestMinimap = function (ctx, request) {\r\n if (ElementPath.isChildOfMinimap(request.targetPath)) {\r\n var possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\r\n var maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\r\n return request.fulfill(11 /* SCROLLBAR */, new Position(possibleLineNumber, maxColumn));\r\n }\r\n return null;\r\n };\r\n MouseTargetFactory._hitTestScrollbarSlider = function (ctx, request) {\r\n if (ElementPath.isChildOfScrollableElement(request.targetPath)) {\r\n if (request.target && request.target.nodeType === 1) {\r\n var className = request.target.className;\r\n if (className && /\\b(slider|scrollbar)\\b/.test(className)) {\r\n var possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\r\n var maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\r\n return request.fulfill(11 /* SCROLLBAR */, new Position(possibleLineNumber, maxColumn));\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n MouseTargetFactory._hitTestScrollbar = function (ctx, request) {\r\n // Is it the overview ruler?\r\n // Is it a child of the scrollable element?\r\n if (ElementPath.isChildOfScrollableElement(request.targetPath)) {\r\n var possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\r\n var maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\r\n return request.fulfill(11 /* SCROLLBAR */, new Position(possibleLineNumber, maxColumn));\r\n }\r\n return null;\r\n };\r\n MouseTargetFactory.prototype.getMouseColumn = function (editorPos, pos) {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n var mouseContentHorizontalOffset = this._context.viewLayout.getCurrentScrollLeft() + pos.x - editorPos.x - layoutInfo.contentLeft;\r\n return MouseTargetFactory._getMouseColumn(mouseContentHorizontalOffset, options.get(32 /* fontInfo */).typicalHalfwidthCharacterWidth);\r\n };\r\n MouseTargetFactory._getMouseColumn = function (mouseContentHorizontalOffset, typicalHalfwidthCharacterWidth) {\r\n if (mouseContentHorizontalOffset < 0) {\r\n return 1;\r\n }\r\n var chars = Math.round(mouseContentHorizontalOffset / typicalHalfwidthCharacterWidth);\r\n return (chars + 1);\r\n };\r\n MouseTargetFactory.createMouseTargetFromHitTestPosition = function (ctx, request, lineNumber, column) {\r\n var pos = new Position(lineNumber, column);\r\n var lineWidth = ctx.getLineWidth(lineNumber);\r\n if (request.mouseContentHorizontalOffset > lineWidth) {\r\n if (browser.isEdge && pos.column === 1) {\r\n // See https://github.com/Microsoft/vscode/issues/10875\r\n var detail_1 = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\r\n return request.fulfill(7 /* CONTENT_EMPTY */, new Position(lineNumber, ctx.model.getLineMaxColumn(lineNumber)), undefined, detail_1);\r\n }\r\n var detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\r\n return request.fulfill(7 /* CONTENT_EMPTY */, pos, undefined, detail);\r\n }\r\n var visibleRange = ctx.visibleRangeForPosition(lineNumber, column);\r\n if (!visibleRange) {\r\n return request.fulfill(0 /* UNKNOWN */, pos);\r\n }\r\n var columnHorizontalOffset = visibleRange.left;\r\n if (request.mouseContentHorizontalOffset === columnHorizontalOffset) {\r\n return request.fulfill(6 /* CONTENT_TEXT */, pos);\r\n }\r\n var points = [];\r\n points.push({ offset: visibleRange.left, column: column });\r\n if (column > 1) {\r\n var visibleRange_1 = ctx.visibleRangeForPosition(lineNumber, column - 1);\r\n if (visibleRange_1) {\r\n points.push({ offset: visibleRange_1.left, column: column - 1 });\r\n }\r\n }\r\n var lineMaxColumn = ctx.model.getLineMaxColumn(lineNumber);\r\n if (column < lineMaxColumn) {\r\n var visibleRange_2 = ctx.visibleRangeForPosition(lineNumber, column + 1);\r\n if (visibleRange_2) {\r\n points.push({ offset: visibleRange_2.left, column: column + 1 });\r\n }\r\n }\r\n points.sort(function (a, b) { return a.offset - b.offset; });\r\n for (var i = 1; i < points.length; i++) {\r\n var prev = points[i - 1];\r\n var curr = points[i];\r\n if (prev.offset <= request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset <= curr.offset) {\r\n var rng = new EditorRange(lineNumber, prev.column, lineNumber, curr.column);\r\n return request.fulfill(6 /* CONTENT_TEXT */, pos, rng);\r\n }\r\n }\r\n return request.fulfill(6 /* CONTENT_TEXT */, pos);\r\n };\r\n /**\r\n * Most probably WebKit browsers and Edge\r\n */\r\n MouseTargetFactory._doHitTestWithCaretRangeFromPoint = function (ctx, request) {\r\n // In Chrome, especially on Linux it is possible to click between lines,\r\n // so try to adjust the `hity` below so that it lands in the center of a line\r\n var lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\r\n var lineVerticalOffset = ctx.getVerticalOffsetForLineNumber(lineNumber);\r\n var lineCenteredVerticalOffset = lineVerticalOffset + Math.floor(ctx.lineHeight / 2);\r\n var adjustedPageY = request.pos.y + (lineCenteredVerticalOffset - request.mouseVerticalOffset);\r\n if (adjustedPageY <= request.editorPos.y) {\r\n adjustedPageY = request.editorPos.y + 1;\r\n }\r\n if (adjustedPageY >= request.editorPos.y + ctx.layoutInfo.height) {\r\n adjustedPageY = request.editorPos.y + ctx.layoutInfo.height - 1;\r\n }\r\n var adjustedPage = new PageCoordinates(request.pos.x, adjustedPageY);\r\n var r = this._actualDoHitTestWithCaretRangeFromPoint(ctx, adjustedPage.toClientCoordinates());\r\n if (r.position) {\r\n return r;\r\n }\r\n // Also try to hit test without the adjustment (for the edge cases that we are near the top or bottom)\r\n return this._actualDoHitTestWithCaretRangeFromPoint(ctx, request.pos.toClientCoordinates());\r\n };\r\n MouseTargetFactory._actualDoHitTestWithCaretRangeFromPoint = function (ctx, coords) {\r\n var range = document.caretRangeFromPoint(coords.clientX, coords.clientY);\r\n if (!range || !range.startContainer) {\r\n return {\r\n position: null,\r\n hitTarget: null\r\n };\r\n }\r\n // Chrome always hits a TEXT_NODE, while Edge sometimes hits a token span\r\n var startContainer = range.startContainer;\r\n var hitTarget = null;\r\n if (startContainer.nodeType === startContainer.TEXT_NODE) {\r\n // startContainer is expected to be the token text\r\n var parent1 = startContainer.parentNode; // expected to be the token span\r\n var parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span\r\n var parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div\r\n var parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? parent3.className : null;\r\n if (parent3ClassName === ViewLine.CLASS_NAME) {\r\n var p = ctx.getPositionFromDOMInfo(parent1, range.startOffset);\r\n return {\r\n position: p,\r\n hitTarget: null\r\n };\r\n }\r\n else {\r\n hitTarget = startContainer.parentNode;\r\n }\r\n }\r\n else if (startContainer.nodeType === startContainer.ELEMENT_NODE) {\r\n // startContainer is expected to be the token span\r\n var parent1 = startContainer.parentNode; // expected to be the view line container span\r\n var parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line div\r\n var parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? parent2.className : null;\r\n if (parent2ClassName === ViewLine.CLASS_NAME) {\r\n var p = ctx.getPositionFromDOMInfo(startContainer, startContainer.textContent.length);\r\n return {\r\n position: p,\r\n hitTarget: null\r\n };\r\n }\r\n else {\r\n hitTarget = startContainer;\r\n }\r\n }\r\n return {\r\n position: null,\r\n hitTarget: hitTarget\r\n };\r\n };\r\n /**\r\n * Most probably Gecko\r\n */\r\n MouseTargetFactory._doHitTestWithCaretPositionFromPoint = function (ctx, coords) {\r\n var hitResult = document.caretPositionFromPoint(coords.clientX, coords.clientY);\r\n if (hitResult.offsetNode.nodeType === hitResult.offsetNode.TEXT_NODE) {\r\n // offsetNode is expected to be the token text\r\n var parent1 = hitResult.offsetNode.parentNode; // expected to be the token span\r\n var parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span\r\n var parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div\r\n var parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? parent3.className : null;\r\n if (parent3ClassName === ViewLine.CLASS_NAME) {\r\n var p = ctx.getPositionFromDOMInfo(hitResult.offsetNode.parentNode, hitResult.offset);\r\n return {\r\n position: p,\r\n hitTarget: null\r\n };\r\n }\r\n else {\r\n return {\r\n position: null,\r\n hitTarget: hitResult.offsetNode.parentNode\r\n };\r\n }\r\n }\r\n return {\r\n position: null,\r\n hitTarget: hitResult.offsetNode\r\n };\r\n };\r\n /**\r\n * Most probably IE\r\n */\r\n MouseTargetFactory._doHitTestWithMoveToPoint = function (ctx, coords) {\r\n var resultPosition = null;\r\n var resultHitTarget = null;\r\n var textRange = document.body.createTextRange();\r\n try {\r\n textRange.moveToPoint(coords.clientX, coords.clientY);\r\n }\r\n catch (err) {\r\n return {\r\n position: null,\r\n hitTarget: null\r\n };\r\n }\r\n textRange.collapse(true);\r\n // Now, let's do our best to figure out what we hit :)\r\n var parentElement = textRange ? textRange.parentElement() : null;\r\n var parent1 = parentElement ? parentElement.parentNode : null;\r\n var parent2 = parent1 ? parent1.parentNode : null;\r\n var parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? parent2.className : '';\r\n if (parent2ClassName === ViewLine.CLASS_NAME) {\r\n var rangeToContainEntireSpan = textRange.duplicate();\r\n rangeToContainEntireSpan.moveToElementText(parentElement);\r\n rangeToContainEntireSpan.setEndPoint('EndToStart', textRange);\r\n resultPosition = ctx.getPositionFromDOMInfo(parentElement, rangeToContainEntireSpan.text.length);\r\n // Move range out of the span node, IE doesn't like having many ranges in\r\n // the same spot and will act badly for lines containing dashes ('-')\r\n rangeToContainEntireSpan.moveToElementText(ctx.viewDomNode);\r\n }\r\n else {\r\n // Looks like we've hit the hover or something foreign\r\n resultHitTarget = parentElement;\r\n }\r\n // Move range out of the span node, IE doesn't like having many ranges in\r\n // the same spot and will act badly for lines containing dashes ('-')\r\n textRange.moveToElementText(ctx.viewDomNode);\r\n return {\r\n position: resultPosition,\r\n hitTarget: resultHitTarget\r\n };\r\n };\r\n MouseTargetFactory._doHitTest = function (ctx, request) {\r\n // State of the art (18.10.2012):\r\n // The spec says browsers should support document.caretPositionFromPoint, but nobody implemented it (http://dev.w3.org/csswg/cssom-view/)\r\n // Gecko:\r\n // - they tried to implement it once, but failed: https://bugzilla.mozilla.org/show_bug.cgi?id=654352\r\n // - however, they do give out rangeParent/rangeOffset properties on mouse events\r\n // Webkit:\r\n // - they have implemented a previous version of the spec which was using document.caretRangeFromPoint\r\n // IE:\r\n // - they have a proprietary method on ranges, moveToPoint: https://msdn.microsoft.com/en-us/library/ie/ms536632(v=vs.85).aspx\r\n // 24.08.2016: Edge has added WebKit's document.caretRangeFromPoint, but it is quite buggy\r\n // - when hit testing the cursor it returns the first or the last line in the viewport\r\n // - it inconsistently hits text nodes or span nodes, while WebKit only hits text nodes\r\n // - when toggling render whitespace on, and hit testing in the empty content after a line, it always hits offset 0 of the first span of the line\r\n // Thank you browsers for making this so 'easy' :)\r\n if (typeof document.caretRangeFromPoint === 'function') {\r\n return this._doHitTestWithCaretRangeFromPoint(ctx, request);\r\n }\r\n else if (document.caretPositionFromPoint) {\r\n return this._doHitTestWithCaretPositionFromPoint(ctx, request.pos.toClientCoordinates());\r\n }\r\n else if (document.body.createTextRange) {\r\n return this._doHitTestWithMoveToPoint(ctx, request.pos.toClientCoordinates());\r\n }\r\n return {\r\n position: null,\r\n hitTarget: null\r\n };\r\n };\r\n return MouseTargetFactory;\r\n}());\r\nexport { MouseTargetFactory };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as browser from '../../../base/browser/browser.js';\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { StandardWheelEvent } from '../../../base/browser/mouseEvent.js';\r\nimport { RunOnceScheduler, TimeoutTimer } from '../../../base/common/async.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nimport { HitTestContext, MouseTarget, MouseTargetFactory } from './mouseTarget.js';\r\nimport { ClientCoordinates, EditorMouseEventFactory, GlobalEditorMouseMoveMonitor, createEditorPagePosition } from '../editorDom.js';\r\nimport { EditorZoom } from '../../common/config/editorZoom.js';\r\nimport { Position } from '../../common/core/position.js';\r\nimport { Selection } from '../../common/core/selection.js';\r\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\r\n/**\r\n * Merges mouse events when mouse move events are throttled\r\n */\r\nexport function createMouseMoveEventMerger(mouseTargetFactory) {\r\n return function (lastEvent, currentEvent) {\r\n var targetIsWidget = false;\r\n if (mouseTargetFactory) {\r\n targetIsWidget = mouseTargetFactory.mouseTargetIsWidget(currentEvent);\r\n }\r\n if (!targetIsWidget) {\r\n currentEvent.preventDefault();\r\n }\r\n return currentEvent;\r\n };\r\n}\r\nvar MouseHandler = /** @class */ (function (_super) {\r\n __extends(MouseHandler, _super);\r\n function MouseHandler(context, viewController, viewHelper) {\r\n var _this = _super.call(this) || this;\r\n _this._isFocused = false;\r\n _this._context = context;\r\n _this.viewController = viewController;\r\n _this.viewHelper = viewHelper;\r\n _this.mouseTargetFactory = new MouseTargetFactory(_this._context, viewHelper);\r\n _this._mouseDownOperation = _this._register(new MouseDownOperation(_this._context, _this.viewController, _this.viewHelper, function (e, testEventTarget) { return _this._createMouseTarget(e, testEventTarget); }, function (e) { return _this._getMouseColumn(e); }));\r\n _this._asyncFocus = _this._register(new RunOnceScheduler(function () { return _this.viewHelper.focusTextArea(); }, 0));\r\n _this.lastMouseLeaveTime = -1;\r\n var mouseEvents = new EditorMouseEventFactory(_this.viewHelper.viewDomNode);\r\n _this._register(mouseEvents.onContextMenu(_this.viewHelper.viewDomNode, function (e) { return _this._onContextMenu(e, true); }));\r\n _this._register(mouseEvents.onMouseMoveThrottled(_this.viewHelper.viewDomNode, function (e) { return _this._onMouseMove(e); }, createMouseMoveEventMerger(_this.mouseTargetFactory), MouseHandler.MOUSE_MOVE_MINIMUM_TIME));\r\n _this._register(mouseEvents.onMouseUp(_this.viewHelper.viewDomNode, function (e) { return _this._onMouseUp(e); }));\r\n _this._register(mouseEvents.onMouseLeave(_this.viewHelper.viewDomNode, function (e) { return _this._onMouseLeave(e); }));\r\n _this._register(mouseEvents.onMouseDown(_this.viewHelper.viewDomNode, function (e) { return _this._onMouseDown(e); }));\r\n var onMouseWheel = function (browserEvent) {\r\n _this.viewController.emitMouseWheel(browserEvent);\r\n if (!_this._context.configuration.options.get(55 /* mouseWheelZoom */)) {\r\n return;\r\n }\r\n var e = new StandardWheelEvent(browserEvent);\r\n if (e.browserEvent.ctrlKey || e.browserEvent.metaKey) {\r\n var zoomLevel = EditorZoom.getZoomLevel();\r\n var delta = e.deltaY > 0 ? 1 : -1;\r\n EditorZoom.setZoomLevel(zoomLevel + delta);\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n };\r\n _this._register(dom.addDisposableListener(_this.viewHelper.viewDomNode, browser.isEdgeOrIE ? 'mousewheel' : 'wheel', onMouseWheel, { capture: true, passive: false }));\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n MouseHandler.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n _super.prototype.dispose.call(this);\r\n };\r\n // --- begin event handlers\r\n MouseHandler.prototype.onCursorStateChanged = function (e) {\r\n this._mouseDownOperation.onCursorStateChanged(e);\r\n return false;\r\n };\r\n MouseHandler.prototype.onFocusChanged = function (e) {\r\n this._isFocused = e.isFocused;\r\n return false;\r\n };\r\n MouseHandler.prototype.onScrollChanged = function (e) {\r\n this._mouseDownOperation.onScrollChanged();\r\n return false;\r\n };\r\n // --- end event handlers\r\n MouseHandler.prototype.getTargetAtClientPoint = function (clientX, clientY) {\r\n var clientPos = new ClientCoordinates(clientX, clientY);\r\n var pos = clientPos.toPageCoordinates();\r\n var editorPos = createEditorPagePosition(this.viewHelper.viewDomNode);\r\n if (pos.y < editorPos.y || pos.y > editorPos.y + editorPos.height || pos.x < editorPos.x || pos.x > editorPos.x + editorPos.width) {\r\n return null;\r\n }\r\n return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(), editorPos, pos, null);\r\n };\r\n MouseHandler.prototype._createMouseTarget = function (e, testEventTarget) {\r\n return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(), e.editorPos, e.pos, testEventTarget ? e.target : null);\r\n };\r\n MouseHandler.prototype._getMouseColumn = function (e) {\r\n return this.mouseTargetFactory.getMouseColumn(e.editorPos, e.pos);\r\n };\r\n MouseHandler.prototype._onContextMenu = function (e, testEventTarget) {\r\n this.viewController.emitContextMenu({\r\n event: e,\r\n target: this._createMouseTarget(e, testEventTarget)\r\n });\r\n };\r\n MouseHandler.prototype._onMouseMove = function (e) {\r\n if (this._mouseDownOperation.isActive()) {\r\n // In selection/drag operation\r\n return;\r\n }\r\n var actualMouseMoveTime = e.timestamp;\r\n if (actualMouseMoveTime < this.lastMouseLeaveTime) {\r\n // Due to throttling, this event occurred before the mouse left the editor, therefore ignore it.\r\n return;\r\n }\r\n this.viewController.emitMouseMove({\r\n event: e,\r\n target: this._createMouseTarget(e, true)\r\n });\r\n };\r\n MouseHandler.prototype._onMouseLeave = function (e) {\r\n this.lastMouseLeaveTime = (new Date()).getTime();\r\n this.viewController.emitMouseLeave({\r\n event: e,\r\n target: null\r\n });\r\n };\r\n MouseHandler.prototype._onMouseUp = function (e) {\r\n this.viewController.emitMouseUp({\r\n event: e,\r\n target: this._createMouseTarget(e, true)\r\n });\r\n };\r\n MouseHandler.prototype._onMouseDown = function (e) {\r\n var _this = this;\r\n var t = this._createMouseTarget(e, true);\r\n var targetIsContent = (t.type === 6 /* CONTENT_TEXT */ || t.type === 7 /* CONTENT_EMPTY */);\r\n var targetIsGutter = (t.type === 2 /* GUTTER_GLYPH_MARGIN */ || t.type === 3 /* GUTTER_LINE_NUMBERS */ || t.type === 4 /* GUTTER_LINE_DECORATIONS */);\r\n var targetIsLineNumbers = (t.type === 3 /* GUTTER_LINE_NUMBERS */);\r\n var selectOnLineNumbers = this._context.configuration.options.get(79 /* selectOnLineNumbers */);\r\n var targetIsViewZone = (t.type === 8 /* CONTENT_VIEW_ZONE */ || t.type === 5 /* GUTTER_VIEW_ZONE */);\r\n var targetIsWidget = (t.type === 9 /* CONTENT_WIDGET */);\r\n var shouldHandle = e.leftButton || e.middleButton;\r\n if (platform.isMacintosh && e.leftButton && e.ctrlKey) {\r\n shouldHandle = false;\r\n }\r\n var focus = function () {\r\n // In IE11, if the focus is in the browser's address bar and\r\n // then you click in the editor, calling preventDefault()\r\n // will not move focus properly (focus remains the address bar)\r\n if (browser.isIE && !_this._isFocused) {\r\n _this._asyncFocus.schedule();\r\n }\r\n else {\r\n e.preventDefault();\r\n _this.viewHelper.focusTextArea();\r\n }\r\n };\r\n if (shouldHandle && (targetIsContent || (targetIsLineNumbers && selectOnLineNumbers))) {\r\n focus();\r\n this._mouseDownOperation.start(t.type, e);\r\n }\r\n else if (targetIsGutter) {\r\n // Do not steal focus\r\n e.preventDefault();\r\n }\r\n else if (targetIsViewZone) {\r\n var viewZoneData = t.detail;\r\n if (this.viewHelper.shouldSuppressMouseDownOnViewZone(viewZoneData.viewZoneId)) {\r\n focus();\r\n this._mouseDownOperation.start(t.type, e);\r\n e.preventDefault();\r\n }\r\n }\r\n else if (targetIsWidget && this.viewHelper.shouldSuppressMouseDownOnWidget(t.detail)) {\r\n focus();\r\n e.preventDefault();\r\n }\r\n this.viewController.emitMouseDown({\r\n event: e,\r\n target: t\r\n });\r\n };\r\n MouseHandler.MOUSE_MOVE_MINIMUM_TIME = 100; // ms\r\n return MouseHandler;\r\n}(ViewEventHandler));\r\nexport { MouseHandler };\r\nvar MouseDownOperation = /** @class */ (function (_super) {\r\n __extends(MouseDownOperation, _super);\r\n function MouseDownOperation(context, viewController, viewHelper, createMouseTarget, getMouseColumn) {\r\n var _this = _super.call(this) || this;\r\n _this._context = context;\r\n _this._viewController = viewController;\r\n _this._viewHelper = viewHelper;\r\n _this._createMouseTarget = createMouseTarget;\r\n _this._getMouseColumn = getMouseColumn;\r\n _this._mouseMoveMonitor = _this._register(new GlobalEditorMouseMoveMonitor(_this._viewHelper.viewDomNode));\r\n _this._onScrollTimeout = _this._register(new TimeoutTimer());\r\n _this._mouseState = new MouseDownState();\r\n _this._currentSelection = new Selection(1, 1, 1, 1);\r\n _this._isActive = false;\r\n _this._lastMouseEvent = null;\r\n return _this;\r\n }\r\n MouseDownOperation.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n MouseDownOperation.prototype.isActive = function () {\r\n return this._isActive;\r\n };\r\n MouseDownOperation.prototype._onMouseDownThenMove = function (e) {\r\n this._lastMouseEvent = e;\r\n this._mouseState.setModifiers(e);\r\n var position = this._findMousePosition(e, true);\r\n if (!position) {\r\n // Ignoring because position is unknown\r\n return;\r\n }\r\n if (this._mouseState.isDragAndDrop) {\r\n this._viewController.emitMouseDrag({\r\n event: e,\r\n target: position\r\n });\r\n }\r\n else {\r\n this._dispatchMouse(position, true);\r\n }\r\n };\r\n MouseDownOperation.prototype.start = function (targetType, e) {\r\n var _this = this;\r\n this._lastMouseEvent = e;\r\n this._mouseState.setStartedOnLineNumbers(targetType === 3 /* GUTTER_LINE_NUMBERS */);\r\n this._mouseState.setStartButtons(e);\r\n this._mouseState.setModifiers(e);\r\n var position = this._findMousePosition(e, true);\r\n if (!position || !position.position) {\r\n // Ignoring because position is unknown\r\n return;\r\n }\r\n this._mouseState.trySetCount(e.detail, position.position);\r\n // Overwrite the detail of the MouseEvent, as it will be sent out in an event and contributions might rely on it.\r\n e.detail = this._mouseState.count;\r\n var options = this._context.configuration.options;\r\n if (!options.get(65 /* readOnly */)\r\n && options.get(23 /* dragAndDrop */)\r\n && !this._mouseState.altKey // we don't support multiple mouse\r\n && e.detail < 2 // only single click on a selection can work\r\n && !this._isActive // the mouse is not down yet\r\n && !this._currentSelection.isEmpty() // we don't drag single cursor\r\n && (position.type === 6 /* CONTENT_TEXT */) // single click on text\r\n && position.position && this._currentSelection.containsPosition(position.position) // single click on a selection\r\n ) {\r\n this._mouseState.isDragAndDrop = true;\r\n this._isActive = true;\r\n this._mouseMoveMonitor.startMonitoring(createMouseMoveEventMerger(null), function (e) { return _this._onMouseDownThenMove(e); }, function () {\r\n var position = _this._findMousePosition(_this._lastMouseEvent, true);\r\n _this._viewController.emitMouseDrop({\r\n event: _this._lastMouseEvent,\r\n target: (position ? _this._createMouseTarget(_this._lastMouseEvent, true) : null) // Ignoring because position is unknown, e.g., Content View Zone\r\n });\r\n _this._stop();\r\n });\r\n return;\r\n }\r\n this._mouseState.isDragAndDrop = false;\r\n this._dispatchMouse(position, e.shiftKey);\r\n if (!this._isActive) {\r\n this._isActive = true;\r\n this._mouseMoveMonitor.startMonitoring(createMouseMoveEventMerger(null), function (e) { return _this._onMouseDownThenMove(e); }, function () { return _this._stop(); });\r\n }\r\n };\r\n MouseDownOperation.prototype._stop = function () {\r\n this._isActive = false;\r\n this._onScrollTimeout.cancel();\r\n };\r\n MouseDownOperation.prototype.onScrollChanged = function () {\r\n var _this = this;\r\n if (!this._isActive) {\r\n return;\r\n }\r\n this._onScrollTimeout.setIfNotSet(function () {\r\n if (!_this._lastMouseEvent) {\r\n return;\r\n }\r\n var position = _this._findMousePosition(_this._lastMouseEvent, false);\r\n if (!position) {\r\n // Ignoring because position is unknown\r\n return;\r\n }\r\n if (_this._mouseState.isDragAndDrop) {\r\n // Ignoring because users are dragging the text\r\n return;\r\n }\r\n _this._dispatchMouse(position, true);\r\n }, 10);\r\n };\r\n MouseDownOperation.prototype.onCursorStateChanged = function (e) {\r\n this._currentSelection = e.selections[0];\r\n };\r\n MouseDownOperation.prototype._getPositionOutsideEditor = function (e) {\r\n var editorContent = e.editorPos;\r\n var model = this._context.model;\r\n var viewLayout = this._context.viewLayout;\r\n var mouseColumn = this._getMouseColumn(e);\r\n if (e.posy < editorContent.y) {\r\n var verticalOffset = Math.max(viewLayout.getCurrentScrollTop() - (editorContent.y - e.posy), 0);\r\n var viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);\r\n if (viewZoneData) {\r\n var newPosition = this._helpPositionJumpOverViewZone(viewZoneData);\r\n if (newPosition) {\r\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, newPosition);\r\n }\r\n }\r\n var aboveLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);\r\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(aboveLineNumber, 1));\r\n }\r\n if (e.posy > editorContent.y + editorContent.height) {\r\n var verticalOffset = viewLayout.getCurrentScrollTop() + (e.posy - editorContent.y);\r\n var viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);\r\n if (viewZoneData) {\r\n var newPosition = this._helpPositionJumpOverViewZone(viewZoneData);\r\n if (newPosition) {\r\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, newPosition);\r\n }\r\n }\r\n var belowLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);\r\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(belowLineNumber, model.getLineMaxColumn(belowLineNumber)));\r\n }\r\n var possibleLineNumber = viewLayout.getLineNumberAtVerticalOffset(viewLayout.getCurrentScrollTop() + (e.posy - editorContent.y));\r\n if (e.posx < editorContent.x) {\r\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(possibleLineNumber, 1));\r\n }\r\n if (e.posx > editorContent.x + editorContent.width) {\r\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(possibleLineNumber, model.getLineMaxColumn(possibleLineNumber)));\r\n }\r\n return null;\r\n };\r\n MouseDownOperation.prototype._findMousePosition = function (e, testEventTarget) {\r\n var positionOutsideEditor = this._getPositionOutsideEditor(e);\r\n if (positionOutsideEditor) {\r\n return positionOutsideEditor;\r\n }\r\n var t = this._createMouseTarget(e, testEventTarget);\r\n var hintedPosition = t.position;\r\n if (!hintedPosition) {\r\n return null;\r\n }\r\n if (t.type === 8 /* CONTENT_VIEW_ZONE */ || t.type === 5 /* GUTTER_VIEW_ZONE */) {\r\n var newPosition = this._helpPositionJumpOverViewZone(t.detail);\r\n if (newPosition) {\r\n return new MouseTarget(t.element, t.type, t.mouseColumn, newPosition, null, t.detail);\r\n }\r\n }\r\n return t;\r\n };\r\n MouseDownOperation.prototype._helpPositionJumpOverViewZone = function (viewZoneData) {\r\n // Force position on view zones to go above or below depending on where selection started from\r\n var selectionStart = new Position(this._currentSelection.selectionStartLineNumber, this._currentSelection.selectionStartColumn);\r\n var positionBefore = viewZoneData.positionBefore;\r\n var positionAfter = viewZoneData.positionAfter;\r\n if (positionBefore && positionAfter) {\r\n if (positionBefore.isBefore(selectionStart)) {\r\n return positionBefore;\r\n }\r\n else {\r\n return positionAfter;\r\n }\r\n }\r\n return null;\r\n };\r\n MouseDownOperation.prototype._dispatchMouse = function (position, inSelectionMode) {\r\n if (!position.position) {\r\n return;\r\n }\r\n this._viewController.dispatchMouse({\r\n position: position.position,\r\n mouseColumn: position.mouseColumn,\r\n startedOnLineNumbers: this._mouseState.startedOnLineNumbers,\r\n inSelectionMode: inSelectionMode,\r\n mouseDownCount: this._mouseState.count,\r\n altKey: this._mouseState.altKey,\r\n ctrlKey: this._mouseState.ctrlKey,\r\n metaKey: this._mouseState.metaKey,\r\n shiftKey: this._mouseState.shiftKey,\r\n leftButton: this._mouseState.leftButton,\r\n middleButton: this._mouseState.middleButton,\r\n });\r\n };\r\n return MouseDownOperation;\r\n}(Disposable));\r\nvar MouseDownState = /** @class */ (function () {\r\n function MouseDownState() {\r\n this._altKey = false;\r\n this._ctrlKey = false;\r\n this._metaKey = false;\r\n this._shiftKey = false;\r\n this._leftButton = false;\r\n this._middleButton = false;\r\n this._startedOnLineNumbers = false;\r\n this._lastMouseDownPosition = null;\r\n this._lastMouseDownPositionEqualCount = 0;\r\n this._lastMouseDownCount = 0;\r\n this._lastSetMouseDownCountTime = 0;\r\n this.isDragAndDrop = false;\r\n }\r\n Object.defineProperty(MouseDownState.prototype, \"altKey\", {\r\n get: function () { return this._altKey; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MouseDownState.prototype, \"ctrlKey\", {\r\n get: function () { return this._ctrlKey; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MouseDownState.prototype, \"metaKey\", {\r\n get: function () { return this._metaKey; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MouseDownState.prototype, \"shiftKey\", {\r\n get: function () { return this._shiftKey; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MouseDownState.prototype, \"leftButton\", {\r\n get: function () { return this._leftButton; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MouseDownState.prototype, \"middleButton\", {\r\n get: function () { return this._middleButton; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MouseDownState.prototype, \"startedOnLineNumbers\", {\r\n get: function () { return this._startedOnLineNumbers; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MouseDownState.prototype, \"count\", {\r\n get: function () {\r\n return this._lastMouseDownCount;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n MouseDownState.prototype.setModifiers = function (source) {\r\n this._altKey = source.altKey;\r\n this._ctrlKey = source.ctrlKey;\r\n this._metaKey = source.metaKey;\r\n this._shiftKey = source.shiftKey;\r\n };\r\n MouseDownState.prototype.setStartButtons = function (source) {\r\n this._leftButton = source.leftButton;\r\n this._middleButton = source.middleButton;\r\n };\r\n MouseDownState.prototype.setStartedOnLineNumbers = function (startedOnLineNumbers) {\r\n this._startedOnLineNumbers = startedOnLineNumbers;\r\n };\r\n MouseDownState.prototype.trySetCount = function (setMouseDownCount, newMouseDownPosition) {\r\n // a. Invalidate multiple clicking if too much time has passed (will be hit by IE because the detail field of mouse events contains garbage in IE10)\r\n var currentTime = (new Date()).getTime();\r\n if (currentTime - this._lastSetMouseDownCountTime > MouseDownState.CLEAR_MOUSE_DOWN_COUNT_TIME) {\r\n setMouseDownCount = 1;\r\n }\r\n this._lastSetMouseDownCountTime = currentTime;\r\n // b. Ensure that we don't jump from single click to triple click in one go (will be hit by IE because the detail field of mouse events contains garbage in IE10)\r\n if (setMouseDownCount > this._lastMouseDownCount + 1) {\r\n setMouseDownCount = this._lastMouseDownCount + 1;\r\n }\r\n // c. Invalidate multiple clicking if the logical position is different\r\n if (this._lastMouseDownPosition && this._lastMouseDownPosition.equals(newMouseDownPosition)) {\r\n this._lastMouseDownPositionEqualCount++;\r\n }\r\n else {\r\n this._lastMouseDownPositionEqualCount = 1;\r\n }\r\n this._lastMouseDownPosition = newMouseDownPosition;\r\n // Finally set the lastMouseDownCount\r\n this._lastMouseDownCount = Math.min(setMouseDownCount, this._lastMouseDownPositionEqualCount);\r\n };\r\n MouseDownState.CLEAR_MOUSE_DOWN_COUNT_TIME = 400; // ms\r\n return MouseDownState;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nimport { EventType, Gesture } from '../../../base/browser/touch.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { MouseHandler, createMouseMoveEventMerger } from './mouseHandler.js';\r\nimport { EditorMouseEvent, EditorPointerEventFactory } from '../editorDom.js';\r\nimport { BrowserFeatures } from '../../../base/browser/canIUse.js';\r\nfunction gestureChangeEventMerger(lastEvent, currentEvent) {\r\n var r = {\r\n translationY: currentEvent.translationY,\r\n translationX: currentEvent.translationX\r\n };\r\n if (lastEvent) {\r\n r.translationY += lastEvent.translationY;\r\n r.translationX += lastEvent.translationX;\r\n }\r\n return r;\r\n}\r\n/**\r\n * Basically IE10 and IE11\r\n */\r\nvar MsPointerHandler = /** @class */ (function (_super) {\r\n __extends(MsPointerHandler, _super);\r\n function MsPointerHandler(context, viewController, viewHelper) {\r\n var _this = _super.call(this, context, viewController, viewHelper) || this;\r\n _this.viewHelper.linesContentDomNode.style.msTouchAction = 'none';\r\n _this.viewHelper.linesContentDomNode.style.msContentZooming = 'none';\r\n // TODO@Alex -> this expects that the view is added in 100 ms, might not be the case\r\n // This handler should be added when the dom node is in the dom tree\r\n _this._installGestureHandlerTimeout = window.setTimeout(function () {\r\n _this._installGestureHandlerTimeout = -1;\r\n if (window.MSGesture) {\r\n var touchGesture_1 = new MSGesture();\r\n var penGesture_1 = new MSGesture();\r\n touchGesture_1.target = _this.viewHelper.linesContentDomNode;\r\n penGesture_1.target = _this.viewHelper.linesContentDomNode;\r\n _this.viewHelper.linesContentDomNode.addEventListener('MSPointerDown', function (e) {\r\n // Circumvent IE11 breaking change in e.pointerType & TypeScript's stale definitions\r\n var pointerType = e.pointerType;\r\n if (pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) {\r\n _this._lastPointerType = 'mouse';\r\n return;\r\n }\r\n else if (pointerType === (e.MSPOINTER_TYPE_TOUCH || 'touch')) {\r\n _this._lastPointerType = 'touch';\r\n touchGesture_1.addPointer(e.pointerId);\r\n }\r\n else {\r\n _this._lastPointerType = 'pen';\r\n penGesture_1.addPointer(e.pointerId);\r\n }\r\n });\r\n _this._register(dom.addDisposableThrottledListener(_this.viewHelper.linesContentDomNode, 'MSGestureChange', function (e) { return _this._onGestureChange(e); }, gestureChangeEventMerger));\r\n _this._register(dom.addDisposableListener(_this.viewHelper.linesContentDomNode, 'MSGestureTap', function (e) { return _this._onCaptureGestureTap(e); }, true));\r\n }\r\n }, 100);\r\n _this._lastPointerType = 'mouse';\r\n return _this;\r\n }\r\n MsPointerHandler.prototype._onMouseDown = function (e) {\r\n if (this._lastPointerType === 'mouse') {\r\n _super.prototype._onMouseDown.call(this, e);\r\n }\r\n };\r\n MsPointerHandler.prototype._onCaptureGestureTap = function (rawEvent) {\r\n var _this = this;\r\n var e = new EditorMouseEvent(rawEvent, this.viewHelper.viewDomNode);\r\n var t = this._createMouseTarget(e, false);\r\n if (t.position) {\r\n this.viewController.moveTo(t.position);\r\n }\r\n // IE does not want to focus when coming in from the browser's address bar\r\n if (e.browserEvent.fromElement) {\r\n e.preventDefault();\r\n this.viewHelper.focusTextArea();\r\n }\r\n else {\r\n // TODO@Alex -> cancel this is focus is lost\r\n setTimeout(function () {\r\n _this.viewHelper.focusTextArea();\r\n });\r\n }\r\n };\r\n MsPointerHandler.prototype._onGestureChange = function (e) {\r\n this._context.viewLayout.deltaScrollNow(-e.translationX, -e.translationY);\r\n };\r\n MsPointerHandler.prototype.dispose = function () {\r\n window.clearTimeout(this._installGestureHandlerTimeout);\r\n _super.prototype.dispose.call(this);\r\n };\r\n return MsPointerHandler;\r\n}(MouseHandler));\r\n/**\r\n * Basically Edge but should be modified to handle any pointerEnabled, even without support of MSGesture\r\n */\r\nvar StandardPointerHandler = /** @class */ (function (_super) {\r\n __extends(StandardPointerHandler, _super);\r\n function StandardPointerHandler(context, viewController, viewHelper) {\r\n var _this = _super.call(this, context, viewController, viewHelper) || this;\r\n _this.viewHelper.linesContentDomNode.style.touchAction = 'none';\r\n // TODO@Alex -> this expects that the view is added in 100 ms, might not be the case\r\n // This handler should be added when the dom node is in the dom tree\r\n _this._installGestureHandlerTimeout = window.setTimeout(function () {\r\n _this._installGestureHandlerTimeout = -1;\r\n // TODO@Alex: replace the usage of MSGesture here with something that works across all browsers\r\n if (window.MSGesture) {\r\n var touchGesture_2 = new MSGesture();\r\n var penGesture_2 = new MSGesture();\r\n touchGesture_2.target = _this.viewHelper.linesContentDomNode;\r\n penGesture_2.target = _this.viewHelper.linesContentDomNode;\r\n _this.viewHelper.linesContentDomNode.addEventListener('pointerdown', function (e) {\r\n var pointerType = e.pointerType;\r\n if (pointerType === 'mouse') {\r\n _this._lastPointerType = 'mouse';\r\n return;\r\n }\r\n else if (pointerType === 'touch') {\r\n _this._lastPointerType = 'touch';\r\n touchGesture_2.addPointer(e.pointerId);\r\n }\r\n else {\r\n _this._lastPointerType = 'pen';\r\n penGesture_2.addPointer(e.pointerId);\r\n }\r\n });\r\n _this._register(dom.addDisposableThrottledListener(_this.viewHelper.linesContentDomNode, 'MSGestureChange', function (e) { return _this._onGestureChange(e); }, gestureChangeEventMerger));\r\n _this._register(dom.addDisposableListener(_this.viewHelper.linesContentDomNode, 'MSGestureTap', function (e) { return _this._onCaptureGestureTap(e); }, true));\r\n }\r\n }, 100);\r\n _this._lastPointerType = 'mouse';\r\n return _this;\r\n }\r\n StandardPointerHandler.prototype._onMouseDown = function (e) {\r\n if (this._lastPointerType === 'mouse') {\r\n _super.prototype._onMouseDown.call(this, e);\r\n }\r\n };\r\n StandardPointerHandler.prototype._onCaptureGestureTap = function (rawEvent) {\r\n var _this = this;\r\n var e = new EditorMouseEvent(rawEvent, this.viewHelper.viewDomNode);\r\n var t = this._createMouseTarget(e, false);\r\n if (t.position) {\r\n this.viewController.moveTo(t.position);\r\n }\r\n // IE does not want to focus when coming in from the browser's address bar\r\n if (e.browserEvent.fromElement) {\r\n e.preventDefault();\r\n this.viewHelper.focusTextArea();\r\n }\r\n else {\r\n // TODO@Alex -> cancel this is focus is lost\r\n setTimeout(function () {\r\n _this.viewHelper.focusTextArea();\r\n });\r\n }\r\n };\r\n StandardPointerHandler.prototype._onGestureChange = function (e) {\r\n this._context.viewLayout.deltaScrollNow(-e.translationX, -e.translationY);\r\n };\r\n StandardPointerHandler.prototype.dispose = function () {\r\n window.clearTimeout(this._installGestureHandlerTimeout);\r\n _super.prototype.dispose.call(this);\r\n };\r\n return StandardPointerHandler;\r\n}(MouseHandler));\r\n/**\r\n * Currently only tested on iOS 13/ iPadOS.\r\n */\r\nvar PointerEventHandler = /** @class */ (function (_super) {\r\n __extends(PointerEventHandler, _super);\r\n function PointerEventHandler(context, viewController, viewHelper) {\r\n var _this = _super.call(this, context, viewController, viewHelper) || this;\r\n _this._register(Gesture.addTarget(_this.viewHelper.linesContentDomNode));\r\n _this._register(dom.addDisposableListener(_this.viewHelper.linesContentDomNode, EventType.Tap, function (e) { return _this.onTap(e); }));\r\n _this._register(dom.addDisposableListener(_this.viewHelper.linesContentDomNode, EventType.Change, function (e) { return _this.onChange(e); }));\r\n _this._register(dom.addDisposableListener(_this.viewHelper.linesContentDomNode, EventType.Contextmenu, function (e) { return _this._onContextMenu(new EditorMouseEvent(e, _this.viewHelper.viewDomNode), false); }));\r\n _this._lastPointerType = 'mouse';\r\n _this._register(dom.addDisposableListener(_this.viewHelper.linesContentDomNode, 'pointerdown', function (e) {\r\n var pointerType = e.pointerType;\r\n if (pointerType === 'mouse') {\r\n _this._lastPointerType = 'mouse';\r\n return;\r\n }\r\n else if (pointerType === 'touch') {\r\n _this._lastPointerType = 'touch';\r\n }\r\n else {\r\n _this._lastPointerType = 'pen';\r\n }\r\n }));\r\n // PonterEvents\r\n var pointerEvents = new EditorPointerEventFactory(_this.viewHelper.viewDomNode);\r\n _this._register(pointerEvents.onPointerMoveThrottled(_this.viewHelper.viewDomNode, function (e) { return _this._onMouseMove(e); }, createMouseMoveEventMerger(_this.mouseTargetFactory), MouseHandler.MOUSE_MOVE_MINIMUM_TIME));\r\n _this._register(pointerEvents.onPointerUp(_this.viewHelper.viewDomNode, function (e) { return _this._onMouseUp(e); }));\r\n _this._register(pointerEvents.onPointerLeave(_this.viewHelper.viewDomNode, function (e) { return _this._onMouseLeave(e); }));\r\n _this._register(pointerEvents.onPointerDown(_this.viewHelper.viewDomNode, function (e) { return _this._onMouseDown(e); }));\r\n return _this;\r\n }\r\n PointerEventHandler.prototype.onTap = function (event) {\r\n if (!event.initialTarget || !this.viewHelper.linesContentDomNode.contains(event.initialTarget)) {\r\n return;\r\n }\r\n event.preventDefault();\r\n this.viewHelper.focusTextArea();\r\n var target = this._createMouseTarget(new EditorMouseEvent(event, this.viewHelper.viewDomNode), false);\r\n if (target.position) {\r\n // this.viewController.moveTo(target.position);\r\n this.viewController.dispatchMouse({\r\n position: target.position,\r\n mouseColumn: target.position.column,\r\n startedOnLineNumbers: false,\r\n mouseDownCount: event.tapCount,\r\n inSelectionMode: false,\r\n altKey: false,\r\n ctrlKey: false,\r\n metaKey: false,\r\n shiftKey: false,\r\n leftButton: false,\r\n middleButton: false,\r\n });\r\n }\r\n };\r\n PointerEventHandler.prototype.onChange = function (e) {\r\n if (this._lastPointerType === 'touch') {\r\n this._context.viewLayout.deltaScrollNow(-e.translationX, -e.translationY);\r\n }\r\n };\r\n PointerEventHandler.prototype._onMouseDown = function (e) {\r\n if (e.target && this.viewHelper.linesContentDomNode.contains(e.target) && this._lastPointerType === 'touch') {\r\n return;\r\n }\r\n _super.prototype._onMouseDown.call(this, e);\r\n };\r\n return PointerEventHandler;\r\n}(MouseHandler));\r\nexport { PointerEventHandler };\r\nvar TouchHandler = /** @class */ (function (_super) {\r\n __extends(TouchHandler, _super);\r\n function TouchHandler(context, viewController, viewHelper) {\r\n var _this = _super.call(this, context, viewController, viewHelper) || this;\r\n _this._register(Gesture.addTarget(_this.viewHelper.linesContentDomNode));\r\n _this._register(dom.addDisposableListener(_this.viewHelper.linesContentDomNode, EventType.Tap, function (e) { return _this.onTap(e); }));\r\n _this._register(dom.addDisposableListener(_this.viewHelper.linesContentDomNode, EventType.Change, function (e) { return _this.onChange(e); }));\r\n _this._register(dom.addDisposableListener(_this.viewHelper.linesContentDomNode, EventType.Contextmenu, function (e) { return _this._onContextMenu(new EditorMouseEvent(e, _this.viewHelper.viewDomNode), false); }));\r\n return _this;\r\n }\r\n TouchHandler.prototype.onTap = function (event) {\r\n event.preventDefault();\r\n this.viewHelper.focusTextArea();\r\n var target = this._createMouseTarget(new EditorMouseEvent(event, this.viewHelper.viewDomNode), false);\r\n if (target.position) {\r\n this.viewController.moveTo(target.position);\r\n }\r\n };\r\n TouchHandler.prototype.onChange = function (e) {\r\n this._context.viewLayout.deltaScrollNow(-e.translationX, -e.translationY);\r\n };\r\n return TouchHandler;\r\n}(MouseHandler));\r\nvar PointerHandler = /** @class */ (function (_super) {\r\n __extends(PointerHandler, _super);\r\n function PointerHandler(context, viewController, viewHelper) {\r\n var _this = _super.call(this) || this;\r\n if (window.navigator.msPointerEnabled) {\r\n _this.handler = _this._register(new MsPointerHandler(context, viewController, viewHelper));\r\n }\r\n else if ((platform.isIOS && BrowserFeatures.pointerEvents)) {\r\n _this.handler = _this._register(new PointerEventHandler(context, viewController, viewHelper));\r\n }\r\n else if (window.TouchEvent) {\r\n _this.handler = _this._register(new TouchHandler(context, viewController, viewHelper));\r\n }\r\n else if (window.navigator.pointerEnabled || window.PointerEvent) {\r\n _this.handler = _this._register(new StandardPointerHandler(context, viewController, viewHelper));\r\n }\r\n else {\r\n _this.handler = _this._register(new MouseHandler(context, viewController, viewHelper));\r\n }\r\n return _this;\r\n }\r\n PointerHandler.prototype.getTargetAtClientPoint = function (clientX, clientY) {\r\n return this.handler.getTargetAtClientPoint(clientX, clientY);\r\n };\r\n return PointerHandler;\r\n}(Disposable));\r\nexport { PointerHandler };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { Position } from '../../common/core/position.js';\r\nimport { Range } from '../../common/core/range.js';\r\nvar TextAreaState = /** @class */ (function () {\r\n function TextAreaState(value, selectionStart, selectionEnd, selectionStartPosition, selectionEndPosition) {\r\n this.value = value;\r\n this.selectionStart = selectionStart;\r\n this.selectionEnd = selectionEnd;\r\n this.selectionStartPosition = selectionStartPosition;\r\n this.selectionEndPosition = selectionEndPosition;\r\n }\r\n TextAreaState.prototype.toString = function () {\r\n return '[ <' + this.value + '>, selectionStart: ' + this.selectionStart + ', selectionEnd: ' + this.selectionEnd + ']';\r\n };\r\n TextAreaState.readFromTextArea = function (textArea) {\r\n return new TextAreaState(textArea.getValue(), textArea.getSelectionStart(), textArea.getSelectionEnd(), null, null);\r\n };\r\n TextAreaState.prototype.collapseSelection = function () {\r\n return new TextAreaState(this.value, this.value.length, this.value.length, null, null);\r\n };\r\n TextAreaState.prototype.writeToTextArea = function (reason, textArea, select) {\r\n // console.log(Date.now() + ': writeToTextArea ' + reason + ': ' + this.toString());\r\n textArea.setValue(reason, this.value);\r\n if (select) {\r\n textArea.setSelectionRange(reason, this.selectionStart, this.selectionEnd);\r\n }\r\n };\r\n TextAreaState.prototype.deduceEditorPosition = function (offset) {\r\n if (offset <= this.selectionStart) {\r\n var str = this.value.substring(offset, this.selectionStart);\r\n return this._finishDeduceEditorPosition(this.selectionStartPosition, str, -1);\r\n }\r\n if (offset >= this.selectionEnd) {\r\n var str = this.value.substring(this.selectionEnd, offset);\r\n return this._finishDeduceEditorPosition(this.selectionEndPosition, str, 1);\r\n }\r\n var str1 = this.value.substring(this.selectionStart, offset);\r\n if (str1.indexOf(String.fromCharCode(8230)) === -1) {\r\n return this._finishDeduceEditorPosition(this.selectionStartPosition, str1, 1);\r\n }\r\n var str2 = this.value.substring(offset, this.selectionEnd);\r\n return this._finishDeduceEditorPosition(this.selectionEndPosition, str2, -1);\r\n };\r\n TextAreaState.prototype._finishDeduceEditorPosition = function (anchor, deltaText, signum) {\r\n var lineFeedCnt = 0;\r\n var lastLineFeedIndex = -1;\r\n while ((lastLineFeedIndex = deltaText.indexOf('\\n', lastLineFeedIndex + 1)) !== -1) {\r\n lineFeedCnt++;\r\n }\r\n return [anchor, signum * deltaText.length, lineFeedCnt];\r\n };\r\n TextAreaState.selectedText = function (text) {\r\n return new TextAreaState(text, 0, text.length, null, null);\r\n };\r\n TextAreaState.deduceInput = function (previousState, currentState, couldBeEmojiInput, couldBeTypingAtOffset0) {\r\n if (!previousState) {\r\n // This is the EMPTY state\r\n return {\r\n text: '',\r\n replaceCharCnt: 0\r\n };\r\n }\r\n // console.log('------------------------deduceInput');\r\n // console.log('PREVIOUS STATE: ' + previousState.toString());\r\n // console.log('CURRENT STATE: ' + currentState.toString());\r\n var previousValue = previousState.value;\r\n var previousSelectionStart = previousState.selectionStart;\r\n var previousSelectionEnd = previousState.selectionEnd;\r\n var currentValue = currentState.value;\r\n var currentSelectionStart = currentState.selectionStart;\r\n var currentSelectionEnd = currentState.selectionEnd;\r\n if (couldBeTypingAtOffset0 && previousValue.length > 0 && previousSelectionStart === previousSelectionEnd && currentSelectionStart === currentSelectionEnd) {\r\n // See https://github.com/Microsoft/vscode/issues/42251\r\n // where typing always happens at offset 0 in the textarea\r\n // when using a custom title area in OSX and moving the window\r\n if (!strings.startsWith(currentValue, previousValue) && strings.endsWith(currentValue, previousValue)) {\r\n // Looks like something was typed at offset 0\r\n // ==> pretend we placed the cursor at offset 0 to begin with...\r\n previousSelectionStart = 0;\r\n previousSelectionEnd = 0;\r\n }\r\n }\r\n // Strip the previous suffix from the value (without interfering with the current selection)\r\n var previousSuffix = previousValue.substring(previousSelectionEnd);\r\n var currentSuffix = currentValue.substring(currentSelectionEnd);\r\n var suffixLength = strings.commonSuffixLength(previousSuffix, currentSuffix);\r\n currentValue = currentValue.substring(0, currentValue.length - suffixLength);\r\n previousValue = previousValue.substring(0, previousValue.length - suffixLength);\r\n var previousPrefix = previousValue.substring(0, previousSelectionStart);\r\n var currentPrefix = currentValue.substring(0, currentSelectionStart);\r\n var prefixLength = strings.commonPrefixLength(previousPrefix, currentPrefix);\r\n currentValue = currentValue.substring(prefixLength);\r\n previousValue = previousValue.substring(prefixLength);\r\n currentSelectionStart -= prefixLength;\r\n previousSelectionStart -= prefixLength;\r\n currentSelectionEnd -= prefixLength;\r\n previousSelectionEnd -= prefixLength;\r\n // console.log('AFTER DIFFING PREVIOUS STATE: <' + previousValue + '>, selectionStart: ' + previousSelectionStart + ', selectionEnd: ' + previousSelectionEnd);\r\n // console.log('AFTER DIFFING CURRENT STATE: <' + currentValue + '>, selectionStart: ' + currentSelectionStart + ', selectionEnd: ' + currentSelectionEnd);\r\n if (couldBeEmojiInput && currentSelectionStart === currentSelectionEnd && previousValue.length > 0) {\r\n // on OSX, emojis from the emoji picker are inserted at random locations\r\n // the only hints we can use is that the selection is immediately after the inserted emoji\r\n // and that none of the old text has been deleted\r\n var potentialEmojiInput = null;\r\n if (currentSelectionStart === currentValue.length) {\r\n // emoji potentially inserted \"somewhere\" after the previous selection => it should appear at the end of `currentValue`\r\n if (strings.startsWith(currentValue, previousValue)) {\r\n // only if all of the old text is accounted for\r\n potentialEmojiInput = currentValue.substring(previousValue.length);\r\n }\r\n }\r\n else {\r\n // emoji potentially inserted \"somewhere\" before the previous selection => it should appear at the start of `currentValue`\r\n if (strings.endsWith(currentValue, previousValue)) {\r\n // only if all of the old text is accounted for\r\n potentialEmojiInput = currentValue.substring(0, currentValue.length - previousValue.length);\r\n }\r\n }\r\n if (potentialEmojiInput !== null && potentialEmojiInput.length > 0) {\r\n // now we check that this is indeed an emoji\r\n // emojis can grow quite long, so a length check is of no help\r\n // e.g. 1F3F4 E0067 E0062 E0065 E006E E0067 E007F ; fully-qualified # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 England\r\n // Oftentimes, emojis use Variation Selector-16 (U+FE0F), so that is a good hint\r\n // http://emojipedia.org/variation-selector-16/\r\n // > An invisible codepoint which specifies that the preceding character\r\n // > should be displayed with emoji presentation. Only required if the\r\n // > preceding character defaults to text presentation.\r\n if (/\\uFE0F/.test(potentialEmojiInput) || strings.containsEmoji(potentialEmojiInput)) {\r\n return {\r\n text: potentialEmojiInput,\r\n replaceCharCnt: 0\r\n };\r\n }\r\n }\r\n }\r\n if (currentSelectionStart === currentSelectionEnd) {\r\n // composition accept case (noticed in FF + Japanese)\r\n // [blahblah] => blahblah|\r\n if (previousValue === currentValue\r\n && previousSelectionStart === 0\r\n && previousSelectionEnd === previousValue.length\r\n && currentSelectionStart === currentValue.length\r\n && currentValue.indexOf('\\n') === -1) {\r\n if (strings.containsFullWidthCharacter(currentValue)) {\r\n return {\r\n text: '',\r\n replaceCharCnt: 0\r\n };\r\n }\r\n }\r\n // no current selection\r\n var replacePreviousCharacters_1 = (previousPrefix.length - prefixLength);\r\n // console.log('REMOVE PREVIOUS: ' + (previousPrefix.length - prefixLength) + ' chars');\r\n return {\r\n text: currentValue,\r\n replaceCharCnt: replacePreviousCharacters_1\r\n };\r\n }\r\n // there is a current selection => composition case\r\n var replacePreviousCharacters = previousSelectionEnd - previousSelectionStart;\r\n return {\r\n text: currentValue,\r\n replaceCharCnt: replacePreviousCharacters\r\n };\r\n };\r\n TextAreaState.EMPTY = new TextAreaState('', 0, 0, null, null);\r\n return TextAreaState;\r\n}());\r\nexport { TextAreaState };\r\nvar PagedScreenReaderStrategy = /** @class */ (function () {\r\n function PagedScreenReaderStrategy() {\r\n }\r\n PagedScreenReaderStrategy._getPageOfLine = function (lineNumber, linesPerPage) {\r\n return Math.floor((lineNumber - 1) / linesPerPage);\r\n };\r\n PagedScreenReaderStrategy._getRangeForPage = function (page, linesPerPage) {\r\n var offset = page * linesPerPage;\r\n var startLineNumber = offset + 1;\r\n var endLineNumber = offset + linesPerPage;\r\n return new Range(startLineNumber, 1, endLineNumber + 1, 1);\r\n };\r\n PagedScreenReaderStrategy.fromEditorSelection = function (previousState, model, selection, linesPerPage, trimLongText) {\r\n var selectionStartPage = PagedScreenReaderStrategy._getPageOfLine(selection.startLineNumber, linesPerPage);\r\n var selectionStartPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionStartPage, linesPerPage);\r\n var selectionEndPage = PagedScreenReaderStrategy._getPageOfLine(selection.endLineNumber, linesPerPage);\r\n var selectionEndPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionEndPage, linesPerPage);\r\n var pretextRange = selectionStartPageRange.intersectRanges(new Range(1, 1, selection.startLineNumber, selection.startColumn));\r\n var pretext = model.getValueInRange(pretextRange, 1 /* LF */);\r\n var lastLine = model.getLineCount();\r\n var lastLineMaxColumn = model.getLineMaxColumn(lastLine);\r\n var posttextRange = selectionEndPageRange.intersectRanges(new Range(selection.endLineNumber, selection.endColumn, lastLine, lastLineMaxColumn));\r\n var posttext = model.getValueInRange(posttextRange, 1 /* LF */);\r\n var text;\r\n if (selectionStartPage === selectionEndPage || selectionStartPage + 1 === selectionEndPage) {\r\n // take full selection\r\n text = model.getValueInRange(selection, 1 /* LF */);\r\n }\r\n else {\r\n var selectionRange1 = selectionStartPageRange.intersectRanges(selection);\r\n var selectionRange2 = selectionEndPageRange.intersectRanges(selection);\r\n text = (model.getValueInRange(selectionRange1, 1 /* LF */)\r\n + String.fromCharCode(8230)\r\n + model.getValueInRange(selectionRange2, 1 /* LF */));\r\n }\r\n // Chromium handles very poorly text even of a few thousand chars\r\n // Cut text to avoid stalling the entire UI\r\n if (trimLongText) {\r\n var LIMIT_CHARS = 500;\r\n if (pretext.length > LIMIT_CHARS) {\r\n pretext = pretext.substring(pretext.length - LIMIT_CHARS, pretext.length);\r\n }\r\n if (posttext.length > LIMIT_CHARS) {\r\n posttext = posttext.substring(0, LIMIT_CHARS);\r\n }\r\n if (text.length > 2 * LIMIT_CHARS) {\r\n text = text.substring(0, LIMIT_CHARS) + String.fromCharCode(8230) + text.substring(text.length - LIMIT_CHARS, text.length);\r\n }\r\n }\r\n return new TextAreaState(pretext + text + posttext, pretext.length, pretext.length + text.length, new Position(selection.startLineNumber, selection.startColumn), new Position(selection.endLineNumber, selection.endColumn));\r\n };\r\n return PagedScreenReaderStrategy;\r\n}());\r\nexport { PagedScreenReaderStrategy };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as browser from '../../../base/browser/browser.js';\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { RunOnceScheduler } from '../../../base/common/async.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { TextAreaState } from './textAreaState.js';\r\nimport { Selection } from '../../common/core/selection.js';\r\nimport { BrowserFeatures } from '../../../base/browser/canIUse.js';\r\nexport var CopyOptions = {\r\n forceCopyWithSyntaxHighlighting: false\r\n};\r\n/**\r\n * Every time we write to the clipboard, we record a bit of extra metadata here.\r\n * Every time we read from the cipboard, if the text matches our last written text,\r\n * we can fetch the previous metadata.\r\n */\r\nvar InMemoryClipboardMetadataManager = /** @class */ (function () {\r\n function InMemoryClipboardMetadataManager() {\r\n this._lastState = null;\r\n }\r\n InMemoryClipboardMetadataManager.prototype.set = function (lastCopiedValue, data) {\r\n this._lastState = { lastCopiedValue: lastCopiedValue, data: data };\r\n };\r\n InMemoryClipboardMetadataManager.prototype.get = function (pastedText) {\r\n if (this._lastState && this._lastState.lastCopiedValue === pastedText) {\r\n // match!\r\n return this._lastState.data;\r\n }\r\n this._lastState = null;\r\n return null;\r\n };\r\n InMemoryClipboardMetadataManager.INSTANCE = new InMemoryClipboardMetadataManager();\r\n return InMemoryClipboardMetadataManager;\r\n}());\r\n/**\r\n * Writes screen reader content to the textarea and is able to analyze its input events to generate:\r\n * - onCut\r\n * - onPaste\r\n * - onType\r\n *\r\n * Composition events are generated for presentation purposes (composition input is reflected in onType).\r\n */\r\nvar TextAreaInput = /** @class */ (function (_super) {\r\n __extends(TextAreaInput, _super);\r\n function TextAreaInput(host, textArea) {\r\n var _this = _super.call(this) || this;\r\n _this.textArea = textArea;\r\n _this._onFocus = _this._register(new Emitter());\r\n _this.onFocus = _this._onFocus.event;\r\n _this._onBlur = _this._register(new Emitter());\r\n _this.onBlur = _this._onBlur.event;\r\n _this._onKeyDown = _this._register(new Emitter());\r\n _this.onKeyDown = _this._onKeyDown.event;\r\n _this._onKeyUp = _this._register(new Emitter());\r\n _this.onKeyUp = _this._onKeyUp.event;\r\n _this._onCut = _this._register(new Emitter());\r\n _this.onCut = _this._onCut.event;\r\n _this._onPaste = _this._register(new Emitter());\r\n _this.onPaste = _this._onPaste.event;\r\n _this._onType = _this._register(new Emitter());\r\n _this.onType = _this._onType.event;\r\n _this._onCompositionStart = _this._register(new Emitter());\r\n _this.onCompositionStart = _this._onCompositionStart.event;\r\n _this._onCompositionUpdate = _this._register(new Emitter());\r\n _this.onCompositionUpdate = _this._onCompositionUpdate.event;\r\n _this._onCompositionEnd = _this._register(new Emitter());\r\n _this.onCompositionEnd = _this._onCompositionEnd.event;\r\n _this._onSelectionChangeRequest = _this._register(new Emitter());\r\n _this.onSelectionChangeRequest = _this._onSelectionChangeRequest.event;\r\n _this._host = host;\r\n _this._textArea = _this._register(new TextAreaWrapper(textArea));\r\n _this._lastTextAreaEvent = 0 /* none */;\r\n _this._asyncTriggerCut = _this._register(new RunOnceScheduler(function () { return _this._onCut.fire(); }, 0));\r\n _this._textAreaState = TextAreaState.EMPTY;\r\n _this._selectionChangeListener = null;\r\n _this.writeScreenReaderContent('ctor');\r\n _this._hasFocus = false;\r\n _this._isDoingComposition = false;\r\n _this._nextCommand = 0 /* Type */;\r\n _this._register(dom.addStandardDisposableListener(textArea.domNode, 'keydown', function (e) {\r\n if (_this._isDoingComposition &&\r\n (e.keyCode === 109 /* KEY_IN_COMPOSITION */ || e.keyCode === 1 /* Backspace */)) {\r\n // Stop propagation for keyDown events if the IME is processing key input\r\n e.stopPropagation();\r\n }\r\n if (e.equals(9 /* Escape */)) {\r\n // Prevent default always for `Esc`, otherwise it will generate a keypress\r\n // See https://msdn.microsoft.com/en-us/library/ie/ms536939(v=vs.85).aspx\r\n e.preventDefault();\r\n }\r\n _this._onKeyDown.fire(e);\r\n }));\r\n _this._register(dom.addStandardDisposableListener(textArea.domNode, 'keyup', function (e) {\r\n _this._onKeyUp.fire(e);\r\n }));\r\n _this._register(dom.addDisposableListener(textArea.domNode, 'compositionstart', function (e) {\r\n _this._lastTextAreaEvent = 1 /* compositionstart */;\r\n if (_this._isDoingComposition) {\r\n return;\r\n }\r\n _this._isDoingComposition = true;\r\n // In IE we cannot set .value when handling 'compositionstart' because the entire composition will get canceled.\r\n if (!browser.isEdgeOrIE) {\r\n _this._setAndWriteTextAreaState('compositionstart', TextAreaState.EMPTY);\r\n }\r\n _this._onCompositionStart.fire();\r\n }));\r\n /**\r\n * Deduce the typed input from a text area's value and the last observed state.\r\n */\r\n var deduceInputFromTextAreaValue = function (couldBeEmojiInput, couldBeTypingAtOffset0) {\r\n var oldState = _this._textAreaState;\r\n var newState = TextAreaState.readFromTextArea(_this._textArea);\r\n return [newState, TextAreaState.deduceInput(oldState, newState, couldBeEmojiInput, couldBeTypingAtOffset0)];\r\n };\r\n /**\r\n * Deduce the composition input from a string.\r\n */\r\n var deduceComposition = function (text) {\r\n var oldState = _this._textAreaState;\r\n var newState = TextAreaState.selectedText(text);\r\n var typeInput = {\r\n text: newState.value,\r\n replaceCharCnt: oldState.selectionEnd - oldState.selectionStart\r\n };\r\n return [newState, typeInput];\r\n };\r\n var compositionDataInValid = function (locale) {\r\n // https://github.com/Microsoft/monaco-editor/issues/339\r\n // Multi-part Japanese compositions reset cursor in Edge/IE, Chinese and Korean IME don't have this issue.\r\n // The reason that we can't use this path for all CJK IME is IE and Edge behave differently when handling Korean IME,\r\n // which breaks this path of code.\r\n if (browser.isEdgeOrIE && locale === 'ja') {\r\n return true;\r\n }\r\n // https://github.com/Microsoft/monaco-editor/issues/545\r\n // On IE11, we can't trust composition data when typing Chinese as IE11 doesn't emit correct\r\n // events when users type numbers in IME.\r\n // Chinese: zh-Hans-CN, zh-Hans-SG, zh-Hant-TW, zh-Hant-HK\r\n if (browser.isIE && locale.indexOf('zh-Han') === 0) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n _this._register(dom.addDisposableListener(textArea.domNode, 'compositionupdate', function (e) {\r\n _this._lastTextAreaEvent = 2 /* compositionupdate */;\r\n if (compositionDataInValid(e.locale)) {\r\n var _a = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/ false, /*couldBeTypingAtOffset0*/ false), newState_1 = _a[0], typeInput_1 = _a[1];\r\n _this._textAreaState = newState_1;\r\n _this._onType.fire(typeInput_1);\r\n _this._onCompositionUpdate.fire(e);\r\n return;\r\n }\r\n var _b = deduceComposition(e.data), newState = _b[0], typeInput = _b[1];\r\n _this._textAreaState = newState;\r\n _this._onType.fire(typeInput);\r\n _this._onCompositionUpdate.fire(e);\r\n }));\r\n _this._register(dom.addDisposableListener(textArea.domNode, 'compositionend', function (e) {\r\n _this._lastTextAreaEvent = 3 /* compositionend */;\r\n // https://github.com/microsoft/monaco-editor/issues/1663\r\n // On iOS 13.2, Chinese system IME randomly trigger an additional compositionend event with empty data\r\n if (!_this._isDoingComposition) {\r\n return;\r\n }\r\n if (compositionDataInValid(e.locale)) {\r\n // https://github.com/Microsoft/monaco-editor/issues/339\r\n var _a = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/ false, /*couldBeTypingAtOffset0*/ false), newState = _a[0], typeInput = _a[1];\r\n _this._textAreaState = newState;\r\n _this._onType.fire(typeInput);\r\n }\r\n else {\r\n var _b = deduceComposition(e.data), newState = _b[0], typeInput = _b[1];\r\n _this._textAreaState = newState;\r\n _this._onType.fire(typeInput);\r\n }\r\n // Due to isEdgeOrIE (where the textarea was not cleared initially) and isChrome (the textarea is not updated correctly when composition ends)\r\n // we cannot assume the text at the end consists only of the composited text\r\n if (browser.isEdgeOrIE || browser.isChrome) {\r\n _this._textAreaState = TextAreaState.readFromTextArea(_this._textArea);\r\n }\r\n if (!_this._isDoingComposition) {\r\n return;\r\n }\r\n _this._isDoingComposition = false;\r\n _this._onCompositionEnd.fire();\r\n }));\r\n _this._register(dom.addDisposableListener(textArea.domNode, 'input', function () {\r\n // We want to find out if this is the first `input` after a `focus`.\r\n var previousEventWasFocus = (_this._lastTextAreaEvent === 8 /* focus */);\r\n _this._lastTextAreaEvent = 4 /* input */;\r\n // Pretend here we touched the text area, as the `input` event will most likely\r\n // result in a `selectionchange` event which we want to ignore\r\n _this._textArea.setIgnoreSelectionChangeTime('received input event');\r\n if (_this._isDoingComposition) {\r\n return;\r\n }\r\n var _a = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/ platform.isMacintosh, /*couldBeTypingAtOffset0*/ previousEventWasFocus && platform.isMacintosh), newState = _a[0], typeInput = _a[1];\r\n if (typeInput.replaceCharCnt === 0 && typeInput.text.length === 1 && strings.isHighSurrogate(typeInput.text.charCodeAt(0))) {\r\n // Ignore invalid input but keep it around for next time\r\n return;\r\n }\r\n _this._textAreaState = newState;\r\n if (_this._nextCommand === 0 /* Type */) {\r\n if (typeInput.text !== '') {\r\n _this._onType.fire(typeInput);\r\n }\r\n }\r\n else {\r\n if (typeInput.text !== '') {\r\n _this._firePaste(typeInput.text, null);\r\n }\r\n _this._nextCommand = 0 /* Type */;\r\n }\r\n }));\r\n // --- Clipboard operations\r\n _this._register(dom.addDisposableListener(textArea.domNode, 'cut', function (e) {\r\n _this._lastTextAreaEvent = 5 /* cut */;\r\n // Pretend here we touched the text area, as the `cut` event will most likely\r\n // result in a `selectionchange` event which we want to ignore\r\n _this._textArea.setIgnoreSelectionChangeTime('received cut event');\r\n _this._ensureClipboardGetsEditorSelection(e);\r\n _this._asyncTriggerCut.schedule();\r\n }));\r\n _this._register(dom.addDisposableListener(textArea.domNode, 'copy', function (e) {\r\n _this._lastTextAreaEvent = 6 /* copy */;\r\n _this._ensureClipboardGetsEditorSelection(e);\r\n }));\r\n _this._register(dom.addDisposableListener(textArea.domNode, 'paste', function (e) {\r\n _this._lastTextAreaEvent = 7 /* paste */;\r\n // Pretend here we touched the text area, as the `paste` event will most likely\r\n // result in a `selectionchange` event which we want to ignore\r\n _this._textArea.setIgnoreSelectionChangeTime('received paste event');\r\n if (ClipboardEventUtils.canUseTextData(e)) {\r\n var _a = ClipboardEventUtils.getTextData(e), pastePlainText = _a[0], metadata = _a[1];\r\n if (pastePlainText !== '') {\r\n _this._firePaste(pastePlainText, metadata);\r\n }\r\n }\r\n else {\r\n if (_this._textArea.getSelectionStart() !== _this._textArea.getSelectionEnd()) {\r\n // Clean up the textarea, to get a clean paste\r\n _this._setAndWriteTextAreaState('paste', TextAreaState.EMPTY);\r\n }\r\n _this._nextCommand = 1 /* Paste */;\r\n }\r\n }));\r\n _this._register(dom.addDisposableListener(textArea.domNode, 'focus', function () {\r\n _this._lastTextAreaEvent = 8 /* focus */;\r\n _this._setHasFocus(true);\r\n }));\r\n _this._register(dom.addDisposableListener(textArea.domNode, 'blur', function () {\r\n _this._lastTextAreaEvent = 9 /* blur */;\r\n _this._setHasFocus(false);\r\n }));\r\n return _this;\r\n }\r\n TextAreaInput.prototype._installSelectionChangeListener = function () {\r\n // See https://github.com/Microsoft/vscode/issues/27216\r\n // When using a Braille display, it is possible for users to reposition the\r\n // system caret. This is reflected in Chrome as a `selectionchange` event.\r\n //\r\n // The `selectionchange` event appears to be emitted under numerous other circumstances,\r\n // so it is quite a challenge to distinguish a `selectionchange` coming in from a user\r\n // using a Braille display from all the other cases.\r\n //\r\n // The problems with the `selectionchange` event are:\r\n // * the event is emitted when the textarea is focused programmatically -- textarea.focus()\r\n // * the event is emitted when the selection is changed in the textarea programmatically -- textarea.setSelectionRange(...)\r\n // * the event is emitted when the value of the textarea is changed programmatically -- textarea.value = '...'\r\n // * the event is emitted when tabbing into the textarea\r\n // * the event is emitted asynchronously (sometimes with a delay as high as a few tens of ms)\r\n // * the event sometimes comes in bursts for a single logical textarea operation\r\n var _this = this;\r\n // `selectionchange` events often come multiple times for a single logical change\r\n // so throttle multiple `selectionchange` events that burst in a short period of time.\r\n var previousSelectionChangeEventTime = 0;\r\n return dom.addDisposableListener(document, 'selectionchange', function (e) {\r\n if (!_this._hasFocus) {\r\n return;\r\n }\r\n if (_this._isDoingComposition) {\r\n return;\r\n }\r\n if (!browser.isChrome || !platform.isWindows) {\r\n // Support only for Chrome on Windows until testing happens on other browsers + OS configurations\r\n return;\r\n }\r\n var now = Date.now();\r\n var delta1 = now - previousSelectionChangeEventTime;\r\n previousSelectionChangeEventTime = now;\r\n if (delta1 < 5) {\r\n // received another `selectionchange` event within 5ms of the previous `selectionchange` event\r\n // => ignore it\r\n return;\r\n }\r\n var delta2 = now - _this._textArea.getIgnoreSelectionChangeTime();\r\n _this._textArea.resetSelectionChangeTime();\r\n if (delta2 < 100) {\r\n // received a `selectionchange` event within 100ms since we touched the textarea\r\n // => ignore it, since we caused it\r\n return;\r\n }\r\n if (!_this._textAreaState.selectionStartPosition || !_this._textAreaState.selectionEndPosition) {\r\n // Cannot correlate a position in the textarea with a position in the editor...\r\n return;\r\n }\r\n var newValue = _this._textArea.getValue();\r\n if (_this._textAreaState.value !== newValue) {\r\n // Cannot correlate a position in the textarea with a position in the editor...\r\n return;\r\n }\r\n var newSelectionStart = _this._textArea.getSelectionStart();\r\n var newSelectionEnd = _this._textArea.getSelectionEnd();\r\n if (_this._textAreaState.selectionStart === newSelectionStart && _this._textAreaState.selectionEnd === newSelectionEnd) {\r\n // Nothing to do...\r\n return;\r\n }\r\n var _newSelectionStartPosition = _this._textAreaState.deduceEditorPosition(newSelectionStart);\r\n var newSelectionStartPosition = _this._host.deduceModelPosition(_newSelectionStartPosition[0], _newSelectionStartPosition[1], _newSelectionStartPosition[2]);\r\n var _newSelectionEndPosition = _this._textAreaState.deduceEditorPosition(newSelectionEnd);\r\n var newSelectionEndPosition = _this._host.deduceModelPosition(_newSelectionEndPosition[0], _newSelectionEndPosition[1], _newSelectionEndPosition[2]);\r\n var newSelection = new Selection(newSelectionStartPosition.lineNumber, newSelectionStartPosition.column, newSelectionEndPosition.lineNumber, newSelectionEndPosition.column);\r\n _this._onSelectionChangeRequest.fire(newSelection);\r\n });\r\n };\r\n TextAreaInput.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n if (this._selectionChangeListener) {\r\n this._selectionChangeListener.dispose();\r\n this._selectionChangeListener = null;\r\n }\r\n };\r\n TextAreaInput.prototype.focusTextArea = function () {\r\n // Setting this._hasFocus and writing the screen reader content\r\n // will result in a focus() and setSelectionRange() in the textarea\r\n this._setHasFocus(true);\r\n };\r\n TextAreaInput.prototype.isFocused = function () {\r\n return this._hasFocus;\r\n };\r\n TextAreaInput.prototype._setHasFocus = function (newHasFocus) {\r\n if (this._hasFocus === newHasFocus) {\r\n // no change\r\n return;\r\n }\r\n this._hasFocus = newHasFocus;\r\n if (this._selectionChangeListener) {\r\n this._selectionChangeListener.dispose();\r\n this._selectionChangeListener = null;\r\n }\r\n if (this._hasFocus) {\r\n this._selectionChangeListener = this._installSelectionChangeListener();\r\n }\r\n if (this._hasFocus) {\r\n if (browser.isEdge) {\r\n // Edge has a bug where setting the selection range while the focus event\r\n // is dispatching doesn't work. To reproduce, \"tab into\" the editor.\r\n this._setAndWriteTextAreaState('focusgain', TextAreaState.EMPTY);\r\n }\r\n else {\r\n this.writeScreenReaderContent('focusgain');\r\n }\r\n }\r\n if (this._hasFocus) {\r\n this._onFocus.fire();\r\n }\r\n else {\r\n this._onBlur.fire();\r\n }\r\n };\r\n TextAreaInput.prototype._setAndWriteTextAreaState = function (reason, textAreaState) {\r\n if (!this._hasFocus) {\r\n textAreaState = textAreaState.collapseSelection();\r\n }\r\n textAreaState.writeToTextArea(reason, this._textArea, this._hasFocus);\r\n this._textAreaState = textAreaState;\r\n };\r\n TextAreaInput.prototype.writeScreenReaderContent = function (reason) {\r\n if (this._isDoingComposition) {\r\n // Do not write to the text area when doing composition\r\n return;\r\n }\r\n this._setAndWriteTextAreaState(reason, this._host.getScreenReaderContent(this._textAreaState));\r\n };\r\n TextAreaInput.prototype._ensureClipboardGetsEditorSelection = function (e) {\r\n var dataToCopy = this._host.getDataToCopy(ClipboardEventUtils.canUseTextData(e) && BrowserFeatures.clipboard.richText);\r\n var storedMetadata = {\r\n version: 1,\r\n isFromEmptySelection: dataToCopy.isFromEmptySelection,\r\n multicursorText: dataToCopy.multicursorText\r\n };\r\n InMemoryClipboardMetadataManager.INSTANCE.set(\r\n // When writing \"LINE\\r\\n\" to the clipboard and then pasting,\r\n // Firefox pastes \"LINE\\n\", so let's work around this quirk\r\n (browser.isFirefox ? dataToCopy.text.replace(/\\r\\n/g, '\\n') : dataToCopy.text), storedMetadata);\r\n if (!ClipboardEventUtils.canUseTextData(e)) {\r\n // Looks like an old browser. The strategy is to place the text\r\n // we'd like to be copied to the clipboard in the textarea and select it.\r\n this._setAndWriteTextAreaState('copy or cut', TextAreaState.selectedText(dataToCopy.text));\r\n return;\r\n }\r\n ClipboardEventUtils.setTextData(e, dataToCopy.text, dataToCopy.html, storedMetadata);\r\n };\r\n TextAreaInput.prototype._firePaste = function (text, metadata) {\r\n if (!metadata) {\r\n // try the in-memory store\r\n metadata = InMemoryClipboardMetadataManager.INSTANCE.get(text);\r\n }\r\n this._onPaste.fire({\r\n text: text,\r\n metadata: metadata\r\n });\r\n };\r\n return TextAreaInput;\r\n}(Disposable));\r\nexport { TextAreaInput };\r\nvar ClipboardEventUtils = /** @class */ (function () {\r\n function ClipboardEventUtils() {\r\n }\r\n ClipboardEventUtils.canUseTextData = function (e) {\r\n if (e.clipboardData) {\r\n return true;\r\n }\r\n if (window.clipboardData) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n ClipboardEventUtils.getTextData = function (e) {\r\n if (e.clipboardData) {\r\n e.preventDefault();\r\n var text = e.clipboardData.getData('text/plain');\r\n var metadata = null;\r\n var rawmetadata = e.clipboardData.getData('vscode-editor-data');\r\n if (typeof rawmetadata === 'string') {\r\n try {\r\n metadata = JSON.parse(rawmetadata);\r\n if (metadata.version !== 1) {\r\n metadata = null;\r\n }\r\n }\r\n catch (err) {\r\n // no problem!\r\n }\r\n }\r\n return [text, metadata];\r\n }\r\n if (window.clipboardData) {\r\n e.preventDefault();\r\n return window.clipboardData.getData('Text');\r\n }\r\n throw new Error('ClipboardEventUtils.getTextData: Cannot use text data!');\r\n };\r\n ClipboardEventUtils.setTextData = function (e, text, html, metadata) {\r\n if (e.clipboardData) {\r\n e.clipboardData.setData('text/plain', text);\r\n if (typeof html === 'string') {\r\n e.clipboardData.setData('text/html', html);\r\n }\r\n e.clipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\r\n e.preventDefault();\r\n return;\r\n }\r\n if (window.clipboardData) {\r\n window.clipboardData.setData('Text', text);\r\n e.preventDefault();\r\n return;\r\n }\r\n throw new Error('ClipboardEventUtils.setTextData: Cannot use text data!');\r\n };\r\n return ClipboardEventUtils;\r\n}());\r\nvar TextAreaWrapper = /** @class */ (function (_super) {\r\n __extends(TextAreaWrapper, _super);\r\n function TextAreaWrapper(_textArea) {\r\n var _this = _super.call(this) || this;\r\n _this._actual = _textArea;\r\n _this._ignoreSelectionChangeTime = 0;\r\n return _this;\r\n }\r\n TextAreaWrapper.prototype.setIgnoreSelectionChangeTime = function (reason) {\r\n this._ignoreSelectionChangeTime = Date.now();\r\n };\r\n TextAreaWrapper.prototype.getIgnoreSelectionChangeTime = function () {\r\n return this._ignoreSelectionChangeTime;\r\n };\r\n TextAreaWrapper.prototype.resetSelectionChangeTime = function () {\r\n this._ignoreSelectionChangeTime = 0;\r\n };\r\n TextAreaWrapper.prototype.getValue = function () {\r\n // console.log('current value: ' + this._textArea.value);\r\n return this._actual.domNode.value;\r\n };\r\n TextAreaWrapper.prototype.setValue = function (reason, value) {\r\n var textArea = this._actual.domNode;\r\n if (textArea.value === value) {\r\n // No change\r\n return;\r\n }\r\n // console.log('reason: ' + reason + ', current value: ' + textArea.value + ' => new value: ' + value);\r\n this.setIgnoreSelectionChangeTime('setValue');\r\n textArea.value = value;\r\n };\r\n TextAreaWrapper.prototype.getSelectionStart = function () {\r\n return this._actual.domNode.selectionStart;\r\n };\r\n TextAreaWrapper.prototype.getSelectionEnd = function () {\r\n return this._actual.domNode.selectionEnd;\r\n };\r\n TextAreaWrapper.prototype.setSelectionRange = function (reason, selectionStart, selectionEnd) {\r\n var textArea = this._actual.domNode;\r\n var currentIsFocused = (document.activeElement === textArea);\r\n var currentSelectionStart = textArea.selectionStart;\r\n var currentSelectionEnd = textArea.selectionEnd;\r\n if (currentIsFocused && currentSelectionStart === selectionStart && currentSelectionEnd === selectionEnd) {\r\n // No change\r\n // Firefox iframe bug https://github.com/Microsoft/monaco-editor/issues/643#issuecomment-367871377\r\n if (browser.isFirefox && window.parent !== window) {\r\n textArea.focus();\r\n }\r\n return;\r\n }\r\n // console.log('reason: ' + reason + ', setSelectionRange: ' + selectionStart + ' -> ' + selectionEnd);\r\n if (currentIsFocused) {\r\n // No need to focus, only need to change the selection range\r\n this.setIgnoreSelectionChangeTime('setSelectionRange');\r\n textArea.setSelectionRange(selectionStart, selectionEnd);\r\n if (browser.isFirefox && window.parent !== window) {\r\n textArea.focus();\r\n }\r\n return;\r\n }\r\n // If the focus is outside the textarea, browsers will try really hard to reveal the textarea.\r\n // Here, we try to undo the browser's desperate reveal.\r\n try {\r\n var scrollState = dom.saveParentsScrollTop(textArea);\r\n this.setIgnoreSelectionChangeTime('setSelectionRange');\r\n textArea.focus();\r\n textArea.setSelectionRange(selectionStart, selectionEnd);\r\n dom.restoreParentsScrollTop(textArea, scrollState);\r\n }\r\n catch (e) {\r\n // Sometimes IE throws when setting selection (e.g. textarea is off-DOM)\r\n }\r\n };\r\n return TextAreaWrapper;\r\n}(Disposable));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\r\nvar DynamicViewOverlay = /** @class */ (function (_super) {\r\n __extends(DynamicViewOverlay, _super);\r\n function DynamicViewOverlay() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return DynamicViewOverlay;\r\n}(ViewEventHandler));\r\nexport { DynamicViewOverlay };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as platform from '../../registry/common/platform.js';\r\nimport { Color, RGBA } from '../../../base/common/color.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport * as nls from '../../../nls.js';\r\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\r\nimport { RunOnceScheduler } from '../../../base/common/async.js';\r\n// color registry\r\nexport var Extensions = {\r\n ColorContribution: 'base.contributions.colors'\r\n};\r\nvar ColorRegistry = /** @class */ (function () {\r\n function ColorRegistry() {\r\n this._onDidChangeSchema = new Emitter();\r\n this.onDidChangeSchema = this._onDidChangeSchema.event;\r\n this.colorSchema = { type: 'object', properties: {} };\r\n this.colorReferenceSchema = { type: 'string', enum: [], enumDescriptions: [] };\r\n this.colorsById = {};\r\n }\r\n ColorRegistry.prototype.registerColor = function (id, defaults, description, needsTransparency, deprecationMessage) {\r\n if (needsTransparency === void 0) { needsTransparency = false; }\r\n var colorContribution = { id: id, description: description, defaults: defaults, needsTransparency: needsTransparency, deprecationMessage: deprecationMessage };\r\n this.colorsById[id] = colorContribution;\r\n var propertySchema = { type: 'string', description: description, format: 'color-hex', defaultSnippets: [{ body: '${1:#ff0000}' }] };\r\n if (deprecationMessage) {\r\n propertySchema.deprecationMessage = deprecationMessage;\r\n }\r\n this.colorSchema.properties[id] = propertySchema;\r\n this.colorReferenceSchema.enum.push(id);\r\n this.colorReferenceSchema.enumDescriptions.push(description);\r\n this._onDidChangeSchema.fire();\r\n return id;\r\n };\r\n ColorRegistry.prototype.resolveDefaultColor = function (id, theme) {\r\n var colorDesc = this.colorsById[id];\r\n if (colorDesc && colorDesc.defaults) {\r\n var colorValue = colorDesc.defaults[theme.type];\r\n return resolveColorValue(colorValue, theme);\r\n }\r\n return undefined;\r\n };\r\n ColorRegistry.prototype.getColorSchema = function () {\r\n return this.colorSchema;\r\n };\r\n ColorRegistry.prototype.toString = function () {\r\n var _this = this;\r\n var sorter = function (a, b) {\r\n var cat1 = a.indexOf('.') === -1 ? 0 : 1;\r\n var cat2 = b.indexOf('.') === -1 ? 0 : 1;\r\n if (cat1 !== cat2) {\r\n return cat1 - cat2;\r\n }\r\n return a.localeCompare(b);\r\n };\r\n return Object.keys(this.colorsById).sort(sorter).map(function (k) { return \"- `\" + k + \"`: \" + _this.colorsById[k].description; }).join('\\n');\r\n };\r\n return ColorRegistry;\r\n}());\r\nvar colorRegistry = new ColorRegistry();\r\nplatform.Registry.add(Extensions.ColorContribution, colorRegistry);\r\nexport function registerColor(id, defaults, description, needsTransparency, deprecationMessage) {\r\n return colorRegistry.registerColor(id, defaults, description, needsTransparency, deprecationMessage);\r\n}\r\n// ----- base colors\r\nexport var foreground = registerColor('foreground', { dark: '#CCCCCC', light: '#616161', hc: '#FFFFFF' }, nls.localize('foreground', \"Overall foreground color. This color is only used if not overridden by a component.\"));\r\nexport var errorForeground = registerColor('errorForeground', { dark: '#F48771', light: '#A1260D', hc: '#F48771' }, nls.localize('errorForeground', \"Overall foreground color for error messages. This color is only used if not overridden by a component.\"));\r\nexport var focusBorder = registerColor('focusBorder', { dark: Color.fromHex('#0E639C').transparent(0.8), light: Color.fromHex('#007ACC').transparent(0.4), hc: '#F38518' }, nls.localize('focusBorder', \"Overall border color for focused elements. This color is only used if not overridden by a component.\"));\r\nexport var contrastBorder = registerColor('contrastBorder', { light: null, dark: null, hc: '#6FC3DF' }, nls.localize('contrastBorder', \"An extra border around elements to separate them from others for greater contrast.\"));\r\nexport var activeContrastBorder = registerColor('contrastActiveBorder', { light: null, dark: null, hc: focusBorder }, nls.localize('activeContrastBorder', \"An extra border around active elements to separate them from others for greater contrast.\"));\r\nexport var textLinkForeground = registerColor('textLink.foreground', { light: '#006AB1', dark: '#3794FF', hc: '#3794FF' }, nls.localize('textLinkForeground', \"Foreground color for links in text.\"));\r\nexport var textCodeBlockBackground = registerColor('textCodeBlock.background', { light: '#dcdcdc66', dark: '#0a0a0a66', hc: Color.black }, nls.localize('textCodeBlockBackground', \"Background color for code blocks in text.\"));\r\n// ----- widgets\r\nexport var widgetShadow = registerColor('widget.shadow', { dark: '#000000', light: '#A8A8A8', hc: null }, nls.localize('widgetShadow', 'Shadow color of widgets such as find/replace inside the editor.'));\r\nexport var inputBackground = registerColor('input.background', { dark: '#3C3C3C', light: Color.white, hc: Color.black }, nls.localize('inputBoxBackground', \"Input box background.\"));\r\nexport var inputForeground = registerColor('input.foreground', { dark: foreground, light: foreground, hc: foreground }, nls.localize('inputBoxForeground', \"Input box foreground.\"));\r\nexport var inputBorder = registerColor('input.border', { dark: null, light: null, hc: contrastBorder }, nls.localize('inputBoxBorder', \"Input box border.\"));\r\nexport var inputActiveOptionBorder = registerColor('inputOption.activeBorder', { dark: '#007ACC00', light: '#007ACC00', hc: contrastBorder }, nls.localize('inputBoxActiveOptionBorder', \"Border color of activated options in input fields.\"));\r\nexport var inputActiveOptionBackground = registerColor('inputOption.activeBackground', { dark: transparent(focusBorder, 0.5), light: transparent(focusBorder, 0.3), hc: null }, nls.localize('inputOption.activeBackground', \"Background color of activated options in input fields.\"));\r\nexport var inputValidationInfoBackground = registerColor('inputValidation.infoBackground', { dark: '#063B49', light: '#D6ECF2', hc: Color.black }, nls.localize('inputValidationInfoBackground', \"Input validation background color for information severity.\"));\r\nexport var inputValidationInfoForeground = registerColor('inputValidation.infoForeground', { dark: null, light: null, hc: null }, nls.localize('inputValidationInfoForeground', \"Input validation foreground color for information severity.\"));\r\nexport var inputValidationInfoBorder = registerColor('inputValidation.infoBorder', { dark: '#007acc', light: '#007acc', hc: contrastBorder }, nls.localize('inputValidationInfoBorder', \"Input validation border color for information severity.\"));\r\nexport var inputValidationWarningBackground = registerColor('inputValidation.warningBackground', { dark: '#352A05', light: '#F6F5D2', hc: Color.black }, nls.localize('inputValidationWarningBackground', \"Input validation background color for warning severity.\"));\r\nexport var inputValidationWarningForeground = registerColor('inputValidation.warningForeground', { dark: null, light: null, hc: null }, nls.localize('inputValidationWarningForeground', \"Input validation foreground color for warning severity.\"));\r\nexport var inputValidationWarningBorder = registerColor('inputValidation.warningBorder', { dark: '#B89500', light: '#B89500', hc: contrastBorder }, nls.localize('inputValidationWarningBorder', \"Input validation border color for warning severity.\"));\r\nexport var inputValidationErrorBackground = registerColor('inputValidation.errorBackground', { dark: '#5A1D1D', light: '#F2DEDE', hc: Color.black }, nls.localize('inputValidationErrorBackground', \"Input validation background color for error severity.\"));\r\nexport var inputValidationErrorForeground = registerColor('inputValidation.errorForeground', { dark: null, light: null, hc: null }, nls.localize('inputValidationErrorForeground', \"Input validation foreground color for error severity.\"));\r\nexport var inputValidationErrorBorder = registerColor('inputValidation.errorBorder', { dark: '#BE1100', light: '#BE1100', hc: contrastBorder }, nls.localize('inputValidationErrorBorder', \"Input validation border color for error severity.\"));\r\nexport var selectBackground = registerColor('dropdown.background', { dark: '#3C3C3C', light: Color.white, hc: Color.black }, nls.localize('dropdownBackground', \"Dropdown background.\"));\r\nexport var selectForeground = registerColor('dropdown.foreground', { dark: '#F0F0F0', light: null, hc: Color.white }, nls.localize('dropdownForeground', \"Dropdown foreground.\"));\r\nexport var pickerGroupForeground = registerColor('pickerGroup.foreground', { dark: '#3794FF', light: '#0066BF', hc: Color.white }, nls.localize('pickerGroupForeground', \"Quick picker color for grouping labels.\"));\r\nexport var pickerGroupBorder = registerColor('pickerGroup.border', { dark: '#3F3F46', light: '#CCCEDB', hc: Color.white }, nls.localize('pickerGroupBorder', \"Quick picker color for grouping borders.\"));\r\nexport var badgeBackground = registerColor('badge.background', { dark: '#4D4D4D', light: '#C4C4C4', hc: Color.black }, nls.localize('badgeBackground', \"Badge background color. Badges are small information labels, e.g. for search results count.\"));\r\nexport var badgeForeground = registerColor('badge.foreground', { dark: Color.white, light: '#333', hc: Color.white }, nls.localize('badgeForeground', \"Badge foreground color. Badges are small information labels, e.g. for search results count.\"));\r\nexport var scrollbarShadow = registerColor('scrollbar.shadow', { dark: '#000000', light: '#DDDDDD', hc: null }, nls.localize('scrollbarShadow', \"Scrollbar shadow to indicate that the view is scrolled.\"));\r\nexport var scrollbarSliderBackground = registerColor('scrollbarSlider.background', { dark: Color.fromHex('#797979').transparent(0.4), light: Color.fromHex('#646464').transparent(0.4), hc: transparent(contrastBorder, 0.6) }, nls.localize('scrollbarSliderBackground', \"Scrollbar slider background color.\"));\r\nexport var scrollbarSliderHoverBackground = registerColor('scrollbarSlider.hoverBackground', { dark: Color.fromHex('#646464').transparent(0.7), light: Color.fromHex('#646464').transparent(0.7), hc: transparent(contrastBorder, 0.8) }, nls.localize('scrollbarSliderHoverBackground', \"Scrollbar slider background color when hovering.\"));\r\nexport var scrollbarSliderActiveBackground = registerColor('scrollbarSlider.activeBackground', { dark: Color.fromHex('#BFBFBF').transparent(0.4), light: Color.fromHex('#000000').transparent(0.6), hc: contrastBorder }, nls.localize('scrollbarSliderActiveBackground', \"Scrollbar slider background color when clicked on.\"));\r\nexport var progressBarBackground = registerColor('progressBar.background', { dark: Color.fromHex('#0E70C0'), light: Color.fromHex('#0E70C0'), hc: contrastBorder }, nls.localize('progressBarBackground', \"Background color of the progress bar that can show for long running operations.\"));\r\nexport var editorErrorForeground = registerColor('editorError.foreground', { dark: '#F48771', light: '#E51400', hc: null }, nls.localize('editorError.foreground', 'Foreground color of error squigglies in the editor.'));\r\nexport var editorErrorBorder = registerColor('editorError.border', { dark: null, light: null, hc: Color.fromHex('#E47777').transparent(0.8) }, nls.localize('errorBorder', 'Border color of error boxes in the editor.'));\r\nexport var editorWarningForeground = registerColor('editorWarning.foreground', { dark: '#CCA700', light: '#E9A700', hc: null }, nls.localize('editorWarning.foreground', 'Foreground color of warning squigglies in the editor.'));\r\nexport var editorWarningBorder = registerColor('editorWarning.border', { dark: null, light: null, hc: Color.fromHex('#FFCC00').transparent(0.8) }, nls.localize('warningBorder', 'Border color of warning boxes in the editor.'));\r\nexport var editorInfoForeground = registerColor('editorInfo.foreground', { dark: '#75BEFF', light: '#75BEFF', hc: null }, nls.localize('editorInfo.foreground', 'Foreground color of info squigglies in the editor.'));\r\nexport var editorInfoBorder = registerColor('editorInfo.border', { dark: null, light: null, hc: Color.fromHex('#75BEFF').transparent(0.8) }, nls.localize('infoBorder', 'Border color of info boxes in the editor.'));\r\nexport var editorHintForeground = registerColor('editorHint.foreground', { dark: Color.fromHex('#eeeeee').transparent(0.7), light: '#6c6c6c', hc: null }, nls.localize('editorHint.foreground', 'Foreground color of hint squigglies in the editor.'));\r\nexport var editorHintBorder = registerColor('editorHint.border', { dark: null, light: null, hc: Color.fromHex('#eeeeee').transparent(0.8) }, nls.localize('hintBorder', 'Border color of hint boxes in the editor.'));\r\n/**\r\n * Editor background color.\r\n * Because of bug https://monacotools.visualstudio.com/DefaultCollection/Monaco/_workitems/edit/13254\r\n * we are *not* using the color white (or #ffffff, rgba(255,255,255)) but something very close to white.\r\n */\r\nexport var editorBackground = registerColor('editor.background', { light: '#fffffe', dark: '#1E1E1E', hc: Color.black }, nls.localize('editorBackground', \"Editor background color.\"));\r\n/**\r\n * Editor foreground color.\r\n */\r\nexport var editorForeground = registerColor('editor.foreground', { light: '#333333', dark: '#BBBBBB', hc: Color.white }, nls.localize('editorForeground', \"Editor default foreground color.\"));\r\n/**\r\n * Editor widgets\r\n */\r\nexport var editorWidgetBackground = registerColor('editorWidget.background', { dark: '#252526', light: '#F3F3F3', hc: '#0C141F' }, nls.localize('editorWidgetBackground', 'Background color of editor widgets, such as find/replace.'));\r\nexport var editorWidgetForeground = registerColor('editorWidget.foreground', { dark: foreground, light: foreground, hc: foreground }, nls.localize('editorWidgetForeground', 'Foreground color of editor widgets, such as find/replace.'));\r\nexport var editorWidgetBorder = registerColor('editorWidget.border', { dark: '#454545', light: '#C8C8C8', hc: contrastBorder }, nls.localize('editorWidgetBorder', 'Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.'));\r\nexport var editorWidgetResizeBorder = registerColor('editorWidget.resizeBorder', { light: null, dark: null, hc: null }, nls.localize('editorWidgetResizeBorder', \"Border color of the resize bar of editor widgets. The color is only used if the widget chooses to have a resize border and if the color is not overridden by a widget.\"));\r\n/**\r\n * Editor selection colors.\r\n */\r\nexport var editorSelectionBackground = registerColor('editor.selectionBackground', { light: '#ADD6FF', dark: '#264F78', hc: '#f3f518' }, nls.localize('editorSelectionBackground', \"Color of the editor selection.\"));\r\nexport var editorSelectionForeground = registerColor('editor.selectionForeground', { light: null, dark: null, hc: '#000000' }, nls.localize('editorSelectionForeground', \"Color of the selected text for high contrast.\"));\r\nexport var editorInactiveSelection = registerColor('editor.inactiveSelectionBackground', { light: transparent(editorSelectionBackground, 0.5), dark: transparent(editorSelectionBackground, 0.5), hc: transparent(editorSelectionBackground, 0.5) }, nls.localize('editorInactiveSelection', \"Color of the selection in an inactive editor. The color must not be opaque so as not to hide underlying decorations.\"), true);\r\nexport var editorSelectionHighlight = registerColor('editor.selectionHighlightBackground', { light: lessProminent(editorSelectionBackground, editorBackground, 0.3, 0.6), dark: lessProminent(editorSelectionBackground, editorBackground, 0.3, 0.6), hc: null }, nls.localize('editorSelectionHighlight', 'Color for regions with the same content as the selection. The color must not be opaque so as not to hide underlying decorations.'), true);\r\nexport var editorSelectionHighlightBorder = registerColor('editor.selectionHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('editorSelectionHighlightBorder', \"Border color for regions with the same content as the selection.\"));\r\n/**\r\n * Editor find match colors.\r\n */\r\nexport var editorFindMatch = registerColor('editor.findMatchBackground', { light: '#A8AC94', dark: '#515C6A', hc: null }, nls.localize('editorFindMatch', \"Color of the current search match.\"));\r\nexport var editorFindMatchHighlight = registerColor('editor.findMatchHighlightBackground', { light: '#EA5C0055', dark: '#EA5C0055', hc: null }, nls.localize('findMatchHighlight', \"Color of the other search matches. The color must not be opaque so as not to hide underlying decorations.\"), true);\r\nexport var editorFindRangeHighlight = registerColor('editor.findRangeHighlightBackground', { dark: '#3a3d4166', light: '#b4b4b44d', hc: null }, nls.localize('findRangeHighlight', \"Color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.\"), true);\r\nexport var editorFindMatchBorder = registerColor('editor.findMatchBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('editorFindMatchBorder', \"Border color of the current search match.\"));\r\nexport var editorFindMatchHighlightBorder = registerColor('editor.findMatchHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('findMatchHighlightBorder', \"Border color of the other search matches.\"));\r\nexport var editorFindRangeHighlightBorder = registerColor('editor.findRangeHighlightBorder', { dark: null, light: null, hc: transparent(activeContrastBorder, 0.4) }, nls.localize('findRangeHighlightBorder', \"Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.\"), true);\r\n/**\r\n * Editor hover\r\n */\r\nexport var editorHoverHighlight = registerColor('editor.hoverHighlightBackground', { light: '#ADD6FF26', dark: '#264f7840', hc: '#ADD6FF26' }, nls.localize('hoverHighlight', 'Highlight below the word for which a hover is shown. The color must not be opaque so as not to hide underlying decorations.'), true);\r\nexport var editorHoverBackground = registerColor('editorHoverWidget.background', { light: editorWidgetBackground, dark: editorWidgetBackground, hc: editorWidgetBackground }, nls.localize('hoverBackground', 'Background color of the editor hover.'));\r\nexport var editorHoverForeground = registerColor('editorHoverWidget.foreground', { light: editorWidgetForeground, dark: editorWidgetForeground, hc: editorWidgetForeground }, nls.localize('hoverForeground', 'Foreground color of the editor hover.'));\r\nexport var editorHoverBorder = registerColor('editorHoverWidget.border', { light: editorWidgetBorder, dark: editorWidgetBorder, hc: editorWidgetBorder }, nls.localize('hoverBorder', 'Border color of the editor hover.'));\r\nexport var editorHoverStatusBarBackground = registerColor('editorHoverWidget.statusBarBackground', { dark: lighten(editorHoverBackground, 0.2), light: darken(editorHoverBackground, 0.05), hc: editorWidgetBackground }, nls.localize('statusBarBackground', \"Background color of the editor hover status bar.\"));\r\n/**\r\n * Editor link colors\r\n */\r\nexport var editorActiveLinkForeground = registerColor('editorLink.activeForeground', { dark: '#4E94CE', light: Color.blue, hc: Color.cyan }, nls.localize('activeLinkForeground', 'Color of active links.'));\r\n/**\r\n * Editor lighbulb icon colors\r\n */\r\nexport var editorLightBulbForeground = registerColor('editorLightBulb.foreground', { dark: '#FFCC00', light: '#DDB100', hc: '#FFCC00' }, nls.localize('editorLightBulbForeground', \"The color used for the lightbulb actions icon.\"));\r\nexport var editorLightBulbAutoFixForeground = registerColor('editorLightBulbAutoFix.foreground', { dark: '#75BEFF', light: '#007ACC', hc: '#75BEFF' }, nls.localize('editorLightBulbAutoFixForeground', \"The color used for the lightbulb auto fix actions icon.\"));\r\n/**\r\n * Diff Editor Colors\r\n */\r\nexport var defaultInsertColor = new Color(new RGBA(155, 185, 85, 0.2));\r\nexport var defaultRemoveColor = new Color(new RGBA(255, 0, 0, 0.2));\r\nexport var diffInserted = registerColor('diffEditor.insertedTextBackground', { dark: defaultInsertColor, light: defaultInsertColor, hc: null }, nls.localize('diffEditorInserted', 'Background color for text that got inserted. The color must not be opaque so as not to hide underlying decorations.'), true);\r\nexport var diffRemoved = registerColor('diffEditor.removedTextBackground', { dark: defaultRemoveColor, light: defaultRemoveColor, hc: null }, nls.localize('diffEditorRemoved', 'Background color for text that got removed. The color must not be opaque so as not to hide underlying decorations.'), true);\r\nexport var diffInsertedOutline = registerColor('diffEditor.insertedTextBorder', { dark: null, light: null, hc: '#33ff2eff' }, nls.localize('diffEditorInsertedOutline', 'Outline color for the text that got inserted.'));\r\nexport var diffRemovedOutline = registerColor('diffEditor.removedTextBorder', { dark: null, light: null, hc: '#FF008F' }, nls.localize('diffEditorRemovedOutline', 'Outline color for text that got removed.'));\r\nexport var diffBorder = registerColor('diffEditor.border', { dark: null, light: null, hc: contrastBorder }, nls.localize('diffEditorBorder', 'Border color between the two text editors.'));\r\n/**\r\n * List and tree colors\r\n */\r\nexport var listFocusBackground = registerColor('list.focusBackground', { dark: '#062F4A', light: '#D6EBFF', hc: null }, nls.localize('listFocusBackground', \"List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\r\nexport var listFocusForeground = registerColor('list.focusForeground', { dark: null, light: null, hc: null }, nls.localize('listFocusForeground', \"List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\r\nexport var listActiveSelectionBackground = registerColor('list.activeSelectionBackground', { dark: '#094771', light: '#0074E8', hc: null }, nls.localize('listActiveSelectionBackground', \"List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\r\nexport var listActiveSelectionForeground = registerColor('list.activeSelectionForeground', { dark: Color.white, light: Color.white, hc: null }, nls.localize('listActiveSelectionForeground', \"List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\r\nexport var listInactiveSelectionBackground = registerColor('list.inactiveSelectionBackground', { dark: '#37373D', light: '#E4E6F1', hc: null }, nls.localize('listInactiveSelectionBackground', \"List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\r\nexport var listInactiveSelectionForeground = registerColor('list.inactiveSelectionForeground', { dark: null, light: null, hc: null }, nls.localize('listInactiveSelectionForeground', \"List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\r\nexport var listInactiveFocusBackground = registerColor('list.inactiveFocusBackground', { dark: null, light: null, hc: null }, nls.localize('listInactiveFocusBackground', \"List/Tree background color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\r\nexport var listHoverBackground = registerColor('list.hoverBackground', { dark: '#2A2D2E', light: '#F0F0F0', hc: null }, nls.localize('listHoverBackground', \"List/Tree background when hovering over items using the mouse.\"));\r\nexport var listHoverForeground = registerColor('list.hoverForeground', { dark: null, light: null, hc: null }, nls.localize('listHoverForeground', \"List/Tree foreground when hovering over items using the mouse.\"));\r\nexport var listDropBackground = registerColor('list.dropBackground', { dark: listFocusBackground, light: listFocusBackground, hc: null }, nls.localize('listDropBackground', \"List/Tree drag and drop background when moving items around using the mouse.\"));\r\nexport var listHighlightForeground = registerColor('list.highlightForeground', { dark: '#0097fb', light: '#0066BF', hc: focusBorder }, nls.localize('highlight', 'List/Tree foreground color of the match highlights when searching inside the list/tree.'));\r\nexport var listFilterWidgetBackground = registerColor('listFilterWidget.background', { light: '#efc1ad', dark: '#653723', hc: Color.black }, nls.localize('listFilterWidgetBackground', 'Background color of the type filter widget in lists and trees.'));\r\nexport var listFilterWidgetOutline = registerColor('listFilterWidget.outline', { dark: Color.transparent, light: Color.transparent, hc: '#f38518' }, nls.localize('listFilterWidgetOutline', 'Outline color of the type filter widget in lists and trees.'));\r\nexport var listFilterWidgetNoMatchesOutline = registerColor('listFilterWidget.noMatchesOutline', { dark: '#BE1100', light: '#BE1100', hc: contrastBorder }, nls.localize('listFilterWidgetNoMatchesOutline', 'Outline color of the type filter widget in lists and trees, when there are no matches.'));\r\nexport var treeIndentGuidesStroke = registerColor('tree.indentGuidesStroke', { dark: '#585858', light: '#a9a9a9', hc: '#a9a9a9' }, nls.localize('treeIndentGuidesStroke', \"Tree stroke color for the indentation guides.\"));\r\n/**\r\n * Menu colors\r\n */\r\nexport var menuBorder = registerColor('menu.border', { dark: null, light: null, hc: contrastBorder }, nls.localize('menuBorder', \"Border color of menus.\"));\r\nexport var menuForeground = registerColor('menu.foreground', { dark: selectForeground, light: foreground, hc: selectForeground }, nls.localize('menuForeground', \"Foreground color of menu items.\"));\r\nexport var menuBackground = registerColor('menu.background', { dark: selectBackground, light: selectBackground, hc: selectBackground }, nls.localize('menuBackground', \"Background color of menu items.\"));\r\nexport var menuSelectionForeground = registerColor('menu.selectionForeground', { dark: listActiveSelectionForeground, light: listActiveSelectionForeground, hc: listActiveSelectionForeground }, nls.localize('menuSelectionForeground', \"Foreground color of the selected menu item in menus.\"));\r\nexport var menuSelectionBackground = registerColor('menu.selectionBackground', { dark: listActiveSelectionBackground, light: listActiveSelectionBackground, hc: listActiveSelectionBackground }, nls.localize('menuSelectionBackground', \"Background color of the selected menu item in menus.\"));\r\nexport var menuSelectionBorder = registerColor('menu.selectionBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('menuSelectionBorder', \"Border color of the selected menu item in menus.\"));\r\nexport var menuSeparatorBackground = registerColor('menu.separatorBackground', { dark: '#BBBBBB', light: '#888888', hc: contrastBorder }, nls.localize('menuSeparatorBackground', \"Color of a separator menu item in menus.\"));\r\n/**\r\n * Snippet placeholder colors\r\n */\r\nexport var snippetTabstopHighlightBackground = registerColor('editor.snippetTabstopHighlightBackground', { dark: new Color(new RGBA(124, 124, 124, 0.3)), light: new Color(new RGBA(10, 50, 100, 0.2)), hc: new Color(new RGBA(124, 124, 124, 0.3)) }, nls.localize('snippetTabstopHighlightBackground', \"Highlight background color of a snippet tabstop.\"));\r\nexport var snippetTabstopHighlightBorder = registerColor('editor.snippetTabstopHighlightBorder', { dark: null, light: null, hc: null }, nls.localize('snippetTabstopHighlightBorder', \"Highlight border color of a snippet tabstop.\"));\r\nexport var snippetFinalTabstopHighlightBackground = registerColor('editor.snippetFinalTabstopHighlightBackground', { dark: null, light: null, hc: null }, nls.localize('snippetFinalTabstopHighlightBackground', \"Highlight background color of the final tabstop of a snippet.\"));\r\nexport var snippetFinalTabstopHighlightBorder = registerColor('editor.snippetFinalTabstopHighlightBorder', { dark: '#525252', light: new Color(new RGBA(10, 50, 100, 0.5)), hc: '#525252' }, nls.localize('snippetFinalTabstopHighlightBorder', \"Highlight border color of the final stabstop of a snippet.\"));\r\nexport var overviewRulerFindMatchForeground = registerColor('editorOverviewRuler.findMatchForeground', { dark: '#d186167e', light: '#d186167e', hc: '#AB5A00' }, nls.localize('overviewRulerFindMatchForeground', 'Overview ruler marker color for find matches. The color must not be opaque so as not to hide underlying decorations.'), true);\r\nexport var overviewRulerSelectionHighlightForeground = registerColor('editorOverviewRuler.selectionHighlightForeground', { dark: '#A0A0A0CC', light: '#A0A0A0CC', hc: '#A0A0A0CC' }, nls.localize('overviewRulerSelectionHighlightForeground', 'Overview ruler marker color for selection highlights. The color must not be opaque so as not to hide underlying decorations.'), true);\r\nexport var minimapFindMatch = registerColor('minimap.findMatchHighlight', { light: '#d18616', dark: '#d18616', hc: '#AB5A00' }, nls.localize('minimapFindMatchHighlight', 'Minimap marker color for find matches.'), true);\r\nexport var minimapSelection = registerColor('minimap.selectionHighlight', { light: '#ADD6FF', dark: '#264F78', hc: '#ffffff' }, nls.localize('minimapSelectionHighlight', 'Minimap marker color for the editor selection.'), true);\r\nexport var minimapError = registerColor('minimap.errorHighlight', { dark: new Color(new RGBA(255, 18, 18, 0.7)), light: new Color(new RGBA(255, 18, 18, 0.7)), hc: new Color(new RGBA(255, 50, 50, 1)) }, nls.localize('minimapError', 'Minimap marker color for errors.'));\r\nexport var minimapWarning = registerColor('minimap.warningHighlight', { dark: editorWarningForeground, light: editorWarningForeground, hc: editorWarningBorder }, nls.localize('overviewRuleWarning', 'Minimap marker color for warnings.'));\r\nexport var problemsErrorIconForeground = registerColor('problemsErrorIcon.foreground', { dark: editorErrorForeground, light: editorErrorForeground, hc: editorErrorForeground }, nls.localize('problemsErrorIconForeground', \"The color used for the problems error icon.\"));\r\nexport var problemsWarningIconForeground = registerColor('problemsWarningIcon.foreground', { dark: editorWarningForeground, light: editorWarningForeground, hc: editorWarningForeground }, nls.localize('problemsWarningIconForeground', \"The color used for the problems warning icon.\"));\r\nexport var problemsInfoIconForeground = registerColor('problemsInfoIcon.foreground', { dark: editorInfoForeground, light: editorInfoForeground, hc: editorInfoForeground }, nls.localize('problemsInfoIconForeground', \"The color used for the problems info icon.\"));\r\n// ----- color functions\r\nexport function darken(colorValue, factor) {\r\n return function (theme) {\r\n var color = resolveColorValue(colorValue, theme);\r\n if (color) {\r\n return color.darken(factor);\r\n }\r\n return undefined;\r\n };\r\n}\r\nexport function lighten(colorValue, factor) {\r\n return function (theme) {\r\n var color = resolveColorValue(colorValue, theme);\r\n if (color) {\r\n return color.lighten(factor);\r\n }\r\n return undefined;\r\n };\r\n}\r\nexport function transparent(colorValue, factor) {\r\n return function (theme) {\r\n var color = resolveColorValue(colorValue, theme);\r\n if (color) {\r\n return color.transparent(factor);\r\n }\r\n return undefined;\r\n };\r\n}\r\nexport function oneOf() {\r\n var colorValues = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n colorValues[_i] = arguments[_i];\r\n }\r\n return function (theme) {\r\n for (var _i = 0, colorValues_1 = colorValues; _i < colorValues_1.length; _i++) {\r\n var colorValue = colorValues_1[_i];\r\n var color = resolveColorValue(colorValue, theme);\r\n if (color) {\r\n return color;\r\n }\r\n }\r\n return undefined;\r\n };\r\n}\r\nfunction lessProminent(colorValue, backgroundColorValue, factor, transparency) {\r\n return function (theme) {\r\n var from = resolveColorValue(colorValue, theme);\r\n if (from) {\r\n var backgroundColor = resolveColorValue(backgroundColorValue, theme);\r\n if (backgroundColor) {\r\n if (from.isDarkerThan(backgroundColor)) {\r\n return Color.getLighterColor(from, backgroundColor, factor).transparent(transparency);\r\n }\r\n return Color.getDarkerColor(from, backgroundColor, factor).transparent(transparency);\r\n }\r\n return from.transparent(factor * transparency);\r\n }\r\n return undefined;\r\n };\r\n}\r\n// ----- implementation\r\n/**\r\n * @param colorValue Resolve a color value in the context of a theme\r\n */\r\nexport function resolveColorValue(colorValue, theme) {\r\n if (colorValue === null) {\r\n return undefined;\r\n }\r\n else if (typeof colorValue === 'string') {\r\n if (colorValue[0] === '#') {\r\n return Color.fromHex(colorValue);\r\n }\r\n return theme.getColor(colorValue);\r\n }\r\n else if (colorValue instanceof Color) {\r\n return colorValue;\r\n }\r\n else if (typeof colorValue === 'function') {\r\n return colorValue(theme);\r\n }\r\n return undefined;\r\n}\r\nexport var workbenchColorsSchemaId = 'vscode://schemas/workbench-colors';\r\nvar schemaRegistry = platform.Registry.as(JSONExtensions.JSONContribution);\r\nschemaRegistry.registerSchema(workbenchColorsSchemaId, colorRegistry.getColorSchema());\r\nvar delayer = new RunOnceScheduler(function () { return schemaRegistry.notifySchemaChanged(workbenchColorsSchemaId); }, 200);\r\ncolorRegistry.onDidChangeSchema(function () {\r\n if (!delayer.isScheduled()) {\r\n delayer.schedule();\r\n }\r\n});\r\n// setTimeout(_ => console.log(colorRegistry.toString()), 5000);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as nls from '../../../nls.js';\r\nimport { Color, RGBA } from '../../../base/common/color.js';\r\nimport { activeContrastBorder, editorBackground, editorForeground, registerColor, editorWarningForeground, editorInfoForeground, editorWarningBorder, editorInfoBorder, contrastBorder, editorFindMatchHighlight } from '../../../platform/theme/common/colorRegistry.js';\r\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\r\n/**\r\n * Definition of the editor colors\r\n */\r\nexport var editorLineHighlight = registerColor('editor.lineHighlightBackground', { dark: null, light: null, hc: null }, nls.localize('lineHighlight', 'Background color for the highlight of line at the cursor position.'));\r\nexport var editorLineHighlightBorder = registerColor('editor.lineHighlightBorder', { dark: '#282828', light: '#eeeeee', hc: '#f38518' }, nls.localize('lineHighlightBorderBox', 'Background color for the border around the line at the cursor position.'));\r\nexport var editorRangeHighlight = registerColor('editor.rangeHighlightBackground', { dark: '#ffffff0b', light: '#fdff0033', hc: null }, nls.localize('rangeHighlight', 'Background color of highlighted ranges, like by quick open and find features. The color must not be opaque so as not to hide underlying decorations.'), true);\r\nexport var editorRangeHighlightBorder = registerColor('editor.rangeHighlightBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('rangeHighlightBorder', 'Background color of the border around highlighted ranges.'), true);\r\nexport var editorSymbolHighlight = registerColor('editor.symbolHighlightBackground', { dark: editorFindMatchHighlight, light: editorFindMatchHighlight, hc: null }, nls.localize('symbolHighlight', 'Background color of highlighted symbol, like for go to definition or go next/previous symbol. The color must not be opaque so as not to hide underlying decorations.'), true);\r\nexport var editorSymbolHighlightBorder = registerColor('editor.symbolHighlightBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('symbolHighlightBorder', 'Background color of the border around highlighted symbols.'), true);\r\nexport var editorCursorForeground = registerColor('editorCursor.foreground', { dark: '#AEAFAD', light: Color.black, hc: Color.white }, nls.localize('caret', 'Color of the editor cursor.'));\r\nexport var editorCursorBackground = registerColor('editorCursor.background', null, nls.localize('editorCursorBackground', 'The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.'));\r\nexport var editorWhitespaces = registerColor('editorWhitespace.foreground', { dark: '#e3e4e229', light: '#33333333', hc: '#e3e4e229' }, nls.localize('editorWhitespaces', 'Color of whitespace characters in the editor.'));\r\nexport var editorIndentGuides = registerColor('editorIndentGuide.background', { dark: editorWhitespaces, light: editorWhitespaces, hc: editorWhitespaces }, nls.localize('editorIndentGuides', 'Color of the editor indentation guides.'));\r\nexport var editorActiveIndentGuides = registerColor('editorIndentGuide.activeBackground', { dark: editorWhitespaces, light: editorWhitespaces, hc: editorWhitespaces }, nls.localize('editorActiveIndentGuide', 'Color of the active editor indentation guides.'));\r\nexport var editorLineNumbers = registerColor('editorLineNumber.foreground', { dark: '#858585', light: '#237893', hc: Color.white }, nls.localize('editorLineNumbers', 'Color of editor line numbers.'));\r\nvar deprecatedEditorActiveLineNumber = registerColor('editorActiveLineNumber.foreground', { dark: '#c6c6c6', light: '#0B216F', hc: activeContrastBorder }, nls.localize('editorActiveLineNumber', 'Color of editor active line number'), false, nls.localize('deprecatedEditorActiveLineNumber', 'Id is deprecated. Use \\'editorLineNumber.activeForeground\\' instead.'));\r\nexport var editorActiveLineNumber = registerColor('editorLineNumber.activeForeground', { dark: deprecatedEditorActiveLineNumber, light: deprecatedEditorActiveLineNumber, hc: deprecatedEditorActiveLineNumber }, nls.localize('editorActiveLineNumber', 'Color of editor active line number'));\r\nexport var editorRuler = registerColor('editorRuler.foreground', { dark: '#5A5A5A', light: Color.lightgrey, hc: Color.white }, nls.localize('editorRuler', 'Color of the editor rulers.'));\r\nexport var editorCodeLensForeground = registerColor('editorCodeLens.foreground', { dark: '#999999', light: '#999999', hc: '#999999' }, nls.localize('editorCodeLensForeground', 'Foreground color of editor code lenses'));\r\nexport var editorBracketMatchBackground = registerColor('editorBracketMatch.background', { dark: '#0064001a', light: '#0064001a', hc: '#0064001a' }, nls.localize('editorBracketMatchBackground', 'Background color behind matching brackets'));\r\nexport var editorBracketMatchBorder = registerColor('editorBracketMatch.border', { dark: '#888', light: '#B9B9B9', hc: contrastBorder }, nls.localize('editorBracketMatchBorder', 'Color for matching brackets boxes'));\r\nexport var editorOverviewRulerBorder = registerColor('editorOverviewRuler.border', { dark: '#7f7f7f4d', light: '#7f7f7f4d', hc: '#7f7f7f4d' }, nls.localize('editorOverviewRulerBorder', 'Color of the overview ruler border.'));\r\nexport var editorGutter = registerColor('editorGutter.background', { dark: editorBackground, light: editorBackground, hc: editorBackground }, nls.localize('editorGutter', 'Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.'));\r\nexport var editorUnnecessaryCodeBorder = registerColor('editorUnnecessaryCode.border', { dark: null, light: null, hc: Color.fromHex('#fff').transparent(0.8) }, nls.localize('unnecessaryCodeBorder', 'Border color of unnecessary (unused) source code in the editor.'));\r\nexport var editorUnnecessaryCodeOpacity = registerColor('editorUnnecessaryCode.opacity', { dark: Color.fromHex('#000a'), light: Color.fromHex('#0007'), hc: null }, nls.localize('unnecessaryCodeOpacity', 'Opacity of unnecessary (unused) source code in the editor. For example, \"#000000c0\" will render the code with 75% opacity. For high contrast themes, use the \\'editorUnnecessaryCode.border\\' theme color to underline unnecessary code instead of fading it out.'));\r\nexport var overviewRulerError = registerColor('editorOverviewRuler.errorForeground', { dark: new Color(new RGBA(255, 18, 18, 0.7)), light: new Color(new RGBA(255, 18, 18, 0.7)), hc: new Color(new RGBA(255, 50, 50, 1)) }, nls.localize('overviewRuleError', 'Overview ruler marker color for errors.'));\r\nexport var overviewRulerWarning = registerColor('editorOverviewRuler.warningForeground', { dark: editorWarningForeground, light: editorWarningForeground, hc: editorWarningBorder }, nls.localize('overviewRuleWarning', 'Overview ruler marker color for warnings.'));\r\nexport var overviewRulerInfo = registerColor('editorOverviewRuler.infoForeground', { dark: editorInfoForeground, light: editorInfoForeground, hc: editorInfoBorder }, nls.localize('overviewRuleInfo', 'Overview ruler marker color for infos.'));\r\n// contains all color rules that used to defined in editor/browser/widget/editor.css\r\nregisterThemingParticipant(function (theme, collector) {\r\n var background = theme.getColor(editorBackground);\r\n if (background) {\r\n collector.addRule(\".monaco-editor, .monaco-editor-background, .monaco-editor .inputarea.ime-input { background-color: \" + background + \"; }\");\r\n }\r\n var foreground = theme.getColor(editorForeground);\r\n if (foreground) {\r\n collector.addRule(\".monaco-editor, .monaco-editor .inputarea.ime-input { color: \" + foreground + \"; }\");\r\n }\r\n var gutter = theme.getColor(editorGutter);\r\n if (gutter) {\r\n collector.addRule(\".monaco-editor .margin { background-color: \" + gutter + \"; }\");\r\n }\r\n var rangeHighlight = theme.getColor(editorRangeHighlight);\r\n if (rangeHighlight) {\r\n collector.addRule(\".monaco-editor .rangeHighlight { background-color: \" + rangeHighlight + \"; }\");\r\n }\r\n var rangeHighlightBorder = theme.getColor(editorRangeHighlightBorder);\r\n if (rangeHighlightBorder) {\r\n collector.addRule(\".monaco-editor .rangeHighlight { border: 1px \" + (theme.type === 'hc' ? 'dotted' : 'solid') + \" \" + rangeHighlightBorder + \"; }\");\r\n }\r\n var symbolHighlight = theme.getColor(editorSymbolHighlight);\r\n if (symbolHighlight) {\r\n collector.addRule(\".monaco-editor .symbolHighlight { background-color: \" + symbolHighlight + \"; }\");\r\n }\r\n var symbolHighlightBorder = theme.getColor(editorSymbolHighlightBorder);\r\n if (symbolHighlightBorder) {\r\n collector.addRule(\".monaco-editor .symbolHighlight { border: 1px \" + (theme.type === 'hc' ? 'dotted' : 'solid') + \" \" + symbolHighlightBorder + \"; }\");\r\n }\r\n var invisibles = theme.getColor(editorWhitespaces);\r\n if (invisibles) {\r\n collector.addRule(\".vs-whitespace { color: \" + invisibles + \" !important; }\");\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './lineNumbers.css';\r\nimport * as platform from '../../../../base/common/platform.js';\r\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\r\nimport { Position } from '../../../common/core/position.js';\r\nimport { editorActiveLineNumber, editorLineNumbers } from '../../../common/view/editorColorRegistry.js';\r\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\r\nvar LineNumbersOverlay = /** @class */ (function (_super) {\r\n __extends(LineNumbersOverlay, _super);\r\n function LineNumbersOverlay(context) {\r\n var _this = _super.call(this) || this;\r\n _this._context = context;\r\n _this._readConfig();\r\n _this._lastCursorModelPosition = new Position(1, 1);\r\n _this._renderResult = null;\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n LineNumbersOverlay.prototype._readConfig = function () {\r\n var options = this._context.configuration.options;\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n var lineNumbers = options.get(48 /* lineNumbers */);\r\n this._renderLineNumbers = lineNumbers.renderType;\r\n this._renderCustomLineNumbers = lineNumbers.renderFn;\r\n this._renderFinalNewline = options.get(68 /* renderFinalNewline */);\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._lineNumbersLeft = layoutInfo.lineNumbersLeft;\r\n this._lineNumbersWidth = layoutInfo.lineNumbersWidth;\r\n };\r\n LineNumbersOverlay.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n this._renderResult = null;\r\n _super.prototype.dispose.call(this);\r\n };\r\n // --- begin event handlers\r\n LineNumbersOverlay.prototype.onConfigurationChanged = function (e) {\r\n this._readConfig();\r\n return true;\r\n };\r\n LineNumbersOverlay.prototype.onCursorStateChanged = function (e) {\r\n var primaryViewPosition = e.selections[0].getPosition();\r\n this._lastCursorModelPosition = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(primaryViewPosition);\r\n if (this._renderLineNumbers === 2 /* Relative */ || this._renderLineNumbers === 3 /* Interval */) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n LineNumbersOverlay.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n LineNumbersOverlay.prototype.onLinesChanged = function (e) {\r\n return true;\r\n };\r\n LineNumbersOverlay.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n LineNumbersOverlay.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n LineNumbersOverlay.prototype.onScrollChanged = function (e) {\r\n return e.scrollTopChanged;\r\n };\r\n LineNumbersOverlay.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // --- end event handlers\r\n LineNumbersOverlay.prototype._getLineRenderLineNumber = function (viewLineNumber) {\r\n var modelPosition = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(viewLineNumber, 1));\r\n if (modelPosition.column !== 1) {\r\n return '';\r\n }\r\n var modelLineNumber = modelPosition.lineNumber;\r\n if (this._renderCustomLineNumbers) {\r\n return this._renderCustomLineNumbers(modelLineNumber);\r\n }\r\n if (this._renderLineNumbers === 2 /* Relative */) {\r\n var diff = Math.abs(this._lastCursorModelPosition.lineNumber - modelLineNumber);\r\n if (diff === 0) {\r\n return '' + modelLineNumber + '';\r\n }\r\n return String(diff);\r\n }\r\n if (this._renderLineNumbers === 3 /* Interval */) {\r\n if (this._lastCursorModelPosition.lineNumber === modelLineNumber) {\r\n return String(modelLineNumber);\r\n }\r\n if (modelLineNumber % 10 === 0) {\r\n return String(modelLineNumber);\r\n }\r\n return '';\r\n }\r\n return String(modelLineNumber);\r\n };\r\n LineNumbersOverlay.prototype.prepareRender = function (ctx) {\r\n if (this._renderLineNumbers === 0 /* Off */) {\r\n this._renderResult = null;\r\n return;\r\n }\r\n var lineHeightClassName = (platform.isLinux ? (this._lineHeight % 2 === 0 ? ' lh-even' : ' lh-odd') : '');\r\n var visibleStartLineNumber = ctx.visibleRange.startLineNumber;\r\n var visibleEndLineNumber = ctx.visibleRange.endLineNumber;\r\n var common = '
';\r\n var lineCount = this._context.model.getLineCount();\r\n var output = [];\r\n for (var lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\r\n var lineIndex = lineNumber - visibleStartLineNumber;\r\n if (!this._renderFinalNewline) {\r\n if (lineNumber === lineCount && this._context.model.getLineLength(lineNumber) === 0) {\r\n // Do not render last (empty) line\r\n output[lineIndex] = '';\r\n continue;\r\n }\r\n }\r\n var renderLineNumber = this._getLineRenderLineNumber(lineNumber);\r\n if (renderLineNumber) {\r\n output[lineIndex] = (common\r\n + renderLineNumber\r\n + '
');\r\n }\r\n else {\r\n output[lineIndex] = '';\r\n }\r\n }\r\n this._renderResult = output;\r\n };\r\n LineNumbersOverlay.prototype.render = function (startLineNumber, lineNumber) {\r\n if (!this._renderResult) {\r\n return '';\r\n }\r\n var lineIndex = lineNumber - startLineNumber;\r\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\r\n return '';\r\n }\r\n return this._renderResult[lineIndex];\r\n };\r\n LineNumbersOverlay.CLASS_NAME = 'line-numbers';\r\n return LineNumbersOverlay;\r\n}(DynamicViewOverlay));\r\nexport { LineNumbersOverlay };\r\n// theming\r\nregisterThemingParticipant(function (theme, collector) {\r\n var lineNumbers = theme.getColor(editorLineNumbers);\r\n if (lineNumbers) {\r\n collector.addRule(\".monaco-editor .line-numbers { color: \" + lineNumbers + \"; }\");\r\n }\r\n var activeLineNumber = theme.getColor(editorActiveLineNumber);\r\n if (activeLineNumber) {\r\n collector.addRule(\".monaco-editor .current-line ~ .line-numbers { color: \" + activeLineNumber + \"; }\");\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { ViewPart } from '../../view/viewPart.js';\r\nvar Margin = /** @class */ (function (_super) {\r\n __extends(Margin, _super);\r\n function Margin(context) {\r\n var _this = _super.call(this, context) || this;\r\n var options = _this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._canUseLayerHinting = !options.get(21 /* disableLayerHinting */);\r\n _this._contentLeft = layoutInfo.contentLeft;\r\n _this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\r\n _this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\r\n _this._domNode = createFastDomNode(document.createElement('div'));\r\n _this._domNode.setClassName(Margin.OUTER_CLASS_NAME);\r\n _this._domNode.setPosition('absolute');\r\n _this._domNode.setAttribute('role', 'presentation');\r\n _this._domNode.setAttribute('aria-hidden', 'true');\r\n _this._glyphMarginBackgroundDomNode = createFastDomNode(document.createElement('div'));\r\n _this._glyphMarginBackgroundDomNode.setClassName(Margin.CLASS_NAME);\r\n _this._domNode.appendChild(_this._glyphMarginBackgroundDomNode);\r\n return _this;\r\n }\r\n Margin.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n Margin.prototype.getDomNode = function () {\r\n return this._domNode;\r\n };\r\n // --- begin event handlers\r\n Margin.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._canUseLayerHinting = !options.get(21 /* disableLayerHinting */);\r\n this._contentLeft = layoutInfo.contentLeft;\r\n this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\r\n this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\r\n return true;\r\n };\r\n Margin.prototype.onScrollChanged = function (e) {\r\n return _super.prototype.onScrollChanged.call(this, e) || e.scrollTopChanged;\r\n };\r\n // --- end event handlers\r\n Margin.prototype.prepareRender = function (ctx) {\r\n // Nothing to read\r\n };\r\n Margin.prototype.render = function (ctx) {\r\n this._domNode.setLayerHinting(this._canUseLayerHinting);\r\n this._domNode.setContain('strict');\r\n var adjustedScrollTop = ctx.scrollTop - ctx.bigNumbersDelta;\r\n this._domNode.setTop(-adjustedScrollTop);\r\n var height = Math.min(ctx.scrollHeight, 1000000);\r\n this._domNode.setHeight(height);\r\n this._domNode.setWidth(this._contentLeft);\r\n this._glyphMarginBackgroundDomNode.setLeft(this._glyphMarginLeft);\r\n this._glyphMarginBackgroundDomNode.setWidth(this._glyphMarginWidth);\r\n this._glyphMarginBackgroundDomNode.setHeight(height);\r\n };\r\n Margin.CLASS_NAME = 'glyph-margin';\r\n Margin.OUTER_CLASS_NAME = 'margin';\r\n return Margin;\r\n}(ViewPart));\r\nexport { Margin };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as errors from '../../../base/common/errors.js';\r\nimport { Disposable, toDisposable } from '../../../base/common/lifecycle.js';\r\nvar ViewConfigurationChangedEvent = /** @class */ (function () {\r\n function ViewConfigurationChangedEvent(source) {\r\n this.type = 1 /* ViewConfigurationChanged */;\r\n this._source = source;\r\n }\r\n ViewConfigurationChangedEvent.prototype.hasChanged = function (id) {\r\n return this._source.hasChanged(id);\r\n };\r\n return ViewConfigurationChangedEvent;\r\n}());\r\nexport { ViewConfigurationChangedEvent };\r\nvar ViewCursorStateChangedEvent = /** @class */ (function () {\r\n function ViewCursorStateChangedEvent(selections) {\r\n this.type = 2 /* ViewCursorStateChanged */;\r\n this.selections = selections;\r\n }\r\n return ViewCursorStateChangedEvent;\r\n}());\r\nexport { ViewCursorStateChangedEvent };\r\nvar ViewDecorationsChangedEvent = /** @class */ (function () {\r\n function ViewDecorationsChangedEvent() {\r\n this.type = 3 /* ViewDecorationsChanged */;\r\n // Nothing to do\r\n }\r\n return ViewDecorationsChangedEvent;\r\n}());\r\nexport { ViewDecorationsChangedEvent };\r\nvar ViewFlushedEvent = /** @class */ (function () {\r\n function ViewFlushedEvent() {\r\n this.type = 4 /* ViewFlushed */;\r\n // Nothing to do\r\n }\r\n return ViewFlushedEvent;\r\n}());\r\nexport { ViewFlushedEvent };\r\nvar ViewFocusChangedEvent = /** @class */ (function () {\r\n function ViewFocusChangedEvent(isFocused) {\r\n this.type = 5 /* ViewFocusChanged */;\r\n this.isFocused = isFocused;\r\n }\r\n return ViewFocusChangedEvent;\r\n}());\r\nexport { ViewFocusChangedEvent };\r\nvar ViewLineMappingChangedEvent = /** @class */ (function () {\r\n function ViewLineMappingChangedEvent() {\r\n this.type = 6 /* ViewLineMappingChanged */;\r\n // Nothing to do\r\n }\r\n return ViewLineMappingChangedEvent;\r\n}());\r\nexport { ViewLineMappingChangedEvent };\r\nvar ViewLinesChangedEvent = /** @class */ (function () {\r\n function ViewLinesChangedEvent(fromLineNumber, toLineNumber) {\r\n this.type = 7 /* ViewLinesChanged */;\r\n this.fromLineNumber = fromLineNumber;\r\n this.toLineNumber = toLineNumber;\r\n }\r\n return ViewLinesChangedEvent;\r\n}());\r\nexport { ViewLinesChangedEvent };\r\nvar ViewLinesDeletedEvent = /** @class */ (function () {\r\n function ViewLinesDeletedEvent(fromLineNumber, toLineNumber) {\r\n this.type = 8 /* ViewLinesDeleted */;\r\n this.fromLineNumber = fromLineNumber;\r\n this.toLineNumber = toLineNumber;\r\n }\r\n return ViewLinesDeletedEvent;\r\n}());\r\nexport { ViewLinesDeletedEvent };\r\nvar ViewLinesInsertedEvent = /** @class */ (function () {\r\n function ViewLinesInsertedEvent(fromLineNumber, toLineNumber) {\r\n this.type = 9 /* ViewLinesInserted */;\r\n this.fromLineNumber = fromLineNumber;\r\n this.toLineNumber = toLineNumber;\r\n }\r\n return ViewLinesInsertedEvent;\r\n}());\r\nexport { ViewLinesInsertedEvent };\r\nvar ViewRevealRangeRequestEvent = /** @class */ (function () {\r\n function ViewRevealRangeRequestEvent(source, range, verticalType, revealHorizontal, scrollType) {\r\n this.type = 10 /* ViewRevealRangeRequest */;\r\n this.source = source;\r\n this.range = range;\r\n this.verticalType = verticalType;\r\n this.revealHorizontal = revealHorizontal;\r\n this.scrollType = scrollType;\r\n }\r\n return ViewRevealRangeRequestEvent;\r\n}());\r\nexport { ViewRevealRangeRequestEvent };\r\nvar ViewScrollChangedEvent = /** @class */ (function () {\r\n function ViewScrollChangedEvent(source) {\r\n this.type = 11 /* ViewScrollChanged */;\r\n this.scrollWidth = source.scrollWidth;\r\n this.scrollLeft = source.scrollLeft;\r\n this.scrollHeight = source.scrollHeight;\r\n this.scrollTop = source.scrollTop;\r\n this.scrollWidthChanged = source.scrollWidthChanged;\r\n this.scrollLeftChanged = source.scrollLeftChanged;\r\n this.scrollHeightChanged = source.scrollHeightChanged;\r\n this.scrollTopChanged = source.scrollTopChanged;\r\n }\r\n return ViewScrollChangedEvent;\r\n}());\r\nexport { ViewScrollChangedEvent };\r\nvar ViewTokensChangedEvent = /** @class */ (function () {\r\n function ViewTokensChangedEvent(ranges) {\r\n this.type = 12 /* ViewTokensChanged */;\r\n this.ranges = ranges;\r\n }\r\n return ViewTokensChangedEvent;\r\n}());\r\nexport { ViewTokensChangedEvent };\r\nvar ViewThemeChangedEvent = /** @class */ (function () {\r\n function ViewThemeChangedEvent() {\r\n this.type = 15 /* ViewThemeChanged */;\r\n }\r\n return ViewThemeChangedEvent;\r\n}());\r\nexport { ViewThemeChangedEvent };\r\nvar ViewTokensColorsChangedEvent = /** @class */ (function () {\r\n function ViewTokensColorsChangedEvent() {\r\n this.type = 13 /* ViewTokensColorsChanged */;\r\n // Nothing to do\r\n }\r\n return ViewTokensColorsChangedEvent;\r\n}());\r\nexport { ViewTokensColorsChangedEvent };\r\nvar ViewZonesChangedEvent = /** @class */ (function () {\r\n function ViewZonesChangedEvent() {\r\n this.type = 14 /* ViewZonesChanged */;\r\n // Nothing to do\r\n }\r\n return ViewZonesChangedEvent;\r\n}());\r\nexport { ViewZonesChangedEvent };\r\nvar ViewLanguageConfigurationEvent = /** @class */ (function () {\r\n function ViewLanguageConfigurationEvent() {\r\n this.type = 16 /* ViewLanguageConfigurationChanged */;\r\n }\r\n return ViewLanguageConfigurationEvent;\r\n}());\r\nexport { ViewLanguageConfigurationEvent };\r\nvar ViewEventEmitter = /** @class */ (function (_super) {\r\n __extends(ViewEventEmitter, _super);\r\n function ViewEventEmitter() {\r\n var _this = _super.call(this) || this;\r\n _this._listeners = [];\r\n _this._collector = null;\r\n _this._collectorCnt = 0;\r\n return _this;\r\n }\r\n ViewEventEmitter.prototype.dispose = function () {\r\n this._listeners = [];\r\n _super.prototype.dispose.call(this);\r\n };\r\n ViewEventEmitter.prototype._beginEmit = function () {\r\n this._collectorCnt++;\r\n if (this._collectorCnt === 1) {\r\n this._collector = new ViewEventsCollector();\r\n }\r\n return this._collector;\r\n };\r\n ViewEventEmitter.prototype._endEmit = function () {\r\n this._collectorCnt--;\r\n if (this._collectorCnt === 0) {\r\n var events = this._collector.finalize();\r\n this._collector = null;\r\n if (events.length > 0) {\r\n this._emit(events);\r\n }\r\n }\r\n };\r\n ViewEventEmitter.prototype._emit = function (events) {\r\n var listeners = this._listeners.slice(0);\r\n for (var i = 0, len = listeners.length; i < len; i++) {\r\n safeInvokeListener(listeners[i], events);\r\n }\r\n };\r\n ViewEventEmitter.prototype.addEventListener = function (listener) {\r\n var _this = this;\r\n this._listeners.push(listener);\r\n return toDisposable(function () {\r\n var listeners = _this._listeners;\r\n for (var i = 0, len = listeners.length; i < len; i++) {\r\n if (listeners[i] === listener) {\r\n listeners.splice(i, 1);\r\n break;\r\n }\r\n }\r\n });\r\n };\r\n return ViewEventEmitter;\r\n}(Disposable));\r\nexport { ViewEventEmitter };\r\nvar ViewEventsCollector = /** @class */ (function () {\r\n function ViewEventsCollector() {\r\n this._eventsLen = 0;\r\n this._events = [];\r\n this._eventsLen = 0;\r\n }\r\n ViewEventsCollector.prototype.emit = function (event) {\r\n this._events[this._eventsLen++] = event;\r\n };\r\n ViewEventsCollector.prototype.finalize = function () {\r\n var result = this._events;\r\n this._events = [];\r\n return result;\r\n };\r\n return ViewEventsCollector;\r\n}());\r\nexport { ViewEventsCollector };\r\nfunction safeInvokeListener(listener, events) {\r\n try {\r\n listener(events);\r\n }\r\n catch (e) {\r\n errors.onUnexpectedError(e);\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './textAreaHandler.css';\r\nimport * as nls from '../../../nls.js';\r\nimport * as browser from '../../../base/browser/browser.js';\r\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { Configuration } from '../config/configuration.js';\r\nimport { CopyOptions, TextAreaInput } from './textAreaInput.js';\r\nimport { PagedScreenReaderStrategy, TextAreaState } from './textAreaState.js';\r\nimport { PartFingerprints, ViewPart } from '../view/viewPart.js';\r\nimport { LineNumbersOverlay } from '../viewParts/lineNumbers/lineNumbers.js';\r\nimport { Margin } from '../viewParts/margin/margin.js';\r\nimport { getMapForWordSeparators } from '../../common/controller/wordCharacterClassifier.js';\r\nimport { Position } from '../../common/core/position.js';\r\nimport { Range } from '../../common/core/range.js';\r\nimport { Selection } from '../../common/core/selection.js';\r\nimport * as viewEvents from '../../common/view/viewEvents.js';\r\nvar VisibleTextAreaData = /** @class */ (function () {\r\n function VisibleTextAreaData(top, left, width) {\r\n this.top = top;\r\n this.left = left;\r\n this.width = width;\r\n }\r\n VisibleTextAreaData.prototype.setWidth = function (width) {\r\n return new VisibleTextAreaData(this.top, this.left, width);\r\n };\r\n return VisibleTextAreaData;\r\n}());\r\nvar canUseZeroSizeTextarea = (browser.isEdgeOrIE || browser.isFirefox);\r\nvar TextAreaHandler = /** @class */ (function (_super) {\r\n __extends(TextAreaHandler, _super);\r\n function TextAreaHandler(context, viewController, viewHelper) {\r\n var _this = _super.call(this, context) || this;\r\n // --- end view API\r\n _this._primaryCursorPosition = new Position(1, 1);\r\n _this._primaryCursorVisibleRange = null;\r\n _this._viewController = viewController;\r\n _this._viewHelper = viewHelper;\r\n _this._scrollLeft = 0;\r\n _this._scrollTop = 0;\r\n var options = _this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._accessibilitySupport = options.get(2 /* accessibilitySupport */);\r\n _this._accessibilityPageSize = options.get(3 /* accessibilityPageSize */);\r\n _this._contentLeft = layoutInfo.contentLeft;\r\n _this._contentWidth = layoutInfo.contentWidth;\r\n _this._contentHeight = layoutInfo.contentHeight;\r\n _this._fontInfo = options.get(32 /* fontInfo */);\r\n _this._lineHeight = options.get(47 /* lineHeight */);\r\n _this._emptySelectionClipboard = options.get(24 /* emptySelectionClipboard */);\r\n _this._copyWithSyntaxHighlighting = options.get(14 /* copyWithSyntaxHighlighting */);\r\n _this._visibleTextArea = null;\r\n _this._selections = [new Selection(1, 1, 1, 1)];\r\n _this._lastRenderPosition = null;\r\n // Text Area (The focus will always be in the textarea when the cursor is blinking)\r\n _this.textArea = createFastDomNode(document.createElement('textarea'));\r\n PartFingerprints.write(_this.textArea, 6 /* TextArea */);\r\n _this.textArea.setClassName('inputarea');\r\n _this.textArea.setAttribute('wrap', 'off');\r\n _this.textArea.setAttribute('autocorrect', 'off');\r\n _this.textArea.setAttribute('autocapitalize', 'off');\r\n _this.textArea.setAttribute('autocomplete', 'off');\r\n _this.textArea.setAttribute('spellcheck', 'false');\r\n _this.textArea.setAttribute('aria-label', _this._getAriaLabel(options));\r\n _this.textArea.setAttribute('role', 'textbox');\r\n _this.textArea.setAttribute('aria-multiline', 'true');\r\n _this.textArea.setAttribute('aria-haspopup', 'false');\r\n _this.textArea.setAttribute('aria-autocomplete', 'both');\r\n if (platform.isWeb && options.get(65 /* readOnly */)) {\r\n _this.textArea.setAttribute('readonly', 'true');\r\n }\r\n _this.textAreaCover = createFastDomNode(document.createElement('div'));\r\n _this.textAreaCover.setPosition('absolute');\r\n var simpleModel = {\r\n getLineCount: function () {\r\n return _this._context.model.getLineCount();\r\n },\r\n getLineMaxColumn: function (lineNumber) {\r\n return _this._context.model.getLineMaxColumn(lineNumber);\r\n },\r\n getValueInRange: function (range, eol) {\r\n return _this._context.model.getValueInRange(range, eol);\r\n }\r\n };\r\n var textAreaInputHost = {\r\n getDataToCopy: function (generateHTML) {\r\n var rawTextToCopy = _this._context.model.getPlainTextToCopy(_this._selections, _this._emptySelectionClipboard, platform.isWindows);\r\n var newLineCharacter = _this._context.model.getEOL();\r\n var isFromEmptySelection = (_this._emptySelectionClipboard && _this._selections.length === 1 && _this._selections[0].isEmpty());\r\n var multicursorText = (Array.isArray(rawTextToCopy) ? rawTextToCopy : null);\r\n var text = (Array.isArray(rawTextToCopy) ? rawTextToCopy.join(newLineCharacter) : rawTextToCopy);\r\n var html = undefined;\r\n if (generateHTML) {\r\n if (CopyOptions.forceCopyWithSyntaxHighlighting || (_this._copyWithSyntaxHighlighting && text.length < 65536)) {\r\n html = _this._context.model.getHTMLToCopy(_this._selections, _this._emptySelectionClipboard);\r\n }\r\n }\r\n return {\r\n isFromEmptySelection: isFromEmptySelection,\r\n multicursorText: multicursorText,\r\n text: text,\r\n html: html\r\n };\r\n },\r\n getScreenReaderContent: function (currentState) {\r\n if (browser.isIPad) {\r\n // Do not place anything in the textarea for the iPad\r\n return TextAreaState.EMPTY;\r\n }\r\n if (_this._accessibilitySupport === 1 /* Disabled */) {\r\n // We know for a fact that a screen reader is not attached\r\n // On OSX, we write the character before the cursor to allow for \"long-press\" composition\r\n // Also on OSX, we write the word before the cursor to allow for the Accessibility Keyboard to give good hints\r\n if (platform.isMacintosh) {\r\n var selection = _this._selections[0];\r\n if (selection.isEmpty()) {\r\n var position = selection.getStartPosition();\r\n var textBefore = _this._getWordBeforePosition(position);\r\n if (textBefore.length === 0) {\r\n textBefore = _this._getCharacterBeforePosition(position);\r\n }\r\n if (textBefore.length > 0) {\r\n return new TextAreaState(textBefore, textBefore.length, textBefore.length, position, position);\r\n }\r\n }\r\n }\r\n return TextAreaState.EMPTY;\r\n }\r\n return PagedScreenReaderStrategy.fromEditorSelection(currentState, simpleModel, _this._selections[0], _this._accessibilityPageSize, _this._accessibilitySupport === 0 /* Unknown */);\r\n },\r\n deduceModelPosition: function (viewAnchorPosition, deltaOffset, lineFeedCnt) {\r\n return _this._context.model.deduceModelPositionRelativeToViewPosition(viewAnchorPosition, deltaOffset, lineFeedCnt);\r\n }\r\n };\r\n _this._textAreaInput = _this._register(new TextAreaInput(textAreaInputHost, _this.textArea));\r\n _this._register(_this._textAreaInput.onKeyDown(function (e) {\r\n _this._viewController.emitKeyDown(e);\r\n }));\r\n _this._register(_this._textAreaInput.onKeyUp(function (e) {\r\n _this._viewController.emitKeyUp(e);\r\n }));\r\n _this._register(_this._textAreaInput.onPaste(function (e) {\r\n var pasteOnNewLine = false;\r\n var multicursorText = null;\r\n if (e.metadata) {\r\n pasteOnNewLine = (_this._emptySelectionClipboard && !!e.metadata.isFromEmptySelection);\r\n multicursorText = (typeof e.metadata.multicursorText !== 'undefined' ? e.metadata.multicursorText : null);\r\n }\r\n _this._viewController.paste('keyboard', e.text, pasteOnNewLine, multicursorText);\r\n }));\r\n _this._register(_this._textAreaInput.onCut(function () {\r\n _this._viewController.cut('keyboard');\r\n }));\r\n _this._register(_this._textAreaInput.onType(function (e) {\r\n if (e.replaceCharCnt) {\r\n _this._viewController.replacePreviousChar('keyboard', e.text, e.replaceCharCnt);\r\n }\r\n else {\r\n _this._viewController.type('keyboard', e.text);\r\n }\r\n }));\r\n _this._register(_this._textAreaInput.onSelectionChangeRequest(function (modelSelection) {\r\n _this._viewController.setSelection('keyboard', modelSelection);\r\n }));\r\n _this._register(_this._textAreaInput.onCompositionStart(function () {\r\n var lineNumber = _this._selections[0].startLineNumber;\r\n var column = _this._selections[0].startColumn;\r\n _this._context.privateViewEventBus.emit(new viewEvents.ViewRevealRangeRequestEvent('keyboard', new Range(lineNumber, column, lineNumber, column), 0 /* Simple */, true, 1 /* Immediate */));\r\n // Find range pixel position\r\n var visibleRange = _this._viewHelper.visibleRangeForPositionRelativeToEditor(lineNumber, column);\r\n if (visibleRange) {\r\n _this._visibleTextArea = new VisibleTextAreaData(_this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber), visibleRange.left, canUseZeroSizeTextarea ? 0 : 1);\r\n _this._render();\r\n }\r\n // Show the textarea\r\n _this.textArea.setClassName('inputarea ime-input');\r\n _this._viewController.compositionStart('keyboard');\r\n }));\r\n _this._register(_this._textAreaInput.onCompositionUpdate(function (e) {\r\n if (browser.isEdgeOrIE) {\r\n // Due to isEdgeOrIE (where the textarea was not cleared initially)\r\n // we cannot assume the text consists only of the composited text\r\n _this._visibleTextArea = _this._visibleTextArea.setWidth(0);\r\n }\r\n else {\r\n // adjust width by its size\r\n _this._visibleTextArea = _this._visibleTextArea.setWidth(measureText(e.data, _this._fontInfo));\r\n }\r\n _this._render();\r\n }));\r\n _this._register(_this._textAreaInput.onCompositionEnd(function () {\r\n _this._visibleTextArea = null;\r\n _this._render();\r\n _this.textArea.setClassName('inputarea');\r\n _this._viewController.compositionEnd('keyboard');\r\n }));\r\n _this._register(_this._textAreaInput.onFocus(function () {\r\n _this._context.privateViewEventBus.emit(new viewEvents.ViewFocusChangedEvent(true));\r\n }));\r\n _this._register(_this._textAreaInput.onBlur(function () {\r\n _this._context.privateViewEventBus.emit(new viewEvents.ViewFocusChangedEvent(false));\r\n }));\r\n return _this;\r\n }\r\n TextAreaHandler.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n TextAreaHandler.prototype._getWordBeforePosition = function (position) {\r\n var lineContent = this._context.model.getLineContent(position.lineNumber);\r\n var wordSeparators = getMapForWordSeparators(this._context.configuration.options.get(92 /* wordSeparators */));\r\n var column = position.column;\r\n var distance = 0;\r\n while (column > 1) {\r\n var charCode = lineContent.charCodeAt(column - 2);\r\n var charClass = wordSeparators.get(charCode);\r\n if (charClass !== 0 /* Regular */ || distance > 50) {\r\n return lineContent.substring(column - 1, position.column - 1);\r\n }\r\n distance++;\r\n column--;\r\n }\r\n return lineContent.substring(0, position.column - 1);\r\n };\r\n TextAreaHandler.prototype._getCharacterBeforePosition = function (position) {\r\n if (position.column > 1) {\r\n var lineContent = this._context.model.getLineContent(position.lineNumber);\r\n var charBefore = lineContent.charAt(position.column - 2);\r\n if (!strings.isHighSurrogate(charBefore.charCodeAt(0))) {\r\n return charBefore;\r\n }\r\n }\r\n return '';\r\n };\r\n TextAreaHandler.prototype._getAriaLabel = function (options) {\r\n var accessibilitySupport = options.get(2 /* accessibilitySupport */);\r\n if (accessibilitySupport === 1 /* Disabled */) {\r\n return nls.localize('accessibilityOffAriaLabel', \"The editor is not accessible at this time. Press Alt+F1 for options.\");\r\n }\r\n return options.get(4 /* ariaLabel */);\r\n };\r\n // --- begin event handlers\r\n TextAreaHandler.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._accessibilitySupport = options.get(2 /* accessibilitySupport */);\r\n this._accessibilityPageSize = options.get(3 /* accessibilityPageSize */);\r\n this._contentLeft = layoutInfo.contentLeft;\r\n this._contentWidth = layoutInfo.contentWidth;\r\n this._contentHeight = layoutInfo.contentHeight;\r\n this._fontInfo = options.get(32 /* fontInfo */);\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._emptySelectionClipboard = options.get(24 /* emptySelectionClipboard */);\r\n this._copyWithSyntaxHighlighting = options.get(14 /* copyWithSyntaxHighlighting */);\r\n this.textArea.setAttribute('aria-label', this._getAriaLabel(options));\r\n if (platform.isWeb && e.hasChanged(65 /* readOnly */)) {\r\n if (options.get(65 /* readOnly */)) {\r\n this.textArea.setAttribute('readonly', 'true');\r\n }\r\n else {\r\n this.textArea.removeAttribute('readonly');\r\n }\r\n }\r\n if (e.hasChanged(2 /* accessibilitySupport */)) {\r\n this._textAreaInput.writeScreenReaderContent('strategy changed');\r\n }\r\n return true;\r\n };\r\n TextAreaHandler.prototype.onCursorStateChanged = function (e) {\r\n this._selections = e.selections.slice(0);\r\n this._textAreaInput.writeScreenReaderContent('selection changed');\r\n return true;\r\n };\r\n TextAreaHandler.prototype.onDecorationsChanged = function (e) {\r\n // true for inline decorations that can end up relayouting text\r\n return true;\r\n };\r\n TextAreaHandler.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n TextAreaHandler.prototype.onLinesChanged = function (e) {\r\n return true;\r\n };\r\n TextAreaHandler.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n TextAreaHandler.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n TextAreaHandler.prototype.onScrollChanged = function (e) {\r\n this._scrollLeft = e.scrollLeft;\r\n this._scrollTop = e.scrollTop;\r\n return true;\r\n };\r\n TextAreaHandler.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // --- end event handlers\r\n // --- begin view API\r\n TextAreaHandler.prototype.isFocused = function () {\r\n return this._textAreaInput.isFocused();\r\n };\r\n TextAreaHandler.prototype.focusTextArea = function () {\r\n this._textAreaInput.focusTextArea();\r\n };\r\n TextAreaHandler.prototype.getLastRenderData = function () {\r\n return this._lastRenderPosition;\r\n };\r\n TextAreaHandler.prototype.prepareRender = function (ctx) {\r\n this._primaryCursorPosition = new Position(this._selections[0].positionLineNumber, this._selections[0].positionColumn);\r\n this._primaryCursorVisibleRange = ctx.visibleRangeForPosition(this._primaryCursorPosition);\r\n };\r\n TextAreaHandler.prototype.render = function (ctx) {\r\n this._textAreaInput.writeScreenReaderContent('render');\r\n this._render();\r\n };\r\n TextAreaHandler.prototype._render = function () {\r\n if (this._visibleTextArea) {\r\n // The text area is visible for composition reasons\r\n this._renderInsideEditor(null, this._visibleTextArea.top - this._scrollTop, this._contentLeft + this._visibleTextArea.left - this._scrollLeft, this._visibleTextArea.width, this._lineHeight);\r\n return;\r\n }\r\n if (!this._primaryCursorVisibleRange) {\r\n // The primary cursor is outside the viewport => place textarea to the top left\r\n this._renderAtTopLeft();\r\n return;\r\n }\r\n var left = this._contentLeft + this._primaryCursorVisibleRange.left - this._scrollLeft;\r\n if (left < this._contentLeft || left > this._contentLeft + this._contentWidth) {\r\n // cursor is outside the viewport\r\n this._renderAtTopLeft();\r\n return;\r\n }\r\n var top = this._context.viewLayout.getVerticalOffsetForLineNumber(this._selections[0].positionLineNumber) - this._scrollTop;\r\n if (top < 0 || top > this._contentHeight) {\r\n // cursor is outside the viewport\r\n this._renderAtTopLeft();\r\n return;\r\n }\r\n // The primary cursor is in the viewport (at least vertically) => place textarea on the cursor\r\n if (platform.isMacintosh) {\r\n // For the popup emoji input, we will make the text area as high as the line height\r\n // We will also make the fontSize and lineHeight the correct dimensions to help with the placement of these pickers\r\n this._renderInsideEditor(this._primaryCursorPosition, top, left, canUseZeroSizeTextarea ? 0 : 1, this._lineHeight);\r\n return;\r\n }\r\n this._renderInsideEditor(this._primaryCursorPosition, top, left, canUseZeroSizeTextarea ? 0 : 1, canUseZeroSizeTextarea ? 0 : 1);\r\n };\r\n TextAreaHandler.prototype._renderInsideEditor = function (renderedPosition, top, left, width, height) {\r\n this._lastRenderPosition = renderedPosition;\r\n var ta = this.textArea;\r\n var tac = this.textAreaCover;\r\n Configuration.applyFontInfo(ta, this._fontInfo);\r\n ta.setTop(top);\r\n ta.setLeft(left);\r\n ta.setWidth(width);\r\n ta.setHeight(height);\r\n tac.setTop(0);\r\n tac.setLeft(0);\r\n tac.setWidth(0);\r\n tac.setHeight(0);\r\n };\r\n TextAreaHandler.prototype._renderAtTopLeft = function () {\r\n this._lastRenderPosition = null;\r\n var ta = this.textArea;\r\n var tac = this.textAreaCover;\r\n Configuration.applyFontInfo(ta, this._fontInfo);\r\n ta.setTop(0);\r\n ta.setLeft(0);\r\n tac.setTop(0);\r\n tac.setLeft(0);\r\n if (canUseZeroSizeTextarea) {\r\n ta.setWidth(0);\r\n ta.setHeight(0);\r\n tac.setWidth(0);\r\n tac.setHeight(0);\r\n return;\r\n }\r\n // (in WebKit the textarea is 1px by 1px because it cannot handle input to a 0x0 textarea)\r\n // specifically, when doing Korean IME, setting the textarea to 0x0 breaks IME badly.\r\n ta.setWidth(1);\r\n ta.setHeight(1);\r\n tac.setWidth(1);\r\n tac.setHeight(1);\r\n var options = this._context.configuration.options;\r\n if (options.get(38 /* glyphMargin */)) {\r\n tac.setClassName('monaco-editor-background textAreaCover ' + Margin.OUTER_CLASS_NAME);\r\n }\r\n else {\r\n if (options.get(48 /* lineNumbers */).renderType !== 0 /* Off */) {\r\n tac.setClassName('monaco-editor-background textAreaCover ' + LineNumbersOverlay.CLASS_NAME);\r\n }\r\n else {\r\n tac.setClassName('monaco-editor-background textAreaCover');\r\n }\r\n }\r\n };\r\n return TextAreaHandler;\r\n}(ViewPart));\r\nexport { TextAreaHandler };\r\nfunction measureText(text, fontInfo) {\r\n // adjust width by its size\r\n var canvasElem = document.createElement('canvas');\r\n var context = canvasElem.getContext('2d');\r\n context.font = createFontString(fontInfo);\r\n var metrics = context.measureText(text);\r\n if (browser.isFirefox) {\r\n return metrics.width + 2; // +2 for Japanese...\r\n }\r\n else {\r\n return metrics.width;\r\n }\r\n}\r\nfunction createFontString(bareFontInfo) {\r\n return doCreateFontString('normal', bareFontInfo.fontWeight, bareFontInfo.fontSize, bareFontInfo.lineHeight, bareFontInfo.fontFamily);\r\n}\r\nfunction doCreateFontString(fontStyle, fontWeight, fontSize, lineHeight, fontFamily) {\r\n // The full font syntax is:\r\n // style | variant | weight | stretch | size/line-height | fontFamily\r\n // (https://developer.mozilla.org/en-US/docs/Web/CSS/font)\r\n // But it appears Edge and IE11 cannot properly parse `stretch`.\r\n return fontStyle + \" normal \" + fontWeight + \" \" + fontSize + \"px / \" + lineHeight + \"px \" + fontFamily;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { CursorColumns, SingleCursorState } from './cursorCommon.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nvar ColumnSelection = /** @class */ (function () {\r\n function ColumnSelection() {\r\n }\r\n ColumnSelection.columnSelect = function (config, model, fromLineNumber, fromVisibleColumn, toLineNumber, toVisibleColumn) {\r\n var lineCount = Math.abs(toLineNumber - fromLineNumber) + 1;\r\n var reversed = (fromLineNumber > toLineNumber);\r\n var isRTL = (fromVisibleColumn > toVisibleColumn);\r\n var isLTR = (fromVisibleColumn < toVisibleColumn);\r\n var result = [];\r\n // console.log(`fromVisibleColumn: ${fromVisibleColumn}, toVisibleColumn: ${toVisibleColumn}`);\r\n for (var i = 0; i < lineCount; i++) {\r\n var lineNumber = fromLineNumber + (reversed ? -i : i);\r\n var startColumn = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, fromVisibleColumn);\r\n var endColumn = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, toVisibleColumn);\r\n var visibleStartColumn = CursorColumns.visibleColumnFromColumn2(config, model, new Position(lineNumber, startColumn));\r\n var visibleEndColumn = CursorColumns.visibleColumnFromColumn2(config, model, new Position(lineNumber, endColumn));\r\n // console.log(`lineNumber: ${lineNumber}: visibleStartColumn: ${visibleStartColumn}, visibleEndColumn: ${visibleEndColumn}`);\r\n if (isLTR) {\r\n if (visibleStartColumn > toVisibleColumn) {\r\n continue;\r\n }\r\n if (visibleEndColumn < fromVisibleColumn) {\r\n continue;\r\n }\r\n }\r\n if (isRTL) {\r\n if (visibleEndColumn > fromVisibleColumn) {\r\n continue;\r\n }\r\n if (visibleStartColumn < toVisibleColumn) {\r\n continue;\r\n }\r\n }\r\n result.push(new SingleCursorState(new Range(lineNumber, startColumn, lineNumber, startColumn), 0, new Position(lineNumber, endColumn), 0));\r\n }\r\n if (result.length === 0) {\r\n // We are after all the lines, so add cursor at the end of each line\r\n for (var i = 0; i < lineCount; i++) {\r\n var lineNumber = fromLineNumber + (reversed ? -i : i);\r\n var maxColumn = model.getLineMaxColumn(lineNumber);\r\n result.push(new SingleCursorState(new Range(lineNumber, maxColumn, lineNumber, maxColumn), 0, new Position(lineNumber, maxColumn), 0));\r\n }\r\n }\r\n return {\r\n viewStates: result,\r\n reversed: reversed,\r\n fromLineNumber: fromLineNumber,\r\n fromVisualColumn: fromVisibleColumn,\r\n toLineNumber: toLineNumber,\r\n toVisualColumn: toVisibleColumn\r\n };\r\n };\r\n ColumnSelection.columnSelectLeft = function (config, model, prevColumnSelectData) {\r\n var toViewVisualColumn = prevColumnSelectData.toViewVisualColumn;\r\n if (toViewVisualColumn > 1) {\r\n toViewVisualColumn--;\r\n }\r\n return ColumnSelection.columnSelect(config, model, prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.fromViewVisualColumn, prevColumnSelectData.toViewLineNumber, toViewVisualColumn);\r\n };\r\n ColumnSelection.columnSelectRight = function (config, model, prevColumnSelectData) {\r\n var maxVisualViewColumn = 0;\r\n var minViewLineNumber = Math.min(prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.toViewLineNumber);\r\n var maxViewLineNumber = Math.max(prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.toViewLineNumber);\r\n for (var lineNumber = minViewLineNumber; lineNumber <= maxViewLineNumber; lineNumber++) {\r\n var lineMaxViewColumn = model.getLineMaxColumn(lineNumber);\r\n var lineMaxVisualViewColumn = CursorColumns.visibleColumnFromColumn2(config, model, new Position(lineNumber, lineMaxViewColumn));\r\n maxVisualViewColumn = Math.max(maxVisualViewColumn, lineMaxVisualViewColumn);\r\n }\r\n var toViewVisualColumn = prevColumnSelectData.toViewVisualColumn;\r\n if (toViewVisualColumn < maxVisualViewColumn) {\r\n toViewVisualColumn++;\r\n }\r\n return this.columnSelect(config, model, prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.fromViewVisualColumn, prevColumnSelectData.toViewLineNumber, toViewVisualColumn);\r\n };\r\n ColumnSelection.columnSelectUp = function (config, model, prevColumnSelectData, isPaged) {\r\n var linesCount = isPaged ? config.pageSize : 1;\r\n var toViewLineNumber = Math.max(1, prevColumnSelectData.toViewLineNumber - linesCount);\r\n return this.columnSelect(config, model, prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.fromViewVisualColumn, toViewLineNumber, prevColumnSelectData.toViewVisualColumn);\r\n };\r\n ColumnSelection.columnSelectDown = function (config, model, prevColumnSelectData, isPaged) {\r\n var linesCount = isPaged ? config.pageSize : 1;\r\n var toViewLineNumber = Math.min(model.getLineCount(), prevColumnSelectData.toViewLineNumber + linesCount);\r\n return this.columnSelect(config, model, prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.fromViewVisualColumn, toViewLineNumber, prevColumnSelectData.toViewVisualColumn);\r\n };\r\n return ColumnSelection;\r\n}());\r\nexport { ColumnSelection };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Selection } from '../core/selection.js';\r\nvar ReplaceCommand = /** @class */ (function () {\r\n function ReplaceCommand(range, text, insertsAutoWhitespace) {\r\n if (insertsAutoWhitespace === void 0) { insertsAutoWhitespace = false; }\r\n this._range = range;\r\n this._text = text;\r\n this.insertsAutoWhitespace = insertsAutoWhitespace;\r\n }\r\n ReplaceCommand.prototype.getEditOperations = function (model, builder) {\r\n builder.addTrackedEditOperation(this._range, this._text);\r\n };\r\n ReplaceCommand.prototype.computeCursorState = function (model, helper) {\r\n var inverseEditOperations = helper.getInverseEditOperations();\r\n var srcRange = inverseEditOperations[0].range;\r\n return new Selection(srcRange.endLineNumber, srcRange.endColumn, srcRange.endLineNumber, srcRange.endColumn);\r\n };\r\n return ReplaceCommand;\r\n}());\r\nexport { ReplaceCommand };\r\nvar ReplaceCommandThatSelectsText = /** @class */ (function () {\r\n function ReplaceCommandThatSelectsText(range, text) {\r\n this._range = range;\r\n this._text = text;\r\n }\r\n ReplaceCommandThatSelectsText.prototype.getEditOperations = function (model, builder) {\r\n builder.addTrackedEditOperation(this._range, this._text);\r\n };\r\n ReplaceCommandThatSelectsText.prototype.computeCursorState = function (model, helper) {\r\n var inverseEditOperations = helper.getInverseEditOperations();\r\n var srcRange = inverseEditOperations[0].range;\r\n return new Selection(srcRange.startLineNumber, srcRange.startColumn, srcRange.endLineNumber, srcRange.endColumn);\r\n };\r\n return ReplaceCommandThatSelectsText;\r\n}());\r\nexport { ReplaceCommandThatSelectsText };\r\nvar ReplaceCommandWithoutChangingPosition = /** @class */ (function () {\r\n function ReplaceCommandWithoutChangingPosition(range, text, insertsAutoWhitespace) {\r\n if (insertsAutoWhitespace === void 0) { insertsAutoWhitespace = false; }\r\n this._range = range;\r\n this._text = text;\r\n this.insertsAutoWhitespace = insertsAutoWhitespace;\r\n }\r\n ReplaceCommandWithoutChangingPosition.prototype.getEditOperations = function (model, builder) {\r\n builder.addTrackedEditOperation(this._range, this._text);\r\n };\r\n ReplaceCommandWithoutChangingPosition.prototype.computeCursorState = function (model, helper) {\r\n var inverseEditOperations = helper.getInverseEditOperations();\r\n var srcRange = inverseEditOperations[0].range;\r\n return new Selection(srcRange.startLineNumber, srcRange.startColumn, srcRange.startLineNumber, srcRange.startColumn);\r\n };\r\n return ReplaceCommandWithoutChangingPosition;\r\n}());\r\nexport { ReplaceCommandWithoutChangingPosition };\r\nvar ReplaceCommandWithOffsetCursorState = /** @class */ (function () {\r\n function ReplaceCommandWithOffsetCursorState(range, text, lineNumberDeltaOffset, columnDeltaOffset, insertsAutoWhitespace) {\r\n if (insertsAutoWhitespace === void 0) { insertsAutoWhitespace = false; }\r\n this._range = range;\r\n this._text = text;\r\n this._columnDeltaOffset = columnDeltaOffset;\r\n this._lineNumberDeltaOffset = lineNumberDeltaOffset;\r\n this.insertsAutoWhitespace = insertsAutoWhitespace;\r\n }\r\n ReplaceCommandWithOffsetCursorState.prototype.getEditOperations = function (model, builder) {\r\n builder.addTrackedEditOperation(this._range, this._text);\r\n };\r\n ReplaceCommandWithOffsetCursorState.prototype.computeCursorState = function (model, helper) {\r\n var inverseEditOperations = helper.getInverseEditOperations();\r\n var srcRange = inverseEditOperations[0].range;\r\n return new Selection(srcRange.endLineNumber + this._lineNumberDeltaOffset, srcRange.endColumn + this._columnDeltaOffset, srcRange.endLineNumber + this._lineNumberDeltaOffset, srcRange.endColumn + this._columnDeltaOffset);\r\n };\r\n return ReplaceCommandWithOffsetCursorState;\r\n}());\r\nexport { ReplaceCommandWithOffsetCursorState };\r\nvar ReplaceCommandThatPreservesSelection = /** @class */ (function () {\r\n function ReplaceCommandThatPreservesSelection(editRange, text, initialSelection) {\r\n this._range = editRange;\r\n this._text = text;\r\n this._initialSelection = initialSelection;\r\n this._selectionId = null;\r\n }\r\n ReplaceCommandThatPreservesSelection.prototype.getEditOperations = function (model, builder) {\r\n builder.addEditOperation(this._range, this._text);\r\n this._selectionId = builder.trackSelection(this._initialSelection);\r\n };\r\n ReplaceCommandThatPreservesSelection.prototype.computeCursorState = function (model, helper) {\r\n return helper.getTrackedSelection(this._selectionId);\r\n };\r\n return ReplaceCommandThatPreservesSelection;\r\n}());\r\nexport { ReplaceCommandThatPreservesSelection };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { CursorColumns, SingleCursorState } from './cursorCommon.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nvar CursorPosition = /** @class */ (function () {\r\n function CursorPosition(lineNumber, column, leftoverVisibleColumns) {\r\n this.lineNumber = lineNumber;\r\n this.column = column;\r\n this.leftoverVisibleColumns = leftoverVisibleColumns;\r\n }\r\n return CursorPosition;\r\n}());\r\nexport { CursorPosition };\r\nvar MoveOperations = /** @class */ (function () {\r\n function MoveOperations() {\r\n }\r\n MoveOperations.leftPosition = function (model, lineNumber, column) {\r\n if (column > model.getLineMinColumn(lineNumber)) {\r\n column = column - strings.prevCharLength(model.getLineContent(lineNumber), column - 1);\r\n }\r\n else if (lineNumber > 1) {\r\n lineNumber = lineNumber - 1;\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n return new Position(lineNumber, column);\r\n };\r\n MoveOperations.left = function (config, model, lineNumber, column) {\r\n var pos = MoveOperations.leftPosition(model, lineNumber, column);\r\n return new CursorPosition(pos.lineNumber, pos.column, 0);\r\n };\r\n MoveOperations.moveLeft = function (config, model, cursor, inSelectionMode, noOfColumns) {\r\n var lineNumber, column;\r\n if (cursor.hasSelection() && !inSelectionMode) {\r\n // If we are in selection mode, move left without selection cancels selection and puts cursor at the beginning of the selection\r\n lineNumber = cursor.selection.startLineNumber;\r\n column = cursor.selection.startColumn;\r\n }\r\n else {\r\n var r = MoveOperations.left(config, model, cursor.position.lineNumber, cursor.position.column - (noOfColumns - 1));\r\n lineNumber = r.lineNumber;\r\n column = r.column;\r\n }\r\n return cursor.move(inSelectionMode, lineNumber, column, 0);\r\n };\r\n MoveOperations.rightPosition = function (model, lineNumber, column) {\r\n if (column < model.getLineMaxColumn(lineNumber)) {\r\n column = column + strings.nextCharLength(model.getLineContent(lineNumber), column - 1);\r\n }\r\n else if (lineNumber < model.getLineCount()) {\r\n lineNumber = lineNumber + 1;\r\n column = model.getLineMinColumn(lineNumber);\r\n }\r\n return new Position(lineNumber, column);\r\n };\r\n MoveOperations.right = function (config, model, lineNumber, column) {\r\n var pos = MoveOperations.rightPosition(model, lineNumber, column);\r\n return new CursorPosition(pos.lineNumber, pos.column, 0);\r\n };\r\n MoveOperations.moveRight = function (config, model, cursor, inSelectionMode, noOfColumns) {\r\n var lineNumber, column;\r\n if (cursor.hasSelection() && !inSelectionMode) {\r\n // If we are in selection mode, move right without selection cancels selection and puts cursor at the end of the selection\r\n lineNumber = cursor.selection.endLineNumber;\r\n column = cursor.selection.endColumn;\r\n }\r\n else {\r\n var r = MoveOperations.right(config, model, cursor.position.lineNumber, cursor.position.column + (noOfColumns - 1));\r\n lineNumber = r.lineNumber;\r\n column = r.column;\r\n }\r\n return cursor.move(inSelectionMode, lineNumber, column, 0);\r\n };\r\n MoveOperations.down = function (config, model, lineNumber, column, leftoverVisibleColumns, count, allowMoveOnLastLine) {\r\n var currentVisibleColumn = CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize) + leftoverVisibleColumns;\r\n lineNumber = lineNumber + count;\r\n var lineCount = model.getLineCount();\r\n if (lineNumber > lineCount) {\r\n lineNumber = lineCount;\r\n if (allowMoveOnLastLine) {\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n else {\r\n column = Math.min(model.getLineMaxColumn(lineNumber), column);\r\n }\r\n }\r\n else {\r\n column = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, currentVisibleColumn);\r\n }\r\n leftoverVisibleColumns = currentVisibleColumn - CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize);\r\n return new CursorPosition(lineNumber, column, leftoverVisibleColumns);\r\n };\r\n MoveOperations.moveDown = function (config, model, cursor, inSelectionMode, linesCount) {\r\n var lineNumber, column;\r\n if (cursor.hasSelection() && !inSelectionMode) {\r\n // If we are in selection mode, move down acts relative to the end of selection\r\n lineNumber = cursor.selection.endLineNumber;\r\n column = cursor.selection.endColumn;\r\n }\r\n else {\r\n lineNumber = cursor.position.lineNumber;\r\n column = cursor.position.column;\r\n }\r\n var r = MoveOperations.down(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true);\r\n return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns);\r\n };\r\n MoveOperations.translateDown = function (config, model, cursor) {\r\n var selection = cursor.selection;\r\n var selectionStart = MoveOperations.down(config, model, selection.selectionStartLineNumber, selection.selectionStartColumn, cursor.selectionStartLeftoverVisibleColumns, 1, false);\r\n var position = MoveOperations.down(config, model, selection.positionLineNumber, selection.positionColumn, cursor.leftoverVisibleColumns, 1, false);\r\n return new SingleCursorState(new Range(selectionStart.lineNumber, selectionStart.column, selectionStart.lineNumber, selectionStart.column), selectionStart.leftoverVisibleColumns, new Position(position.lineNumber, position.column), position.leftoverVisibleColumns);\r\n };\r\n MoveOperations.up = function (config, model, lineNumber, column, leftoverVisibleColumns, count, allowMoveOnFirstLine) {\r\n var currentVisibleColumn = CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize) + leftoverVisibleColumns;\r\n lineNumber = lineNumber - count;\r\n if (lineNumber < 1) {\r\n lineNumber = 1;\r\n if (allowMoveOnFirstLine) {\r\n column = model.getLineMinColumn(lineNumber);\r\n }\r\n else {\r\n column = Math.min(model.getLineMaxColumn(lineNumber), column);\r\n }\r\n }\r\n else {\r\n column = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, currentVisibleColumn);\r\n }\r\n leftoverVisibleColumns = currentVisibleColumn - CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize);\r\n return new CursorPosition(lineNumber, column, leftoverVisibleColumns);\r\n };\r\n MoveOperations.moveUp = function (config, model, cursor, inSelectionMode, linesCount) {\r\n var lineNumber, column;\r\n if (cursor.hasSelection() && !inSelectionMode) {\r\n // If we are in selection mode, move up acts relative to the beginning of selection\r\n lineNumber = cursor.selection.startLineNumber;\r\n column = cursor.selection.startColumn;\r\n }\r\n else {\r\n lineNumber = cursor.position.lineNumber;\r\n column = cursor.position.column;\r\n }\r\n var r = MoveOperations.up(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true);\r\n return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns);\r\n };\r\n MoveOperations.translateUp = function (config, model, cursor) {\r\n var selection = cursor.selection;\r\n var selectionStart = MoveOperations.up(config, model, selection.selectionStartLineNumber, selection.selectionStartColumn, cursor.selectionStartLeftoverVisibleColumns, 1, false);\r\n var position = MoveOperations.up(config, model, selection.positionLineNumber, selection.positionColumn, cursor.leftoverVisibleColumns, 1, false);\r\n return new SingleCursorState(new Range(selectionStart.lineNumber, selectionStart.column, selectionStart.lineNumber, selectionStart.column), selectionStart.leftoverVisibleColumns, new Position(position.lineNumber, position.column), position.leftoverVisibleColumns);\r\n };\r\n MoveOperations.moveToBeginningOfLine = function (config, model, cursor, inSelectionMode) {\r\n var lineNumber = cursor.position.lineNumber;\r\n var minColumn = model.getLineMinColumn(lineNumber);\r\n var firstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(lineNumber) || minColumn;\r\n var column;\r\n var relevantColumnNumber = cursor.position.column;\r\n if (relevantColumnNumber === firstNonBlankColumn) {\r\n column = minColumn;\r\n }\r\n else {\r\n column = firstNonBlankColumn;\r\n }\r\n return cursor.move(inSelectionMode, lineNumber, column, 0);\r\n };\r\n MoveOperations.moveToEndOfLine = function (config, model, cursor, inSelectionMode) {\r\n var lineNumber = cursor.position.lineNumber;\r\n var maxColumn = model.getLineMaxColumn(lineNumber);\r\n return cursor.move(inSelectionMode, lineNumber, maxColumn, 0);\r\n };\r\n MoveOperations.moveToBeginningOfBuffer = function (config, model, cursor, inSelectionMode) {\r\n return cursor.move(inSelectionMode, 1, 1, 0);\r\n };\r\n MoveOperations.moveToEndOfBuffer = function (config, model, cursor, inSelectionMode) {\r\n var lastLineNumber = model.getLineCount();\r\n var lastColumn = model.getLineMaxColumn(lastLineNumber);\r\n return cursor.move(inSelectionMode, lastLineNumber, lastColumn, 0);\r\n };\r\n return MoveOperations;\r\n}());\r\nexport { MoveOperations };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { ReplaceCommand } from '../commands/replaceCommand.js';\r\nimport { CursorColumns, EditOperationResult, isQuote } from './cursorCommon.js';\r\nimport { MoveOperations } from './cursorMoveOperations.js';\r\nimport { Range } from '../core/range.js';\r\nvar DeleteOperations = /** @class */ (function () {\r\n function DeleteOperations() {\r\n }\r\n DeleteOperations.deleteRight = function (prevEditOperationType, config, model, selections) {\r\n var commands = [];\r\n var shouldPushStackElementBefore = (prevEditOperationType !== 3 /* DeletingRight */);\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n var deleteSelection = selection;\r\n if (deleteSelection.isEmpty()) {\r\n var position = selection.getPosition();\r\n var rightOfPosition = MoveOperations.right(config, model, position.lineNumber, position.column);\r\n deleteSelection = new Range(rightOfPosition.lineNumber, rightOfPosition.column, position.lineNumber, position.column);\r\n }\r\n if (deleteSelection.isEmpty()) {\r\n // Probably at end of file => ignore\r\n commands[i] = null;\r\n continue;\r\n }\r\n if (deleteSelection.startLineNumber !== deleteSelection.endLineNumber) {\r\n shouldPushStackElementBefore = true;\r\n }\r\n commands[i] = new ReplaceCommand(deleteSelection, '');\r\n }\r\n return [shouldPushStackElementBefore, commands];\r\n };\r\n DeleteOperations._isAutoClosingPairDelete = function (config, model, selections) {\r\n if (config.autoClosingBrackets === 'never' && config.autoClosingQuotes === 'never') {\r\n return false;\r\n }\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n var position = selection.getPosition();\r\n if (!selection.isEmpty()) {\r\n return false;\r\n }\r\n var lineText = model.getLineContent(position.lineNumber);\r\n var character = lineText[position.column - 2];\r\n var autoClosingPairCandidates = config.autoClosingPairsOpen2.get(character);\r\n if (!autoClosingPairCandidates) {\r\n return false;\r\n }\r\n if (isQuote(character)) {\r\n if (config.autoClosingQuotes === 'never') {\r\n return false;\r\n }\r\n }\r\n else {\r\n if (config.autoClosingBrackets === 'never') {\r\n return false;\r\n }\r\n }\r\n var afterCharacter = lineText[position.column - 1];\r\n var foundAutoClosingPair = false;\r\n for (var _i = 0, autoClosingPairCandidates_1 = autoClosingPairCandidates; _i < autoClosingPairCandidates_1.length; _i++) {\r\n var autoClosingPairCandidate = autoClosingPairCandidates_1[_i];\r\n if (autoClosingPairCandidate.open === character && autoClosingPairCandidate.close === afterCharacter) {\r\n foundAutoClosingPair = true;\r\n }\r\n }\r\n if (!foundAutoClosingPair) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n DeleteOperations._runAutoClosingPairDelete = function (config, model, selections) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var position = selections[i].getPosition();\r\n var deleteSelection = new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column + 1);\r\n commands[i] = new ReplaceCommand(deleteSelection, '');\r\n }\r\n return [true, commands];\r\n };\r\n DeleteOperations.deleteLeft = function (prevEditOperationType, config, model, selections) {\r\n if (this._isAutoClosingPairDelete(config, model, selections)) {\r\n return this._runAutoClosingPairDelete(config, model, selections);\r\n }\r\n var commands = [];\r\n var shouldPushStackElementBefore = (prevEditOperationType !== 2 /* DeletingLeft */);\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n var deleteSelection = selection;\r\n if (deleteSelection.isEmpty()) {\r\n var position = selection.getPosition();\r\n if (config.useTabStops && position.column > 1) {\r\n var lineContent = model.getLineContent(position.lineNumber);\r\n var firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\r\n var lastIndentationColumn = (firstNonWhitespaceIndex === -1\r\n ? /* entire string is whitespace */ lineContent.length + 1\r\n : firstNonWhitespaceIndex + 1);\r\n if (position.column <= lastIndentationColumn) {\r\n var fromVisibleColumn = CursorColumns.visibleColumnFromColumn2(config, model, position);\r\n var toVisibleColumn = CursorColumns.prevIndentTabStop(fromVisibleColumn, config.indentSize);\r\n var toColumn = CursorColumns.columnFromVisibleColumn2(config, model, position.lineNumber, toVisibleColumn);\r\n deleteSelection = new Range(position.lineNumber, toColumn, position.lineNumber, position.column);\r\n }\r\n else {\r\n deleteSelection = new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column);\r\n }\r\n }\r\n else {\r\n var leftOfPosition = MoveOperations.left(config, model, position.lineNumber, position.column);\r\n deleteSelection = new Range(leftOfPosition.lineNumber, leftOfPosition.column, position.lineNumber, position.column);\r\n }\r\n }\r\n if (deleteSelection.isEmpty()) {\r\n // Probably at beginning of file => ignore\r\n commands[i] = null;\r\n continue;\r\n }\r\n if (deleteSelection.startLineNumber !== deleteSelection.endLineNumber) {\r\n shouldPushStackElementBefore = true;\r\n }\r\n commands[i] = new ReplaceCommand(deleteSelection, '');\r\n }\r\n return [shouldPushStackElementBefore, commands];\r\n };\r\n DeleteOperations.cut = function (config, model, selections) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n if (selection.isEmpty()) {\r\n if (config.emptySelectionClipboard) {\r\n // This is a full line cut\r\n var position = selection.getPosition();\r\n var startLineNumber = void 0, startColumn = void 0, endLineNumber = void 0, endColumn = void 0;\r\n if (position.lineNumber < model.getLineCount()) {\r\n // Cutting a line in the middle of the model\r\n startLineNumber = position.lineNumber;\r\n startColumn = 1;\r\n endLineNumber = position.lineNumber + 1;\r\n endColumn = 1;\r\n }\r\n else if (position.lineNumber > 1) {\r\n // Cutting the last line & there are more than 1 lines in the model\r\n startLineNumber = position.lineNumber - 1;\r\n startColumn = model.getLineMaxColumn(position.lineNumber - 1);\r\n endLineNumber = position.lineNumber;\r\n endColumn = model.getLineMaxColumn(position.lineNumber);\r\n }\r\n else {\r\n // Cutting the single line that the model contains\r\n startLineNumber = position.lineNumber;\r\n startColumn = 1;\r\n endLineNumber = position.lineNumber;\r\n endColumn = model.getLineMaxColumn(position.lineNumber);\r\n }\r\n var deleteSelection = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\r\n if (!deleteSelection.isEmpty()) {\r\n commands[i] = new ReplaceCommand(deleteSelection, '');\r\n }\r\n else {\r\n commands[i] = null;\r\n }\r\n }\r\n else {\r\n // Cannot cut empty selection\r\n commands[i] = null;\r\n }\r\n }\r\n else {\r\n commands[i] = new ReplaceCommand(selection, '');\r\n }\r\n }\r\n return new EditOperationResult(0 /* Other */, commands, {\r\n shouldPushStackElementBefore: true,\r\n shouldPushStackElementAfter: true\r\n });\r\n };\r\n return DeleteOperations;\r\n}());\r\nexport { DeleteOperations };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { SingleCursorState } from './cursorCommon.js';\r\nimport { getMapForWordSeparators } from './wordCharacterClassifier.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nvar WordOperations = /** @class */ (function () {\r\n function WordOperations() {\r\n }\r\n WordOperations._createWord = function (lineContent, wordType, nextCharClass, start, end) {\r\n // console.log('WORD ==> ' + start + ' => ' + end + ':::: <<<' + lineContent.substring(start, end) + '>>>');\r\n return { start: start, end: end, wordType: wordType, nextCharClass: nextCharClass };\r\n };\r\n WordOperations._findPreviousWordOnLine = function (wordSeparators, model, position) {\r\n var lineContent = model.getLineContent(position.lineNumber);\r\n return this._doFindPreviousWordOnLine(lineContent, wordSeparators, position);\r\n };\r\n WordOperations._doFindPreviousWordOnLine = function (lineContent, wordSeparators, position) {\r\n var wordType = 0 /* None */;\r\n for (var chIndex = position.column - 2; chIndex >= 0; chIndex--) {\r\n var chCode = lineContent.charCodeAt(chIndex);\r\n var chClass = wordSeparators.get(chCode);\r\n if (chClass === 0 /* Regular */) {\r\n if (wordType === 2 /* Separator */) {\r\n return this._createWord(lineContent, wordType, chClass, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\r\n }\r\n wordType = 1 /* Regular */;\r\n }\r\n else if (chClass === 2 /* WordSeparator */) {\r\n if (wordType === 1 /* Regular */) {\r\n return this._createWord(lineContent, wordType, chClass, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\r\n }\r\n wordType = 2 /* Separator */;\r\n }\r\n else if (chClass === 1 /* Whitespace */) {\r\n if (wordType !== 0 /* None */) {\r\n return this._createWord(lineContent, wordType, chClass, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\r\n }\r\n }\r\n }\r\n if (wordType !== 0 /* None */) {\r\n return this._createWord(lineContent, wordType, 1 /* Whitespace */, 0, this._findEndOfWord(lineContent, wordSeparators, wordType, 0));\r\n }\r\n return null;\r\n };\r\n WordOperations._findEndOfWord = function (lineContent, wordSeparators, wordType, startIndex) {\r\n var len = lineContent.length;\r\n for (var chIndex = startIndex; chIndex < len; chIndex++) {\r\n var chCode = lineContent.charCodeAt(chIndex);\r\n var chClass = wordSeparators.get(chCode);\r\n if (chClass === 1 /* Whitespace */) {\r\n return chIndex;\r\n }\r\n if (wordType === 1 /* Regular */ && chClass === 2 /* WordSeparator */) {\r\n return chIndex;\r\n }\r\n if (wordType === 2 /* Separator */ && chClass === 0 /* Regular */) {\r\n return chIndex;\r\n }\r\n }\r\n return len;\r\n };\r\n WordOperations._findNextWordOnLine = function (wordSeparators, model, position) {\r\n var lineContent = model.getLineContent(position.lineNumber);\r\n return this._doFindNextWordOnLine(lineContent, wordSeparators, position);\r\n };\r\n WordOperations._doFindNextWordOnLine = function (lineContent, wordSeparators, position) {\r\n var wordType = 0 /* None */;\r\n var len = lineContent.length;\r\n for (var chIndex = position.column - 1; chIndex < len; chIndex++) {\r\n var chCode = lineContent.charCodeAt(chIndex);\r\n var chClass = wordSeparators.get(chCode);\r\n if (chClass === 0 /* Regular */) {\r\n if (wordType === 2 /* Separator */) {\r\n return this._createWord(lineContent, wordType, chClass, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\r\n }\r\n wordType = 1 /* Regular */;\r\n }\r\n else if (chClass === 2 /* WordSeparator */) {\r\n if (wordType === 1 /* Regular */) {\r\n return this._createWord(lineContent, wordType, chClass, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\r\n }\r\n wordType = 2 /* Separator */;\r\n }\r\n else if (chClass === 1 /* Whitespace */) {\r\n if (wordType !== 0 /* None */) {\r\n return this._createWord(lineContent, wordType, chClass, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\r\n }\r\n }\r\n }\r\n if (wordType !== 0 /* None */) {\r\n return this._createWord(lineContent, wordType, 1 /* Whitespace */, this._findStartOfWord(lineContent, wordSeparators, wordType, len - 1), len);\r\n }\r\n return null;\r\n };\r\n WordOperations._findStartOfWord = function (lineContent, wordSeparators, wordType, startIndex) {\r\n for (var chIndex = startIndex; chIndex >= 0; chIndex--) {\r\n var chCode = lineContent.charCodeAt(chIndex);\r\n var chClass = wordSeparators.get(chCode);\r\n if (chClass === 1 /* Whitespace */) {\r\n return chIndex + 1;\r\n }\r\n if (wordType === 1 /* Regular */ && chClass === 2 /* WordSeparator */) {\r\n return chIndex + 1;\r\n }\r\n if (wordType === 2 /* Separator */ && chClass === 0 /* Regular */) {\r\n return chIndex + 1;\r\n }\r\n }\r\n return 0;\r\n };\r\n WordOperations.moveWordLeft = function (wordSeparators, model, position, wordNavigationType) {\r\n var lineNumber = position.lineNumber;\r\n var column = position.column;\r\n var movedToPreviousLine = false;\r\n if (column === 1) {\r\n if (lineNumber > 1) {\r\n movedToPreviousLine = true;\r\n lineNumber = lineNumber - 1;\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n }\r\n var prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, column));\r\n if (wordNavigationType === 0 /* WordStart */) {\r\n if (prevWordOnLine && !movedToPreviousLine) {\r\n // Special case for Visual Studio compatibility:\r\n // when starting in the trim whitespace at the end of a line,\r\n // go to the end of the last word\r\n var lastWhitespaceColumn = model.getLineLastNonWhitespaceColumn(lineNumber);\r\n if (lastWhitespaceColumn < column) {\r\n return new Position(lineNumber, prevWordOnLine.end + 1);\r\n }\r\n }\r\n return new Position(lineNumber, prevWordOnLine ? prevWordOnLine.start + 1 : 1);\r\n }\r\n if (wordNavigationType === 1 /* WordStartFast */) {\r\n if (prevWordOnLine\r\n && prevWordOnLine.wordType === 2 /* Separator */\r\n && prevWordOnLine.end - prevWordOnLine.start === 1\r\n && prevWordOnLine.nextCharClass === 0 /* Regular */) {\r\n // Skip over a word made up of one single separator and followed by a regular character\r\n prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\r\n }\r\n return new Position(lineNumber, prevWordOnLine ? prevWordOnLine.start + 1 : 1);\r\n }\r\n if (wordNavigationType === 3 /* WordAccessibility */) {\r\n while (prevWordOnLine\r\n && prevWordOnLine.wordType === 2 /* Separator */) {\r\n // Skip over words made up of only separators\r\n prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\r\n }\r\n return new Position(lineNumber, prevWordOnLine ? prevWordOnLine.start + 1 : 1);\r\n }\r\n // We are stopping at the ending of words\r\n if (prevWordOnLine && column <= prevWordOnLine.end + 1) {\r\n prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\r\n }\r\n return new Position(lineNumber, prevWordOnLine ? prevWordOnLine.end + 1 : 1);\r\n };\r\n WordOperations._moveWordPartLeft = function (model, position) {\r\n var lineNumber = position.lineNumber;\r\n var maxColumn = model.getLineMaxColumn(lineNumber);\r\n if (position.column === 1) {\r\n return (lineNumber > 1 ? new Position(lineNumber - 1, model.getLineMaxColumn(lineNumber - 1)) : position);\r\n }\r\n var lineContent = model.getLineContent(lineNumber);\r\n for (var column = position.column - 1; column > 1; column--) {\r\n var left = lineContent.charCodeAt(column - 2);\r\n var right = lineContent.charCodeAt(column - 1);\r\n if (left !== 95 /* Underline */ && right === 95 /* Underline */) {\r\n // snake_case_variables\r\n return new Position(lineNumber, column);\r\n }\r\n if (strings.isLowerAsciiLetter(left) && strings.isUpperAsciiLetter(right)) {\r\n // camelCaseVariables\r\n return new Position(lineNumber, column);\r\n }\r\n if (strings.isUpperAsciiLetter(left) && strings.isUpperAsciiLetter(right)) {\r\n // thisIsACamelCaseWithOneLetterWords\r\n if (column + 1 < maxColumn) {\r\n var rightRight = lineContent.charCodeAt(column);\r\n if (strings.isLowerAsciiLetter(rightRight)) {\r\n return new Position(lineNumber, column);\r\n }\r\n }\r\n }\r\n }\r\n return new Position(lineNumber, 1);\r\n };\r\n WordOperations.moveWordRight = function (wordSeparators, model, position, wordNavigationType) {\r\n var lineNumber = position.lineNumber;\r\n var column = position.column;\r\n var movedDown = false;\r\n if (column === model.getLineMaxColumn(lineNumber)) {\r\n if (lineNumber < model.getLineCount()) {\r\n movedDown = true;\r\n lineNumber = lineNumber + 1;\r\n column = 1;\r\n }\r\n }\r\n var nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, column));\r\n if (wordNavigationType === 2 /* WordEnd */) {\r\n if (nextWordOnLine && nextWordOnLine.wordType === 2 /* Separator */) {\r\n if (nextWordOnLine.end - nextWordOnLine.start === 1 && nextWordOnLine.nextCharClass === 0 /* Regular */) {\r\n // Skip over a word made up of one single separator and followed by a regular character\r\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\r\n }\r\n }\r\n if (nextWordOnLine) {\r\n column = nextWordOnLine.end + 1;\r\n }\r\n else {\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n }\r\n else if (wordNavigationType === 3 /* WordAccessibility */) {\r\n if (movedDown) {\r\n // If we move to the next line, pretend that the cursor is right before the first character.\r\n // This is needed when the first word starts right at the first character - and in order not to miss it,\r\n // we need to start before.\r\n column = 0;\r\n }\r\n while (nextWordOnLine\r\n && (nextWordOnLine.wordType === 2 /* Separator */\r\n || nextWordOnLine.start + 1 <= column)) {\r\n // Skip over a word made up of one single separator\r\n // Also skip over word if it begins before current cursor position to ascertain we're moving forward at least 1 character.\r\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\r\n }\r\n if (nextWordOnLine) {\r\n column = nextWordOnLine.start + 1;\r\n }\r\n else {\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n }\r\n else {\r\n if (nextWordOnLine && !movedDown && column >= nextWordOnLine.start + 1) {\r\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\r\n }\r\n if (nextWordOnLine) {\r\n column = nextWordOnLine.start + 1;\r\n }\r\n else {\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n }\r\n return new Position(lineNumber, column);\r\n };\r\n WordOperations._moveWordPartRight = function (model, position) {\r\n var lineNumber = position.lineNumber;\r\n var maxColumn = model.getLineMaxColumn(lineNumber);\r\n if (position.column === maxColumn) {\r\n return (lineNumber < model.getLineCount() ? new Position(lineNumber + 1, 1) : position);\r\n }\r\n var lineContent = model.getLineContent(lineNumber);\r\n for (var column = position.column + 1; column < maxColumn; column++) {\r\n var left = lineContent.charCodeAt(column - 2);\r\n var right = lineContent.charCodeAt(column - 1);\r\n if (left === 95 /* Underline */ && right !== 95 /* Underline */) {\r\n // snake_case_variables\r\n return new Position(lineNumber, column);\r\n }\r\n if (strings.isLowerAsciiLetter(left) && strings.isUpperAsciiLetter(right)) {\r\n // camelCaseVariables\r\n return new Position(lineNumber, column);\r\n }\r\n if (strings.isUpperAsciiLetter(left) && strings.isUpperAsciiLetter(right)) {\r\n // thisIsACamelCaseWithOneLetterWords\r\n if (column + 1 < maxColumn) {\r\n var rightRight = lineContent.charCodeAt(column);\r\n if (strings.isLowerAsciiLetter(rightRight)) {\r\n return new Position(lineNumber, column);\r\n }\r\n }\r\n }\r\n }\r\n return new Position(lineNumber, maxColumn);\r\n };\r\n WordOperations._deleteWordLeftWhitespace = function (model, position) {\r\n var lineContent = model.getLineContent(position.lineNumber);\r\n var startIndex = position.column - 2;\r\n var lastNonWhitespace = strings.lastNonWhitespaceIndex(lineContent, startIndex);\r\n if (lastNonWhitespace + 1 < startIndex) {\r\n return new Range(position.lineNumber, lastNonWhitespace + 2, position.lineNumber, position.column);\r\n }\r\n return null;\r\n };\r\n WordOperations.deleteWordLeft = function (wordSeparators, model, selection, whitespaceHeuristics, wordNavigationType) {\r\n if (!selection.isEmpty()) {\r\n return selection;\r\n }\r\n var position = new Position(selection.positionLineNumber, selection.positionColumn);\r\n var lineNumber = position.lineNumber;\r\n var column = position.column;\r\n if (lineNumber === 1 && column === 1) {\r\n // Ignore deleting at beginning of file\r\n return null;\r\n }\r\n if (whitespaceHeuristics) {\r\n var r = this._deleteWordLeftWhitespace(model, position);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n var prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\r\n if (wordNavigationType === 0 /* WordStart */) {\r\n if (prevWordOnLine) {\r\n column = prevWordOnLine.start + 1;\r\n }\r\n else {\r\n if (column > 1) {\r\n column = 1;\r\n }\r\n else {\r\n lineNumber--;\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n }\r\n }\r\n else {\r\n if (prevWordOnLine && column <= prevWordOnLine.end + 1) {\r\n prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\r\n }\r\n if (prevWordOnLine) {\r\n column = prevWordOnLine.end + 1;\r\n }\r\n else {\r\n if (column > 1) {\r\n column = 1;\r\n }\r\n else {\r\n lineNumber--;\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n }\r\n }\r\n return new Range(lineNumber, column, position.lineNumber, position.column);\r\n };\r\n WordOperations._deleteWordPartLeft = function (model, selection) {\r\n if (!selection.isEmpty()) {\r\n return selection;\r\n }\r\n var pos = selection.getPosition();\r\n var toPosition = WordOperations._moveWordPartLeft(model, pos);\r\n return new Range(pos.lineNumber, pos.column, toPosition.lineNumber, toPosition.column);\r\n };\r\n WordOperations._findFirstNonWhitespaceChar = function (str, startIndex) {\r\n var len = str.length;\r\n for (var chIndex = startIndex; chIndex < len; chIndex++) {\r\n var ch = str.charAt(chIndex);\r\n if (ch !== ' ' && ch !== '\\t') {\r\n return chIndex;\r\n }\r\n }\r\n return len;\r\n };\r\n WordOperations._deleteWordRightWhitespace = function (model, position) {\r\n var lineContent = model.getLineContent(position.lineNumber);\r\n var startIndex = position.column - 1;\r\n var firstNonWhitespace = this._findFirstNonWhitespaceChar(lineContent, startIndex);\r\n if (startIndex + 1 < firstNonWhitespace) {\r\n // bingo\r\n return new Range(position.lineNumber, position.column, position.lineNumber, firstNonWhitespace + 1);\r\n }\r\n return null;\r\n };\r\n WordOperations.deleteWordRight = function (wordSeparators, model, selection, whitespaceHeuristics, wordNavigationType) {\r\n if (!selection.isEmpty()) {\r\n return selection;\r\n }\r\n var position = new Position(selection.positionLineNumber, selection.positionColumn);\r\n var lineNumber = position.lineNumber;\r\n var column = position.column;\r\n var lineCount = model.getLineCount();\r\n var maxColumn = model.getLineMaxColumn(lineNumber);\r\n if (lineNumber === lineCount && column === maxColumn) {\r\n // Ignore deleting at end of file\r\n return null;\r\n }\r\n if (whitespaceHeuristics) {\r\n var r = this._deleteWordRightWhitespace(model, position);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n var nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, position);\r\n if (wordNavigationType === 2 /* WordEnd */) {\r\n if (nextWordOnLine) {\r\n column = nextWordOnLine.end + 1;\r\n }\r\n else {\r\n if (column < maxColumn || lineNumber === lineCount) {\r\n column = maxColumn;\r\n }\r\n else {\r\n lineNumber++;\r\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, 1));\r\n if (nextWordOnLine) {\r\n column = nextWordOnLine.start + 1;\r\n }\r\n else {\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (nextWordOnLine && column >= nextWordOnLine.start + 1) {\r\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\r\n }\r\n if (nextWordOnLine) {\r\n column = nextWordOnLine.start + 1;\r\n }\r\n else {\r\n if (column < maxColumn || lineNumber === lineCount) {\r\n column = maxColumn;\r\n }\r\n else {\r\n lineNumber++;\r\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, 1));\r\n if (nextWordOnLine) {\r\n column = nextWordOnLine.start + 1;\r\n }\r\n else {\r\n column = model.getLineMaxColumn(lineNumber);\r\n }\r\n }\r\n }\r\n }\r\n return new Range(lineNumber, column, position.lineNumber, position.column);\r\n };\r\n WordOperations._deleteWordPartRight = function (model, selection) {\r\n if (!selection.isEmpty()) {\r\n return selection;\r\n }\r\n var pos = selection.getPosition();\r\n var toPosition = WordOperations._moveWordPartRight(model, pos);\r\n return new Range(pos.lineNumber, pos.column, toPosition.lineNumber, toPosition.column);\r\n };\r\n WordOperations.word = function (config, model, cursor, inSelectionMode, position) {\r\n var wordSeparators = getMapForWordSeparators(config.wordSeparators);\r\n var prevWord = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\r\n var nextWord = WordOperations._findNextWordOnLine(wordSeparators, model, position);\r\n if (!inSelectionMode) {\r\n // Entering word selection for the first time\r\n var startColumn_1;\r\n var endColumn_1;\r\n if (prevWord && prevWord.wordType === 1 /* Regular */ && prevWord.start <= position.column - 1 && position.column - 1 <= prevWord.end) {\r\n // isTouchingPrevWord\r\n startColumn_1 = prevWord.start + 1;\r\n endColumn_1 = prevWord.end + 1;\r\n }\r\n else if (nextWord && nextWord.wordType === 1 /* Regular */ && nextWord.start <= position.column - 1 && position.column - 1 <= nextWord.end) {\r\n // isTouchingNextWord\r\n startColumn_1 = nextWord.start + 1;\r\n endColumn_1 = nextWord.end + 1;\r\n }\r\n else {\r\n if (prevWord) {\r\n startColumn_1 = prevWord.end + 1;\r\n }\r\n else {\r\n startColumn_1 = 1;\r\n }\r\n if (nextWord) {\r\n endColumn_1 = nextWord.start + 1;\r\n }\r\n else {\r\n endColumn_1 = model.getLineMaxColumn(position.lineNumber);\r\n }\r\n }\r\n return new SingleCursorState(new Range(position.lineNumber, startColumn_1, position.lineNumber, endColumn_1), 0, new Position(position.lineNumber, endColumn_1), 0);\r\n }\r\n var startColumn;\r\n var endColumn;\r\n if (prevWord && prevWord.wordType === 1 /* Regular */ && prevWord.start < position.column - 1 && position.column - 1 < prevWord.end) {\r\n // isInsidePrevWord\r\n startColumn = prevWord.start + 1;\r\n endColumn = prevWord.end + 1;\r\n }\r\n else if (nextWord && nextWord.wordType === 1 /* Regular */ && nextWord.start < position.column - 1 && position.column - 1 < nextWord.end) {\r\n // isInsideNextWord\r\n startColumn = nextWord.start + 1;\r\n endColumn = nextWord.end + 1;\r\n }\r\n else {\r\n startColumn = position.column;\r\n endColumn = position.column;\r\n }\r\n var lineNumber = position.lineNumber;\r\n var column;\r\n if (cursor.selectionStart.containsPosition(position)) {\r\n column = cursor.selectionStart.endColumn;\r\n }\r\n else if (position.isBeforeOrEqual(cursor.selectionStart.getStartPosition())) {\r\n column = startColumn;\r\n var possiblePosition = new Position(lineNumber, column);\r\n if (cursor.selectionStart.containsPosition(possiblePosition)) {\r\n column = cursor.selectionStart.endColumn;\r\n }\r\n }\r\n else {\r\n column = endColumn;\r\n var possiblePosition = new Position(lineNumber, column);\r\n if (cursor.selectionStart.containsPosition(possiblePosition)) {\r\n column = cursor.selectionStart.startColumn;\r\n }\r\n }\r\n return cursor.move(true, lineNumber, column, 0);\r\n };\r\n return WordOperations;\r\n}());\r\nexport { WordOperations };\r\nvar WordPartOperations = /** @class */ (function (_super) {\r\n __extends(WordPartOperations, _super);\r\n function WordPartOperations() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n WordPartOperations.deleteWordPartLeft = function (wordSeparators, model, selection, whitespaceHeuristics) {\r\n var candidates = enforceDefined([\r\n WordOperations.deleteWordLeft(wordSeparators, model, selection, whitespaceHeuristics, 0 /* WordStart */),\r\n WordOperations.deleteWordLeft(wordSeparators, model, selection, whitespaceHeuristics, 2 /* WordEnd */),\r\n WordOperations._deleteWordPartLeft(model, selection)\r\n ]);\r\n candidates.sort(Range.compareRangesUsingEnds);\r\n return candidates[2];\r\n };\r\n WordPartOperations.deleteWordPartRight = function (wordSeparators, model, selection, whitespaceHeuristics) {\r\n var candidates = enforceDefined([\r\n WordOperations.deleteWordRight(wordSeparators, model, selection, whitespaceHeuristics, 0 /* WordStart */),\r\n WordOperations.deleteWordRight(wordSeparators, model, selection, whitespaceHeuristics, 2 /* WordEnd */),\r\n WordOperations._deleteWordPartRight(model, selection)\r\n ]);\r\n candidates.sort(Range.compareRangesUsingStarts);\r\n return candidates[0];\r\n };\r\n WordPartOperations.moveWordPartLeft = function (wordSeparators, model, position) {\r\n var candidates = enforceDefined([\r\n WordOperations.moveWordLeft(wordSeparators, model, position, 0 /* WordStart */),\r\n WordOperations.moveWordLeft(wordSeparators, model, position, 2 /* WordEnd */),\r\n WordOperations._moveWordPartLeft(model, position)\r\n ]);\r\n candidates.sort(Position.compare);\r\n return candidates[2];\r\n };\r\n WordPartOperations.moveWordPartRight = function (wordSeparators, model, position) {\r\n var candidates = enforceDefined([\r\n WordOperations.moveWordRight(wordSeparators, model, position, 0 /* WordStart */),\r\n WordOperations.moveWordRight(wordSeparators, model, position, 2 /* WordEnd */),\r\n WordOperations._moveWordPartRight(model, position)\r\n ]);\r\n candidates.sort(Position.compare);\r\n return candidates[0];\r\n };\r\n return WordPartOperations;\r\n}(WordOperations));\r\nexport { WordPartOperations };\r\nfunction enforceDefined(arr) {\r\n return arr.filter(function (el) { return Boolean(el); });\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as types from '../../../base/common/types.js';\r\nimport { CursorState, SingleCursorState } from './cursorCommon.js';\r\nimport { MoveOperations } from './cursorMoveOperations.js';\r\nimport { WordOperations } from './cursorWordOperations.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nvar CursorMoveCommands = /** @class */ (function () {\r\n function CursorMoveCommands() {\r\n }\r\n CursorMoveCommands.addCursorDown = function (context, cursors, useLogicalLine) {\r\n var result = [], resultLen = 0;\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[resultLen++] = new CursorState(cursor.modelState, cursor.viewState);\r\n if (useLogicalLine) {\r\n result[resultLen++] = CursorState.fromModelState(MoveOperations.translateDown(context.config, context.model, cursor.modelState));\r\n }\r\n else {\r\n result[resultLen++] = CursorState.fromViewState(MoveOperations.translateDown(context.config, context.viewModel, cursor.viewState));\r\n }\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands.addCursorUp = function (context, cursors, useLogicalLine) {\r\n var result = [], resultLen = 0;\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[resultLen++] = new CursorState(cursor.modelState, cursor.viewState);\r\n if (useLogicalLine) {\r\n result[resultLen++] = CursorState.fromModelState(MoveOperations.translateUp(context.config, context.model, cursor.modelState));\r\n }\r\n else {\r\n result[resultLen++] = CursorState.fromViewState(MoveOperations.translateUp(context.config, context.viewModel, cursor.viewState));\r\n }\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands.moveToBeginningOfLine = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[i] = this._moveToLineStart(context, cursor, inSelectionMode);\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveToLineStart = function (context, cursor, inSelectionMode) {\r\n var currentViewStateColumn = cursor.viewState.position.column;\r\n var currentModelStateColumn = cursor.modelState.position.column;\r\n var isFirstLineOfWrappedLine = currentViewStateColumn === currentModelStateColumn;\r\n var currentViewStatelineNumber = cursor.viewState.position.lineNumber;\r\n var firstNonBlankColumn = context.viewModel.getLineFirstNonWhitespaceColumn(currentViewStatelineNumber);\r\n var isBeginningOfViewLine = currentViewStateColumn === firstNonBlankColumn;\r\n if (!isFirstLineOfWrappedLine && !isBeginningOfViewLine) {\r\n return this._moveToLineStartByView(context, cursor, inSelectionMode);\r\n }\r\n else {\r\n return this._moveToLineStartByModel(context, cursor, inSelectionMode);\r\n }\r\n };\r\n CursorMoveCommands._moveToLineStartByView = function (context, cursor, inSelectionMode) {\r\n return CursorState.fromViewState(MoveOperations.moveToBeginningOfLine(context.config, context.viewModel, cursor.viewState, inSelectionMode));\r\n };\r\n CursorMoveCommands._moveToLineStartByModel = function (context, cursor, inSelectionMode) {\r\n return CursorState.fromModelState(MoveOperations.moveToBeginningOfLine(context.config, context.model, cursor.modelState, inSelectionMode));\r\n };\r\n CursorMoveCommands.moveToEndOfLine = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[i] = this._moveToLineEnd(context, cursor, inSelectionMode);\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveToLineEnd = function (context, cursor, inSelectionMode) {\r\n var viewStatePosition = cursor.viewState.position;\r\n var viewModelMaxColumn = context.viewModel.getLineMaxColumn(viewStatePosition.lineNumber);\r\n var isEndOfViewLine = viewStatePosition.column === viewModelMaxColumn;\r\n var modelStatePosition = cursor.modelState.position;\r\n var modelMaxColumn = context.model.getLineMaxColumn(modelStatePosition.lineNumber);\r\n var isEndLineOfWrappedLine = viewModelMaxColumn - viewStatePosition.column === modelMaxColumn - modelStatePosition.column;\r\n if (isEndOfViewLine || isEndLineOfWrappedLine) {\r\n return this._moveToLineEndByModel(context, cursor, inSelectionMode);\r\n }\r\n else {\r\n return this._moveToLineEndByView(context, cursor, inSelectionMode);\r\n }\r\n };\r\n CursorMoveCommands._moveToLineEndByView = function (context, cursor, inSelectionMode) {\r\n return CursorState.fromViewState(MoveOperations.moveToEndOfLine(context.config, context.viewModel, cursor.viewState, inSelectionMode));\r\n };\r\n CursorMoveCommands._moveToLineEndByModel = function (context, cursor, inSelectionMode) {\r\n return CursorState.fromModelState(MoveOperations.moveToEndOfLine(context.config, context.model, cursor.modelState, inSelectionMode));\r\n };\r\n CursorMoveCommands.expandLineSelection = function (context, cursors) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var startLineNumber = cursor.modelState.selection.startLineNumber;\r\n var lineCount = context.model.getLineCount();\r\n var endLineNumber = cursor.modelState.selection.endLineNumber;\r\n var endColumn = void 0;\r\n if (endLineNumber === lineCount) {\r\n endColumn = context.model.getLineMaxColumn(lineCount);\r\n }\r\n else {\r\n endLineNumber++;\r\n endColumn = 1;\r\n }\r\n result[i] = CursorState.fromModelState(new SingleCursorState(new Range(startLineNumber, 1, startLineNumber, 1), 0, new Position(endLineNumber, endColumn), 0));\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands.moveToBeginningOfBuffer = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[i] = CursorState.fromModelState(MoveOperations.moveToBeginningOfBuffer(context.config, context.model, cursor.modelState, inSelectionMode));\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands.moveToEndOfBuffer = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[i] = CursorState.fromModelState(MoveOperations.moveToEndOfBuffer(context.config, context.model, cursor.modelState, inSelectionMode));\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands.selectAll = function (context, cursor) {\r\n var lineCount = context.model.getLineCount();\r\n var maxColumn = context.model.getLineMaxColumn(lineCount);\r\n return CursorState.fromModelState(new SingleCursorState(new Range(1, 1, 1, 1), 0, new Position(lineCount, maxColumn), 0));\r\n };\r\n CursorMoveCommands.line = function (context, cursor, inSelectionMode, _position, _viewPosition) {\r\n var position = context.model.validatePosition(_position);\r\n var viewPosition = (_viewPosition\r\n ? context.validateViewPosition(new Position(_viewPosition.lineNumber, _viewPosition.column), position)\r\n : context.convertModelPositionToViewPosition(position));\r\n if (!inSelectionMode || !cursor.modelState.hasSelection()) {\r\n // Entering line selection for the first time\r\n var lineCount = context.model.getLineCount();\r\n var selectToLineNumber = position.lineNumber + 1;\r\n var selectToColumn = 1;\r\n if (selectToLineNumber > lineCount) {\r\n selectToLineNumber = lineCount;\r\n selectToColumn = context.model.getLineMaxColumn(selectToLineNumber);\r\n }\r\n return CursorState.fromModelState(new SingleCursorState(new Range(position.lineNumber, 1, selectToLineNumber, selectToColumn), 0, new Position(selectToLineNumber, selectToColumn), 0));\r\n }\r\n // Continuing line selection\r\n var enteringLineNumber = cursor.modelState.selectionStart.getStartPosition().lineNumber;\r\n if (position.lineNumber < enteringLineNumber) {\r\n return CursorState.fromViewState(cursor.viewState.move(cursor.modelState.hasSelection(), viewPosition.lineNumber, 1, 0));\r\n }\r\n else if (position.lineNumber > enteringLineNumber) {\r\n var lineCount = context.viewModel.getLineCount();\r\n var selectToViewLineNumber = viewPosition.lineNumber + 1;\r\n var selectToViewColumn = 1;\r\n if (selectToViewLineNumber > lineCount) {\r\n selectToViewLineNumber = lineCount;\r\n selectToViewColumn = context.viewModel.getLineMaxColumn(selectToViewLineNumber);\r\n }\r\n return CursorState.fromViewState(cursor.viewState.move(cursor.modelState.hasSelection(), selectToViewLineNumber, selectToViewColumn, 0));\r\n }\r\n else {\r\n var endPositionOfSelectionStart = cursor.modelState.selectionStart.getEndPosition();\r\n return CursorState.fromModelState(cursor.modelState.move(cursor.modelState.hasSelection(), endPositionOfSelectionStart.lineNumber, endPositionOfSelectionStart.column, 0));\r\n }\r\n };\r\n CursorMoveCommands.word = function (context, cursor, inSelectionMode, _position) {\r\n var position = context.model.validatePosition(_position);\r\n return CursorState.fromModelState(WordOperations.word(context.config, context.model, cursor.modelState, inSelectionMode, position));\r\n };\r\n CursorMoveCommands.cancelSelection = function (context, cursor) {\r\n if (!cursor.modelState.hasSelection()) {\r\n return new CursorState(cursor.modelState, cursor.viewState);\r\n }\r\n var lineNumber = cursor.viewState.position.lineNumber;\r\n var column = cursor.viewState.position.column;\r\n return CursorState.fromViewState(new SingleCursorState(new Range(lineNumber, column, lineNumber, column), 0, new Position(lineNumber, column), 0));\r\n };\r\n CursorMoveCommands.moveTo = function (context, cursor, inSelectionMode, _position, _viewPosition) {\r\n var position = context.model.validatePosition(_position);\r\n var viewPosition = (_viewPosition\r\n ? context.validateViewPosition(new Position(_viewPosition.lineNumber, _viewPosition.column), position)\r\n : context.convertModelPositionToViewPosition(position));\r\n return CursorState.fromViewState(cursor.viewState.move(inSelectionMode, viewPosition.lineNumber, viewPosition.column, 0));\r\n };\r\n CursorMoveCommands.move = function (context, cursors, args) {\r\n var inSelectionMode = args.select;\r\n var value = args.value;\r\n switch (args.direction) {\r\n case 0 /* Left */: {\r\n if (args.unit === 4 /* HalfLine */) {\r\n // Move left by half the current line length\r\n return this._moveHalfLineLeft(context, cursors, inSelectionMode);\r\n }\r\n else {\r\n // Move left by `moveParams.value` columns\r\n return this._moveLeft(context, cursors, inSelectionMode, value);\r\n }\r\n }\r\n case 1 /* Right */: {\r\n if (args.unit === 4 /* HalfLine */) {\r\n // Move right by half the current line length\r\n return this._moveHalfLineRight(context, cursors, inSelectionMode);\r\n }\r\n else {\r\n // Move right by `moveParams.value` columns\r\n return this._moveRight(context, cursors, inSelectionMode, value);\r\n }\r\n }\r\n case 2 /* Up */: {\r\n if (args.unit === 2 /* WrappedLine */) {\r\n // Move up by view lines\r\n return this._moveUpByViewLines(context, cursors, inSelectionMode, value);\r\n }\r\n else {\r\n // Move up by model lines\r\n return this._moveUpByModelLines(context, cursors, inSelectionMode, value);\r\n }\r\n }\r\n case 3 /* Down */: {\r\n if (args.unit === 2 /* WrappedLine */) {\r\n // Move down by view lines\r\n return this._moveDownByViewLines(context, cursors, inSelectionMode, value);\r\n }\r\n else {\r\n // Move down by model lines\r\n return this._moveDownByModelLines(context, cursors, inSelectionMode, value);\r\n }\r\n }\r\n case 4 /* WrappedLineStart */: {\r\n // Move to the beginning of the current view line\r\n return this._moveToViewMinColumn(context, cursors, inSelectionMode);\r\n }\r\n case 5 /* WrappedLineFirstNonWhitespaceCharacter */: {\r\n // Move to the first non-whitespace column of the current view line\r\n return this._moveToViewFirstNonWhitespaceColumn(context, cursors, inSelectionMode);\r\n }\r\n case 6 /* WrappedLineColumnCenter */: {\r\n // Move to the \"center\" of the current view line\r\n return this._moveToViewCenterColumn(context, cursors, inSelectionMode);\r\n }\r\n case 7 /* WrappedLineEnd */: {\r\n // Move to the end of the current view line\r\n return this._moveToViewMaxColumn(context, cursors, inSelectionMode);\r\n }\r\n case 8 /* WrappedLineLastNonWhitespaceCharacter */: {\r\n // Move to the last non-whitespace column of the current view line\r\n return this._moveToViewLastNonWhitespaceColumn(context, cursors, inSelectionMode);\r\n }\r\n case 9 /* ViewPortTop */: {\r\n // Move to the nth line start in the viewport (from the top)\r\n var cursor = cursors[0];\r\n var visibleModelRange = context.getCompletelyVisibleModelRange();\r\n var modelLineNumber = this._firstLineNumberInRange(context.model, visibleModelRange, value);\r\n var modelColumn = context.model.getLineFirstNonWhitespaceColumn(modelLineNumber);\r\n return [this._moveToModelPosition(context, cursor, inSelectionMode, modelLineNumber, modelColumn)];\r\n }\r\n case 11 /* ViewPortBottom */: {\r\n // Move to the nth line start in the viewport (from the bottom)\r\n var cursor = cursors[0];\r\n var visibleModelRange = context.getCompletelyVisibleModelRange();\r\n var modelLineNumber = this._lastLineNumberInRange(context.model, visibleModelRange, value);\r\n var modelColumn = context.model.getLineFirstNonWhitespaceColumn(modelLineNumber);\r\n return [this._moveToModelPosition(context, cursor, inSelectionMode, modelLineNumber, modelColumn)];\r\n }\r\n case 10 /* ViewPortCenter */: {\r\n // Move to the line start in the viewport center\r\n var cursor = cursors[0];\r\n var visibleModelRange = context.getCompletelyVisibleModelRange();\r\n var modelLineNumber = Math.round((visibleModelRange.startLineNumber + visibleModelRange.endLineNumber) / 2);\r\n var modelColumn = context.model.getLineFirstNonWhitespaceColumn(modelLineNumber);\r\n return [this._moveToModelPosition(context, cursor, inSelectionMode, modelLineNumber, modelColumn)];\r\n }\r\n case 12 /* ViewPortIfOutside */: {\r\n // Move to a position inside the viewport\r\n var visibleViewRange = context.getCompletelyVisibleViewRange();\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[i] = this.findPositionInViewportIfOutside(context, cursor, visibleViewRange, inSelectionMode);\r\n }\r\n return result;\r\n }\r\n }\r\n return null;\r\n };\r\n CursorMoveCommands.findPositionInViewportIfOutside = function (context, cursor, visibleViewRange, inSelectionMode) {\r\n var viewLineNumber = cursor.viewState.position.lineNumber;\r\n if (visibleViewRange.startLineNumber <= viewLineNumber && viewLineNumber <= visibleViewRange.endLineNumber - 1) {\r\n // Nothing to do, cursor is in viewport\r\n return new CursorState(cursor.modelState, cursor.viewState);\r\n }\r\n else {\r\n if (viewLineNumber > visibleViewRange.endLineNumber - 1) {\r\n viewLineNumber = visibleViewRange.endLineNumber - 1;\r\n }\r\n if (viewLineNumber < visibleViewRange.startLineNumber) {\r\n viewLineNumber = visibleViewRange.startLineNumber;\r\n }\r\n var viewColumn = context.viewModel.getLineFirstNonWhitespaceColumn(viewLineNumber);\r\n return this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\r\n }\r\n };\r\n /**\r\n * Find the nth line start included in the range (from the start).\r\n */\r\n CursorMoveCommands._firstLineNumberInRange = function (model, range, count) {\r\n var startLineNumber = range.startLineNumber;\r\n if (range.startColumn !== model.getLineMinColumn(startLineNumber)) {\r\n // Move on to the second line if the first line start is not included in the range\r\n startLineNumber++;\r\n }\r\n return Math.min(range.endLineNumber, startLineNumber + count - 1);\r\n };\r\n /**\r\n * Find the nth line start included in the range (from the end).\r\n */\r\n CursorMoveCommands._lastLineNumberInRange = function (model, range, count) {\r\n var startLineNumber = range.startLineNumber;\r\n if (range.startColumn !== model.getLineMinColumn(startLineNumber)) {\r\n // Move on to the second line if the first line start is not included in the range\r\n startLineNumber++;\r\n }\r\n return Math.max(startLineNumber, range.endLineNumber - count + 1);\r\n };\r\n CursorMoveCommands._moveLeft = function (context, cursors, inSelectionMode, noOfColumns) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var newViewState = MoveOperations.moveLeft(context.config, context.viewModel, cursor.viewState, inSelectionMode, noOfColumns);\r\n if (noOfColumns === 1 && newViewState.position.lineNumber !== cursor.viewState.position.lineNumber) {\r\n // moved over to the previous view line\r\n var newViewModelPosition = context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(newViewState.position);\r\n if (newViewModelPosition.lineNumber === cursor.modelState.position.lineNumber) {\r\n // stayed on the same model line => pass wrapping point where 2 view positions map to a single model position\r\n newViewState = MoveOperations.moveLeft(context.config, context.viewModel, newViewState, inSelectionMode, 1);\r\n }\r\n }\r\n result[i] = CursorState.fromViewState(newViewState);\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveHalfLineLeft = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var viewLineNumber = cursor.viewState.position.lineNumber;\r\n var halfLine = Math.round(context.viewModel.getLineContent(viewLineNumber).length / 2);\r\n result[i] = CursorState.fromViewState(MoveOperations.moveLeft(context.config, context.viewModel, cursor.viewState, inSelectionMode, halfLine));\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveRight = function (context, cursors, inSelectionMode, noOfColumns) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var newViewState = MoveOperations.moveRight(context.config, context.viewModel, cursor.viewState, inSelectionMode, noOfColumns);\r\n if (noOfColumns === 1 && newViewState.position.lineNumber !== cursor.viewState.position.lineNumber) {\r\n // moved over to the next view line\r\n var newViewModelPosition = context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(newViewState.position);\r\n if (newViewModelPosition.lineNumber === cursor.modelState.position.lineNumber) {\r\n // stayed on the same model line => pass wrapping point where 2 view positions map to a single model position\r\n newViewState = MoveOperations.moveRight(context.config, context.viewModel, newViewState, inSelectionMode, 1);\r\n }\r\n }\r\n result[i] = CursorState.fromViewState(newViewState);\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveHalfLineRight = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var viewLineNumber = cursor.viewState.position.lineNumber;\r\n var halfLine = Math.round(context.viewModel.getLineContent(viewLineNumber).length / 2);\r\n result[i] = CursorState.fromViewState(MoveOperations.moveRight(context.config, context.viewModel, cursor.viewState, inSelectionMode, halfLine));\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveDownByViewLines = function (context, cursors, inSelectionMode, linesCount) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[i] = CursorState.fromViewState(MoveOperations.moveDown(context.config, context.viewModel, cursor.viewState, inSelectionMode, linesCount));\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveDownByModelLines = function (context, cursors, inSelectionMode, linesCount) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[i] = CursorState.fromModelState(MoveOperations.moveDown(context.config, context.model, cursor.modelState, inSelectionMode, linesCount));\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveUpByViewLines = function (context, cursors, inSelectionMode, linesCount) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[i] = CursorState.fromViewState(MoveOperations.moveUp(context.config, context.viewModel, cursor.viewState, inSelectionMode, linesCount));\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveUpByModelLines = function (context, cursors, inSelectionMode, linesCount) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n result[i] = CursorState.fromModelState(MoveOperations.moveUp(context.config, context.model, cursor.modelState, inSelectionMode, linesCount));\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveToViewPosition = function (context, cursor, inSelectionMode, toViewLineNumber, toViewColumn) {\r\n return CursorState.fromViewState(cursor.viewState.move(inSelectionMode, toViewLineNumber, toViewColumn, 0));\r\n };\r\n CursorMoveCommands._moveToModelPosition = function (context, cursor, inSelectionMode, toModelLineNumber, toModelColumn) {\r\n return CursorState.fromModelState(cursor.modelState.move(inSelectionMode, toModelLineNumber, toModelColumn, 0));\r\n };\r\n CursorMoveCommands._moveToViewMinColumn = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var viewLineNumber = cursor.viewState.position.lineNumber;\r\n var viewColumn = context.viewModel.getLineMinColumn(viewLineNumber);\r\n result[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveToViewFirstNonWhitespaceColumn = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var viewLineNumber = cursor.viewState.position.lineNumber;\r\n var viewColumn = context.viewModel.getLineFirstNonWhitespaceColumn(viewLineNumber);\r\n result[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveToViewCenterColumn = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var viewLineNumber = cursor.viewState.position.lineNumber;\r\n var viewColumn = Math.round((context.viewModel.getLineMaxColumn(viewLineNumber) + context.viewModel.getLineMinColumn(viewLineNumber)) / 2);\r\n result[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveToViewMaxColumn = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var viewLineNumber = cursor.viewState.position.lineNumber;\r\n var viewColumn = context.viewModel.getLineMaxColumn(viewLineNumber);\r\n result[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\r\n }\r\n return result;\r\n };\r\n CursorMoveCommands._moveToViewLastNonWhitespaceColumn = function (context, cursors, inSelectionMode) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var viewLineNumber = cursor.viewState.position.lineNumber;\r\n var viewColumn = context.viewModel.getLineLastNonWhitespaceColumn(viewLineNumber);\r\n result[i] = this._moveToViewPosition(context, cursor, inSelectionMode, viewLineNumber, viewColumn);\r\n }\r\n return result;\r\n };\r\n return CursorMoveCommands;\r\n}());\r\nexport { CursorMoveCommands };\r\nexport var CursorMove;\r\n(function (CursorMove) {\r\n var isCursorMoveArgs = function (arg) {\r\n if (!types.isObject(arg)) {\r\n return false;\r\n }\r\n var cursorMoveArg = arg;\r\n if (!types.isString(cursorMoveArg.to)) {\r\n return false;\r\n }\r\n if (!types.isUndefined(cursorMoveArg.select) && !types.isBoolean(cursorMoveArg.select)) {\r\n return false;\r\n }\r\n if (!types.isUndefined(cursorMoveArg.by) && !types.isString(cursorMoveArg.by)) {\r\n return false;\r\n }\r\n if (!types.isUndefined(cursorMoveArg.value) && !types.isNumber(cursorMoveArg.value)) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n CursorMove.description = {\r\n description: 'Move cursor to a logical position in the view',\r\n args: [\r\n {\r\n name: 'Cursor move argument object',\r\n description: \"Property-value pairs that can be passed through this argument:\\n\\t\\t\\t\\t\\t* 'to': A mandatory logical position value providing where to move the cursor.\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\\t\\t'left', 'right', 'up', 'down'\\n\\t\\t\\t\\t\\t\\t'wrappedLineStart', 'wrappedLineEnd', 'wrappedLineColumnCenter'\\n\\t\\t\\t\\t\\t\\t'wrappedLineFirstNonWhitespaceCharacter', 'wrappedLineLastNonWhitespaceCharacter'\\n\\t\\t\\t\\t\\t\\t'viewPortTop', 'viewPortCenter', 'viewPortBottom', 'viewPortIfOutside'\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\\t* 'by': Unit to move. Default is computed based on 'to' value.\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\\t\\t'line', 'wrappedLine', 'character', 'halfLine'\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\\t* 'value': Number of units to move. Default is '1'.\\n\\t\\t\\t\\t\\t* 'select': If 'true' makes the selection. Default is 'false'.\\n\\t\\t\\t\\t\",\r\n constraint: isCursorMoveArgs,\r\n schema: {\r\n 'type': 'object',\r\n 'required': ['to'],\r\n 'properties': {\r\n 'to': {\r\n 'type': 'string',\r\n 'enum': ['left', 'right', 'up', 'down', 'wrappedLineStart', 'wrappedLineEnd', 'wrappedLineColumnCenter', 'wrappedLineFirstNonWhitespaceCharacter', 'wrappedLineLastNonWhitespaceCharacter', 'viewPortTop', 'viewPortCenter', 'viewPortBottom', 'viewPortIfOutside']\r\n },\r\n 'by': {\r\n 'type': 'string',\r\n 'enum': ['line', 'wrappedLine', 'character', 'halfLine']\r\n },\r\n 'value': {\r\n 'type': 'number',\r\n 'default': 1\r\n },\r\n 'select': {\r\n 'type': 'boolean',\r\n 'default': false\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n };\r\n /**\r\n * Positions in the view for cursor move command.\r\n */\r\n CursorMove.RawDirection = {\r\n Left: 'left',\r\n Right: 'right',\r\n Up: 'up',\r\n Down: 'down',\r\n WrappedLineStart: 'wrappedLineStart',\r\n WrappedLineFirstNonWhitespaceCharacter: 'wrappedLineFirstNonWhitespaceCharacter',\r\n WrappedLineColumnCenter: 'wrappedLineColumnCenter',\r\n WrappedLineEnd: 'wrappedLineEnd',\r\n WrappedLineLastNonWhitespaceCharacter: 'wrappedLineLastNonWhitespaceCharacter',\r\n ViewPortTop: 'viewPortTop',\r\n ViewPortCenter: 'viewPortCenter',\r\n ViewPortBottom: 'viewPortBottom',\r\n ViewPortIfOutside: 'viewPortIfOutside'\r\n };\r\n /**\r\n * Units for Cursor move 'by' argument\r\n */\r\n CursorMove.RawUnit = {\r\n Line: 'line',\r\n WrappedLine: 'wrappedLine',\r\n Character: 'character',\r\n HalfLine: 'halfLine'\r\n };\r\n function parse(args) {\r\n if (!args.to) {\r\n // illegal arguments\r\n return null;\r\n }\r\n var direction;\r\n switch (args.to) {\r\n case CursorMove.RawDirection.Left:\r\n direction = 0 /* Left */;\r\n break;\r\n case CursorMove.RawDirection.Right:\r\n direction = 1 /* Right */;\r\n break;\r\n case CursorMove.RawDirection.Up:\r\n direction = 2 /* Up */;\r\n break;\r\n case CursorMove.RawDirection.Down:\r\n direction = 3 /* Down */;\r\n break;\r\n case CursorMove.RawDirection.WrappedLineStart:\r\n direction = 4 /* WrappedLineStart */;\r\n break;\r\n case CursorMove.RawDirection.WrappedLineFirstNonWhitespaceCharacter:\r\n direction = 5 /* WrappedLineFirstNonWhitespaceCharacter */;\r\n break;\r\n case CursorMove.RawDirection.WrappedLineColumnCenter:\r\n direction = 6 /* WrappedLineColumnCenter */;\r\n break;\r\n case CursorMove.RawDirection.WrappedLineEnd:\r\n direction = 7 /* WrappedLineEnd */;\r\n break;\r\n case CursorMove.RawDirection.WrappedLineLastNonWhitespaceCharacter:\r\n direction = 8 /* WrappedLineLastNonWhitespaceCharacter */;\r\n break;\r\n case CursorMove.RawDirection.ViewPortTop:\r\n direction = 9 /* ViewPortTop */;\r\n break;\r\n case CursorMove.RawDirection.ViewPortBottom:\r\n direction = 11 /* ViewPortBottom */;\r\n break;\r\n case CursorMove.RawDirection.ViewPortCenter:\r\n direction = 10 /* ViewPortCenter */;\r\n break;\r\n case CursorMove.RawDirection.ViewPortIfOutside:\r\n direction = 12 /* ViewPortIfOutside */;\r\n break;\r\n default:\r\n // illegal arguments\r\n return null;\r\n }\r\n var unit = 0 /* None */;\r\n switch (args.by) {\r\n case CursorMove.RawUnit.Line:\r\n unit = 1 /* Line */;\r\n break;\r\n case CursorMove.RawUnit.WrappedLine:\r\n unit = 2 /* WrappedLine */;\r\n break;\r\n case CursorMove.RawUnit.Character:\r\n unit = 3 /* Character */;\r\n break;\r\n case CursorMove.RawUnit.HalfLine:\r\n unit = 4 /* HalfLine */;\r\n break;\r\n }\r\n return {\r\n direction: direction,\r\n unit: unit,\r\n select: (!!args.select),\r\n value: (args.value || 1)\r\n };\r\n }\r\n CursorMove.parse = parse;\r\n})(CursorMove || (CursorMove = {}));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { CursorColumns } from '../controller/cursorCommon.js';\r\nimport { Range } from '../core/range.js';\r\nimport { Selection } from '../core/selection.js';\r\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\r\nvar repeatCache = Object.create(null);\r\nexport function cachedStringRepeat(str, count) {\r\n if (!repeatCache[str]) {\r\n repeatCache[str] = ['', str];\r\n }\r\n var cache = repeatCache[str];\r\n for (var i = cache.length; i <= count; i++) {\r\n cache[i] = cache[i - 1] + str;\r\n }\r\n return cache[count];\r\n}\r\nvar ShiftCommand = /** @class */ (function () {\r\n function ShiftCommand(range, opts) {\r\n this._opts = opts;\r\n this._selection = range;\r\n this._selectionId = null;\r\n this._useLastEditRangeForCursorEndPosition = false;\r\n this._selectionStartColumnStaysPut = false;\r\n }\r\n ShiftCommand.unshiftIndent = function (line, column, tabSize, indentSize, insertSpaces) {\r\n // Determine the visible column where the content starts\r\n var contentStartVisibleColumn = CursorColumns.visibleColumnFromColumn(line, column, tabSize);\r\n if (insertSpaces) {\r\n var indent = cachedStringRepeat(' ', indentSize);\r\n var desiredTabStop = CursorColumns.prevIndentTabStop(contentStartVisibleColumn, indentSize);\r\n var indentCount = desiredTabStop / indentSize; // will be an integer\r\n return cachedStringRepeat(indent, indentCount);\r\n }\r\n else {\r\n var indent = '\\t';\r\n var desiredTabStop = CursorColumns.prevRenderTabStop(contentStartVisibleColumn, tabSize);\r\n var indentCount = desiredTabStop / tabSize; // will be an integer\r\n return cachedStringRepeat(indent, indentCount);\r\n }\r\n };\r\n ShiftCommand.shiftIndent = function (line, column, tabSize, indentSize, insertSpaces) {\r\n // Determine the visible column where the content starts\r\n var contentStartVisibleColumn = CursorColumns.visibleColumnFromColumn(line, column, tabSize);\r\n if (insertSpaces) {\r\n var indent = cachedStringRepeat(' ', indentSize);\r\n var desiredTabStop = CursorColumns.nextIndentTabStop(contentStartVisibleColumn, indentSize);\r\n var indentCount = desiredTabStop / indentSize; // will be an integer\r\n return cachedStringRepeat(indent, indentCount);\r\n }\r\n else {\r\n var indent = '\\t';\r\n var desiredTabStop = CursorColumns.nextRenderTabStop(contentStartVisibleColumn, tabSize);\r\n var indentCount = desiredTabStop / tabSize; // will be an integer\r\n return cachedStringRepeat(indent, indentCount);\r\n }\r\n };\r\n ShiftCommand.prototype._addEditOperation = function (builder, range, text) {\r\n if (this._useLastEditRangeForCursorEndPosition) {\r\n builder.addTrackedEditOperation(range, text);\r\n }\r\n else {\r\n builder.addEditOperation(range, text);\r\n }\r\n };\r\n ShiftCommand.prototype.getEditOperations = function (model, builder) {\r\n var startLine = this._selection.startLineNumber;\r\n var endLine = this._selection.endLineNumber;\r\n if (this._selection.endColumn === 1 && startLine !== endLine) {\r\n endLine = endLine - 1;\r\n }\r\n var _a = this._opts, tabSize = _a.tabSize, indentSize = _a.indentSize, insertSpaces = _a.insertSpaces;\r\n var shouldIndentEmptyLines = (startLine === endLine);\r\n // if indenting or outdenting on a whitespace only line\r\n if (this._selection.isEmpty()) {\r\n if (/^\\s*$/.test(model.getLineContent(startLine))) {\r\n this._useLastEditRangeForCursorEndPosition = true;\r\n }\r\n }\r\n if (this._opts.useTabStops) {\r\n // keep track of previous line's \"miss-alignment\"\r\n var previousLineExtraSpaces = 0, extraSpaces = 0;\r\n for (var lineNumber = startLine; lineNumber <= endLine; lineNumber++, previousLineExtraSpaces = extraSpaces) {\r\n extraSpaces = 0;\r\n var lineText = model.getLineContent(lineNumber);\r\n var indentationEndIndex = strings.firstNonWhitespaceIndex(lineText);\r\n if (this._opts.isUnshift && (lineText.length === 0 || indentationEndIndex === 0)) {\r\n // empty line or line with no leading whitespace => nothing to do\r\n continue;\r\n }\r\n if (!shouldIndentEmptyLines && !this._opts.isUnshift && lineText.length === 0) {\r\n // do not indent empty lines => nothing to do\r\n continue;\r\n }\r\n if (indentationEndIndex === -1) {\r\n // the entire line is whitespace\r\n indentationEndIndex = lineText.length;\r\n }\r\n if (lineNumber > 1) {\r\n var contentStartVisibleColumn = CursorColumns.visibleColumnFromColumn(lineText, indentationEndIndex + 1, tabSize);\r\n if (contentStartVisibleColumn % indentSize !== 0) {\r\n // The current line is \"miss-aligned\", so let's see if this is expected...\r\n // This can only happen when it has trailing commas in the indent\r\n if (model.isCheapToTokenize(lineNumber - 1)) {\r\n var enterAction = LanguageConfigurationRegistry.getEnterAction(this._opts.autoIndent, model, new Range(lineNumber - 1, model.getLineMaxColumn(lineNumber - 1), lineNumber - 1, model.getLineMaxColumn(lineNumber - 1)));\r\n if (enterAction) {\r\n extraSpaces = previousLineExtraSpaces;\r\n if (enterAction.appendText) {\r\n for (var j = 0, lenJ = enterAction.appendText.length; j < lenJ && extraSpaces < indentSize; j++) {\r\n if (enterAction.appendText.charCodeAt(j) === 32 /* Space */) {\r\n extraSpaces++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n if (enterAction.removeText) {\r\n extraSpaces = Math.max(0, extraSpaces - enterAction.removeText);\r\n }\r\n // Act as if `prefixSpaces` is not part of the indentation\r\n for (var j = 0; j < extraSpaces; j++) {\r\n if (indentationEndIndex === 0 || lineText.charCodeAt(indentationEndIndex - 1) !== 32 /* Space */) {\r\n break;\r\n }\r\n indentationEndIndex--;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (this._opts.isUnshift && indentationEndIndex === 0) {\r\n // line with no leading whitespace => nothing to do\r\n continue;\r\n }\r\n var desiredIndent = void 0;\r\n if (this._opts.isUnshift) {\r\n desiredIndent = ShiftCommand.unshiftIndent(lineText, indentationEndIndex + 1, tabSize, indentSize, insertSpaces);\r\n }\r\n else {\r\n desiredIndent = ShiftCommand.shiftIndent(lineText, indentationEndIndex + 1, tabSize, indentSize, insertSpaces);\r\n }\r\n this._addEditOperation(builder, new Range(lineNumber, 1, lineNumber, indentationEndIndex + 1), desiredIndent);\r\n if (lineNumber === startLine && !this._selection.isEmpty()) {\r\n // Force the startColumn to stay put because we're inserting after it\r\n this._selectionStartColumnStaysPut = (this._selection.startColumn <= indentationEndIndex + 1);\r\n }\r\n }\r\n }\r\n else {\r\n var oneIndent = (insertSpaces ? cachedStringRepeat(' ', indentSize) : '\\t');\r\n for (var lineNumber = startLine; lineNumber <= endLine; lineNumber++) {\r\n var lineText = model.getLineContent(lineNumber);\r\n var indentationEndIndex = strings.firstNonWhitespaceIndex(lineText);\r\n if (this._opts.isUnshift && (lineText.length === 0 || indentationEndIndex === 0)) {\r\n // empty line or line with no leading whitespace => nothing to do\r\n continue;\r\n }\r\n if (!shouldIndentEmptyLines && !this._opts.isUnshift && lineText.length === 0) {\r\n // do not indent empty lines => nothing to do\r\n continue;\r\n }\r\n if (indentationEndIndex === -1) {\r\n // the entire line is whitespace\r\n indentationEndIndex = lineText.length;\r\n }\r\n if (this._opts.isUnshift && indentationEndIndex === 0) {\r\n // line with no leading whitespace => nothing to do\r\n continue;\r\n }\r\n if (this._opts.isUnshift) {\r\n indentationEndIndex = Math.min(indentationEndIndex, indentSize);\r\n for (var i = 0; i < indentationEndIndex; i++) {\r\n var chr = lineText.charCodeAt(i);\r\n if (chr === 9 /* Tab */) {\r\n indentationEndIndex = i + 1;\r\n break;\r\n }\r\n }\r\n this._addEditOperation(builder, new Range(lineNumber, 1, lineNumber, indentationEndIndex + 1), '');\r\n }\r\n else {\r\n this._addEditOperation(builder, new Range(lineNumber, 1, lineNumber, 1), oneIndent);\r\n if (lineNumber === startLine && !this._selection.isEmpty()) {\r\n // Force the startColumn to stay put because we're inserting after it\r\n this._selectionStartColumnStaysPut = (this._selection.startColumn === 1);\r\n }\r\n }\r\n }\r\n }\r\n this._selectionId = builder.trackSelection(this._selection);\r\n };\r\n ShiftCommand.prototype.computeCursorState = function (model, helper) {\r\n if (this._useLastEditRangeForCursorEndPosition) {\r\n var lastOp = helper.getInverseEditOperations()[0];\r\n return new Selection(lastOp.range.endLineNumber, lastOp.range.endColumn, lastOp.range.endLineNumber, lastOp.range.endColumn);\r\n }\r\n var result = helper.getTrackedSelection(this._selectionId);\r\n if (this._selectionStartColumnStaysPut) {\r\n // The selection start should not move\r\n var initialStartColumn = this._selection.startColumn;\r\n var resultStartColumn = result.startColumn;\r\n if (resultStartColumn <= initialStartColumn) {\r\n return result;\r\n }\r\n if (result.getDirection() === 0 /* LTR */) {\r\n return new Selection(result.startLineNumber, initialStartColumn, result.endLineNumber, result.endColumn);\r\n }\r\n return new Selection(result.endLineNumber, result.endColumn, result.startLineNumber, initialStartColumn);\r\n }\r\n return result;\r\n };\r\n return ShiftCommand;\r\n}());\r\nexport { ShiftCommand };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { RawContextKey } from '../../platform/contextkey/common/contextkey.js';\r\nexport var EditorContextKeys;\r\n(function (EditorContextKeys) {\r\n /**\r\n * A context key that is set when the editor's text has focus (cursor is blinking).\r\n */\r\n EditorContextKeys.editorTextFocus = new RawContextKey('editorTextFocus', false);\r\n /**\r\n * A context key that is set when the editor's text or an editor's widget has focus.\r\n */\r\n EditorContextKeys.focus = new RawContextKey('editorFocus', false);\r\n /**\r\n * A context key that is set when any editor input has focus (regular editor, repl input...).\r\n */\r\n EditorContextKeys.textInputFocus = new RawContextKey('textInputFocus', false);\r\n EditorContextKeys.readOnly = new RawContextKey('editorReadonly', false);\r\n EditorContextKeys.writable = EditorContextKeys.readOnly.toNegated();\r\n EditorContextKeys.hasNonEmptySelection = new RawContextKey('editorHasSelection', false);\r\n EditorContextKeys.hasOnlyEmptySelection = EditorContextKeys.hasNonEmptySelection.toNegated();\r\n EditorContextKeys.hasMultipleSelections = new RawContextKey('editorHasMultipleSelections', false);\r\n EditorContextKeys.hasSingleSelection = EditorContextKeys.hasMultipleSelections.toNegated();\r\n EditorContextKeys.tabMovesFocus = new RawContextKey('editorTabMovesFocus', false);\r\n EditorContextKeys.tabDoesNotMoveFocus = EditorContextKeys.tabMovesFocus.toNegated();\r\n EditorContextKeys.isInEmbeddedEditor = new RawContextKey('isInEmbeddedEditor', false);\r\n EditorContextKeys.canUndo = new RawContextKey('canUndo', false);\r\n EditorContextKeys.canRedo = new RawContextKey('canRedo', false);\r\n // -- mode context keys\r\n EditorContextKeys.languageId = new RawContextKey('editorLangId', '');\r\n EditorContextKeys.hasCompletionItemProvider = new RawContextKey('editorHasCompletionItemProvider', false);\r\n EditorContextKeys.hasCodeActionsProvider = new RawContextKey('editorHasCodeActionsProvider', false);\r\n EditorContextKeys.hasCodeLensProvider = new RawContextKey('editorHasCodeLensProvider', false);\r\n EditorContextKeys.hasDefinitionProvider = new RawContextKey('editorHasDefinitionProvider', false);\r\n EditorContextKeys.hasDeclarationProvider = new RawContextKey('editorHasDeclarationProvider', false);\r\n EditorContextKeys.hasImplementationProvider = new RawContextKey('editorHasImplementationProvider', false);\r\n EditorContextKeys.hasTypeDefinitionProvider = new RawContextKey('editorHasTypeDefinitionProvider', false);\r\n EditorContextKeys.hasHoverProvider = new RawContextKey('editorHasHoverProvider', false);\r\n EditorContextKeys.hasDocumentHighlightProvider = new RawContextKey('editorHasDocumentHighlightProvider', false);\r\n EditorContextKeys.hasDocumentSymbolProvider = new RawContextKey('editorHasDocumentSymbolProvider', false);\r\n EditorContextKeys.hasReferenceProvider = new RawContextKey('editorHasReferenceProvider', false);\r\n EditorContextKeys.hasRenameProvider = new RawContextKey('editorHasRenameProvider', false);\r\n EditorContextKeys.hasSignatureHelpProvider = new RawContextKey('editorHasSignatureHelpProvider', false);\r\n // -- mode context keys: formatting\r\n EditorContextKeys.hasDocumentFormattingProvider = new RawContextKey('editorHasDocumentFormattingProvider', false);\r\n EditorContextKeys.hasDocumentSelectionFormattingProvider = new RawContextKey('editorHasDocumentSelectionFormattingProvider', false);\r\n EditorContextKeys.hasMultipleDocumentFormattingProvider = new RawContextKey('editorHasMultipleDocumentFormattingProvider', false);\r\n EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider = new RawContextKey('editorHasMultipleDocumentSelectionFormattingProvider', false);\r\n})(EditorContextKeys || (EditorContextKeys = {}));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Range } from '../core/range.js';\r\nimport { Selection } from '../core/selection.js';\r\nvar SurroundSelectionCommand = /** @class */ (function () {\r\n function SurroundSelectionCommand(range, charBeforeSelection, charAfterSelection) {\r\n this._range = range;\r\n this._charBeforeSelection = charBeforeSelection;\r\n this._charAfterSelection = charAfterSelection;\r\n }\r\n SurroundSelectionCommand.prototype.getEditOperations = function (model, builder) {\r\n builder.addTrackedEditOperation(new Range(this._range.startLineNumber, this._range.startColumn, this._range.startLineNumber, this._range.startColumn), this._charBeforeSelection);\r\n builder.addTrackedEditOperation(new Range(this._range.endLineNumber, this._range.endColumn, this._range.endLineNumber, this._range.endColumn), this._charAfterSelection);\r\n };\r\n SurroundSelectionCommand.prototype.computeCursorState = function (model, helper) {\r\n var inverseEditOperations = helper.getInverseEditOperations();\r\n var firstOperationRange = inverseEditOperations[0].range;\r\n var secondOperationRange = inverseEditOperations[1].range;\r\n return new Selection(firstOperationRange.endLineNumber, firstOperationRange.endColumn, secondOperationRange.endLineNumber, secondOperationRange.endColumn - this._charAfterSelection.length);\r\n };\r\n return SurroundSelectionCommand;\r\n}());\r\nexport { SurroundSelectionCommand };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { ReplaceCommand, ReplaceCommandWithOffsetCursorState, ReplaceCommandWithoutChangingPosition, ReplaceCommandThatPreservesSelection } from '../commands/replaceCommand.js';\r\nimport { ShiftCommand } from '../commands/shiftCommand.js';\r\nimport { SurroundSelectionCommand } from '../commands/surroundSelectionCommand.js';\r\nimport { CursorColumns, EditOperationResult, isQuote } from './cursorCommon.js';\r\nimport { getMapForWordSeparators } from './wordCharacterClassifier.js';\r\nimport { Range } from '../core/range.js';\r\nimport { Selection } from '../core/selection.js';\r\nimport { IndentAction } from '../modes/languageConfiguration.js';\r\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\r\nvar TypeOperations = /** @class */ (function () {\r\n function TypeOperations() {\r\n }\r\n TypeOperations.indent = function (config, model, selections) {\r\n if (model === null || selections === null) {\r\n return [];\r\n }\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n commands[i] = new ShiftCommand(selections[i], {\r\n isUnshift: false,\r\n tabSize: config.tabSize,\r\n indentSize: config.indentSize,\r\n insertSpaces: config.insertSpaces,\r\n useTabStops: config.useTabStops,\r\n autoIndent: config.autoIndent\r\n });\r\n }\r\n return commands;\r\n };\r\n TypeOperations.outdent = function (config, model, selections) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n commands[i] = new ShiftCommand(selections[i], {\r\n isUnshift: true,\r\n tabSize: config.tabSize,\r\n indentSize: config.indentSize,\r\n insertSpaces: config.insertSpaces,\r\n useTabStops: config.useTabStops,\r\n autoIndent: config.autoIndent\r\n });\r\n }\r\n return commands;\r\n };\r\n TypeOperations.shiftIndent = function (config, indentation, count) {\r\n count = count || 1;\r\n return ShiftCommand.shiftIndent(indentation, indentation.length + count, config.tabSize, config.indentSize, config.insertSpaces);\r\n };\r\n TypeOperations.unshiftIndent = function (config, indentation, count) {\r\n count = count || 1;\r\n return ShiftCommand.unshiftIndent(indentation, indentation.length + count, config.tabSize, config.indentSize, config.insertSpaces);\r\n };\r\n TypeOperations._distributedPaste = function (config, model, selections, text) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n commands[i] = new ReplaceCommand(selections[i], text[i]);\r\n }\r\n return new EditOperationResult(0 /* Other */, commands, {\r\n shouldPushStackElementBefore: true,\r\n shouldPushStackElementAfter: true\r\n });\r\n };\r\n TypeOperations._simplePaste = function (config, model, selections, text, pasteOnNewLine) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n var position = selection.getPosition();\r\n if (pasteOnNewLine && !selection.isEmpty()) {\r\n pasteOnNewLine = false;\r\n }\r\n if (pasteOnNewLine && text.indexOf('\\n') !== text.length - 1) {\r\n pasteOnNewLine = false;\r\n }\r\n if (pasteOnNewLine) {\r\n // Paste entire line at the beginning of line\r\n var typeSelection = new Range(position.lineNumber, 1, position.lineNumber, 1);\r\n commands[i] = new ReplaceCommandThatPreservesSelection(typeSelection, text, selection);\r\n }\r\n else {\r\n commands[i] = new ReplaceCommand(selection, text);\r\n }\r\n }\r\n return new EditOperationResult(0 /* Other */, commands, {\r\n shouldPushStackElementBefore: true,\r\n shouldPushStackElementAfter: true\r\n });\r\n };\r\n TypeOperations._distributePasteToCursors = function (config, selections, text, pasteOnNewLine, multicursorText) {\r\n if (pasteOnNewLine) {\r\n return null;\r\n }\r\n if (selections.length === 1) {\r\n return null;\r\n }\r\n if (multicursorText && multicursorText.length === selections.length) {\r\n return multicursorText;\r\n }\r\n if (config.multiCursorPaste === 'spread') {\r\n // Try to spread the pasted text in case the line count matches the cursor count\r\n // Remove trailing \\n if present\r\n if (text.charCodeAt(text.length - 1) === 10 /* LineFeed */) {\r\n text = text.substr(0, text.length - 1);\r\n }\r\n // Remove trailing \\r if present\r\n if (text.charCodeAt(text.length - 1) === 13 /* CarriageReturn */) {\r\n text = text.substr(0, text.length - 1);\r\n }\r\n var lines = text.split(/\\r\\n|\\r|\\n/);\r\n if (lines.length === selections.length) {\r\n return lines;\r\n }\r\n }\r\n return null;\r\n };\r\n TypeOperations.paste = function (config, model, selections, text, pasteOnNewLine, multicursorText) {\r\n var distributedPaste = this._distributePasteToCursors(config, selections, text, pasteOnNewLine, multicursorText);\r\n if (distributedPaste) {\r\n selections = selections.sort(Range.compareRangesUsingStarts);\r\n return this._distributedPaste(config, model, selections, distributedPaste);\r\n }\r\n else {\r\n return this._simplePaste(config, model, selections, text, pasteOnNewLine);\r\n }\r\n };\r\n TypeOperations._goodIndentForLine = function (config, model, lineNumber) {\r\n var action = null;\r\n var indentation = '';\r\n var expectedIndentAction = LanguageConfigurationRegistry.getInheritIndentForLine(config.autoIndent, model, lineNumber, false);\r\n if (expectedIndentAction) {\r\n action = expectedIndentAction.action;\r\n indentation = expectedIndentAction.indentation;\r\n }\r\n else if (lineNumber > 1) {\r\n var lastLineNumber = void 0;\r\n for (lastLineNumber = lineNumber - 1; lastLineNumber >= 1; lastLineNumber--) {\r\n var lineText = model.getLineContent(lastLineNumber);\r\n var nonWhitespaceIdx = strings.lastNonWhitespaceIndex(lineText);\r\n if (nonWhitespaceIdx >= 0) {\r\n break;\r\n }\r\n }\r\n if (lastLineNumber < 1) {\r\n // No previous line with content found\r\n return null;\r\n }\r\n var maxColumn = model.getLineMaxColumn(lastLineNumber);\r\n var expectedEnterAction = LanguageConfigurationRegistry.getEnterAction(config.autoIndent, model, new Range(lastLineNumber, maxColumn, lastLineNumber, maxColumn));\r\n if (expectedEnterAction) {\r\n indentation = expectedEnterAction.indentation + expectedEnterAction.appendText;\r\n }\r\n }\r\n if (action) {\r\n if (action === IndentAction.Indent) {\r\n indentation = TypeOperations.shiftIndent(config, indentation);\r\n }\r\n if (action === IndentAction.Outdent) {\r\n indentation = TypeOperations.unshiftIndent(config, indentation);\r\n }\r\n indentation = config.normalizeIndentation(indentation);\r\n }\r\n if (!indentation) {\r\n return null;\r\n }\r\n return indentation;\r\n };\r\n TypeOperations._replaceJumpToNextIndent = function (config, model, selection, insertsAutoWhitespace) {\r\n var typeText = '';\r\n var position = selection.getStartPosition();\r\n if (config.insertSpaces) {\r\n var visibleColumnFromColumn = CursorColumns.visibleColumnFromColumn2(config, model, position);\r\n var indentSize = config.indentSize;\r\n var spacesCnt = indentSize - (visibleColumnFromColumn % indentSize);\r\n for (var i = 0; i < spacesCnt; i++) {\r\n typeText += ' ';\r\n }\r\n }\r\n else {\r\n typeText = '\\t';\r\n }\r\n return new ReplaceCommand(selection, typeText, insertsAutoWhitespace);\r\n };\r\n TypeOperations.tab = function (config, model, selections) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n if (selection.isEmpty()) {\r\n var lineText = model.getLineContent(selection.startLineNumber);\r\n if (/^\\s*$/.test(lineText) && model.isCheapToTokenize(selection.startLineNumber)) {\r\n var goodIndent = this._goodIndentForLine(config, model, selection.startLineNumber);\r\n goodIndent = goodIndent || '\\t';\r\n var possibleTypeText = config.normalizeIndentation(goodIndent);\r\n if (!strings.startsWith(lineText, possibleTypeText)) {\r\n commands[i] = new ReplaceCommand(new Range(selection.startLineNumber, 1, selection.startLineNumber, lineText.length + 1), possibleTypeText, true);\r\n continue;\r\n }\r\n }\r\n commands[i] = this._replaceJumpToNextIndent(config, model, selection, true);\r\n }\r\n else {\r\n if (selection.startLineNumber === selection.endLineNumber) {\r\n var lineMaxColumn = model.getLineMaxColumn(selection.startLineNumber);\r\n if (selection.startColumn !== 1 || selection.endColumn !== lineMaxColumn) {\r\n // This is a single line selection that is not the entire line\r\n commands[i] = this._replaceJumpToNextIndent(config, model, selection, false);\r\n continue;\r\n }\r\n }\r\n commands[i] = new ShiftCommand(selection, {\r\n isUnshift: false,\r\n tabSize: config.tabSize,\r\n indentSize: config.indentSize,\r\n insertSpaces: config.insertSpaces,\r\n useTabStops: config.useTabStops,\r\n autoIndent: config.autoIndent\r\n });\r\n }\r\n }\r\n return commands;\r\n };\r\n TypeOperations.replacePreviousChar = function (prevEditOperationType, config, model, selections, txt, replaceCharCnt) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n if (!selection.isEmpty()) {\r\n // looks like https://github.com/Microsoft/vscode/issues/2773\r\n // where a cursor operation occurred before a canceled composition\r\n // => ignore composition\r\n commands[i] = null;\r\n continue;\r\n }\r\n var pos = selection.getPosition();\r\n var startColumn = Math.max(1, pos.column - replaceCharCnt);\r\n var range = new Range(pos.lineNumber, startColumn, pos.lineNumber, pos.column);\r\n commands[i] = new ReplaceCommand(range, txt);\r\n }\r\n return new EditOperationResult(1 /* Typing */, commands, {\r\n shouldPushStackElementBefore: (prevEditOperationType !== 1 /* Typing */),\r\n shouldPushStackElementAfter: false\r\n });\r\n };\r\n TypeOperations._typeCommand = function (range, text, keepPosition) {\r\n if (keepPosition) {\r\n return new ReplaceCommandWithoutChangingPosition(range, text, true);\r\n }\r\n else {\r\n return new ReplaceCommand(range, text, true);\r\n }\r\n };\r\n TypeOperations._enter = function (config, model, keepPosition, range) {\r\n if (config.autoIndent === 0 /* None */) {\r\n return TypeOperations._typeCommand(range, '\\n', keepPosition);\r\n }\r\n if (!model.isCheapToTokenize(range.getStartPosition().lineNumber) || config.autoIndent === 1 /* Keep */) {\r\n var lineText_1 = model.getLineContent(range.startLineNumber);\r\n var indentation_1 = strings.getLeadingWhitespace(lineText_1).substring(0, range.startColumn - 1);\r\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(indentation_1), keepPosition);\r\n }\r\n var r = LanguageConfigurationRegistry.getEnterAction(config.autoIndent, model, range);\r\n if (r) {\r\n if (r.indentAction === IndentAction.None) {\r\n // Nothing special\r\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(r.indentation + r.appendText), keepPosition);\r\n }\r\n else if (r.indentAction === IndentAction.Indent) {\r\n // Indent once\r\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(r.indentation + r.appendText), keepPosition);\r\n }\r\n else if (r.indentAction === IndentAction.IndentOutdent) {\r\n // Ultra special\r\n var normalIndent = config.normalizeIndentation(r.indentation);\r\n var increasedIndent = config.normalizeIndentation(r.indentation + r.appendText);\r\n var typeText = '\\n' + increasedIndent + '\\n' + normalIndent;\r\n if (keepPosition) {\r\n return new ReplaceCommandWithoutChangingPosition(range, typeText, true);\r\n }\r\n else {\r\n return new ReplaceCommandWithOffsetCursorState(range, typeText, -1, increasedIndent.length - normalIndent.length, true);\r\n }\r\n }\r\n else if (r.indentAction === IndentAction.Outdent) {\r\n var actualIndentation = TypeOperations.unshiftIndent(config, r.indentation);\r\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(actualIndentation + r.appendText), keepPosition);\r\n }\r\n }\r\n var lineText = model.getLineContent(range.startLineNumber);\r\n var indentation = strings.getLeadingWhitespace(lineText).substring(0, range.startColumn - 1);\r\n if (config.autoIndent >= 4 /* Full */) {\r\n var ir = LanguageConfigurationRegistry.getIndentForEnter(config.autoIndent, model, range, {\r\n unshiftIndent: function (indent) {\r\n return TypeOperations.unshiftIndent(config, indent);\r\n },\r\n shiftIndent: function (indent) {\r\n return TypeOperations.shiftIndent(config, indent);\r\n },\r\n normalizeIndentation: function (indent) {\r\n return config.normalizeIndentation(indent);\r\n }\r\n });\r\n if (ir) {\r\n var oldEndViewColumn = CursorColumns.visibleColumnFromColumn2(config, model, range.getEndPosition());\r\n var oldEndColumn = range.endColumn;\r\n var beforeText = '\\n';\r\n if (indentation !== config.normalizeIndentation(ir.beforeEnter)) {\r\n beforeText = config.normalizeIndentation(ir.beforeEnter) + lineText.substring(indentation.length, range.startColumn - 1) + '\\n';\r\n range = new Range(range.startLineNumber, 1, range.endLineNumber, range.endColumn);\r\n }\r\n var newLineContent = model.getLineContent(range.endLineNumber);\r\n var firstNonWhitespace = strings.firstNonWhitespaceIndex(newLineContent);\r\n if (firstNonWhitespace >= 0) {\r\n range = range.setEndPosition(range.endLineNumber, Math.max(range.endColumn, firstNonWhitespace + 1));\r\n }\r\n else {\r\n range = range.setEndPosition(range.endLineNumber, model.getLineMaxColumn(range.endLineNumber));\r\n }\r\n if (keepPosition) {\r\n return new ReplaceCommandWithoutChangingPosition(range, beforeText + config.normalizeIndentation(ir.afterEnter), true);\r\n }\r\n else {\r\n var offset = 0;\r\n if (oldEndColumn <= firstNonWhitespace + 1) {\r\n if (!config.insertSpaces) {\r\n oldEndViewColumn = Math.ceil(oldEndViewColumn / config.indentSize);\r\n }\r\n offset = Math.min(oldEndViewColumn + 1 - config.normalizeIndentation(ir.afterEnter).length - 1, 0);\r\n }\r\n return new ReplaceCommandWithOffsetCursorState(range, beforeText + config.normalizeIndentation(ir.afterEnter), 0, offset, true);\r\n }\r\n }\r\n }\r\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(indentation), keepPosition);\r\n };\r\n TypeOperations._isAutoIndentType = function (config, model, selections) {\r\n if (config.autoIndent < 4 /* Full */) {\r\n return false;\r\n }\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n if (!model.isCheapToTokenize(selections[i].getEndPosition().lineNumber)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n TypeOperations._runAutoIndentType = function (config, model, range, ch) {\r\n var currentIndentation = LanguageConfigurationRegistry.getIndentationAtPosition(model, range.startLineNumber, range.startColumn);\r\n var actualIndentation = LanguageConfigurationRegistry.getIndentActionForType(config.autoIndent, model, range, ch, {\r\n shiftIndent: function (indentation) {\r\n return TypeOperations.shiftIndent(config, indentation);\r\n },\r\n unshiftIndent: function (indentation) {\r\n return TypeOperations.unshiftIndent(config, indentation);\r\n },\r\n });\r\n if (actualIndentation === null) {\r\n return null;\r\n }\r\n if (actualIndentation !== config.normalizeIndentation(currentIndentation)) {\r\n var firstNonWhitespace = model.getLineFirstNonWhitespaceColumn(range.startLineNumber);\r\n if (firstNonWhitespace === 0) {\r\n return TypeOperations._typeCommand(new Range(range.startLineNumber, 0, range.endLineNumber, range.endColumn), config.normalizeIndentation(actualIndentation) + ch, false);\r\n }\r\n else {\r\n return TypeOperations._typeCommand(new Range(range.startLineNumber, 0, range.endLineNumber, range.endColumn), config.normalizeIndentation(actualIndentation) +\r\n model.getLineContent(range.startLineNumber).substring(firstNonWhitespace - 1, range.startColumn - 1) + ch, false);\r\n }\r\n }\r\n return null;\r\n };\r\n TypeOperations._isAutoClosingOvertype = function (config, model, selections, autoClosedCharacters, ch) {\r\n if (config.autoClosingOvertype === 'never') {\r\n return false;\r\n }\r\n if (!config.autoClosingPairsClose2.has(ch)) {\r\n return false;\r\n }\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n if (!selection.isEmpty()) {\r\n return false;\r\n }\r\n var position = selection.getPosition();\r\n var lineText = model.getLineContent(position.lineNumber);\r\n var afterCharacter = lineText.charAt(position.column - 1);\r\n if (afterCharacter !== ch) {\r\n return false;\r\n }\r\n // Do not over-type quotes after a backslash\r\n var chIsQuote = isQuote(ch);\r\n var beforeCharacter = position.column > 2 ? lineText.charCodeAt(position.column - 2) : 0 /* Null */;\r\n if (beforeCharacter === 92 /* Backslash */ && chIsQuote) {\r\n return false;\r\n }\r\n // Must over-type a closing character typed by the editor\r\n if (config.autoClosingOvertype === 'auto') {\r\n var found = false;\r\n for (var j = 0, lenJ = autoClosedCharacters.length; j < lenJ; j++) {\r\n var autoClosedCharacter = autoClosedCharacters[j];\r\n if (position.lineNumber === autoClosedCharacter.startLineNumber && position.column === autoClosedCharacter.startColumn) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n TypeOperations._runAutoClosingOvertype = function (prevEditOperationType, config, model, selections, ch) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n var position = selection.getPosition();\r\n var typeSelection = new Range(position.lineNumber, position.column, position.lineNumber, position.column + 1);\r\n commands[i] = new ReplaceCommand(typeSelection, ch);\r\n }\r\n return new EditOperationResult(1 /* Typing */, commands, {\r\n shouldPushStackElementBefore: (prevEditOperationType !== 1 /* Typing */),\r\n shouldPushStackElementAfter: false\r\n });\r\n };\r\n TypeOperations._isBeforeClosingBrace = function (config, autoClosingPair, characterAfter) {\r\n var otherAutoClosingPairs = config.autoClosingPairsClose2.get(characterAfter);\r\n if (!otherAutoClosingPairs) {\r\n return false;\r\n }\r\n var thisBraceIsSymmetric = (autoClosingPair.open === autoClosingPair.close);\r\n for (var _i = 0, otherAutoClosingPairs_1 = otherAutoClosingPairs; _i < otherAutoClosingPairs_1.length; _i++) {\r\n var otherAutoClosingPair = otherAutoClosingPairs_1[_i];\r\n var otherBraceIsSymmetric = (otherAutoClosingPair.open === otherAutoClosingPair.close);\r\n if (!thisBraceIsSymmetric && otherBraceIsSymmetric) {\r\n continue;\r\n }\r\n return true;\r\n }\r\n return false;\r\n };\r\n TypeOperations._findAutoClosingPairOpen = function (config, model, positions, ch) {\r\n var autoClosingPairCandidates = config.autoClosingPairsOpen2.get(ch);\r\n if (!autoClosingPairCandidates) {\r\n return null;\r\n }\r\n // Determine which auto-closing pair it is\r\n var autoClosingPair = null;\r\n for (var _i = 0, autoClosingPairCandidates_1 = autoClosingPairCandidates; _i < autoClosingPairCandidates_1.length; _i++) {\r\n var autoClosingPairCandidate = autoClosingPairCandidates_1[_i];\r\n if (autoClosingPair === null || autoClosingPairCandidate.open.length > autoClosingPair.open.length) {\r\n var candidateIsMatch = true;\r\n for (var _a = 0, positions_1 = positions; _a < positions_1.length; _a++) {\r\n var position = positions_1[_a];\r\n var relevantText = model.getValueInRange(new Range(position.lineNumber, position.column - autoClosingPairCandidate.open.length + 1, position.lineNumber, position.column));\r\n if (relevantText + ch !== autoClosingPairCandidate.open) {\r\n candidateIsMatch = false;\r\n break;\r\n }\r\n }\r\n if (candidateIsMatch) {\r\n autoClosingPair = autoClosingPairCandidate;\r\n }\r\n }\r\n }\r\n return autoClosingPair;\r\n };\r\n TypeOperations._isAutoClosingOpenCharType = function (config, model, selections, ch, insertOpenCharacter) {\r\n var chIsQuote = isQuote(ch);\r\n var autoCloseConfig = chIsQuote ? config.autoClosingQuotes : config.autoClosingBrackets;\r\n if (autoCloseConfig === 'never') {\r\n return null;\r\n }\r\n var autoClosingPair = this._findAutoClosingPairOpen(config, model, selections.map(function (s) { return s.getPosition(); }), ch);\r\n if (!autoClosingPair) {\r\n return null;\r\n }\r\n var shouldAutoCloseBefore = chIsQuote ? config.shouldAutoCloseBefore.quote : config.shouldAutoCloseBefore.bracket;\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n if (!selection.isEmpty()) {\r\n return null;\r\n }\r\n var position = selection.getPosition();\r\n var lineText = model.getLineContent(position.lineNumber);\r\n // Only consider auto closing the pair if a space follows or if another autoclosed pair follows\r\n if (lineText.length > position.column - 1) {\r\n var characterAfter = lineText.charAt(position.column - 1);\r\n var isBeforeCloseBrace = TypeOperations._isBeforeClosingBrace(config, autoClosingPair, characterAfter);\r\n if (!isBeforeCloseBrace && !shouldAutoCloseBefore(characterAfter)) {\r\n return null;\r\n }\r\n }\r\n if (!model.isCheapToTokenize(position.lineNumber)) {\r\n // Do not force tokenization\r\n return null;\r\n }\r\n // Do not auto-close ' or \" after a word character\r\n if (autoClosingPair.open.length === 1 && chIsQuote && autoCloseConfig !== 'always') {\r\n var wordSeparators = getMapForWordSeparators(config.wordSeparators);\r\n if (insertOpenCharacter && position.column > 1 && wordSeparators.get(lineText.charCodeAt(position.column - 2)) === 0 /* Regular */) {\r\n return null;\r\n }\r\n if (!insertOpenCharacter && position.column > 2 && wordSeparators.get(lineText.charCodeAt(position.column - 3)) === 0 /* Regular */) {\r\n return null;\r\n }\r\n }\r\n model.forceTokenization(position.lineNumber);\r\n var lineTokens = model.getLineTokens(position.lineNumber);\r\n var shouldAutoClosePair = false;\r\n try {\r\n shouldAutoClosePair = LanguageConfigurationRegistry.shouldAutoClosePair(autoClosingPair, lineTokens, insertOpenCharacter ? position.column : position.column - 1);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n }\r\n if (!shouldAutoClosePair) {\r\n return null;\r\n }\r\n }\r\n return autoClosingPair;\r\n };\r\n TypeOperations._runAutoClosingOpenCharType = function (prevEditOperationType, config, model, selections, ch, insertOpenCharacter, autoClosingPair) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n commands[i] = new TypeWithAutoClosingCommand(selection, ch, insertOpenCharacter, autoClosingPair.close);\r\n }\r\n return new EditOperationResult(1 /* Typing */, commands, {\r\n shouldPushStackElementBefore: true,\r\n shouldPushStackElementAfter: false\r\n });\r\n };\r\n TypeOperations._shouldSurroundChar = function (config, ch) {\r\n if (isQuote(ch)) {\r\n return (config.autoSurround === 'quotes' || config.autoSurround === 'languageDefined');\r\n }\r\n else {\r\n // Character is a bracket\r\n return (config.autoSurround === 'brackets' || config.autoSurround === 'languageDefined');\r\n }\r\n };\r\n TypeOperations._isSurroundSelectionType = function (config, model, selections, ch) {\r\n if (!TypeOperations._shouldSurroundChar(config, ch) || !config.surroundingPairs.hasOwnProperty(ch)) {\r\n return false;\r\n }\r\n var isTypingAQuoteCharacter = isQuote(ch);\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n if (selection.isEmpty()) {\r\n return false;\r\n }\r\n var selectionContainsOnlyWhitespace = true;\r\n for (var lineNumber = selection.startLineNumber; lineNumber <= selection.endLineNumber; lineNumber++) {\r\n var lineText = model.getLineContent(lineNumber);\r\n var startIndex = (lineNumber === selection.startLineNumber ? selection.startColumn - 1 : 0);\r\n var endIndex = (lineNumber === selection.endLineNumber ? selection.endColumn - 1 : lineText.length);\r\n var selectedText = lineText.substring(startIndex, endIndex);\r\n if (/[^ \\t]/.test(selectedText)) {\r\n // this selected text contains something other than whitespace\r\n selectionContainsOnlyWhitespace = false;\r\n break;\r\n }\r\n }\r\n if (selectionContainsOnlyWhitespace) {\r\n return false;\r\n }\r\n if (isTypingAQuoteCharacter && selection.startLineNumber === selection.endLineNumber && selection.startColumn + 1 === selection.endColumn) {\r\n var selectionText = model.getValueInRange(selection);\r\n if (isQuote(selectionText)) {\r\n // Typing a quote character on top of another quote character\r\n // => disable surround selection type\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n TypeOperations._runSurroundSelectionType = function (prevEditOperationType, config, model, selections, ch) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n var closeCharacter = config.surroundingPairs[ch];\r\n commands[i] = new SurroundSelectionCommand(selection, ch, closeCharacter);\r\n }\r\n return new EditOperationResult(0 /* Other */, commands, {\r\n shouldPushStackElementBefore: true,\r\n shouldPushStackElementAfter: true\r\n });\r\n };\r\n TypeOperations._isTypeInterceptorElectricChar = function (config, model, selections) {\r\n if (selections.length === 1 && model.isCheapToTokenize(selections[0].getEndPosition().lineNumber)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n TypeOperations._typeInterceptorElectricChar = function (prevEditOperationType, config, model, selection, ch) {\r\n if (!config.electricChars.hasOwnProperty(ch) || !selection.isEmpty()) {\r\n return null;\r\n }\r\n var position = selection.getPosition();\r\n model.forceTokenization(position.lineNumber);\r\n var lineTokens = model.getLineTokens(position.lineNumber);\r\n var electricAction;\r\n try {\r\n electricAction = LanguageConfigurationRegistry.onElectricCharacter(ch, lineTokens, position.column);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n return null;\r\n }\r\n if (!electricAction) {\r\n return null;\r\n }\r\n if (electricAction.matchOpenBracket) {\r\n var endColumn = (lineTokens.getLineContent() + ch).lastIndexOf(electricAction.matchOpenBracket) + 1;\r\n var match = model.findMatchingBracketUp(electricAction.matchOpenBracket, {\r\n lineNumber: position.lineNumber,\r\n column: endColumn\r\n });\r\n if (match) {\r\n if (match.startLineNumber === position.lineNumber) {\r\n // matched something on the same line => no change in indentation\r\n return null;\r\n }\r\n var matchLine = model.getLineContent(match.startLineNumber);\r\n var matchLineIndentation = strings.getLeadingWhitespace(matchLine);\r\n var newIndentation = config.normalizeIndentation(matchLineIndentation);\r\n var lineText = model.getLineContent(position.lineNumber);\r\n var lineFirstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(position.lineNumber) || position.column;\r\n var prefix = lineText.substring(lineFirstNonBlankColumn - 1, position.column - 1);\r\n var typeText = newIndentation + prefix + ch;\r\n var typeSelection = new Range(position.lineNumber, 1, position.lineNumber, position.column);\r\n var command = new ReplaceCommand(typeSelection, typeText);\r\n return new EditOperationResult(1 /* Typing */, [command], {\r\n shouldPushStackElementBefore: false,\r\n shouldPushStackElementAfter: true\r\n });\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * This is very similar with typing, but the character is already in the text buffer!\r\n */\r\n TypeOperations.compositionEndWithInterceptors = function (prevEditOperationType, config, model, selectionsWhenCompositionStarted, selections, autoClosedCharacters) {\r\n if (!selectionsWhenCompositionStarted || Selection.selectionsArrEqual(selectionsWhenCompositionStarted, selections)) {\r\n // no content was typed\r\n return null;\r\n }\r\n var ch = null;\r\n // extract last typed character\r\n for (var _i = 0, selections_1 = selections; _i < selections_1.length; _i++) {\r\n var selection = selections_1[_i];\r\n if (!selection.isEmpty()) {\r\n return null;\r\n }\r\n var position = selection.getPosition();\r\n var currentChar = model.getValueInRange(new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column));\r\n if (ch === null) {\r\n ch = currentChar;\r\n }\r\n else if (ch !== currentChar) {\r\n return null;\r\n }\r\n }\r\n if (!ch) {\r\n return null;\r\n }\r\n if (this._isAutoClosingOvertype(config, model, selections, autoClosedCharacters, ch)) {\r\n // Unfortunately, the close character is at this point \"doubled\", so we need to delete it...\r\n var commands = selections.map(function (s) { return new ReplaceCommand(new Range(s.positionLineNumber, s.positionColumn, s.positionLineNumber, s.positionColumn + 1), '', false); });\r\n return new EditOperationResult(1 /* Typing */, commands, {\r\n shouldPushStackElementBefore: true,\r\n shouldPushStackElementAfter: false\r\n });\r\n }\r\n var autoClosingPairOpenCharType = this._isAutoClosingOpenCharType(config, model, selections, ch, false);\r\n if (autoClosingPairOpenCharType) {\r\n return this._runAutoClosingOpenCharType(prevEditOperationType, config, model, selections, ch, false, autoClosingPairOpenCharType);\r\n }\r\n return null;\r\n };\r\n TypeOperations.typeWithInterceptors = function (prevEditOperationType, config, model, selections, autoClosedCharacters, ch) {\r\n if (ch === '\\n') {\r\n var commands_1 = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n commands_1[i] = TypeOperations._enter(config, model, false, selections[i]);\r\n }\r\n return new EditOperationResult(1 /* Typing */, commands_1, {\r\n shouldPushStackElementBefore: true,\r\n shouldPushStackElementAfter: false,\r\n });\r\n }\r\n if (this._isAutoIndentType(config, model, selections)) {\r\n var commands_2 = [];\r\n var autoIndentFails = false;\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n commands_2[i] = this._runAutoIndentType(config, model, selections[i], ch);\r\n if (!commands_2[i]) {\r\n autoIndentFails = true;\r\n break;\r\n }\r\n }\r\n if (!autoIndentFails) {\r\n return new EditOperationResult(1 /* Typing */, commands_2, {\r\n shouldPushStackElementBefore: true,\r\n shouldPushStackElementAfter: false,\r\n });\r\n }\r\n }\r\n if (this._isAutoClosingOvertype(config, model, selections, autoClosedCharacters, ch)) {\r\n return this._runAutoClosingOvertype(prevEditOperationType, config, model, selections, ch);\r\n }\r\n var autoClosingPairOpenCharType = this._isAutoClosingOpenCharType(config, model, selections, ch, true);\r\n if (autoClosingPairOpenCharType) {\r\n return this._runAutoClosingOpenCharType(prevEditOperationType, config, model, selections, ch, true, autoClosingPairOpenCharType);\r\n }\r\n if (this._isSurroundSelectionType(config, model, selections, ch)) {\r\n return this._runSurroundSelectionType(prevEditOperationType, config, model, selections, ch);\r\n }\r\n // Electric characters make sense only when dealing with a single cursor,\r\n // as multiple cursors typing brackets for example would interfer with bracket matching\r\n if (this._isTypeInterceptorElectricChar(config, model, selections)) {\r\n var r = this._typeInterceptorElectricChar(prevEditOperationType, config, model, selections[0], ch);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n // A simple character type\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n commands[i] = new ReplaceCommand(selections[i], ch);\r\n }\r\n var shouldPushStackElementBefore = (prevEditOperationType !== 1 /* Typing */);\r\n if (ch === ' ') {\r\n shouldPushStackElementBefore = true;\r\n }\r\n return new EditOperationResult(1 /* Typing */, commands, {\r\n shouldPushStackElementBefore: shouldPushStackElementBefore,\r\n shouldPushStackElementAfter: false\r\n });\r\n };\r\n TypeOperations.typeWithoutInterceptors = function (prevEditOperationType, config, model, selections, str) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n commands[i] = new ReplaceCommand(selections[i], str);\r\n }\r\n return new EditOperationResult(1 /* Typing */, commands, {\r\n shouldPushStackElementBefore: (prevEditOperationType !== 1 /* Typing */),\r\n shouldPushStackElementAfter: false\r\n });\r\n };\r\n TypeOperations.lineInsertBefore = function (config, model, selections) {\r\n if (model === null || selections === null) {\r\n return [];\r\n }\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var lineNumber = selections[i].positionLineNumber;\r\n if (lineNumber === 1) {\r\n commands[i] = new ReplaceCommandWithoutChangingPosition(new Range(1, 1, 1, 1), '\\n');\r\n }\r\n else {\r\n lineNumber--;\r\n var column = model.getLineMaxColumn(lineNumber);\r\n commands[i] = this._enter(config, model, false, new Range(lineNumber, column, lineNumber, column));\r\n }\r\n }\r\n return commands;\r\n };\r\n TypeOperations.lineInsertAfter = function (config, model, selections) {\r\n if (model === null || selections === null) {\r\n return [];\r\n }\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var lineNumber = selections[i].positionLineNumber;\r\n var column = model.getLineMaxColumn(lineNumber);\r\n commands[i] = this._enter(config, model, false, new Range(lineNumber, column, lineNumber, column));\r\n }\r\n return commands;\r\n };\r\n TypeOperations.lineBreakInsert = function (config, model, selections) {\r\n var commands = [];\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n commands[i] = this._enter(config, model, true, selections[i]);\r\n }\r\n return commands;\r\n };\r\n return TypeOperations;\r\n}());\r\nexport { TypeOperations };\r\nvar TypeWithAutoClosingCommand = /** @class */ (function (_super) {\r\n __extends(TypeWithAutoClosingCommand, _super);\r\n function TypeWithAutoClosingCommand(selection, openCharacter, insertOpenCharacter, closeCharacter) {\r\n var _this = _super.call(this, selection, (insertOpenCharacter ? openCharacter : '') + closeCharacter, 0, -closeCharacter.length) || this;\r\n _this._openCharacter = openCharacter;\r\n _this._closeCharacter = closeCharacter;\r\n _this.closeCharacterRange = null;\r\n _this.enclosingRange = null;\r\n return _this;\r\n }\r\n TypeWithAutoClosingCommand.prototype.computeCursorState = function (model, helper) {\r\n var inverseEditOperations = helper.getInverseEditOperations();\r\n var range = inverseEditOperations[0].range;\r\n this.closeCharacterRange = new Range(range.startLineNumber, range.endColumn - this._closeCharacter.length, range.endLineNumber, range.endColumn);\r\n this.enclosingRange = new Range(range.startLineNumber, range.endColumn - this._openCharacter.length - this._closeCharacter.length, range.endLineNumber, range.endColumn);\r\n return _super.prototype.computeCursorState.call(this, model, helper);\r\n };\r\n return TypeWithAutoClosingCommand;\r\n}(ReplaceCommandWithOffsetCursorState));\r\nexport { TypeWithAutoClosingCommand };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as nls from '../../../nls.js';\r\nimport * as types from '../../../base/common/types.js';\r\nimport { Command, EditorCommand, registerEditorCommand } from '../editorExtensions.js';\r\nimport { ICodeEditorService } from '../services/codeEditorService.js';\r\nimport { ColumnSelection } from '../../common/controller/cursorColumnSelection.js';\r\nimport { CursorState } from '../../common/controller/cursorCommon.js';\r\nimport { DeleteOperations } from '../../common/controller/cursorDeleteOperations.js';\r\nimport { CursorMove as CursorMove_, CursorMoveCommands } from '../../common/controller/cursorMoveCommands.js';\r\nimport { TypeOperations } from '../../common/controller/cursorTypeOperations.js';\r\nimport { Position } from '../../common/core/position.js';\r\nimport { Range } from '../../common/core/range.js';\r\nimport { Handler } from '../../common/editorCommon.js';\r\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\r\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\r\nvar CORE_WEIGHT = 0 /* EditorCore */;\r\nvar CoreEditorCommand = /** @class */ (function (_super) {\r\n __extends(CoreEditorCommand, _super);\r\n function CoreEditorCommand() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n CoreEditorCommand.prototype.runEditorCommand = function (accessor, editor, args) {\r\n var cursors = editor._getCursors();\r\n if (!cursors) {\r\n // the editor has no view => has no cursors\r\n return;\r\n }\r\n this.runCoreEditorCommand(cursors, args || {});\r\n };\r\n return CoreEditorCommand;\r\n}(EditorCommand));\r\nexport { CoreEditorCommand };\r\nexport var EditorScroll_;\r\n(function (EditorScroll_) {\r\n var isEditorScrollArgs = function (arg) {\r\n if (!types.isObject(arg)) {\r\n return false;\r\n }\r\n var scrollArg = arg;\r\n if (!types.isString(scrollArg.to)) {\r\n return false;\r\n }\r\n if (!types.isUndefined(scrollArg.by) && !types.isString(scrollArg.by)) {\r\n return false;\r\n }\r\n if (!types.isUndefined(scrollArg.value) && !types.isNumber(scrollArg.value)) {\r\n return false;\r\n }\r\n if (!types.isUndefined(scrollArg.revealCursor) && !types.isBoolean(scrollArg.revealCursor)) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n EditorScroll_.description = {\r\n description: 'Scroll editor in the given direction',\r\n args: [\r\n {\r\n name: 'Editor scroll argument object',\r\n description: \"Property-value pairs that can be passed through this argument:\\n\\t\\t\\t\\t\\t* 'to': A mandatory direction value.\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\\t\\t'up', 'down'\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\\t* 'by': Unit to move. Default is computed based on 'to' value.\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\\t\\t'line', 'wrappedLine', 'page', 'halfPage'\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\\t* 'value': Number of units to move. Default is '1'.\\n\\t\\t\\t\\t\\t* 'revealCursor': If 'true' reveals the cursor if it is outside view port.\\n\\t\\t\\t\\t\",\r\n constraint: isEditorScrollArgs,\r\n schema: {\r\n 'type': 'object',\r\n 'required': ['to'],\r\n 'properties': {\r\n 'to': {\r\n 'type': 'string',\r\n 'enum': ['up', 'down']\r\n },\r\n 'by': {\r\n 'type': 'string',\r\n 'enum': ['line', 'wrappedLine', 'page', 'halfPage']\r\n },\r\n 'value': {\r\n 'type': 'number',\r\n 'default': 1\r\n },\r\n 'revealCursor': {\r\n 'type': 'boolean',\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n };\r\n /**\r\n * Directions in the view for editor scroll command.\r\n */\r\n EditorScroll_.RawDirection = {\r\n Up: 'up',\r\n Down: 'down',\r\n };\r\n /**\r\n * Units for editor scroll 'by' argument\r\n */\r\n EditorScroll_.RawUnit = {\r\n Line: 'line',\r\n WrappedLine: 'wrappedLine',\r\n Page: 'page',\r\n HalfPage: 'halfPage'\r\n };\r\n function parse(args) {\r\n var direction;\r\n switch (args.to) {\r\n case EditorScroll_.RawDirection.Up:\r\n direction = 1 /* Up */;\r\n break;\r\n case EditorScroll_.RawDirection.Down:\r\n direction = 2 /* Down */;\r\n break;\r\n default:\r\n // Illegal arguments\r\n return null;\r\n }\r\n var unit;\r\n switch (args.by) {\r\n case EditorScroll_.RawUnit.Line:\r\n unit = 1 /* Line */;\r\n break;\r\n case EditorScroll_.RawUnit.WrappedLine:\r\n unit = 2 /* WrappedLine */;\r\n break;\r\n case EditorScroll_.RawUnit.Page:\r\n unit = 3 /* Page */;\r\n break;\r\n case EditorScroll_.RawUnit.HalfPage:\r\n unit = 4 /* HalfPage */;\r\n break;\r\n default:\r\n unit = 2 /* WrappedLine */;\r\n }\r\n var value = Math.floor(args.value || 1);\r\n var revealCursor = !!args.revealCursor;\r\n return {\r\n direction: direction,\r\n unit: unit,\r\n value: value,\r\n revealCursor: revealCursor,\r\n select: (!!args.select)\r\n };\r\n }\r\n EditorScroll_.parse = parse;\r\n})(EditorScroll_ || (EditorScroll_ = {}));\r\nexport var RevealLine_;\r\n(function (RevealLine_) {\r\n var isRevealLineArgs = function (arg) {\r\n if (!types.isObject(arg)) {\r\n return false;\r\n }\r\n var reveaLineArg = arg;\r\n if (!types.isNumber(reveaLineArg.lineNumber)) {\r\n return false;\r\n }\r\n if (!types.isUndefined(reveaLineArg.at) && !types.isString(reveaLineArg.at)) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n RevealLine_.description = {\r\n description: 'Reveal the given line at the given logical position',\r\n args: [\r\n {\r\n name: 'Reveal line argument object',\r\n description: \"Property-value pairs that can be passed through this argument:\\n\\t\\t\\t\\t\\t* 'lineNumber': A mandatory line number value.\\n\\t\\t\\t\\t\\t* 'at': Logical position at which line has to be revealed .\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\\t\\t'top', 'center', 'bottom'\\n\\t\\t\\t\\t\\t\\t```\\n\\t\\t\\t\\t\",\r\n constraint: isRevealLineArgs,\r\n schema: {\r\n 'type': 'object',\r\n 'required': ['lineNumber'],\r\n 'properties': {\r\n 'lineNumber': {\r\n 'type': 'number',\r\n },\r\n 'at': {\r\n 'type': 'string',\r\n 'enum': ['top', 'center', 'bottom']\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n };\r\n /**\r\n * Values for reveal line 'at' argument\r\n */\r\n RevealLine_.RawAtArgument = {\r\n Top: 'top',\r\n Center: 'center',\r\n Bottom: 'bottom'\r\n };\r\n})(RevealLine_ || (RevealLine_ = {}));\r\nexport var CoreNavigationCommands;\r\n(function (CoreNavigationCommands) {\r\n var BaseMoveToCommand = /** @class */ (function (_super) {\r\n __extends(BaseMoveToCommand, _super);\r\n function BaseMoveToCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._inSelectionMode = opts.inSelectionMode;\r\n return _this;\r\n }\r\n BaseMoveToCommand.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, [\r\n CursorMoveCommands.moveTo(cursors.context, cursors.getPrimaryCursor(), this._inSelectionMode, args.position, args.viewPosition)\r\n ]);\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return BaseMoveToCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.MoveTo = registerEditorCommand(new BaseMoveToCommand({\r\n id: '_moveTo',\r\n inSelectionMode: false,\r\n precondition: undefined\r\n }));\r\n CoreNavigationCommands.MoveToSelect = registerEditorCommand(new BaseMoveToCommand({\r\n id: '_moveToSelect',\r\n inSelectionMode: true,\r\n precondition: undefined\r\n }));\r\n var ColumnSelectCommand = /** @class */ (function (_super) {\r\n __extends(ColumnSelectCommand, _super);\r\n function ColumnSelectCommand() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n ColumnSelectCommand.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n var result = this._getColumnSelectResult(cursors.context, cursors.getPrimaryCursor(), cursors.getColumnSelectData(), args);\r\n cursors.setStates(args.source, 3 /* Explicit */, result.viewStates.map(function (viewState) { return CursorState.fromViewState(viewState); }));\r\n cursors.setColumnSelectData({\r\n isReal: true,\r\n fromViewLineNumber: result.fromLineNumber,\r\n fromViewVisualColumn: result.fromVisualColumn,\r\n toViewLineNumber: result.toLineNumber,\r\n toViewVisualColumn: result.toVisualColumn\r\n });\r\n cursors.reveal(args.source, true, (result.reversed ? 1 /* TopMost */ : 2 /* BottomMost */), 0 /* Smooth */);\r\n };\r\n return ColumnSelectCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.ColumnSelect = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_1, _super);\r\n function class_1() {\r\n return _super.call(this, {\r\n id: 'columnSelect',\r\n precondition: undefined\r\n }) || this;\r\n }\r\n class_1.prototype._getColumnSelectResult = function (context, primary, prevColumnSelectData, args) {\r\n // validate `args`\r\n var validatedPosition = context.model.validatePosition(args.position);\r\n var validatedViewPosition = context.validateViewPosition(new Position(args.viewPosition.lineNumber, args.viewPosition.column), validatedPosition);\r\n var fromViewLineNumber = args.doColumnSelect ? prevColumnSelectData.fromViewLineNumber : validatedViewPosition.lineNumber;\r\n var fromViewVisualColumn = args.doColumnSelect ? prevColumnSelectData.fromViewVisualColumn : args.mouseColumn - 1;\r\n return ColumnSelection.columnSelect(context.config, context.viewModel, fromViewLineNumber, fromViewVisualColumn, validatedViewPosition.lineNumber, args.mouseColumn - 1);\r\n };\r\n return class_1;\r\n }(ColumnSelectCommand)));\r\n CoreNavigationCommands.CursorColumnSelectLeft = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_2, _super);\r\n function class_2() {\r\n return _super.call(this, {\r\n id: 'cursorColumnSelectLeft',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 15 /* LeftArrow */,\r\n linux: { primary: 0 }\r\n }\r\n }) || this;\r\n }\r\n class_2.prototype._getColumnSelectResult = function (context, primary, prevColumnSelectData, args) {\r\n return ColumnSelection.columnSelectLeft(context.config, context.viewModel, prevColumnSelectData);\r\n };\r\n return class_2;\r\n }(ColumnSelectCommand)));\r\n CoreNavigationCommands.CursorColumnSelectRight = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_3, _super);\r\n function class_3() {\r\n return _super.call(this, {\r\n id: 'cursorColumnSelectRight',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 17 /* RightArrow */,\r\n linux: { primary: 0 }\r\n }\r\n }) || this;\r\n }\r\n class_3.prototype._getColumnSelectResult = function (context, primary, prevColumnSelectData, args) {\r\n return ColumnSelection.columnSelectRight(context.config, context.viewModel, prevColumnSelectData);\r\n };\r\n return class_3;\r\n }(ColumnSelectCommand)));\r\n var ColumnSelectUpCommand = /** @class */ (function (_super) {\r\n __extends(ColumnSelectUpCommand, _super);\r\n function ColumnSelectUpCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._isPaged = opts.isPaged;\r\n return _this;\r\n }\r\n ColumnSelectUpCommand.prototype._getColumnSelectResult = function (context, primary, prevColumnSelectData, args) {\r\n return ColumnSelection.columnSelectUp(context.config, context.viewModel, prevColumnSelectData, this._isPaged);\r\n };\r\n return ColumnSelectUpCommand;\r\n }(ColumnSelectCommand));\r\n CoreNavigationCommands.CursorColumnSelectUp = registerEditorCommand(new ColumnSelectUpCommand({\r\n isPaged: false,\r\n id: 'cursorColumnSelectUp',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 16 /* UpArrow */,\r\n linux: { primary: 0 }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorColumnSelectPageUp = registerEditorCommand(new ColumnSelectUpCommand({\r\n isPaged: true,\r\n id: 'cursorColumnSelectPageUp',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 11 /* PageUp */,\r\n linux: { primary: 0 }\r\n }\r\n }));\r\n var ColumnSelectDownCommand = /** @class */ (function (_super) {\r\n __extends(ColumnSelectDownCommand, _super);\r\n function ColumnSelectDownCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._isPaged = opts.isPaged;\r\n return _this;\r\n }\r\n ColumnSelectDownCommand.prototype._getColumnSelectResult = function (context, primary, prevColumnSelectData, args) {\r\n return ColumnSelection.columnSelectDown(context.config, context.viewModel, prevColumnSelectData, this._isPaged);\r\n };\r\n return ColumnSelectDownCommand;\r\n }(ColumnSelectCommand));\r\n CoreNavigationCommands.CursorColumnSelectDown = registerEditorCommand(new ColumnSelectDownCommand({\r\n isPaged: false,\r\n id: 'cursorColumnSelectDown',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 18 /* DownArrow */,\r\n linux: { primary: 0 }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorColumnSelectPageDown = registerEditorCommand(new ColumnSelectDownCommand({\r\n isPaged: true,\r\n id: 'cursorColumnSelectPageDown',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 12 /* PageDown */,\r\n linux: { primary: 0 }\r\n }\r\n }));\r\n var CursorMoveImpl = /** @class */ (function (_super) {\r\n __extends(CursorMoveImpl, _super);\r\n function CursorMoveImpl() {\r\n return _super.call(this, {\r\n id: 'cursorMove',\r\n precondition: undefined,\r\n description: CursorMove_.description\r\n }) || this;\r\n }\r\n CursorMoveImpl.prototype.runCoreEditorCommand = function (cursors, args) {\r\n var parsed = CursorMove_.parse(args);\r\n if (!parsed) {\r\n // illegal arguments\r\n return;\r\n }\r\n this._runCursorMove(cursors, args.source, parsed);\r\n };\r\n CursorMoveImpl.prototype._runCursorMove = function (cursors, source, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(source, 3 /* Explicit */, CursorMoveCommands.move(cursors.context, cursors.getAll(), args));\r\n cursors.reveal(source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return CursorMoveImpl;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.CursorMoveImpl = CursorMoveImpl;\r\n CoreNavigationCommands.CursorMove = registerEditorCommand(new CursorMoveImpl());\r\n var CursorMoveBasedCommand = /** @class */ (function (_super) {\r\n __extends(CursorMoveBasedCommand, _super);\r\n function CursorMoveBasedCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._staticArgs = opts.args;\r\n return _this;\r\n }\r\n CursorMoveBasedCommand.prototype.runCoreEditorCommand = function (cursors, dynamicArgs) {\r\n var args = this._staticArgs;\r\n if (this._staticArgs.value === -1 /* PAGE_SIZE_MARKER */) {\r\n // -1 is a marker for page size\r\n args = {\r\n direction: this._staticArgs.direction,\r\n unit: this._staticArgs.unit,\r\n select: this._staticArgs.select,\r\n value: cursors.context.config.pageSize\r\n };\r\n }\r\n CoreNavigationCommands.CursorMove._runCursorMove(cursors, dynamicArgs.source, args);\r\n };\r\n return CursorMoveBasedCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.CursorLeft = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 0 /* Left */,\r\n unit: 0 /* None */,\r\n select: false,\r\n value: 1\r\n },\r\n id: 'cursorLeft',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 15 /* LeftArrow */,\r\n mac: { primary: 15 /* LeftArrow */, secondary: [256 /* WinCtrl */ | 32 /* KEY_B */] }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorLeftSelect = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 0 /* Left */,\r\n unit: 0 /* None */,\r\n select: true,\r\n value: 1\r\n },\r\n id: 'cursorLeftSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 1024 /* Shift */ | 15 /* LeftArrow */\r\n }\r\n }));\r\n CoreNavigationCommands.CursorRight = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 1 /* Right */,\r\n unit: 0 /* None */,\r\n select: false,\r\n value: 1\r\n },\r\n id: 'cursorRight',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 17 /* RightArrow */,\r\n mac: { primary: 17 /* RightArrow */, secondary: [256 /* WinCtrl */ | 36 /* KEY_F */] }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorRightSelect = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 1 /* Right */,\r\n unit: 0 /* None */,\r\n select: true,\r\n value: 1\r\n },\r\n id: 'cursorRightSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 1024 /* Shift */ | 17 /* RightArrow */\r\n }\r\n }));\r\n CoreNavigationCommands.CursorUp = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 2 /* Up */,\r\n unit: 2 /* WrappedLine */,\r\n select: false,\r\n value: 1\r\n },\r\n id: 'cursorUp',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 16 /* UpArrow */,\r\n mac: { primary: 16 /* UpArrow */, secondary: [256 /* WinCtrl */ | 46 /* KEY_P */] }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorUpSelect = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 2 /* Up */,\r\n unit: 2 /* WrappedLine */,\r\n select: true,\r\n value: 1\r\n },\r\n id: 'cursorUpSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 1024 /* Shift */ | 16 /* UpArrow */,\r\n secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 16 /* UpArrow */],\r\n mac: { primary: 1024 /* Shift */ | 16 /* UpArrow */ },\r\n linux: { primary: 1024 /* Shift */ | 16 /* UpArrow */ }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorPageUp = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 2 /* Up */,\r\n unit: 2 /* WrappedLine */,\r\n select: false,\r\n value: -1 /* PAGE_SIZE_MARKER */\r\n },\r\n id: 'cursorPageUp',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 11 /* PageUp */\r\n }\r\n }));\r\n CoreNavigationCommands.CursorPageUpSelect = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 2 /* Up */,\r\n unit: 2 /* WrappedLine */,\r\n select: true,\r\n value: -1 /* PAGE_SIZE_MARKER */\r\n },\r\n id: 'cursorPageUpSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 1024 /* Shift */ | 11 /* PageUp */\r\n }\r\n }));\r\n CoreNavigationCommands.CursorDown = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 3 /* Down */,\r\n unit: 2 /* WrappedLine */,\r\n select: false,\r\n value: 1\r\n },\r\n id: 'cursorDown',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 18 /* DownArrow */,\r\n mac: { primary: 18 /* DownArrow */, secondary: [256 /* WinCtrl */ | 44 /* KEY_N */] }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorDownSelect = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 3 /* Down */,\r\n unit: 2 /* WrappedLine */,\r\n select: true,\r\n value: 1\r\n },\r\n id: 'cursorDownSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 1024 /* Shift */ | 18 /* DownArrow */,\r\n secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 18 /* DownArrow */],\r\n mac: { primary: 1024 /* Shift */ | 18 /* DownArrow */ },\r\n linux: { primary: 1024 /* Shift */ | 18 /* DownArrow */ }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorPageDown = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 3 /* Down */,\r\n unit: 2 /* WrappedLine */,\r\n select: false,\r\n value: -1 /* PAGE_SIZE_MARKER */\r\n },\r\n id: 'cursorPageDown',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 12 /* PageDown */\r\n }\r\n }));\r\n CoreNavigationCommands.CursorPageDownSelect = registerEditorCommand(new CursorMoveBasedCommand({\r\n args: {\r\n direction: 3 /* Down */,\r\n unit: 2 /* WrappedLine */,\r\n select: true,\r\n value: -1 /* PAGE_SIZE_MARKER */\r\n },\r\n id: 'cursorPageDownSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 1024 /* Shift */ | 12 /* PageDown */\r\n }\r\n }));\r\n CoreNavigationCommands.CreateCursor = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_4, _super);\r\n function class_4() {\r\n return _super.call(this, {\r\n id: 'createCursor',\r\n precondition: undefined\r\n }) || this;\r\n }\r\n class_4.prototype.runCoreEditorCommand = function (cursors, args) {\r\n var context = cursors.context;\r\n var newState;\r\n if (args.wholeLine) {\r\n newState = CursorMoveCommands.line(context, cursors.getPrimaryCursor(), false, args.position, args.viewPosition);\r\n }\r\n else {\r\n newState = CursorMoveCommands.moveTo(context, cursors.getPrimaryCursor(), false, args.position, args.viewPosition);\r\n }\r\n var states = cursors.getAll();\r\n // Check if we should remove a cursor (sort of like a toggle)\r\n if (states.length > 1) {\r\n var newModelPosition = (newState.modelState ? newState.modelState.position : null);\r\n var newViewPosition = (newState.viewState ? newState.viewState.position : null);\r\n for (var i = 0, len = states.length; i < len; i++) {\r\n var state = states[i];\r\n if (newModelPosition && !state.modelState.selection.containsPosition(newModelPosition)) {\r\n continue;\r\n }\r\n if (newViewPosition && !state.viewState.selection.containsPosition(newViewPosition)) {\r\n continue;\r\n }\r\n // => Remove the cursor\r\n states.splice(i, 1);\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, states);\r\n return;\r\n }\r\n }\r\n // => Add the new cursor\r\n states.push(newState);\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, states);\r\n };\r\n return class_4;\r\n }(CoreEditorCommand)));\r\n CoreNavigationCommands.LastCursorMoveToSelect = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_5, _super);\r\n function class_5() {\r\n return _super.call(this, {\r\n id: '_lastCursorMoveToSelect',\r\n precondition: undefined\r\n }) || this;\r\n }\r\n class_5.prototype.runCoreEditorCommand = function (cursors, args) {\r\n var context = cursors.context;\r\n var lastAddedCursorIndex = cursors.getLastAddedCursorIndex();\r\n var states = cursors.getAll();\r\n var newStates = states.slice(0);\r\n newStates[lastAddedCursorIndex] = CursorMoveCommands.moveTo(context, states[lastAddedCursorIndex], true, args.position, args.viewPosition);\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, newStates);\r\n };\r\n return class_5;\r\n }(CoreEditorCommand)));\r\n var HomeCommand = /** @class */ (function (_super) {\r\n __extends(HomeCommand, _super);\r\n function HomeCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._inSelectionMode = opts.inSelectionMode;\r\n return _this;\r\n }\r\n HomeCommand.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, CursorMoveCommands.moveToBeginningOfLine(cursors.context, cursors.getAll(), this._inSelectionMode));\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return HomeCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.CursorHome = registerEditorCommand(new HomeCommand({\r\n inSelectionMode: false,\r\n id: 'cursorHome',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 14 /* Home */,\r\n mac: { primary: 14 /* Home */, secondary: [2048 /* CtrlCmd */ | 15 /* LeftArrow */] }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorHomeSelect = registerEditorCommand(new HomeCommand({\r\n inSelectionMode: true,\r\n id: 'cursorHomeSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 1024 /* Shift */ | 14 /* Home */,\r\n mac: { primary: 1024 /* Shift */ | 14 /* Home */, secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 15 /* LeftArrow */] }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorLineStart = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_6, _super);\r\n function class_6() {\r\n return _super.call(this, {\r\n id: 'cursorLineStart',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 0,\r\n mac: { primary: 256 /* WinCtrl */ | 31 /* KEY_A */ }\r\n }\r\n }) || this;\r\n }\r\n class_6.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, this._exec(cursors.context, cursors.getAll()));\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n class_6.prototype._exec = function (context, cursors) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var lineNumber = cursor.modelState.position.lineNumber;\r\n result[i] = CursorState.fromModelState(cursor.modelState.move(false, lineNumber, 1, 0));\r\n }\r\n return result;\r\n };\r\n return class_6;\r\n }(CoreEditorCommand)));\r\n var EndCommand = /** @class */ (function (_super) {\r\n __extends(EndCommand, _super);\r\n function EndCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._inSelectionMode = opts.inSelectionMode;\r\n return _this;\r\n }\r\n EndCommand.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, CursorMoveCommands.moveToEndOfLine(cursors.context, cursors.getAll(), this._inSelectionMode));\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return EndCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.CursorEnd = registerEditorCommand(new EndCommand({\r\n inSelectionMode: false,\r\n id: 'cursorEnd',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 13 /* End */,\r\n mac: { primary: 13 /* End */, secondary: [2048 /* CtrlCmd */ | 17 /* RightArrow */] }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorEndSelect = registerEditorCommand(new EndCommand({\r\n inSelectionMode: true,\r\n id: 'cursorEndSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 1024 /* Shift */ | 13 /* End */,\r\n mac: { primary: 1024 /* Shift */ | 13 /* End */, secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 17 /* RightArrow */] }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorLineEnd = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_7, _super);\r\n function class_7() {\r\n return _super.call(this, {\r\n id: 'cursorLineEnd',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 0,\r\n mac: { primary: 256 /* WinCtrl */ | 35 /* KEY_E */ }\r\n }\r\n }) || this;\r\n }\r\n class_7.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, this._exec(cursors.context, cursors.getAll()));\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n class_7.prototype._exec = function (context, cursors) {\r\n var result = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n var cursor = cursors[i];\r\n var lineNumber = cursor.modelState.position.lineNumber;\r\n var maxColumn = context.model.getLineMaxColumn(lineNumber);\r\n result[i] = CursorState.fromModelState(cursor.modelState.move(false, lineNumber, maxColumn, 0));\r\n }\r\n return result;\r\n };\r\n return class_7;\r\n }(CoreEditorCommand)));\r\n var TopCommand = /** @class */ (function (_super) {\r\n __extends(TopCommand, _super);\r\n function TopCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._inSelectionMode = opts.inSelectionMode;\r\n return _this;\r\n }\r\n TopCommand.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, CursorMoveCommands.moveToBeginningOfBuffer(cursors.context, cursors.getAll(), this._inSelectionMode));\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return TopCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.CursorTop = registerEditorCommand(new TopCommand({\r\n inSelectionMode: false,\r\n id: 'cursorTop',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 14 /* Home */,\r\n mac: { primary: 2048 /* CtrlCmd */ | 16 /* UpArrow */ }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorTopSelect = registerEditorCommand(new TopCommand({\r\n inSelectionMode: true,\r\n id: 'cursorTopSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 14 /* Home */,\r\n mac: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 16 /* UpArrow */ }\r\n }\r\n }));\r\n var BottomCommand = /** @class */ (function (_super) {\r\n __extends(BottomCommand, _super);\r\n function BottomCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._inSelectionMode = opts.inSelectionMode;\r\n return _this;\r\n }\r\n BottomCommand.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, CursorMoveCommands.moveToEndOfBuffer(cursors.context, cursors.getAll(), this._inSelectionMode));\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return BottomCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.CursorBottom = registerEditorCommand(new BottomCommand({\r\n inSelectionMode: false,\r\n id: 'cursorBottom',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 13 /* End */,\r\n mac: { primary: 2048 /* CtrlCmd */ | 18 /* DownArrow */ }\r\n }\r\n }));\r\n CoreNavigationCommands.CursorBottomSelect = registerEditorCommand(new BottomCommand({\r\n inSelectionMode: true,\r\n id: 'cursorBottomSelect',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 13 /* End */,\r\n mac: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 18 /* DownArrow */ }\r\n }\r\n }));\r\n var EditorScrollImpl = /** @class */ (function (_super) {\r\n __extends(EditorScrollImpl, _super);\r\n function EditorScrollImpl() {\r\n return _super.call(this, {\r\n id: 'editorScroll',\r\n precondition: undefined,\r\n description: EditorScroll_.description\r\n }) || this;\r\n }\r\n EditorScrollImpl.prototype.runCoreEditorCommand = function (cursors, args) {\r\n var parsed = EditorScroll_.parse(args);\r\n if (!parsed) {\r\n // illegal arguments\r\n return;\r\n }\r\n this._runEditorScroll(cursors, args.source, parsed);\r\n };\r\n EditorScrollImpl.prototype._runEditorScroll = function (cursors, source, args) {\r\n var desiredScrollTop = this._computeDesiredScrollTop(cursors.context, args);\r\n if (args.revealCursor) {\r\n // must ensure cursor is in new visible range\r\n var desiredVisibleViewRange = cursors.context.getCompletelyVisibleViewRangeAtScrollTop(desiredScrollTop);\r\n cursors.setStates(source, 3 /* Explicit */, [\r\n CursorMoveCommands.findPositionInViewportIfOutside(cursors.context, cursors.getPrimaryCursor(), desiredVisibleViewRange, args.select)\r\n ]);\r\n }\r\n cursors.scrollTo(desiredScrollTop);\r\n };\r\n EditorScrollImpl.prototype._computeDesiredScrollTop = function (context, args) {\r\n if (args.unit === 1 /* Line */) {\r\n // scrolling by model lines\r\n var visibleModelRange = context.getCompletelyVisibleModelRange();\r\n var desiredTopModelLineNumber = void 0;\r\n if (args.direction === 1 /* Up */) {\r\n // must go x model lines up\r\n desiredTopModelLineNumber = Math.max(1, visibleModelRange.startLineNumber - args.value);\r\n }\r\n else {\r\n // must go x model lines down\r\n desiredTopModelLineNumber = Math.min(context.model.getLineCount(), visibleModelRange.startLineNumber + args.value);\r\n }\r\n var desiredTopViewPosition = context.convertModelPositionToViewPosition(new Position(desiredTopModelLineNumber, 1));\r\n return context.getVerticalOffsetForViewLine(desiredTopViewPosition.lineNumber);\r\n }\r\n var noOfLines;\r\n if (args.unit === 3 /* Page */) {\r\n noOfLines = context.config.pageSize * args.value;\r\n }\r\n else if (args.unit === 4 /* HalfPage */) {\r\n noOfLines = Math.round(context.config.pageSize / 2) * args.value;\r\n }\r\n else {\r\n noOfLines = args.value;\r\n }\r\n var deltaLines = (args.direction === 1 /* Up */ ? -1 : 1) * noOfLines;\r\n return context.getCurrentScrollTop() + deltaLines * context.config.lineHeight;\r\n };\r\n return EditorScrollImpl;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.EditorScrollImpl = EditorScrollImpl;\r\n CoreNavigationCommands.EditorScroll = registerEditorCommand(new EditorScrollImpl());\r\n CoreNavigationCommands.ScrollLineUp = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_8, _super);\r\n function class_8() {\r\n return _super.call(this, {\r\n id: 'scrollLineUp',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 16 /* UpArrow */,\r\n mac: { primary: 256 /* WinCtrl */ | 11 /* PageUp */ }\r\n }\r\n }) || this;\r\n }\r\n class_8.prototype.runCoreEditorCommand = function (cursors, args) {\r\n CoreNavigationCommands.EditorScroll._runEditorScroll(cursors, args.source, {\r\n direction: 1 /* Up */,\r\n unit: 2 /* WrappedLine */,\r\n value: 1,\r\n revealCursor: false,\r\n select: false\r\n });\r\n };\r\n return class_8;\r\n }(CoreEditorCommand)));\r\n CoreNavigationCommands.ScrollPageUp = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_9, _super);\r\n function class_9() {\r\n return _super.call(this, {\r\n id: 'scrollPageUp',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 11 /* PageUp */,\r\n win: { primary: 512 /* Alt */ | 11 /* PageUp */ },\r\n linux: { primary: 512 /* Alt */ | 11 /* PageUp */ }\r\n }\r\n }) || this;\r\n }\r\n class_9.prototype.runCoreEditorCommand = function (cursors, args) {\r\n CoreNavigationCommands.EditorScroll._runEditorScroll(cursors, args.source, {\r\n direction: 1 /* Up */,\r\n unit: 3 /* Page */,\r\n value: 1,\r\n revealCursor: false,\r\n select: false\r\n });\r\n };\r\n return class_9;\r\n }(CoreEditorCommand)));\r\n CoreNavigationCommands.ScrollLineDown = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_10, _super);\r\n function class_10() {\r\n return _super.call(this, {\r\n id: 'scrollLineDown',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 18 /* DownArrow */,\r\n mac: { primary: 256 /* WinCtrl */ | 12 /* PageDown */ }\r\n }\r\n }) || this;\r\n }\r\n class_10.prototype.runCoreEditorCommand = function (cursors, args) {\r\n CoreNavigationCommands.EditorScroll._runEditorScroll(cursors, args.source, {\r\n direction: 2 /* Down */,\r\n unit: 2 /* WrappedLine */,\r\n value: 1,\r\n revealCursor: false,\r\n select: false\r\n });\r\n };\r\n return class_10;\r\n }(CoreEditorCommand)));\r\n CoreNavigationCommands.ScrollPageDown = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_11, _super);\r\n function class_11() {\r\n return _super.call(this, {\r\n id: 'scrollPageDown',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 12 /* PageDown */,\r\n win: { primary: 512 /* Alt */ | 12 /* PageDown */ },\r\n linux: { primary: 512 /* Alt */ | 12 /* PageDown */ }\r\n }\r\n }) || this;\r\n }\r\n class_11.prototype.runCoreEditorCommand = function (cursors, args) {\r\n CoreNavigationCommands.EditorScroll._runEditorScroll(cursors, args.source, {\r\n direction: 2 /* Down */,\r\n unit: 3 /* Page */,\r\n value: 1,\r\n revealCursor: false,\r\n select: false\r\n });\r\n };\r\n return class_11;\r\n }(CoreEditorCommand)));\r\n var WordCommand = /** @class */ (function (_super) {\r\n __extends(WordCommand, _super);\r\n function WordCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._inSelectionMode = opts.inSelectionMode;\r\n return _this;\r\n }\r\n WordCommand.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, [\r\n CursorMoveCommands.word(cursors.context, cursors.getPrimaryCursor(), this._inSelectionMode, args.position)\r\n ]);\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return WordCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.WordSelect = registerEditorCommand(new WordCommand({\r\n inSelectionMode: false,\r\n id: '_wordSelect',\r\n precondition: undefined\r\n }));\r\n CoreNavigationCommands.WordSelectDrag = registerEditorCommand(new WordCommand({\r\n inSelectionMode: true,\r\n id: '_wordSelectDrag',\r\n precondition: undefined\r\n }));\r\n CoreNavigationCommands.LastCursorWordSelect = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_12, _super);\r\n function class_12() {\r\n return _super.call(this, {\r\n id: 'lastCursorWordSelect',\r\n precondition: undefined\r\n }) || this;\r\n }\r\n class_12.prototype.runCoreEditorCommand = function (cursors, args) {\r\n var context = cursors.context;\r\n var lastAddedCursorIndex = cursors.getLastAddedCursorIndex();\r\n var states = cursors.getAll();\r\n var newStates = states.slice(0);\r\n var lastAddedState = states[lastAddedCursorIndex];\r\n newStates[lastAddedCursorIndex] = CursorMoveCommands.word(context, lastAddedState, lastAddedState.modelState.hasSelection(), args.position);\r\n context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, newStates);\r\n };\r\n return class_12;\r\n }(CoreEditorCommand)));\r\n var LineCommand = /** @class */ (function (_super) {\r\n __extends(LineCommand, _super);\r\n function LineCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._inSelectionMode = opts.inSelectionMode;\r\n return _this;\r\n }\r\n LineCommand.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, [\r\n CursorMoveCommands.line(cursors.context, cursors.getPrimaryCursor(), this._inSelectionMode, args.position, args.viewPosition)\r\n ]);\r\n cursors.reveal(args.source, false, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return LineCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.LineSelect = registerEditorCommand(new LineCommand({\r\n inSelectionMode: false,\r\n id: '_lineSelect',\r\n precondition: undefined\r\n }));\r\n CoreNavigationCommands.LineSelectDrag = registerEditorCommand(new LineCommand({\r\n inSelectionMode: true,\r\n id: '_lineSelectDrag',\r\n precondition: undefined\r\n }));\r\n var LastCursorLineCommand = /** @class */ (function (_super) {\r\n __extends(LastCursorLineCommand, _super);\r\n function LastCursorLineCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._inSelectionMode = opts.inSelectionMode;\r\n return _this;\r\n }\r\n LastCursorLineCommand.prototype.runCoreEditorCommand = function (cursors, args) {\r\n var lastAddedCursorIndex = cursors.getLastAddedCursorIndex();\r\n var states = cursors.getAll();\r\n var newStates = states.slice(0);\r\n newStates[lastAddedCursorIndex] = CursorMoveCommands.line(cursors.context, states[lastAddedCursorIndex], this._inSelectionMode, args.position, args.viewPosition);\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, newStates);\r\n };\r\n return LastCursorLineCommand;\r\n }(CoreEditorCommand));\r\n CoreNavigationCommands.LastCursorLineSelect = registerEditorCommand(new LastCursorLineCommand({\r\n inSelectionMode: false,\r\n id: 'lastCursorLineSelect',\r\n precondition: undefined\r\n }));\r\n CoreNavigationCommands.LastCursorLineSelectDrag = registerEditorCommand(new LastCursorLineCommand({\r\n inSelectionMode: true,\r\n id: 'lastCursorLineSelectDrag',\r\n precondition: undefined\r\n }));\r\n CoreNavigationCommands.ExpandLineSelection = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_13, _super);\r\n function class_13() {\r\n return _super.call(this, {\r\n id: 'expandLineSelection',\r\n precondition: undefined,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 42 /* KEY_L */\r\n }\r\n }) || this;\r\n }\r\n class_13.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, CursorMoveCommands.expandLineSelection(cursors.context, cursors.getAll()));\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return class_13;\r\n }(CoreEditorCommand)));\r\n CoreNavigationCommands.CancelSelection = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_14, _super);\r\n function class_14() {\r\n return _super.call(this, {\r\n id: 'cancelSelection',\r\n precondition: EditorContextKeys.hasNonEmptySelection,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 9 /* Escape */,\r\n secondary: [1024 /* Shift */ | 9 /* Escape */]\r\n }\r\n }) || this;\r\n }\r\n class_14.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, [\r\n CursorMoveCommands.cancelSelection(cursors.context, cursors.getPrimaryCursor())\r\n ]);\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return class_14;\r\n }(CoreEditorCommand)));\r\n CoreNavigationCommands.RemoveSecondaryCursors = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_15, _super);\r\n function class_15() {\r\n return _super.call(this, {\r\n id: 'removeSecondaryCursors',\r\n precondition: EditorContextKeys.hasMultipleSelections,\r\n kbOpts: {\r\n weight: CORE_WEIGHT + 1,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 9 /* Escape */,\r\n secondary: [1024 /* Shift */ | 9 /* Escape */]\r\n }\r\n }) || this;\r\n }\r\n class_15.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, [\r\n cursors.getPrimaryCursor()\r\n ]);\r\n cursors.reveal(args.source, true, 0 /* Primary */, 0 /* Smooth */);\r\n };\r\n return class_15;\r\n }(CoreEditorCommand)));\r\n CoreNavigationCommands.RevealLine = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_16, _super);\r\n function class_16() {\r\n return _super.call(this, {\r\n id: 'revealLine',\r\n precondition: undefined,\r\n description: RevealLine_.description\r\n }) || this;\r\n }\r\n class_16.prototype.runCoreEditorCommand = function (cursors, args) {\r\n var revealLineArg = args;\r\n var lineNumber = (revealLineArg.lineNumber || 0) + 1;\r\n if (lineNumber < 1) {\r\n lineNumber = 1;\r\n }\r\n var lineCount = cursors.context.model.getLineCount();\r\n if (lineNumber > lineCount) {\r\n lineNumber = lineCount;\r\n }\r\n var range = new Range(lineNumber, 1, lineNumber, cursors.context.model.getLineMaxColumn(lineNumber));\r\n var revealAt = 0 /* Simple */;\r\n if (revealLineArg.at) {\r\n switch (revealLineArg.at) {\r\n case RevealLine_.RawAtArgument.Top:\r\n revealAt = 3 /* Top */;\r\n break;\r\n case RevealLine_.RawAtArgument.Center:\r\n revealAt = 1 /* Center */;\r\n break;\r\n case RevealLine_.RawAtArgument.Bottom:\r\n revealAt = 4 /* Bottom */;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n var viewRange = cursors.context.convertModelRangeToViewRange(range);\r\n cursors.revealRange(args.source, false, viewRange, revealAt, 0 /* Smooth */);\r\n };\r\n return class_16;\r\n }(CoreEditorCommand)));\r\n CoreNavigationCommands.SelectAll = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_17, _super);\r\n function class_17() {\r\n return _super.call(this, {\r\n id: 'selectAll',\r\n precondition: undefined\r\n }) || this;\r\n }\r\n class_17.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, [\r\n CursorMoveCommands.selectAll(cursors.context, cursors.getPrimaryCursor())\r\n ]);\r\n };\r\n return class_17;\r\n }(CoreEditorCommand)));\r\n CoreNavigationCommands.SetSelection = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_18, _super);\r\n function class_18() {\r\n return _super.call(this, {\r\n id: 'setSelection',\r\n precondition: undefined\r\n }) || this;\r\n }\r\n class_18.prototype.runCoreEditorCommand = function (cursors, args) {\r\n cursors.context.model.pushStackElement();\r\n cursors.setStates(args.source, 3 /* Explicit */, [\r\n CursorState.fromModelSelection(args.selection)\r\n ]);\r\n };\r\n return class_18;\r\n }(CoreEditorCommand)));\r\n})(CoreNavigationCommands || (CoreNavigationCommands = {}));\r\nexport var CoreEditingCommands;\r\n(function (CoreEditingCommands) {\r\n var CoreEditingCommand = /** @class */ (function (_super) {\r\n __extends(CoreEditingCommand, _super);\r\n function CoreEditingCommand() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n CoreEditingCommand.prototype.runEditorCommand = function (accessor, editor, args) {\r\n var cursors = editor._getCursors();\r\n if (!cursors) {\r\n // the editor has no view => has no cursors\r\n return;\r\n }\r\n this.runCoreEditingCommand(editor, cursors, args || {});\r\n };\r\n return CoreEditingCommand;\r\n }(EditorCommand));\r\n CoreEditingCommands.CoreEditingCommand = CoreEditingCommand;\r\n CoreEditingCommands.LineBreakInsert = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_19, _super);\r\n function class_19() {\r\n return _super.call(this, {\r\n id: 'lineBreakInsert',\r\n precondition: EditorContextKeys.writable,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 0,\r\n mac: { primary: 256 /* WinCtrl */ | 45 /* KEY_O */ }\r\n }\r\n }) || this;\r\n }\r\n class_19.prototype.runCoreEditingCommand = function (editor, cursors, args) {\r\n editor.pushUndoStop();\r\n editor.executeCommands(this.id, TypeOperations.lineBreakInsert(cursors.context.config, cursors.context.model, cursors.getAll().map(function (s) { return s.modelState.selection; })));\r\n };\r\n return class_19;\r\n }(CoreEditingCommand)));\r\n CoreEditingCommands.Outdent = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_20, _super);\r\n function class_20() {\r\n return _super.call(this, {\r\n id: 'outdent',\r\n precondition: EditorContextKeys.writable,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: ContextKeyExpr.and(EditorContextKeys.editorTextFocus, EditorContextKeys.tabDoesNotMoveFocus),\r\n primary: 1024 /* Shift */ | 2 /* Tab */\r\n }\r\n }) || this;\r\n }\r\n class_20.prototype.runCoreEditingCommand = function (editor, cursors, args) {\r\n editor.pushUndoStop();\r\n editor.executeCommands(this.id, TypeOperations.outdent(cursors.context.config, cursors.context.model, cursors.getAll().map(function (s) { return s.modelState.selection; })));\r\n editor.pushUndoStop();\r\n };\r\n return class_20;\r\n }(CoreEditingCommand)));\r\n CoreEditingCommands.Tab = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_21, _super);\r\n function class_21() {\r\n return _super.call(this, {\r\n id: 'tab',\r\n precondition: EditorContextKeys.writable,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: ContextKeyExpr.and(EditorContextKeys.editorTextFocus, EditorContextKeys.tabDoesNotMoveFocus),\r\n primary: 2 /* Tab */\r\n }\r\n }) || this;\r\n }\r\n class_21.prototype.runCoreEditingCommand = function (editor, cursors, args) {\r\n editor.pushUndoStop();\r\n editor.executeCommands(this.id, TypeOperations.tab(cursors.context.config, cursors.context.model, cursors.getAll().map(function (s) { return s.modelState.selection; })));\r\n editor.pushUndoStop();\r\n };\r\n return class_21;\r\n }(CoreEditingCommand)));\r\n CoreEditingCommands.DeleteLeft = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_22, _super);\r\n function class_22() {\r\n return _super.call(this, {\r\n id: 'deleteLeft',\r\n precondition: EditorContextKeys.writable,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 1 /* Backspace */,\r\n secondary: [1024 /* Shift */ | 1 /* Backspace */],\r\n mac: { primary: 1 /* Backspace */, secondary: [1024 /* Shift */ | 1 /* Backspace */, 256 /* WinCtrl */ | 38 /* KEY_H */, 256 /* WinCtrl */ | 1 /* Backspace */] }\r\n }\r\n }) || this;\r\n }\r\n class_22.prototype.runCoreEditingCommand = function (editor, cursors, args) {\r\n var _a = DeleteOperations.deleteLeft(cursors.getPrevEditOperationType(), cursors.context.config, cursors.context.model, cursors.getAll().map(function (s) { return s.modelState.selection; })), shouldPushStackElementBefore = _a[0], commands = _a[1];\r\n if (shouldPushStackElementBefore) {\r\n editor.pushUndoStop();\r\n }\r\n editor.executeCommands(this.id, commands);\r\n cursors.setPrevEditOperationType(2 /* DeletingLeft */);\r\n };\r\n return class_22;\r\n }(CoreEditingCommand)));\r\n CoreEditingCommands.DeleteRight = registerEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_23, _super);\r\n function class_23() {\r\n return _super.call(this, {\r\n id: 'deleteRight',\r\n precondition: EditorContextKeys.writable,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 20 /* Delete */,\r\n mac: { primary: 20 /* Delete */, secondary: [256 /* WinCtrl */ | 34 /* KEY_D */, 256 /* WinCtrl */ | 20 /* Delete */] }\r\n }\r\n }) || this;\r\n }\r\n class_23.prototype.runCoreEditingCommand = function (editor, cursors, args) {\r\n var _a = DeleteOperations.deleteRight(cursors.getPrevEditOperationType(), cursors.context.config, cursors.context.model, cursors.getAll().map(function (s) { return s.modelState.selection; })), shouldPushStackElementBefore = _a[0], commands = _a[1];\r\n if (shouldPushStackElementBefore) {\r\n editor.pushUndoStop();\r\n }\r\n editor.executeCommands(this.id, commands);\r\n cursors.setPrevEditOperationType(3 /* DeletingRight */);\r\n };\r\n return class_23;\r\n }(CoreEditingCommand)));\r\n})(CoreEditingCommands || (CoreEditingCommands = {}));\r\nfunction registerCommand(command) {\r\n command.register();\r\n}\r\n/**\r\n * A command that will:\r\n * 1. invoke a command on the focused editor.\r\n * 2. otherwise, invoke a browser built-in command on the `activeElement`.\r\n * 3. otherwise, invoke a command on the workbench active editor.\r\n */\r\nvar EditorOrNativeTextInputCommand = /** @class */ (function (_super) {\r\n __extends(EditorOrNativeTextInputCommand, _super);\r\n function EditorOrNativeTextInputCommand(opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this._editorHandler = opts.editorHandler;\r\n _this._inputHandler = opts.inputHandler;\r\n return _this;\r\n }\r\n EditorOrNativeTextInputCommand.prototype.runCommand = function (accessor, args) {\r\n var focusedEditor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\r\n // Only if editor text focus (i.e. not if editor has widget focus).\r\n if (focusedEditor && focusedEditor.hasTextFocus()) {\r\n return this._runEditorHandler(accessor, focusedEditor, args);\r\n }\r\n // Ignore this action when user is focused on an element that allows for entering text\r\n var activeElement = document.activeElement;\r\n if (activeElement && ['input', 'textarea'].indexOf(activeElement.tagName.toLowerCase()) >= 0) {\r\n document.execCommand(this._inputHandler);\r\n return;\r\n }\r\n // Redirecting to active editor\r\n var activeEditor = accessor.get(ICodeEditorService).getActiveCodeEditor();\r\n if (activeEditor) {\r\n activeEditor.focus();\r\n return this._runEditorHandler(accessor, activeEditor, args);\r\n }\r\n };\r\n EditorOrNativeTextInputCommand.prototype._runEditorHandler = function (accessor, editor, args) {\r\n var HANDLER = this._editorHandler;\r\n if (typeof HANDLER === 'string') {\r\n editor.trigger('keyboard', HANDLER, args);\r\n }\r\n else {\r\n args = args || {};\r\n args.source = 'keyboard';\r\n HANDLER.runEditorCommand(accessor, editor, args);\r\n }\r\n };\r\n return EditorOrNativeTextInputCommand;\r\n}(Command));\r\n/**\r\n * A command that will invoke a command on the focused editor.\r\n */\r\nvar EditorHandlerCommand = /** @class */ (function (_super) {\r\n __extends(EditorHandlerCommand, _super);\r\n function EditorHandlerCommand(id, handlerId, description) {\r\n var _this = _super.call(this, {\r\n id: id,\r\n precondition: undefined,\r\n description: description\r\n }) || this;\r\n _this._handlerId = handlerId;\r\n return _this;\r\n }\r\n EditorHandlerCommand.prototype.runCommand = function (accessor, args) {\r\n var editor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\r\n if (!editor) {\r\n return;\r\n }\r\n editor.trigger('keyboard', this._handlerId, args);\r\n };\r\n return EditorHandlerCommand;\r\n}(Command));\r\nregisterCommand(new EditorOrNativeTextInputCommand({\r\n editorHandler: CoreNavigationCommands.SelectAll,\r\n inputHandler: 'selectAll',\r\n id: 'editor.action.selectAll',\r\n precondition: EditorContextKeys.textInputFocus,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: null,\r\n primary: 2048 /* CtrlCmd */ | 31 /* KEY_A */\r\n },\r\n menuOpts: {\r\n menuId: 23 /* MenubarSelectionMenu */,\r\n group: '1_basic',\r\n title: nls.localize({ key: 'miSelectAll', comment: ['&& denotes a mnemonic'] }, \"&&Select All\"),\r\n order: 1\r\n }\r\n}));\r\nregisterCommand(new EditorOrNativeTextInputCommand({\r\n editorHandler: Handler.Undo,\r\n inputHandler: 'undo',\r\n id: Handler.Undo,\r\n precondition: EditorContextKeys.writable,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 56 /* KEY_Z */\r\n },\r\n menuOpts: {\r\n menuId: 15 /* MenubarEditMenu */,\r\n group: '1_do',\r\n title: nls.localize({ key: 'miUndo', comment: ['&& denotes a mnemonic'] }, \"&&Undo\"),\r\n order: 1\r\n }\r\n}));\r\nregisterCommand(new EditorHandlerCommand('default:' + Handler.Undo, Handler.Undo));\r\nregisterCommand(new EditorOrNativeTextInputCommand({\r\n editorHandler: Handler.Redo,\r\n inputHandler: 'redo',\r\n id: Handler.Redo,\r\n precondition: EditorContextKeys.writable,\r\n kbOpts: {\r\n weight: CORE_WEIGHT,\r\n kbExpr: EditorContextKeys.textInputFocus,\r\n primary: 2048 /* CtrlCmd */ | 55 /* KEY_Y */,\r\n secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 56 /* KEY_Z */],\r\n mac: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 56 /* KEY_Z */ }\r\n },\r\n menuOpts: {\r\n menuId: 15 /* MenubarEditMenu */,\r\n group: '1_do',\r\n title: nls.localize({ key: 'miRedo', comment: ['&& denotes a mnemonic'] }, \"&&Redo\"),\r\n order: 2\r\n }\r\n}));\r\nregisterCommand(new EditorHandlerCommand('default:' + Handler.Redo, Handler.Redo));\r\nfunction registerOverwritableCommand(handlerId, description) {\r\n registerCommand(new EditorHandlerCommand('default:' + handlerId, handlerId));\r\n registerCommand(new EditorHandlerCommand(handlerId, handlerId, description));\r\n}\r\nregisterOverwritableCommand(Handler.Type, {\r\n description: \"Type\",\r\n args: [{\r\n name: 'args',\r\n schema: {\r\n 'type': 'object',\r\n 'required': ['text'],\r\n 'properties': {\r\n 'text': {\r\n 'type': 'string'\r\n }\r\n },\r\n }\r\n }]\r\n});\r\nregisterOverwritableCommand(Handler.ReplacePreviousChar);\r\nregisterOverwritableCommand(Handler.CompositionStart);\r\nregisterOverwritableCommand(Handler.CompositionEnd);\r\nregisterOverwritableCommand(Handler.Paste);\r\nregisterOverwritableCommand(Handler.Cut);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { CoreNavigationCommands } from '../controller/coreCommands.js';\r\nimport { Position } from '../../common/core/position.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nvar ViewController = /** @class */ (function () {\r\n function ViewController(configuration, viewModel, outgoingEvents, commandDelegate) {\r\n this.configuration = configuration;\r\n this.viewModel = viewModel;\r\n this.outgoingEvents = outgoingEvents;\r\n this.commandDelegate = commandDelegate;\r\n }\r\n ViewController.prototype._execMouseCommand = function (editorCommand, args) {\r\n args.source = 'mouse';\r\n this.commandDelegate.executeEditorCommand(editorCommand, args);\r\n };\r\n ViewController.prototype.paste = function (source, text, pasteOnNewLine, multicursorText) {\r\n this.commandDelegate.paste(source, text, pasteOnNewLine, multicursorText);\r\n };\r\n ViewController.prototype.type = function (source, text) {\r\n this.commandDelegate.type(source, text);\r\n };\r\n ViewController.prototype.replacePreviousChar = function (source, text, replaceCharCnt) {\r\n this.commandDelegate.replacePreviousChar(source, text, replaceCharCnt);\r\n };\r\n ViewController.prototype.compositionStart = function (source) {\r\n this.commandDelegate.compositionStart(source);\r\n };\r\n ViewController.prototype.compositionEnd = function (source) {\r\n this.commandDelegate.compositionEnd(source);\r\n };\r\n ViewController.prototype.cut = function (source) {\r\n this.commandDelegate.cut(source);\r\n };\r\n ViewController.prototype.setSelection = function (source, modelSelection) {\r\n this.commandDelegate.executeEditorCommand(CoreNavigationCommands.SetSelection, {\r\n source: source,\r\n selection: modelSelection\r\n });\r\n };\r\n ViewController.prototype._validateViewColumn = function (viewPosition) {\r\n var minColumn = this.viewModel.getLineMinColumn(viewPosition.lineNumber);\r\n if (viewPosition.column < minColumn) {\r\n return new Position(viewPosition.lineNumber, minColumn);\r\n }\r\n return viewPosition;\r\n };\r\n ViewController.prototype._hasMulticursorModifier = function (data) {\r\n switch (this.configuration.options.get(57 /* multiCursorModifier */)) {\r\n case 'altKey':\r\n return data.altKey;\r\n case 'ctrlKey':\r\n return data.ctrlKey;\r\n case 'metaKey':\r\n return data.metaKey;\r\n }\r\n return false;\r\n };\r\n ViewController.prototype._hasNonMulticursorModifier = function (data) {\r\n switch (this.configuration.options.get(57 /* multiCursorModifier */)) {\r\n case 'altKey':\r\n return data.ctrlKey || data.metaKey;\r\n case 'ctrlKey':\r\n return data.altKey || data.metaKey;\r\n case 'metaKey':\r\n return data.ctrlKey || data.altKey;\r\n }\r\n return false;\r\n };\r\n ViewController.prototype.dispatchMouse = function (data) {\r\n var selectionClipboardIsOn = (platform.isLinux && this.configuration.options.get(77 /* selectionClipboard */));\r\n if (data.middleButton && !selectionClipboardIsOn) {\r\n this._columnSelect(data.position, data.mouseColumn, data.inSelectionMode);\r\n }\r\n else if (data.startedOnLineNumbers) {\r\n // If the dragging started on the gutter, then have operations work on the entire line\r\n if (this._hasMulticursorModifier(data)) {\r\n if (data.inSelectionMode) {\r\n this._lastCursorLineSelect(data.position);\r\n }\r\n else {\r\n this._createCursor(data.position, true);\r\n }\r\n }\r\n else {\r\n if (data.inSelectionMode) {\r\n this._lineSelectDrag(data.position);\r\n }\r\n else {\r\n this._lineSelect(data.position);\r\n }\r\n }\r\n }\r\n else if (data.mouseDownCount >= 4) {\r\n this._selectAll();\r\n }\r\n else if (data.mouseDownCount === 3) {\r\n if (this._hasMulticursorModifier(data)) {\r\n if (data.inSelectionMode) {\r\n this._lastCursorLineSelectDrag(data.position);\r\n }\r\n else {\r\n this._lastCursorLineSelect(data.position);\r\n }\r\n }\r\n else {\r\n if (data.inSelectionMode) {\r\n this._lineSelectDrag(data.position);\r\n }\r\n else {\r\n this._lineSelect(data.position);\r\n }\r\n }\r\n }\r\n else if (data.mouseDownCount === 2) {\r\n if (this._hasMulticursorModifier(data)) {\r\n this._lastCursorWordSelect(data.position);\r\n }\r\n else {\r\n if (data.inSelectionMode) {\r\n this._wordSelectDrag(data.position);\r\n }\r\n else {\r\n this._wordSelect(data.position);\r\n }\r\n }\r\n }\r\n else {\r\n if (this._hasMulticursorModifier(data)) {\r\n if (!this._hasNonMulticursorModifier(data)) {\r\n if (data.shiftKey) {\r\n this._columnSelect(data.position, data.mouseColumn, true);\r\n }\r\n else {\r\n // Do multi-cursor operations only when purely alt is pressed\r\n if (data.inSelectionMode) {\r\n this._lastCursorMoveToSelect(data.position);\r\n }\r\n else {\r\n this._createCursor(data.position, false);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (data.inSelectionMode) {\r\n if (data.altKey) {\r\n this._columnSelect(data.position, data.mouseColumn, true);\r\n }\r\n else {\r\n this._moveToSelect(data.position);\r\n }\r\n }\r\n else {\r\n this.moveTo(data.position);\r\n }\r\n }\r\n }\r\n };\r\n ViewController.prototype._usualArgs = function (viewPosition) {\r\n viewPosition = this._validateViewColumn(viewPosition);\r\n return {\r\n position: this._convertViewToModelPosition(viewPosition),\r\n viewPosition: viewPosition\r\n };\r\n };\r\n ViewController.prototype.moveTo = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.MoveTo, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._moveToSelect = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.MoveToSelect, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._columnSelect = function (viewPosition, mouseColumn, doColumnSelect) {\r\n viewPosition = this._validateViewColumn(viewPosition);\r\n this._execMouseCommand(CoreNavigationCommands.ColumnSelect, {\r\n position: this._convertViewToModelPosition(viewPosition),\r\n viewPosition: viewPosition,\r\n mouseColumn: mouseColumn,\r\n doColumnSelect: doColumnSelect\r\n });\r\n };\r\n ViewController.prototype._createCursor = function (viewPosition, wholeLine) {\r\n viewPosition = this._validateViewColumn(viewPosition);\r\n this._execMouseCommand(CoreNavigationCommands.CreateCursor, {\r\n position: this._convertViewToModelPosition(viewPosition),\r\n viewPosition: viewPosition,\r\n wholeLine: wholeLine\r\n });\r\n };\r\n ViewController.prototype._lastCursorMoveToSelect = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.LastCursorMoveToSelect, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._wordSelect = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.WordSelect, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._wordSelectDrag = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.WordSelectDrag, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._lastCursorWordSelect = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.LastCursorWordSelect, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._lineSelect = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.LineSelect, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._lineSelectDrag = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.LineSelectDrag, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._lastCursorLineSelect = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.LastCursorLineSelect, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._lastCursorLineSelectDrag = function (viewPosition) {\r\n this._execMouseCommand(CoreNavigationCommands.LastCursorLineSelectDrag, this._usualArgs(viewPosition));\r\n };\r\n ViewController.prototype._selectAll = function () {\r\n this._execMouseCommand(CoreNavigationCommands.SelectAll, {});\r\n };\r\n // ----------------------\r\n ViewController.prototype._convertViewToModelPosition = function (viewPosition) {\r\n return this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(viewPosition);\r\n };\r\n ViewController.prototype.emitKeyDown = function (e) {\r\n this.outgoingEvents.emitKeyDown(e);\r\n };\r\n ViewController.prototype.emitKeyUp = function (e) {\r\n this.outgoingEvents.emitKeyUp(e);\r\n };\r\n ViewController.prototype.emitContextMenu = function (e) {\r\n this.outgoingEvents.emitContextMenu(e);\r\n };\r\n ViewController.prototype.emitMouseMove = function (e) {\r\n this.outgoingEvents.emitMouseMove(e);\r\n };\r\n ViewController.prototype.emitMouseLeave = function (e) {\r\n this.outgoingEvents.emitMouseLeave(e);\r\n };\r\n ViewController.prototype.emitMouseUp = function (e) {\r\n this.outgoingEvents.emitMouseUp(e);\r\n };\r\n ViewController.prototype.emitMouseDown = function (e) {\r\n this.outgoingEvents.emitMouseDown(e);\r\n };\r\n ViewController.prototype.emitMouseDrag = function (e) {\r\n this.outgoingEvents.emitMouseDrag(e);\r\n };\r\n ViewController.prototype.emitMouseDrop = function (e) {\r\n this.outgoingEvents.emitMouseDrop(e);\r\n };\r\n ViewController.prototype.emitMouseWheel = function (e) {\r\n this.outgoingEvents.emitMouseWheel(e);\r\n };\r\n return ViewController;\r\n}());\r\nexport { ViewController };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { MouseTarget } from '../controller/mouseTarget.js';\r\nvar ViewOutgoingEvents = /** @class */ (function (_super) {\r\n __extends(ViewOutgoingEvents, _super);\r\n function ViewOutgoingEvents(viewModel) {\r\n var _this = _super.call(this) || this;\r\n _this.onDidScroll = null;\r\n _this.onDidGainFocus = null;\r\n _this.onDidLoseFocus = null;\r\n _this.onKeyDown = null;\r\n _this.onKeyUp = null;\r\n _this.onContextMenu = null;\r\n _this.onMouseMove = null;\r\n _this.onMouseLeave = null;\r\n _this.onMouseUp = null;\r\n _this.onMouseDown = null;\r\n _this.onMouseDrag = null;\r\n _this.onMouseDrop = null;\r\n _this.onMouseWheel = null;\r\n _this._viewModel = viewModel;\r\n return _this;\r\n }\r\n ViewOutgoingEvents.prototype.emitScrollChanged = function (e) {\r\n if (this.onDidScroll) {\r\n this.onDidScroll(e);\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitViewFocusGained = function () {\r\n if (this.onDidGainFocus) {\r\n this.onDidGainFocus(undefined);\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitViewFocusLost = function () {\r\n if (this.onDidLoseFocus) {\r\n this.onDidLoseFocus(undefined);\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitKeyDown = function (e) {\r\n if (this.onKeyDown) {\r\n this.onKeyDown(e);\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitKeyUp = function (e) {\r\n if (this.onKeyUp) {\r\n this.onKeyUp(e);\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitContextMenu = function (e) {\r\n if (this.onContextMenu) {\r\n this.onContextMenu(this._convertViewToModelMouseEvent(e));\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitMouseMove = function (e) {\r\n if (this.onMouseMove) {\r\n this.onMouseMove(this._convertViewToModelMouseEvent(e));\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitMouseLeave = function (e) {\r\n if (this.onMouseLeave) {\r\n this.onMouseLeave(this._convertViewToModelMouseEvent(e));\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitMouseUp = function (e) {\r\n if (this.onMouseUp) {\r\n this.onMouseUp(this._convertViewToModelMouseEvent(e));\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitMouseDown = function (e) {\r\n if (this.onMouseDown) {\r\n this.onMouseDown(this._convertViewToModelMouseEvent(e));\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitMouseDrag = function (e) {\r\n if (this.onMouseDrag) {\r\n this.onMouseDrag(this._convertViewToModelMouseEvent(e));\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitMouseDrop = function (e) {\r\n if (this.onMouseDrop) {\r\n this.onMouseDrop(this._convertViewToModelMouseEvent(e));\r\n }\r\n };\r\n ViewOutgoingEvents.prototype.emitMouseWheel = function (e) {\r\n if (this.onMouseWheel) {\r\n this.onMouseWheel(e);\r\n }\r\n };\r\n ViewOutgoingEvents.prototype._convertViewToModelMouseEvent = function (e) {\r\n if (e.target) {\r\n return {\r\n event: e.event,\r\n target: this._convertViewToModelMouseTarget(e.target)\r\n };\r\n }\r\n return e;\r\n };\r\n ViewOutgoingEvents.prototype._convertViewToModelMouseTarget = function (target) {\r\n return ViewOutgoingEvents.convertViewToModelMouseTarget(target, this._viewModel.coordinatesConverter);\r\n };\r\n ViewOutgoingEvents.convertViewToModelMouseTarget = function (target, coordinatesConverter) {\r\n return new ExternalMouseTarget(target.element, target.type, target.mouseColumn, target.position ? coordinatesConverter.convertViewPositionToModelPosition(target.position) : null, target.range ? coordinatesConverter.convertViewRangeToModelRange(target.range) : null, target.detail);\r\n };\r\n return ViewOutgoingEvents;\r\n}(Disposable));\r\nexport { ViewOutgoingEvents };\r\nvar ExternalMouseTarget = /** @class */ (function () {\r\n function ExternalMouseTarget(element, type, mouseColumn, position, range, detail) {\r\n this.element = element;\r\n this.type = type;\r\n this.mouseColumn = mouseColumn;\r\n this.position = position;\r\n this.range = range;\r\n this.detail = detail;\r\n }\r\n ExternalMouseTarget.prototype.toString = function () {\r\n return MouseTarget.toString(this);\r\n };\r\n return ExternalMouseTarget;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\r\nimport { createStringBuilder } from '../../common/core/stringBuilder.js';\r\nvar RenderedLinesCollection = /** @class */ (function () {\r\n function RenderedLinesCollection(createLine) {\r\n this._createLine = createLine;\r\n this._set(1, []);\r\n }\r\n RenderedLinesCollection.prototype.flush = function () {\r\n this._set(1, []);\r\n };\r\n RenderedLinesCollection.prototype._set = function (rendLineNumberStart, lines) {\r\n this._lines = lines;\r\n this._rendLineNumberStart = rendLineNumberStart;\r\n };\r\n RenderedLinesCollection.prototype._get = function () {\r\n return {\r\n rendLineNumberStart: this._rendLineNumberStart,\r\n lines: this._lines\r\n };\r\n };\r\n /**\r\n * @returns Inclusive line number that is inside this collection\r\n */\r\n RenderedLinesCollection.prototype.getStartLineNumber = function () {\r\n return this._rendLineNumberStart;\r\n };\r\n /**\r\n * @returns Inclusive line number that is inside this collection\r\n */\r\n RenderedLinesCollection.prototype.getEndLineNumber = function () {\r\n return this._rendLineNumberStart + this._lines.length - 1;\r\n };\r\n RenderedLinesCollection.prototype.getCount = function () {\r\n return this._lines.length;\r\n };\r\n RenderedLinesCollection.prototype.getLine = function (lineNumber) {\r\n var lineIndex = lineNumber - this._rendLineNumberStart;\r\n if (lineIndex < 0 || lineIndex >= this._lines.length) {\r\n throw new Error('Illegal value for lineNumber');\r\n }\r\n return this._lines[lineIndex];\r\n };\r\n /**\r\n * @returns Lines that were removed from this collection\r\n */\r\n RenderedLinesCollection.prototype.onLinesDeleted = function (deleteFromLineNumber, deleteToLineNumber) {\r\n if (this.getCount() === 0) {\r\n // no lines\r\n return null;\r\n }\r\n var startLineNumber = this.getStartLineNumber();\r\n var endLineNumber = this.getEndLineNumber();\r\n if (deleteToLineNumber < startLineNumber) {\r\n // deleting above the viewport\r\n var deleteCnt = deleteToLineNumber - deleteFromLineNumber + 1;\r\n this._rendLineNumberStart -= deleteCnt;\r\n return null;\r\n }\r\n if (deleteFromLineNumber > endLineNumber) {\r\n // deleted below the viewport\r\n return null;\r\n }\r\n // Record what needs to be deleted\r\n var deleteStartIndex = 0;\r\n var deleteCount = 0;\r\n for (var lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\r\n var lineIndex = lineNumber - this._rendLineNumberStart;\r\n if (deleteFromLineNumber <= lineNumber && lineNumber <= deleteToLineNumber) {\r\n // this is a line to be deleted\r\n if (deleteCount === 0) {\r\n // this is the first line to be deleted\r\n deleteStartIndex = lineIndex;\r\n deleteCount = 1;\r\n }\r\n else {\r\n deleteCount++;\r\n }\r\n }\r\n }\r\n // Adjust this._rendLineNumberStart for lines deleted above\r\n if (deleteFromLineNumber < startLineNumber) {\r\n // Something was deleted above\r\n var deleteAboveCount = 0;\r\n if (deleteToLineNumber < startLineNumber) {\r\n // the entire deleted lines are above\r\n deleteAboveCount = deleteToLineNumber - deleteFromLineNumber + 1;\r\n }\r\n else {\r\n deleteAboveCount = startLineNumber - deleteFromLineNumber;\r\n }\r\n this._rendLineNumberStart -= deleteAboveCount;\r\n }\r\n var deleted = this._lines.splice(deleteStartIndex, deleteCount);\r\n return deleted;\r\n };\r\n RenderedLinesCollection.prototype.onLinesChanged = function (changeFromLineNumber, changeToLineNumber) {\r\n if (this.getCount() === 0) {\r\n // no lines\r\n return false;\r\n }\r\n var startLineNumber = this.getStartLineNumber();\r\n var endLineNumber = this.getEndLineNumber();\r\n var someoneNotified = false;\r\n for (var changedLineNumber = changeFromLineNumber; changedLineNumber <= changeToLineNumber; changedLineNumber++) {\r\n if (changedLineNumber >= startLineNumber && changedLineNumber <= endLineNumber) {\r\n // Notify the line\r\n this._lines[changedLineNumber - this._rendLineNumberStart].onContentChanged();\r\n someoneNotified = true;\r\n }\r\n }\r\n return someoneNotified;\r\n };\r\n RenderedLinesCollection.prototype.onLinesInserted = function (insertFromLineNumber, insertToLineNumber) {\r\n if (this.getCount() === 0) {\r\n // no lines\r\n return null;\r\n }\r\n var insertCnt = insertToLineNumber - insertFromLineNumber + 1;\r\n var startLineNumber = this.getStartLineNumber();\r\n var endLineNumber = this.getEndLineNumber();\r\n if (insertFromLineNumber <= startLineNumber) {\r\n // inserting above the viewport\r\n this._rendLineNumberStart += insertCnt;\r\n return null;\r\n }\r\n if (insertFromLineNumber > endLineNumber) {\r\n // inserting below the viewport\r\n return null;\r\n }\r\n if (insertCnt + insertFromLineNumber > endLineNumber) {\r\n // insert inside the viewport in such a way that all remaining lines are pushed outside\r\n var deleted = this._lines.splice(insertFromLineNumber - this._rendLineNumberStart, endLineNumber - insertFromLineNumber + 1);\r\n return deleted;\r\n }\r\n // insert inside the viewport, push out some lines, but not all remaining lines\r\n var newLines = [];\r\n for (var i = 0; i < insertCnt; i++) {\r\n newLines[i] = this._createLine();\r\n }\r\n var insertIndex = insertFromLineNumber - this._rendLineNumberStart;\r\n var beforeLines = this._lines.slice(0, insertIndex);\r\n var afterLines = this._lines.slice(insertIndex, this._lines.length - insertCnt);\r\n var deletedLines = this._lines.slice(this._lines.length - insertCnt, this._lines.length);\r\n this._lines = beforeLines.concat(newLines).concat(afterLines);\r\n return deletedLines;\r\n };\r\n RenderedLinesCollection.prototype.onTokensChanged = function (ranges) {\r\n if (this.getCount() === 0) {\r\n // no lines\r\n return false;\r\n }\r\n var startLineNumber = this.getStartLineNumber();\r\n var endLineNumber = this.getEndLineNumber();\r\n var notifiedSomeone = false;\r\n for (var i = 0, len = ranges.length; i < len; i++) {\r\n var rng = ranges[i];\r\n if (rng.toLineNumber < startLineNumber || rng.fromLineNumber > endLineNumber) {\r\n // range outside viewport\r\n continue;\r\n }\r\n var from = Math.max(startLineNumber, rng.fromLineNumber);\r\n var to = Math.min(endLineNumber, rng.toLineNumber);\r\n for (var lineNumber = from; lineNumber <= to; lineNumber++) {\r\n var lineIndex = lineNumber - this._rendLineNumberStart;\r\n this._lines[lineIndex].onTokensChanged();\r\n notifiedSomeone = true;\r\n }\r\n }\r\n return notifiedSomeone;\r\n };\r\n return RenderedLinesCollection;\r\n}());\r\nexport { RenderedLinesCollection };\r\nvar VisibleLinesCollection = /** @class */ (function () {\r\n function VisibleLinesCollection(host) {\r\n var _this = this;\r\n this._host = host;\r\n this.domNode = this._createDomNode();\r\n this._linesCollection = new RenderedLinesCollection(function () { return _this._host.createVisibleLine(); });\r\n }\r\n VisibleLinesCollection.prototype._createDomNode = function () {\r\n var domNode = createFastDomNode(document.createElement('div'));\r\n domNode.setClassName('view-layer');\r\n domNode.setPosition('absolute');\r\n domNode.domNode.setAttribute('role', 'presentation');\r\n domNode.domNode.setAttribute('aria-hidden', 'true');\r\n return domNode;\r\n };\r\n // ---- begin view event handlers\r\n VisibleLinesCollection.prototype.onConfigurationChanged = function (e) {\r\n if (e.hasChanged(103 /* layoutInfo */)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n VisibleLinesCollection.prototype.onFlushed = function (e) {\r\n this._linesCollection.flush();\r\n // No need to clear the dom node because a full .innerHTML will occur in ViewLayerRenderer._render\r\n return true;\r\n };\r\n VisibleLinesCollection.prototype.onLinesChanged = function (e) {\r\n return this._linesCollection.onLinesChanged(e.fromLineNumber, e.toLineNumber);\r\n };\r\n VisibleLinesCollection.prototype.onLinesDeleted = function (e) {\r\n var deleted = this._linesCollection.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\r\n if (deleted) {\r\n // Remove from DOM\r\n for (var i = 0, len = deleted.length; i < len; i++) {\r\n var lineDomNode = deleted[i].getDomNode();\r\n if (lineDomNode) {\r\n this.domNode.domNode.removeChild(lineDomNode);\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n VisibleLinesCollection.prototype.onLinesInserted = function (e) {\r\n var deleted = this._linesCollection.onLinesInserted(e.fromLineNumber, e.toLineNumber);\r\n if (deleted) {\r\n // Remove from DOM\r\n for (var i = 0, len = deleted.length; i < len; i++) {\r\n var lineDomNode = deleted[i].getDomNode();\r\n if (lineDomNode) {\r\n this.domNode.domNode.removeChild(lineDomNode);\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n VisibleLinesCollection.prototype.onScrollChanged = function (e) {\r\n return e.scrollTopChanged;\r\n };\r\n VisibleLinesCollection.prototype.onTokensChanged = function (e) {\r\n return this._linesCollection.onTokensChanged(e.ranges);\r\n };\r\n VisibleLinesCollection.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // ---- end view event handlers\r\n VisibleLinesCollection.prototype.getStartLineNumber = function () {\r\n return this._linesCollection.getStartLineNumber();\r\n };\r\n VisibleLinesCollection.prototype.getEndLineNumber = function () {\r\n return this._linesCollection.getEndLineNumber();\r\n };\r\n VisibleLinesCollection.prototype.getVisibleLine = function (lineNumber) {\r\n return this._linesCollection.getLine(lineNumber);\r\n };\r\n VisibleLinesCollection.prototype.renderLines = function (viewportData) {\r\n var inp = this._linesCollection._get();\r\n var renderer = new ViewLayerRenderer(this.domNode.domNode, this._host, viewportData);\r\n var ctx = {\r\n rendLineNumberStart: inp.rendLineNumberStart,\r\n lines: inp.lines,\r\n linesLength: inp.lines.length\r\n };\r\n // Decide if this render will do a single update (single large .innerHTML) or many updates (inserting/removing dom nodes)\r\n var resCtx = renderer.render(ctx, viewportData.startLineNumber, viewportData.endLineNumber, viewportData.relativeVerticalOffset);\r\n this._linesCollection._set(resCtx.rendLineNumberStart, resCtx.lines);\r\n };\r\n return VisibleLinesCollection;\r\n}());\r\nexport { VisibleLinesCollection };\r\nvar ViewLayerRenderer = /** @class */ (function () {\r\n function ViewLayerRenderer(domNode, host, viewportData) {\r\n this.domNode = domNode;\r\n this.host = host;\r\n this.viewportData = viewportData;\r\n }\r\n ViewLayerRenderer.prototype.render = function (inContext, startLineNumber, stopLineNumber, deltaTop) {\r\n var ctx = {\r\n rendLineNumberStart: inContext.rendLineNumberStart,\r\n lines: inContext.lines.slice(0),\r\n linesLength: inContext.linesLength\r\n };\r\n if ((ctx.rendLineNumberStart + ctx.linesLength - 1 < startLineNumber) || (stopLineNumber < ctx.rendLineNumberStart)) {\r\n // There is no overlap whatsoever\r\n ctx.rendLineNumberStart = startLineNumber;\r\n ctx.linesLength = stopLineNumber - startLineNumber + 1;\r\n ctx.lines = [];\r\n for (var x = startLineNumber; x <= stopLineNumber; x++) {\r\n ctx.lines[x - startLineNumber] = this.host.createVisibleLine();\r\n }\r\n this._finishRendering(ctx, true, deltaTop);\r\n return ctx;\r\n }\r\n // Update lines which will remain untouched\r\n this._renderUntouchedLines(ctx, Math.max(startLineNumber - ctx.rendLineNumberStart, 0), Math.min(stopLineNumber - ctx.rendLineNumberStart, ctx.linesLength - 1), deltaTop, startLineNumber);\r\n if (ctx.rendLineNumberStart > startLineNumber) {\r\n // Insert lines before\r\n var fromLineNumber = startLineNumber;\r\n var toLineNumber = Math.min(stopLineNumber, ctx.rendLineNumberStart - 1);\r\n if (fromLineNumber <= toLineNumber) {\r\n this._insertLinesBefore(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\r\n ctx.linesLength += toLineNumber - fromLineNumber + 1;\r\n }\r\n }\r\n else if (ctx.rendLineNumberStart < startLineNumber) {\r\n // Remove lines before\r\n var removeCnt = Math.min(ctx.linesLength, startLineNumber - ctx.rendLineNumberStart);\r\n if (removeCnt > 0) {\r\n this._removeLinesBefore(ctx, removeCnt);\r\n ctx.linesLength -= removeCnt;\r\n }\r\n }\r\n ctx.rendLineNumberStart = startLineNumber;\r\n if (ctx.rendLineNumberStart + ctx.linesLength - 1 < stopLineNumber) {\r\n // Insert lines after\r\n var fromLineNumber = ctx.rendLineNumberStart + ctx.linesLength;\r\n var toLineNumber = stopLineNumber;\r\n if (fromLineNumber <= toLineNumber) {\r\n this._insertLinesAfter(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\r\n ctx.linesLength += toLineNumber - fromLineNumber + 1;\r\n }\r\n }\r\n else if (ctx.rendLineNumberStart + ctx.linesLength - 1 > stopLineNumber) {\r\n // Remove lines after\r\n var fromLineNumber = Math.max(0, stopLineNumber - ctx.rendLineNumberStart + 1);\r\n var toLineNumber = ctx.linesLength - 1;\r\n var removeCnt = toLineNumber - fromLineNumber + 1;\r\n if (removeCnt > 0) {\r\n this._removeLinesAfter(ctx, removeCnt);\r\n ctx.linesLength -= removeCnt;\r\n }\r\n }\r\n this._finishRendering(ctx, false, deltaTop);\r\n return ctx;\r\n };\r\n ViewLayerRenderer.prototype._renderUntouchedLines = function (ctx, startIndex, endIndex, deltaTop, deltaLN) {\r\n var rendLineNumberStart = ctx.rendLineNumberStart;\r\n var lines = ctx.lines;\r\n for (var i = startIndex; i <= endIndex; i++) {\r\n var lineNumber = rendLineNumberStart + i;\r\n lines[i].layoutLine(lineNumber, deltaTop[lineNumber - deltaLN]);\r\n }\r\n };\r\n ViewLayerRenderer.prototype._insertLinesBefore = function (ctx, fromLineNumber, toLineNumber, deltaTop, deltaLN) {\r\n var newLines = [];\r\n var newLinesLen = 0;\r\n for (var lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\r\n newLines[newLinesLen++] = this.host.createVisibleLine();\r\n }\r\n ctx.lines = newLines.concat(ctx.lines);\r\n };\r\n ViewLayerRenderer.prototype._removeLinesBefore = function (ctx, removeCount) {\r\n for (var i = 0; i < removeCount; i++) {\r\n var lineDomNode = ctx.lines[i].getDomNode();\r\n if (lineDomNode) {\r\n this.domNode.removeChild(lineDomNode);\r\n }\r\n }\r\n ctx.lines.splice(0, removeCount);\r\n };\r\n ViewLayerRenderer.prototype._insertLinesAfter = function (ctx, fromLineNumber, toLineNumber, deltaTop, deltaLN) {\r\n var newLines = [];\r\n var newLinesLen = 0;\r\n for (var lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\r\n newLines[newLinesLen++] = this.host.createVisibleLine();\r\n }\r\n ctx.lines = ctx.lines.concat(newLines);\r\n };\r\n ViewLayerRenderer.prototype._removeLinesAfter = function (ctx, removeCount) {\r\n var removeIndex = ctx.linesLength - removeCount;\r\n for (var i = 0; i < removeCount; i++) {\r\n var lineDomNode = ctx.lines[removeIndex + i].getDomNode();\r\n if (lineDomNode) {\r\n this.domNode.removeChild(lineDomNode);\r\n }\r\n }\r\n ctx.lines.splice(removeIndex, removeCount);\r\n };\r\n ViewLayerRenderer.prototype._finishRenderingNewLines = function (ctx, domNodeIsEmpty, newLinesHTML, wasNew) {\r\n var lastChild = this.domNode.lastChild;\r\n if (domNodeIsEmpty || !lastChild) {\r\n this.domNode.innerHTML = newLinesHTML;\r\n }\r\n else {\r\n lastChild.insertAdjacentHTML('afterend', newLinesHTML);\r\n }\r\n var currChild = this.domNode.lastChild;\r\n for (var i = ctx.linesLength - 1; i >= 0; i--) {\r\n var line = ctx.lines[i];\r\n if (wasNew[i]) {\r\n line.setDomNode(currChild);\r\n currChild = currChild.previousSibling;\r\n }\r\n }\r\n };\r\n ViewLayerRenderer.prototype._finishRenderingInvalidLines = function (ctx, invalidLinesHTML, wasInvalid) {\r\n var hugeDomNode = document.createElement('div');\r\n hugeDomNode.innerHTML = invalidLinesHTML;\r\n for (var i = 0; i < ctx.linesLength; i++) {\r\n var line = ctx.lines[i];\r\n if (wasInvalid[i]) {\r\n var source = hugeDomNode.firstChild;\r\n var lineDomNode = line.getDomNode();\r\n lineDomNode.parentNode.replaceChild(source, lineDomNode);\r\n line.setDomNode(source);\r\n }\r\n }\r\n };\r\n ViewLayerRenderer.prototype._finishRendering = function (ctx, domNodeIsEmpty, deltaTop) {\r\n var sb = ViewLayerRenderer._sb;\r\n var linesLength = ctx.linesLength;\r\n var lines = ctx.lines;\r\n var rendLineNumberStart = ctx.rendLineNumberStart;\r\n var wasNew = [];\r\n {\r\n sb.reset();\r\n var hadNewLine = false;\r\n for (var i = 0; i < linesLength; i++) {\r\n var line = lines[i];\r\n wasNew[i] = false;\r\n var lineDomNode = line.getDomNode();\r\n if (lineDomNode) {\r\n // line is not new\r\n continue;\r\n }\r\n var renderResult = line.renderLine(i + rendLineNumberStart, deltaTop[i], this.viewportData, sb);\r\n if (!renderResult) {\r\n // line does not need rendering\r\n continue;\r\n }\r\n wasNew[i] = true;\r\n hadNewLine = true;\r\n }\r\n if (hadNewLine) {\r\n this._finishRenderingNewLines(ctx, domNodeIsEmpty, sb.build(), wasNew);\r\n }\r\n }\r\n {\r\n sb.reset();\r\n var hadInvalidLine = false;\r\n var wasInvalid = [];\r\n for (var i = 0; i < linesLength; i++) {\r\n var line = lines[i];\r\n wasInvalid[i] = false;\r\n if (wasNew[i]) {\r\n // line was new\r\n continue;\r\n }\r\n var renderResult = line.renderLine(i + rendLineNumberStart, deltaTop[i], this.viewportData, sb);\r\n if (!renderResult) {\r\n // line does not need rendering\r\n continue;\r\n }\r\n wasInvalid[i] = true;\r\n hadInvalidLine = true;\r\n }\r\n if (hadInvalidLine) {\r\n this._finishRenderingInvalidLines(ctx, sb.build(), wasInvalid);\r\n }\r\n }\r\n };\r\n ViewLayerRenderer._sb = createStringBuilder(100000);\r\n return ViewLayerRenderer;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\r\nimport { Configuration } from '../config/configuration.js';\r\nimport { VisibleLinesCollection } from './viewLayer.js';\r\nimport { ViewPart } from './viewPart.js';\r\nvar ViewOverlays = /** @class */ (function (_super) {\r\n __extends(ViewOverlays, _super);\r\n function ViewOverlays(context) {\r\n var _this = _super.call(this, context) || this;\r\n _this._visibleLines = new VisibleLinesCollection(_this);\r\n _this.domNode = _this._visibleLines.domNode;\r\n _this._dynamicOverlays = [];\r\n _this._isFocused = false;\r\n _this.domNode.setClassName('view-overlays');\r\n return _this;\r\n }\r\n ViewOverlays.prototype.shouldRender = function () {\r\n if (_super.prototype.shouldRender.call(this)) {\r\n return true;\r\n }\r\n for (var i = 0, len = this._dynamicOverlays.length; i < len; i++) {\r\n var dynamicOverlay = this._dynamicOverlays[i];\r\n if (dynamicOverlay.shouldRender()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n ViewOverlays.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n for (var i = 0, len = this._dynamicOverlays.length; i < len; i++) {\r\n var dynamicOverlay = this._dynamicOverlays[i];\r\n dynamicOverlay.dispose();\r\n }\r\n this._dynamicOverlays = [];\r\n };\r\n ViewOverlays.prototype.getDomNode = function () {\r\n return this.domNode;\r\n };\r\n // ---- begin IVisibleLinesHost\r\n ViewOverlays.prototype.createVisibleLine = function () {\r\n return new ViewOverlayLine(this._context.configuration, this._dynamicOverlays);\r\n };\r\n // ---- end IVisibleLinesHost\r\n ViewOverlays.prototype.addDynamicOverlay = function (overlay) {\r\n this._dynamicOverlays.push(overlay);\r\n };\r\n // ----- event handlers\r\n ViewOverlays.prototype.onConfigurationChanged = function (e) {\r\n this._visibleLines.onConfigurationChanged(e);\r\n var startLineNumber = this._visibleLines.getStartLineNumber();\r\n var endLineNumber = this._visibleLines.getEndLineNumber();\r\n for (var lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\r\n var line = this._visibleLines.getVisibleLine(lineNumber);\r\n line.onConfigurationChanged(e);\r\n }\r\n return true;\r\n };\r\n ViewOverlays.prototype.onFlushed = function (e) {\r\n return this._visibleLines.onFlushed(e);\r\n };\r\n ViewOverlays.prototype.onFocusChanged = function (e) {\r\n this._isFocused = e.isFocused;\r\n return true;\r\n };\r\n ViewOverlays.prototype.onLinesChanged = function (e) {\r\n return this._visibleLines.onLinesChanged(e);\r\n };\r\n ViewOverlays.prototype.onLinesDeleted = function (e) {\r\n return this._visibleLines.onLinesDeleted(e);\r\n };\r\n ViewOverlays.prototype.onLinesInserted = function (e) {\r\n return this._visibleLines.onLinesInserted(e);\r\n };\r\n ViewOverlays.prototype.onScrollChanged = function (e) {\r\n return this._visibleLines.onScrollChanged(e) || true;\r\n };\r\n ViewOverlays.prototype.onTokensChanged = function (e) {\r\n return this._visibleLines.onTokensChanged(e);\r\n };\r\n ViewOverlays.prototype.onZonesChanged = function (e) {\r\n return this._visibleLines.onZonesChanged(e);\r\n };\r\n // ----- end event handlers\r\n ViewOverlays.prototype.prepareRender = function (ctx) {\r\n var toRender = this._dynamicOverlays.filter(function (overlay) { return overlay.shouldRender(); });\r\n for (var i = 0, len = toRender.length; i < len; i++) {\r\n var dynamicOverlay = toRender[i];\r\n dynamicOverlay.prepareRender(ctx);\r\n dynamicOverlay.onDidRender();\r\n }\r\n };\r\n ViewOverlays.prototype.render = function (ctx) {\r\n // Overwriting to bypass `shouldRender` flag\r\n this._viewOverlaysRender(ctx);\r\n this.domNode.toggleClassName('focused', this._isFocused);\r\n };\r\n ViewOverlays.prototype._viewOverlaysRender = function (ctx) {\r\n this._visibleLines.renderLines(ctx.viewportData);\r\n };\r\n return ViewOverlays;\r\n}(ViewPart));\r\nexport { ViewOverlays };\r\nvar ViewOverlayLine = /** @class */ (function () {\r\n function ViewOverlayLine(configuration, dynamicOverlays) {\r\n this._configuration = configuration;\r\n this._lineHeight = this._configuration.options.get(47 /* lineHeight */);\r\n this._dynamicOverlays = dynamicOverlays;\r\n this._domNode = null;\r\n this._renderedContent = null;\r\n }\r\n ViewOverlayLine.prototype.getDomNode = function () {\r\n if (!this._domNode) {\r\n return null;\r\n }\r\n return this._domNode.domNode;\r\n };\r\n ViewOverlayLine.prototype.setDomNode = function (domNode) {\r\n this._domNode = createFastDomNode(domNode);\r\n };\r\n ViewOverlayLine.prototype.onContentChanged = function () {\r\n // Nothing\r\n };\r\n ViewOverlayLine.prototype.onTokensChanged = function () {\r\n // Nothing\r\n };\r\n ViewOverlayLine.prototype.onConfigurationChanged = function (e) {\r\n this._lineHeight = this._configuration.options.get(47 /* lineHeight */);\r\n };\r\n ViewOverlayLine.prototype.renderLine = function (lineNumber, deltaTop, viewportData, sb) {\r\n var result = '';\r\n for (var i = 0, len = this._dynamicOverlays.length; i < len; i++) {\r\n var dynamicOverlay = this._dynamicOverlays[i];\r\n result += dynamicOverlay.render(viewportData.startLineNumber, lineNumber);\r\n }\r\n if (this._renderedContent === result) {\r\n // No rendering needed\r\n return false;\r\n }\r\n this._renderedContent = result;\r\n sb.appendASCIIString('
');\r\n sb.appendASCIIString(result);\r\n sb.appendASCIIString('
');\r\n return true;\r\n };\r\n ViewOverlayLine.prototype.layoutLine = function (lineNumber, deltaTop) {\r\n if (this._domNode) {\r\n this._domNode.setTop(deltaTop);\r\n this._domNode.setHeight(this._lineHeight);\r\n }\r\n };\r\n return ViewOverlayLine;\r\n}());\r\nexport { ViewOverlayLine };\r\nvar ContentViewOverlays = /** @class */ (function (_super) {\r\n __extends(ContentViewOverlays, _super);\r\n function ContentViewOverlays(context) {\r\n var _this = _super.call(this, context) || this;\r\n var options = _this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._contentWidth = layoutInfo.contentWidth;\r\n _this.domNode.setHeight(0);\r\n return _this;\r\n }\r\n // --- begin event handlers\r\n ContentViewOverlays.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._contentWidth = layoutInfo.contentWidth;\r\n return _super.prototype.onConfigurationChanged.call(this, e) || true;\r\n };\r\n ContentViewOverlays.prototype.onScrollChanged = function (e) {\r\n return _super.prototype.onScrollChanged.call(this, e) || e.scrollWidthChanged;\r\n };\r\n // --- end event handlers\r\n ContentViewOverlays.prototype._viewOverlaysRender = function (ctx) {\r\n _super.prototype._viewOverlaysRender.call(this, ctx);\r\n this.domNode.setWidth(Math.max(ctx.scrollWidth, this._contentWidth));\r\n };\r\n return ContentViewOverlays;\r\n}(ViewOverlays));\r\nexport { ContentViewOverlays };\r\nvar MarginViewOverlays = /** @class */ (function (_super) {\r\n __extends(MarginViewOverlays, _super);\r\n function MarginViewOverlays(context) {\r\n var _this = _super.call(this, context) || this;\r\n var options = _this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._contentLeft = layoutInfo.contentLeft;\r\n _this.domNode.setClassName('margin-view-overlays');\r\n _this.domNode.setWidth(1);\r\n Configuration.applyFontInfo(_this.domNode, options.get(32 /* fontInfo */));\r\n return _this;\r\n }\r\n MarginViewOverlays.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n Configuration.applyFontInfo(this.domNode, options.get(32 /* fontInfo */));\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._contentLeft = layoutInfo.contentLeft;\r\n return _super.prototype.onConfigurationChanged.call(this, e) || true;\r\n };\r\n MarginViewOverlays.prototype.onScrollChanged = function (e) {\r\n return _super.prototype.onScrollChanged.call(this, e) || e.scrollHeightChanged;\r\n };\r\n MarginViewOverlays.prototype._viewOverlaysRender = function (ctx) {\r\n _super.prototype._viewOverlaysRender.call(this, ctx);\r\n var height = Math.min(ctx.scrollHeight, 1000000);\r\n this.domNode.setHeight(height);\r\n this.domNode.setWidth(this._contentLeft);\r\n };\r\n return MarginViewOverlays;\r\n}(ViewOverlays));\r\nexport { MarginViewOverlays };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as dom from '../../../../base/browser/dom.js';\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\r\nvar Coordinate = /** @class */ (function () {\r\n function Coordinate(top, left) {\r\n this.top = top;\r\n this.left = left;\r\n }\r\n return Coordinate;\r\n}());\r\nvar ViewContentWidgets = /** @class */ (function (_super) {\r\n __extends(ViewContentWidgets, _super);\r\n function ViewContentWidgets(context, viewDomNode) {\r\n var _this = _super.call(this, context) || this;\r\n _this._viewDomNode = viewDomNode;\r\n _this._widgets = {};\r\n _this.domNode = createFastDomNode(document.createElement('div'));\r\n PartFingerprints.write(_this.domNode, 1 /* ContentWidgets */);\r\n _this.domNode.setClassName('contentWidgets');\r\n _this.domNode.setPosition('absolute');\r\n _this.domNode.setTop(0);\r\n _this.overflowingContentWidgetsDomNode = createFastDomNode(document.createElement('div'));\r\n PartFingerprints.write(_this.overflowingContentWidgetsDomNode, 2 /* OverflowingContentWidgets */);\r\n _this.overflowingContentWidgetsDomNode.setClassName('overflowingContentWidgets');\r\n return _this;\r\n }\r\n ViewContentWidgets.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this._widgets = {};\r\n };\r\n // --- begin event handlers\r\n ViewContentWidgets.prototype.onConfigurationChanged = function (e) {\r\n var keys = Object.keys(this._widgets);\r\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\r\n var widgetId = keys_1[_i];\r\n this._widgets[widgetId].onConfigurationChanged(e);\r\n }\r\n return true;\r\n };\r\n ViewContentWidgets.prototype.onDecorationsChanged = function (e) {\r\n // true for inline decorations that can end up relayouting text\r\n return true;\r\n };\r\n ViewContentWidgets.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n ViewContentWidgets.prototype.onLineMappingChanged = function (e) {\r\n var keys = Object.keys(this._widgets);\r\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\r\n var widgetId = keys_2[_i];\r\n this._widgets[widgetId].onLineMappingChanged(e);\r\n }\r\n return true;\r\n };\r\n ViewContentWidgets.prototype.onLinesChanged = function (e) {\r\n return true;\r\n };\r\n ViewContentWidgets.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n ViewContentWidgets.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n ViewContentWidgets.prototype.onScrollChanged = function (e) {\r\n return true;\r\n };\r\n ViewContentWidgets.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // ---- end view event handlers\r\n ViewContentWidgets.prototype.addWidget = function (_widget) {\r\n var myWidget = new Widget(this._context, this._viewDomNode, _widget);\r\n this._widgets[myWidget.id] = myWidget;\r\n if (myWidget.allowEditorOverflow) {\r\n this.overflowingContentWidgetsDomNode.appendChild(myWidget.domNode);\r\n }\r\n else {\r\n this.domNode.appendChild(myWidget.domNode);\r\n }\r\n this.setShouldRender();\r\n };\r\n ViewContentWidgets.prototype.setWidgetPosition = function (widget, position, range, preference) {\r\n var myWidget = this._widgets[widget.getId()];\r\n myWidget.setPosition(position, range, preference);\r\n this.setShouldRender();\r\n };\r\n ViewContentWidgets.prototype.removeWidget = function (widget) {\r\n var widgetId = widget.getId();\r\n if (this._widgets.hasOwnProperty(widgetId)) {\r\n var myWidget = this._widgets[widgetId];\r\n delete this._widgets[widgetId];\r\n var domNode = myWidget.domNode.domNode;\r\n domNode.parentNode.removeChild(domNode);\r\n domNode.removeAttribute('monaco-visible-content-widget');\r\n this.setShouldRender();\r\n }\r\n };\r\n ViewContentWidgets.prototype.shouldSuppressMouseDownOnWidget = function (widgetId) {\r\n if (this._widgets.hasOwnProperty(widgetId)) {\r\n return this._widgets[widgetId].suppressMouseDown;\r\n }\r\n return false;\r\n };\r\n ViewContentWidgets.prototype.onBeforeRender = function (viewportData) {\r\n var keys = Object.keys(this._widgets);\r\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\r\n var widgetId = keys_3[_i];\r\n this._widgets[widgetId].onBeforeRender(viewportData);\r\n }\r\n };\r\n ViewContentWidgets.prototype.prepareRender = function (ctx) {\r\n var keys = Object.keys(this._widgets);\r\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\r\n var widgetId = keys_4[_i];\r\n this._widgets[widgetId].prepareRender(ctx);\r\n }\r\n };\r\n ViewContentWidgets.prototype.render = function (ctx) {\r\n var keys = Object.keys(this._widgets);\r\n for (var _i = 0, keys_5 = keys; _i < keys_5.length; _i++) {\r\n var widgetId = keys_5[_i];\r\n this._widgets[widgetId].render(ctx);\r\n }\r\n };\r\n return ViewContentWidgets;\r\n}(ViewPart));\r\nexport { ViewContentWidgets };\r\nvar Widget = /** @class */ (function () {\r\n function Widget(context, viewDomNode, actual) {\r\n this._context = context;\r\n this._viewDomNode = viewDomNode;\r\n this._actual = actual;\r\n this.domNode = createFastDomNode(this._actual.getDomNode());\r\n this.id = this._actual.getId();\r\n this.allowEditorOverflow = this._actual.allowEditorOverflow || false;\r\n this.suppressMouseDown = this._actual.suppressMouseDown || false;\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._fixedOverflowWidgets = options.get(28 /* fixedOverflowWidgets */);\r\n this._contentWidth = layoutInfo.contentWidth;\r\n this._contentLeft = layoutInfo.contentLeft;\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._position = null;\r\n this._range = null;\r\n this._viewPosition = null;\r\n this._viewRange = null;\r\n this._preference = [];\r\n this._cachedDomNodeClientWidth = -1;\r\n this._cachedDomNodeClientHeight = -1;\r\n this._maxWidth = this._getMaxWidth();\r\n this._isVisible = false;\r\n this._renderData = null;\r\n this.domNode.setPosition((this._fixedOverflowWidgets && this.allowEditorOverflow) ? 'fixed' : 'absolute');\r\n this.domNode.setVisibility('hidden');\r\n this.domNode.setAttribute('widgetId', this.id);\r\n this.domNode.setMaxWidth(this._maxWidth);\r\n }\r\n Widget.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n if (e.hasChanged(103 /* layoutInfo */)) {\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._contentLeft = layoutInfo.contentLeft;\r\n this._contentWidth = layoutInfo.contentWidth;\r\n this._maxWidth = this._getMaxWidth();\r\n }\r\n };\r\n Widget.prototype.onLineMappingChanged = function (e) {\r\n this._setPosition(this._position, this._range);\r\n };\r\n Widget.prototype._setPosition = function (position, range) {\r\n this._position = position;\r\n this._range = range;\r\n this._viewPosition = null;\r\n this._viewRange = null;\r\n if (this._position) {\r\n // Do not trust that widgets give a valid position\r\n var validModelPosition = this._context.model.validateModelPosition(this._position);\r\n if (this._context.model.coordinatesConverter.modelPositionIsVisible(validModelPosition)) {\r\n this._viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(validModelPosition);\r\n }\r\n }\r\n if (this._range) {\r\n // Do not trust that widgets give a valid position\r\n var validModelRange = this._context.model.validateModelRange(this._range);\r\n this._viewRange = this._context.model.coordinatesConverter.convertModelRangeToViewRange(validModelRange);\r\n }\r\n };\r\n Widget.prototype._getMaxWidth = function () {\r\n return (this.allowEditorOverflow\r\n ? window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\r\n : this._contentWidth);\r\n };\r\n Widget.prototype.setPosition = function (position, range, preference) {\r\n this._setPosition(position, range);\r\n this._preference = preference;\r\n this._cachedDomNodeClientWidth = -1;\r\n this._cachedDomNodeClientHeight = -1;\r\n };\r\n Widget.prototype._layoutBoxInViewport = function (topLeft, bottomLeft, width, height, ctx) {\r\n // Our visible box is split horizontally by the current line => 2 boxes\r\n // a) the box above the line\r\n var aboveLineTop = topLeft.top;\r\n var heightAboveLine = aboveLineTop;\r\n // b) the box under the line\r\n var underLineTop = bottomLeft.top + this._lineHeight;\r\n var heightUnderLine = ctx.viewportHeight - underLineTop;\r\n var aboveTop = aboveLineTop - height;\r\n var fitsAbove = (heightAboveLine >= height);\r\n var belowTop = underLineTop;\r\n var fitsBelow = (heightUnderLine >= height);\r\n // And its left\r\n var actualAboveLeft = topLeft.left;\r\n var actualBelowLeft = bottomLeft.left;\r\n if (actualAboveLeft + width > ctx.scrollLeft + ctx.viewportWidth) {\r\n actualAboveLeft = ctx.scrollLeft + ctx.viewportWidth - width;\r\n }\r\n if (actualBelowLeft + width > ctx.scrollLeft + ctx.viewportWidth) {\r\n actualBelowLeft = ctx.scrollLeft + ctx.viewportWidth - width;\r\n }\r\n if (actualAboveLeft < ctx.scrollLeft) {\r\n actualAboveLeft = ctx.scrollLeft;\r\n }\r\n if (actualBelowLeft < ctx.scrollLeft) {\r\n actualBelowLeft = ctx.scrollLeft;\r\n }\r\n return {\r\n fitsAbove: fitsAbove,\r\n aboveTop: aboveTop,\r\n aboveLeft: actualAboveLeft,\r\n fitsBelow: fitsBelow,\r\n belowTop: belowTop,\r\n belowLeft: actualBelowLeft,\r\n };\r\n };\r\n Widget.prototype._layoutBoxInPage = function (topLeft, bottomLeft, width, height, ctx) {\r\n var aboveLeft0 = topLeft.left - ctx.scrollLeft;\r\n var belowLeft0 = bottomLeft.left - ctx.scrollLeft;\r\n var aboveTop = topLeft.top - height;\r\n var belowTop = bottomLeft.top + this._lineHeight;\r\n var aboveLeft = aboveLeft0 + this._contentLeft;\r\n var belowLeft = belowLeft0 + this._contentLeft;\r\n var domNodePosition = dom.getDomNodePagePosition(this._viewDomNode.domNode);\r\n var absoluteAboveTop = domNodePosition.top + aboveTop - dom.StandardWindow.scrollY;\r\n var absoluteBelowTop = domNodePosition.top + belowTop - dom.StandardWindow.scrollY;\r\n var absoluteAboveLeft = domNodePosition.left + aboveLeft - dom.StandardWindow.scrollX;\r\n var absoluteBelowLeft = domNodePosition.left + belowLeft - dom.StandardWindow.scrollX;\r\n var INNER_WIDTH = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n var INNER_HEIGHT = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\n // Leave some clearance to the bottom\r\n var TOP_PADDING = 22;\r\n var BOTTOM_PADDING = 22;\r\n var fitsAbove = (absoluteAboveTop >= TOP_PADDING), fitsBelow = (absoluteBelowTop + height <= INNER_HEIGHT - BOTTOM_PADDING);\r\n if (absoluteAboveLeft + width + 20 > INNER_WIDTH) {\r\n var delta = absoluteAboveLeft - (INNER_WIDTH - width - 20);\r\n absoluteAboveLeft -= delta;\r\n aboveLeft -= delta;\r\n }\r\n if (absoluteBelowLeft + width + 20 > INNER_WIDTH) {\r\n var delta = absoluteBelowLeft - (INNER_WIDTH - width - 20);\r\n absoluteBelowLeft -= delta;\r\n belowLeft -= delta;\r\n }\r\n if (absoluteAboveLeft < 0) {\r\n var delta = absoluteAboveLeft;\r\n absoluteAboveLeft -= delta;\r\n aboveLeft -= delta;\r\n }\r\n if (absoluteBelowLeft < 0) {\r\n var delta = absoluteBelowLeft;\r\n absoluteBelowLeft -= delta;\r\n belowLeft -= delta;\r\n }\r\n if (this._fixedOverflowWidgets) {\r\n aboveTop = absoluteAboveTop;\r\n belowTop = absoluteBelowTop;\r\n aboveLeft = absoluteAboveLeft;\r\n belowLeft = absoluteBelowLeft;\r\n }\r\n return { fitsAbove: fitsAbove, aboveTop: Math.max(aboveTop, TOP_PADDING), aboveLeft: aboveLeft, fitsBelow: fitsBelow, belowTop: belowTop, belowLeft: belowLeft };\r\n };\r\n Widget.prototype._prepareRenderWidgetAtExactPositionOverflowing = function (topLeft) {\r\n return new Coordinate(topLeft.top, topLeft.left + this._contentLeft);\r\n };\r\n /**\r\n * Compute `this._topLeft`\r\n */\r\n Widget.prototype._getTopAndBottomLeft = function (ctx) {\r\n if (!this._viewPosition) {\r\n return [null, null];\r\n }\r\n var visibleRangeForPosition = ctx.visibleRangeForPosition(this._viewPosition);\r\n if (!visibleRangeForPosition) {\r\n return [null, null];\r\n }\r\n var topForPosition = ctx.getVerticalOffsetForLineNumber(this._viewPosition.lineNumber) - ctx.scrollTop;\r\n var topLeft = new Coordinate(topForPosition, visibleRangeForPosition.left);\r\n var largestLineNumber = this._viewPosition.lineNumber;\r\n var smallestLeft = visibleRangeForPosition.left;\r\n if (this._viewRange) {\r\n var visibleRangesForRange = ctx.linesVisibleRangesForRange(this._viewRange, false);\r\n if (visibleRangesForRange && visibleRangesForRange.length > 0) {\r\n for (var i = visibleRangesForRange.length - 1; i >= 0; i--) {\r\n var visibleRangesForLine = visibleRangesForRange[i];\r\n if (visibleRangesForLine.lineNumber >= largestLineNumber) {\r\n if (visibleRangesForLine.lineNumber > largestLineNumber) {\r\n largestLineNumber = visibleRangesForLine.lineNumber;\r\n smallestLeft = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n }\r\n for (var j = 0, lenJ = visibleRangesForLine.ranges.length; j < lenJ; j++) {\r\n var visibleRange = visibleRangesForLine.ranges[j];\r\n if (visibleRange.left < smallestLeft) {\r\n smallestLeft = visibleRange.left;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n var topForBottomLine = ctx.getVerticalOffsetForLineNumber(largestLineNumber) - ctx.scrollTop;\r\n var bottomLeft = new Coordinate(topForBottomLine, smallestLeft);\r\n return [topLeft, bottomLeft];\r\n };\r\n Widget.prototype._prepareRenderWidget = function (ctx) {\r\n var _a = this._getTopAndBottomLeft(ctx), topLeft = _a[0], bottomLeft = _a[1];\r\n if (!topLeft || !bottomLeft) {\r\n return null;\r\n }\r\n if (this._cachedDomNodeClientWidth === -1 || this._cachedDomNodeClientHeight === -1) {\r\n var domNode = this.domNode.domNode;\r\n this._cachedDomNodeClientWidth = domNode.clientWidth;\r\n this._cachedDomNodeClientHeight = domNode.clientHeight;\r\n }\r\n var placement;\r\n if (this.allowEditorOverflow) {\r\n placement = this._layoutBoxInPage(topLeft, bottomLeft, this._cachedDomNodeClientWidth, this._cachedDomNodeClientHeight, ctx);\r\n }\r\n else {\r\n placement = this._layoutBoxInViewport(topLeft, bottomLeft, this._cachedDomNodeClientWidth, this._cachedDomNodeClientHeight, ctx);\r\n }\r\n // Do two passes, first for perfect fit, second picks first option\r\n if (this._preference) {\r\n for (var pass = 1; pass <= 2; pass++) {\r\n for (var _i = 0, _b = this._preference; _i < _b.length; _i++) {\r\n var pref = _b[_i];\r\n // placement\r\n if (pref === 1 /* ABOVE */) {\r\n if (!placement) {\r\n // Widget outside of viewport\r\n return null;\r\n }\r\n if (pass === 2 || placement.fitsAbove) {\r\n return new Coordinate(placement.aboveTop, placement.aboveLeft);\r\n }\r\n }\r\n else if (pref === 2 /* BELOW */) {\r\n if (!placement) {\r\n // Widget outside of viewport\r\n return null;\r\n }\r\n if (pass === 2 || placement.fitsBelow) {\r\n return new Coordinate(placement.belowTop, placement.belowLeft);\r\n }\r\n }\r\n else {\r\n if (this.allowEditorOverflow) {\r\n return this._prepareRenderWidgetAtExactPositionOverflowing(topLeft);\r\n }\r\n else {\r\n return topLeft;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * On this first pass, we ensure that the content widget (if it is in the viewport) has the max width set correctly.\r\n */\r\n Widget.prototype.onBeforeRender = function (viewportData) {\r\n if (!this._viewPosition || !this._preference) {\r\n return;\r\n }\r\n if (this._viewPosition.lineNumber < viewportData.startLineNumber || this._viewPosition.lineNumber > viewportData.endLineNumber) {\r\n // Outside of viewport\r\n return;\r\n }\r\n this.domNode.setMaxWidth(this._maxWidth);\r\n };\r\n Widget.prototype.prepareRender = function (ctx) {\r\n this._renderData = this._prepareRenderWidget(ctx);\r\n };\r\n Widget.prototype.render = function (ctx) {\r\n if (!this._renderData) {\r\n // This widget should be invisible\r\n if (this._isVisible) {\r\n this.domNode.removeAttribute('monaco-visible-content-widget');\r\n this._isVisible = false;\r\n this.domNode.setVisibility('hidden');\r\n }\r\n return;\r\n }\r\n // This widget should be visible\r\n if (this.allowEditorOverflow) {\r\n this.domNode.setTop(this._renderData.top);\r\n this.domNode.setLeft(this._renderData.left);\r\n }\r\n else {\r\n this.domNode.setTop(this._renderData.top + ctx.scrollTop - ctx.bigNumbersDelta);\r\n this.domNode.setLeft(this._renderData.left);\r\n }\r\n if (!this._isVisible) {\r\n this.domNode.setVisibility('inherit');\r\n this.domNode.setAttribute('monaco-visible-content-widget', 'true');\r\n this._isVisible = true;\r\n }\r\n };\r\n return Widget;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './currentLineHighlight.css';\r\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\r\nimport { editorLineHighlight, editorLineHighlightBorder } from '../../../common/view/editorColorRegistry.js';\r\nimport * as arrays from '../../../../base/common/arrays.js';\r\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\r\nvar isRenderedUsingBorder = true;\r\nvar AbstractLineHighlightOverlay = /** @class */ (function (_super) {\r\n __extends(AbstractLineHighlightOverlay, _super);\r\n function AbstractLineHighlightOverlay(context) {\r\n var _this = _super.call(this) || this;\r\n _this._context = context;\r\n var options = _this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._lineHeight = options.get(47 /* lineHeight */);\r\n _this._renderLineHighlight = options.get(69 /* renderLineHighlight */);\r\n _this._contentLeft = layoutInfo.contentLeft;\r\n _this._contentWidth = layoutInfo.contentWidth;\r\n _this._selectionIsEmpty = true;\r\n _this._cursorLineNumbers = [];\r\n _this._selections = [];\r\n _this._renderData = null;\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n AbstractLineHighlightOverlay.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n _super.prototype.dispose.call(this);\r\n };\r\n AbstractLineHighlightOverlay.prototype._readFromSelections = function () {\r\n var hasChanged = false;\r\n // Only render the first selection when using border\r\n var renderSelections = isRenderedUsingBorder ? this._selections.slice(0, 1) : this._selections;\r\n var cursorsLineNumbers = renderSelections.map(function (s) { return s.positionLineNumber; });\r\n cursorsLineNumbers.sort(function (a, b) { return a - b; });\r\n if (!arrays.equals(this._cursorLineNumbers, cursorsLineNumbers)) {\r\n this._cursorLineNumbers = cursorsLineNumbers;\r\n hasChanged = true;\r\n }\r\n var selectionIsEmpty = renderSelections.every(function (s) { return s.isEmpty(); });\r\n if (this._selectionIsEmpty !== selectionIsEmpty) {\r\n this._selectionIsEmpty = selectionIsEmpty;\r\n hasChanged = true;\r\n }\r\n return hasChanged;\r\n };\r\n // --- begin event handlers\r\n AbstractLineHighlightOverlay.prototype.onThemeChanged = function (e) {\r\n return this._readFromSelections();\r\n };\r\n AbstractLineHighlightOverlay.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._renderLineHighlight = options.get(69 /* renderLineHighlight */);\r\n this._contentLeft = layoutInfo.contentLeft;\r\n this._contentWidth = layoutInfo.contentWidth;\r\n return true;\r\n };\r\n AbstractLineHighlightOverlay.prototype.onCursorStateChanged = function (e) {\r\n this._selections = e.selections;\r\n return this._readFromSelections();\r\n };\r\n AbstractLineHighlightOverlay.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n AbstractLineHighlightOverlay.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n AbstractLineHighlightOverlay.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n AbstractLineHighlightOverlay.prototype.onScrollChanged = function (e) {\r\n return e.scrollWidthChanged || e.scrollTopChanged;\r\n };\r\n AbstractLineHighlightOverlay.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // --- end event handlers\r\n AbstractLineHighlightOverlay.prototype.prepareRender = function (ctx) {\r\n if (!this._shouldRenderThis()) {\r\n this._renderData = null;\r\n return;\r\n }\r\n var renderedLine = this._renderOne(ctx);\r\n var visibleStartLineNumber = ctx.visibleRange.startLineNumber;\r\n var visibleEndLineNumber = ctx.visibleRange.endLineNumber;\r\n var len = this._cursorLineNumbers.length;\r\n var index = 0;\r\n var renderData = [];\r\n for (var lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\r\n var lineIndex = lineNumber - visibleStartLineNumber;\r\n while (index < len && this._cursorLineNumbers[index] < lineNumber) {\r\n index++;\r\n }\r\n if (index < len && this._cursorLineNumbers[index] === lineNumber) {\r\n renderData[lineIndex] = renderedLine;\r\n }\r\n else {\r\n renderData[lineIndex] = '';\r\n }\r\n }\r\n this._renderData = renderData;\r\n };\r\n AbstractLineHighlightOverlay.prototype.render = function (startLineNumber, lineNumber) {\r\n if (!this._renderData) {\r\n return '';\r\n }\r\n var lineIndex = lineNumber - startLineNumber;\r\n if (lineIndex >= this._renderData.length) {\r\n return '';\r\n }\r\n return this._renderData[lineIndex];\r\n };\r\n return AbstractLineHighlightOverlay;\r\n}(DynamicViewOverlay));\r\nexport { AbstractLineHighlightOverlay };\r\nvar CurrentLineHighlightOverlay = /** @class */ (function (_super) {\r\n __extends(CurrentLineHighlightOverlay, _super);\r\n function CurrentLineHighlightOverlay() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n CurrentLineHighlightOverlay.prototype._renderOne = function (ctx) {\r\n var className = 'current-line' + (this._shouldRenderOther() ? ' current-line-both' : '');\r\n return \"
\";\r\n };\r\n CurrentLineHighlightOverlay.prototype._shouldRenderThis = function () {\r\n return ((this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all')\r\n && this._selectionIsEmpty);\r\n };\r\n CurrentLineHighlightOverlay.prototype._shouldRenderOther = function () {\r\n return ((this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all'));\r\n };\r\n return CurrentLineHighlightOverlay;\r\n}(AbstractLineHighlightOverlay));\r\nexport { CurrentLineHighlightOverlay };\r\nvar CurrentLineMarginHighlightOverlay = /** @class */ (function (_super) {\r\n __extends(CurrentLineMarginHighlightOverlay, _super);\r\n function CurrentLineMarginHighlightOverlay() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n CurrentLineMarginHighlightOverlay.prototype._renderOne = function (ctx) {\r\n var className = 'current-line current-line-margin' + (this._shouldRenderOther() ? ' current-line-margin-both' : '');\r\n return \"
\";\r\n };\r\n CurrentLineMarginHighlightOverlay.prototype._shouldRenderThis = function () {\r\n return ((this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all'));\r\n };\r\n CurrentLineMarginHighlightOverlay.prototype._shouldRenderOther = function () {\r\n return ((this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all')\r\n && this._selectionIsEmpty);\r\n };\r\n return CurrentLineMarginHighlightOverlay;\r\n}(AbstractLineHighlightOverlay));\r\nexport { CurrentLineMarginHighlightOverlay };\r\nregisterThemingParticipant(function (theme, collector) {\r\n isRenderedUsingBorder = false;\r\n var lineHighlight = theme.getColor(editorLineHighlight);\r\n if (lineHighlight) {\r\n collector.addRule(\".monaco-editor .view-overlays .current-line { background-color: \" + lineHighlight + \"; }\");\r\n collector.addRule(\".monaco-editor .margin-view-overlays .current-line-margin { background-color: \" + lineHighlight + \"; border: none; }\");\r\n }\r\n if (!lineHighlight || lineHighlight.isTransparent() || theme.defines(editorLineHighlightBorder)) {\r\n var lineHighlightBorder = theme.getColor(editorLineHighlightBorder);\r\n if (lineHighlightBorder) {\r\n isRenderedUsingBorder = true;\r\n collector.addRule(\".monaco-editor .view-overlays .current-line { border: 2px solid \" + lineHighlightBorder + \"; }\");\r\n collector.addRule(\".monaco-editor .margin-view-overlays .current-line-margin { border: 2px solid \" + lineHighlightBorder + \"; }\");\r\n if (theme.type === 'hc') {\r\n collector.addRule(\".monaco-editor .view-overlays .current-line { border-width: 1px; }\");\r\n collector.addRule(\".monaco-editor .margin-view-overlays .current-line-margin { border-width: 1px; }\");\r\n }\r\n }\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './decorations.css';\r\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\r\nimport { Range } from '../../../common/core/range.js';\r\nimport { HorizontalRange } from '../../../common/view/renderingContext.js';\r\nvar DecorationsOverlay = /** @class */ (function (_super) {\r\n __extends(DecorationsOverlay, _super);\r\n function DecorationsOverlay(context) {\r\n var _this = _super.call(this) || this;\r\n _this._context = context;\r\n var options = _this._context.configuration.options;\r\n _this._lineHeight = options.get(47 /* lineHeight */);\r\n _this._typicalHalfwidthCharacterWidth = options.get(32 /* fontInfo */).typicalHalfwidthCharacterWidth;\r\n _this._renderResult = null;\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n DecorationsOverlay.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n this._renderResult = null;\r\n _super.prototype.dispose.call(this);\r\n };\r\n // --- begin event handlers\r\n DecorationsOverlay.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._typicalHalfwidthCharacterWidth = options.get(32 /* fontInfo */).typicalHalfwidthCharacterWidth;\r\n return true;\r\n };\r\n DecorationsOverlay.prototype.onDecorationsChanged = function (e) {\r\n return true;\r\n };\r\n DecorationsOverlay.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n DecorationsOverlay.prototype.onLinesChanged = function (e) {\r\n return true;\r\n };\r\n DecorationsOverlay.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n DecorationsOverlay.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n DecorationsOverlay.prototype.onScrollChanged = function (e) {\r\n return e.scrollTopChanged || e.scrollWidthChanged;\r\n };\r\n DecorationsOverlay.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // --- end event handlers\r\n DecorationsOverlay.prototype.prepareRender = function (ctx) {\r\n var _decorations = ctx.getDecorationsInViewport();\r\n // Keep only decorations with `className`\r\n var decorations = [], decorationsLen = 0;\r\n for (var i = 0, len = _decorations.length; i < len; i++) {\r\n var d = _decorations[i];\r\n if (d.options.className) {\r\n decorations[decorationsLen++] = d;\r\n }\r\n }\r\n // Sort decorations for consistent render output\r\n decorations = decorations.sort(function (a, b) {\r\n if (a.options.zIndex < b.options.zIndex) {\r\n return -1;\r\n }\r\n if (a.options.zIndex > b.options.zIndex) {\r\n return 1;\r\n }\r\n var aClassName = a.options.className;\r\n var bClassName = b.options.className;\r\n if (aClassName < bClassName) {\r\n return -1;\r\n }\r\n if (aClassName > bClassName) {\r\n return 1;\r\n }\r\n return Range.compareRangesUsingStarts(a.range, b.range);\r\n });\r\n var visibleStartLineNumber = ctx.visibleRange.startLineNumber;\r\n var visibleEndLineNumber = ctx.visibleRange.endLineNumber;\r\n var output = [];\r\n for (var lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\r\n var lineIndex = lineNumber - visibleStartLineNumber;\r\n output[lineIndex] = '';\r\n }\r\n // Render first whole line decorations and then regular decorations\r\n this._renderWholeLineDecorations(ctx, decorations, output);\r\n this._renderNormalDecorations(ctx, decorations, output);\r\n this._renderResult = output;\r\n };\r\n DecorationsOverlay.prototype._renderWholeLineDecorations = function (ctx, decorations, output) {\r\n var lineHeight = String(this._lineHeight);\r\n var visibleStartLineNumber = ctx.visibleRange.startLineNumber;\r\n var visibleEndLineNumber = ctx.visibleRange.endLineNumber;\r\n for (var i = 0, lenI = decorations.length; i < lenI; i++) {\r\n var d = decorations[i];\r\n if (!d.options.isWholeLine) {\r\n continue;\r\n }\r\n var decorationOutput = ('
');\r\n var startLineNumber = Math.max(d.range.startLineNumber, visibleStartLineNumber);\r\n var endLineNumber = Math.min(d.range.endLineNumber, visibleEndLineNumber);\r\n for (var j = startLineNumber; j <= endLineNumber; j++) {\r\n var lineIndex = j - visibleStartLineNumber;\r\n output[lineIndex] += decorationOutput;\r\n }\r\n }\r\n };\r\n DecorationsOverlay.prototype._renderNormalDecorations = function (ctx, decorations, output) {\r\n var lineHeight = String(this._lineHeight);\r\n var visibleStartLineNumber = ctx.visibleRange.startLineNumber;\r\n var prevClassName = null;\r\n var prevShowIfCollapsed = false;\r\n var prevRange = null;\r\n for (var i = 0, lenI = decorations.length; i < lenI; i++) {\r\n var d = decorations[i];\r\n if (d.options.isWholeLine) {\r\n continue;\r\n }\r\n var className = d.options.className;\r\n var showIfCollapsed = Boolean(d.options.showIfCollapsed);\r\n var range = d.range;\r\n if (showIfCollapsed && range.endColumn === 1 && range.endLineNumber !== range.startLineNumber) {\r\n range = new Range(range.startLineNumber, range.startColumn, range.endLineNumber - 1, this._context.model.getLineMaxColumn(range.endLineNumber - 1));\r\n }\r\n if (prevClassName === className && prevShowIfCollapsed === showIfCollapsed && Range.areIntersectingOrTouching(prevRange, range)) {\r\n // merge into previous decoration\r\n prevRange = Range.plusRange(prevRange, range);\r\n continue;\r\n }\r\n // flush previous decoration\r\n if (prevClassName !== null) {\r\n this._renderNormalDecoration(ctx, prevRange, prevClassName, prevShowIfCollapsed, lineHeight, visibleStartLineNumber, output);\r\n }\r\n prevClassName = className;\r\n prevShowIfCollapsed = showIfCollapsed;\r\n prevRange = range;\r\n }\r\n if (prevClassName !== null) {\r\n this._renderNormalDecoration(ctx, prevRange, prevClassName, prevShowIfCollapsed, lineHeight, visibleStartLineNumber, output);\r\n }\r\n };\r\n DecorationsOverlay.prototype._renderNormalDecoration = function (ctx, range, className, showIfCollapsed, lineHeight, visibleStartLineNumber, output) {\r\n var linesVisibleRanges = ctx.linesVisibleRangesForRange(range, /*TODO@Alex*/ className === 'findMatch');\r\n if (!linesVisibleRanges) {\r\n return;\r\n }\r\n for (var j = 0, lenJ = linesVisibleRanges.length; j < lenJ; j++) {\r\n var lineVisibleRanges = linesVisibleRanges[j];\r\n if (lineVisibleRanges.outsideRenderedLine) {\r\n continue;\r\n }\r\n var lineIndex = lineVisibleRanges.lineNumber - visibleStartLineNumber;\r\n if (showIfCollapsed && lineVisibleRanges.ranges.length === 1) {\r\n var singleVisibleRange = lineVisibleRanges.ranges[0];\r\n if (singleVisibleRange.width === 0) {\r\n // collapsed range case => make the decoration visible by faking its width\r\n lineVisibleRanges.ranges[0] = new HorizontalRange(singleVisibleRange.left, this._typicalHalfwidthCharacterWidth);\r\n }\r\n }\r\n for (var k = 0, lenK = lineVisibleRanges.ranges.length; k < lenK; k++) {\r\n var visibleRange = lineVisibleRanges.ranges[k];\r\n var decorationOutput = ('
');\r\n output[lineIndex] += decorationOutput;\r\n }\r\n }\r\n };\r\n DecorationsOverlay.prototype.render = function (startLineNumber, lineNumber) {\r\n if (!this._renderResult) {\r\n return '';\r\n }\r\n var lineIndex = lineNumber - startLineNumber;\r\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\r\n return '';\r\n }\r\n return this._renderResult[lineIndex];\r\n };\r\n return DecorationsOverlay;\r\n}(DynamicViewOverlay));\r\nexport { DecorationsOverlay };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as dom from '../dom.js';\r\nimport { StandardKeyboardEvent } from '../keyboardEvent.js';\r\nimport { StandardMouseEvent } from '../mouseEvent.js';\r\nimport { Disposable } from '../../common/lifecycle.js';\r\nimport { Gesture } from '../touch.js';\r\nvar Widget = /** @class */ (function (_super) {\r\n __extends(Widget, _super);\r\n function Widget() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n Widget.prototype.onclick = function (domNode, listener) {\r\n this._register(dom.addDisposableListener(domNode, dom.EventType.CLICK, function (e) { return listener(new StandardMouseEvent(e)); }));\r\n };\r\n Widget.prototype.onmousedown = function (domNode, listener) {\r\n this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_DOWN, function (e) { return listener(new StandardMouseEvent(e)); }));\r\n };\r\n Widget.prototype.onmouseover = function (domNode, listener) {\r\n this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_OVER, function (e) { return listener(new StandardMouseEvent(e)); }));\r\n };\r\n Widget.prototype.onnonbubblingmouseout = function (domNode, listener) {\r\n this._register(dom.addDisposableNonBubblingMouseOutListener(domNode, function (e) { return listener(new StandardMouseEvent(e)); }));\r\n };\r\n Widget.prototype.onkeydown = function (domNode, listener) {\r\n this._register(dom.addDisposableListener(domNode, dom.EventType.KEY_DOWN, function (e) { return listener(new StandardKeyboardEvent(e)); }));\r\n };\r\n Widget.prototype.onkeyup = function (domNode, listener) {\r\n this._register(dom.addDisposableListener(domNode, dom.EventType.KEY_UP, function (e) { return listener(new StandardKeyboardEvent(e)); }));\r\n };\r\n Widget.prototype.oninput = function (domNode, listener) {\r\n this._register(dom.addDisposableListener(domNode, dom.EventType.INPUT, listener));\r\n };\r\n Widget.prototype.onblur = function (domNode, listener) {\r\n this._register(dom.addDisposableListener(domNode, dom.EventType.BLUR, listener));\r\n };\r\n Widget.prototype.onfocus = function (domNode, listener) {\r\n this._register(dom.addDisposableListener(domNode, dom.EventType.FOCUS, listener));\r\n };\r\n Widget.prototype.ignoreGesture = function (domNode) {\r\n Gesture.ignoreTarget(domNode);\r\n };\r\n return Widget;\r\n}(Disposable));\r\nexport { Widget };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../globalMouseMoveMonitor.js';\r\nimport { Widget } from '../widget.js';\r\nimport { IntervalTimer, TimeoutTimer } from '../../../common/async.js';\r\n/**\r\n * The arrow image size.\r\n */\r\nexport var ARROW_IMG_SIZE = 11;\r\nvar ScrollbarArrow = /** @class */ (function (_super) {\r\n __extends(ScrollbarArrow, _super);\r\n function ScrollbarArrow(opts) {\r\n var _this = _super.call(this) || this;\r\n _this._onActivate = opts.onActivate;\r\n _this.bgDomNode = document.createElement('div');\r\n _this.bgDomNode.className = 'arrow-background';\r\n _this.bgDomNode.style.position = 'absolute';\r\n _this.bgDomNode.style.width = opts.bgWidth + 'px';\r\n _this.bgDomNode.style.height = opts.bgHeight + 'px';\r\n if (typeof opts.top !== 'undefined') {\r\n _this.bgDomNode.style.top = '0px';\r\n }\r\n if (typeof opts.left !== 'undefined') {\r\n _this.bgDomNode.style.left = '0px';\r\n }\r\n if (typeof opts.bottom !== 'undefined') {\r\n _this.bgDomNode.style.bottom = '0px';\r\n }\r\n if (typeof opts.right !== 'undefined') {\r\n _this.bgDomNode.style.right = '0px';\r\n }\r\n _this.domNode = document.createElement('div');\r\n _this.domNode.className = opts.className;\r\n _this.domNode.style.position = 'absolute';\r\n _this.domNode.style.width = ARROW_IMG_SIZE + 'px';\r\n _this.domNode.style.height = ARROW_IMG_SIZE + 'px';\r\n if (typeof opts.top !== 'undefined') {\r\n _this.domNode.style.top = opts.top + 'px';\r\n }\r\n if (typeof opts.left !== 'undefined') {\r\n _this.domNode.style.left = opts.left + 'px';\r\n }\r\n if (typeof opts.bottom !== 'undefined') {\r\n _this.domNode.style.bottom = opts.bottom + 'px';\r\n }\r\n if (typeof opts.right !== 'undefined') {\r\n _this.domNode.style.right = opts.right + 'px';\r\n }\r\n _this._mouseMoveMonitor = _this._register(new GlobalMouseMoveMonitor());\r\n _this.onmousedown(_this.bgDomNode, function (e) { return _this._arrowMouseDown(e); });\r\n _this.onmousedown(_this.domNode, function (e) { return _this._arrowMouseDown(e); });\r\n _this._mousedownRepeatTimer = _this._register(new IntervalTimer());\r\n _this._mousedownScheduleRepeatTimer = _this._register(new TimeoutTimer());\r\n return _this;\r\n }\r\n ScrollbarArrow.prototype._arrowMouseDown = function (e) {\r\n var _this = this;\r\n var scheduleRepeater = function () {\r\n _this._mousedownRepeatTimer.cancelAndSet(function () { return _this._onActivate(); }, 1000 / 24);\r\n };\r\n this._onActivate();\r\n this._mousedownRepeatTimer.cancel();\r\n this._mousedownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\r\n this._mouseMoveMonitor.startMonitoring(standardMouseMoveMerger, function (mouseMoveData) {\r\n /* Intentional empty */\r\n }, function () {\r\n _this._mousedownRepeatTimer.cancel();\r\n _this._mousedownScheduleRepeatTimer.cancel();\r\n });\r\n e.preventDefault();\r\n };\r\n return ScrollbarArrow;\r\n}(Widget));\r\nexport { ScrollbarArrow };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { TimeoutTimer } from '../../../common/async.js';\r\nimport { Disposable } from '../../../common/lifecycle.js';\r\nvar ScrollbarVisibilityController = /** @class */ (function (_super) {\r\n __extends(ScrollbarVisibilityController, _super);\r\n function ScrollbarVisibilityController(visibility, visibleClassName, invisibleClassName) {\r\n var _this = _super.call(this) || this;\r\n _this._visibility = visibility;\r\n _this._visibleClassName = visibleClassName;\r\n _this._invisibleClassName = invisibleClassName;\r\n _this._domNode = null;\r\n _this._isVisible = false;\r\n _this._isNeeded = false;\r\n _this._shouldBeVisible = false;\r\n _this._revealTimer = _this._register(new TimeoutTimer());\r\n return _this;\r\n }\r\n // ----------------- Hide / Reveal\r\n ScrollbarVisibilityController.prototype.applyVisibilitySetting = function (shouldBeVisible) {\r\n if (this._visibility === 2 /* Hidden */) {\r\n return false;\r\n }\r\n if (this._visibility === 3 /* Visible */) {\r\n return true;\r\n }\r\n return shouldBeVisible;\r\n };\r\n ScrollbarVisibilityController.prototype.setShouldBeVisible = function (rawShouldBeVisible) {\r\n var shouldBeVisible = this.applyVisibilitySetting(rawShouldBeVisible);\r\n if (this._shouldBeVisible !== shouldBeVisible) {\r\n this._shouldBeVisible = shouldBeVisible;\r\n this.ensureVisibility();\r\n }\r\n };\r\n ScrollbarVisibilityController.prototype.setIsNeeded = function (isNeeded) {\r\n if (this._isNeeded !== isNeeded) {\r\n this._isNeeded = isNeeded;\r\n this.ensureVisibility();\r\n }\r\n };\r\n ScrollbarVisibilityController.prototype.setDomNode = function (domNode) {\r\n this._domNode = domNode;\r\n this._domNode.setClassName(this._invisibleClassName);\r\n // Now that the flags & the dom node are in a consistent state, ensure the Hidden/Visible configuration\r\n this.setShouldBeVisible(false);\r\n };\r\n ScrollbarVisibilityController.prototype.ensureVisibility = function () {\r\n if (!this._isNeeded) {\r\n // Nothing to be rendered\r\n this._hide(false);\r\n return;\r\n }\r\n if (this._shouldBeVisible) {\r\n this._reveal();\r\n }\r\n else {\r\n this._hide(true);\r\n }\r\n };\r\n ScrollbarVisibilityController.prototype._reveal = function () {\r\n var _this = this;\r\n if (this._isVisible) {\r\n return;\r\n }\r\n this._isVisible = true;\r\n // The CSS animation doesn't play otherwise\r\n this._revealTimer.setIfNotSet(function () {\r\n if (_this._domNode) {\r\n _this._domNode.setClassName(_this._visibleClassName);\r\n }\r\n }, 0);\r\n };\r\n ScrollbarVisibilityController.prototype._hide = function (withFadeAway) {\r\n this._revealTimer.cancel();\r\n if (!this._isVisible) {\r\n return;\r\n }\r\n this._isVisible = false;\r\n if (this._domNode) {\r\n this._domNode.setClassName(this._invisibleClassName + (withFadeAway ? ' fade' : ''));\r\n }\r\n };\r\n return ScrollbarVisibilityController;\r\n}(Disposable));\r\nexport { ScrollbarVisibilityController };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as dom from '../../dom.js';\r\nimport { createFastDomNode } from '../../fastDomNode.js';\r\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../globalMouseMoveMonitor.js';\r\nimport { ScrollbarArrow } from './scrollbarArrow.js';\r\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController.js';\r\nimport { Widget } from '../widget.js';\r\nimport * as platform from '../../../common/platform.js';\r\n/**\r\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\r\n */\r\nvar MOUSE_DRAG_RESET_DISTANCE = 140;\r\nvar AbstractScrollbar = /** @class */ (function (_super) {\r\n __extends(AbstractScrollbar, _super);\r\n function AbstractScrollbar(opts) {\r\n var _this = _super.call(this) || this;\r\n _this._lazyRender = opts.lazyRender;\r\n _this._host = opts.host;\r\n _this._scrollable = opts.scrollable;\r\n _this._scrollbarState = opts.scrollbarState;\r\n _this._visibilityController = _this._register(new ScrollbarVisibilityController(opts.visibility, 'visible scrollbar ' + opts.extraScrollbarClassName, 'invisible scrollbar ' + opts.extraScrollbarClassName));\r\n _this._mouseMoveMonitor = _this._register(new GlobalMouseMoveMonitor());\r\n _this._shouldRender = true;\r\n _this.domNode = createFastDomNode(document.createElement('div'));\r\n _this.domNode.setAttribute('role', 'presentation');\r\n _this.domNode.setAttribute('aria-hidden', 'true');\r\n _this._visibilityController.setDomNode(_this.domNode);\r\n _this.domNode.setPosition('absolute');\r\n _this.onmousedown(_this.domNode.domNode, function (e) { return _this._domNodeMouseDown(e); });\r\n return _this;\r\n }\r\n // ----------------- creation\r\n /**\r\n * Creates the dom node for an arrow & adds it to the container\r\n */\r\n AbstractScrollbar.prototype._createArrow = function (opts) {\r\n var arrow = this._register(new ScrollbarArrow(opts));\r\n this.domNode.domNode.appendChild(arrow.bgDomNode);\r\n this.domNode.domNode.appendChild(arrow.domNode);\r\n };\r\n /**\r\n * Creates the slider dom node, adds it to the container & hooks up the events\r\n */\r\n AbstractScrollbar.prototype._createSlider = function (top, left, width, height) {\r\n var _this = this;\r\n this.slider = createFastDomNode(document.createElement('div'));\r\n this.slider.setClassName('slider');\r\n this.slider.setPosition('absolute');\r\n this.slider.setTop(top);\r\n this.slider.setLeft(left);\r\n if (typeof width === 'number') {\r\n this.slider.setWidth(width);\r\n }\r\n if (typeof height === 'number') {\r\n this.slider.setHeight(height);\r\n }\r\n this.slider.setLayerHinting(true);\r\n this.slider.setContain('strict');\r\n this.domNode.domNode.appendChild(this.slider.domNode);\r\n this.onmousedown(this.slider.domNode, function (e) {\r\n if (e.leftButton) {\r\n e.preventDefault();\r\n _this._sliderMouseDown(e, function () { });\r\n }\r\n });\r\n this.onclick(this.slider.domNode, function (e) {\r\n if (e.leftButton) {\r\n e.stopPropagation();\r\n }\r\n });\r\n };\r\n // ----------------- Update state\r\n AbstractScrollbar.prototype._onElementSize = function (visibleSize) {\r\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\r\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\r\n this._shouldRender = true;\r\n if (!this._lazyRender) {\r\n this.render();\r\n }\r\n }\r\n return this._shouldRender;\r\n };\r\n AbstractScrollbar.prototype._onElementScrollSize = function (elementScrollSize) {\r\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\r\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\r\n this._shouldRender = true;\r\n if (!this._lazyRender) {\r\n this.render();\r\n }\r\n }\r\n return this._shouldRender;\r\n };\r\n AbstractScrollbar.prototype._onElementScrollPosition = function (elementScrollPosition) {\r\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\r\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\r\n this._shouldRender = true;\r\n if (!this._lazyRender) {\r\n this.render();\r\n }\r\n }\r\n return this._shouldRender;\r\n };\r\n // ----------------- rendering\r\n AbstractScrollbar.prototype.beginReveal = function () {\r\n this._visibilityController.setShouldBeVisible(true);\r\n };\r\n AbstractScrollbar.prototype.beginHide = function () {\r\n this._visibilityController.setShouldBeVisible(false);\r\n };\r\n AbstractScrollbar.prototype.render = function () {\r\n if (!this._shouldRender) {\r\n return;\r\n }\r\n this._shouldRender = false;\r\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\r\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\r\n };\r\n // ----------------- DOM events\r\n AbstractScrollbar.prototype._domNodeMouseDown = function (e) {\r\n if (e.target !== this.domNode.domNode) {\r\n return;\r\n }\r\n this._onMouseDown(e);\r\n };\r\n AbstractScrollbar.prototype.delegateMouseDown = function (e) {\r\n var domTop = this.domNode.domNode.getClientRects()[0].top;\r\n var sliderStart = domTop + this._scrollbarState.getSliderPosition();\r\n var sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\r\n var mousePos = this._sliderMousePosition(e);\r\n if (sliderStart <= mousePos && mousePos <= sliderStop) {\r\n // Act as if it was a mouse down on the slider\r\n if (e.leftButton) {\r\n e.preventDefault();\r\n this._sliderMouseDown(e, function () { });\r\n }\r\n }\r\n else {\r\n // Act as if it was a mouse down on the scrollbar\r\n this._onMouseDown(e);\r\n }\r\n };\r\n AbstractScrollbar.prototype._onMouseDown = function (e) {\r\n var offsetX;\r\n var offsetY;\r\n if (e.target === this.domNode.domNode && typeof e.browserEvent.offsetX === 'number' && typeof e.browserEvent.offsetY === 'number') {\r\n offsetX = e.browserEvent.offsetX;\r\n offsetY = e.browserEvent.offsetY;\r\n }\r\n else {\r\n var domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\r\n offsetX = e.posx - domNodePosition.left;\r\n offsetY = e.posy - domNodePosition.top;\r\n }\r\n this._setDesiredScrollPositionNow(this._scrollbarState.getDesiredScrollPositionFromOffset(this._mouseDownRelativePosition(offsetX, offsetY)));\r\n if (e.leftButton) {\r\n e.preventDefault();\r\n this._sliderMouseDown(e, function () { });\r\n }\r\n };\r\n AbstractScrollbar.prototype._sliderMouseDown = function (e, onDragFinished) {\r\n var _this = this;\r\n var initialMousePosition = this._sliderMousePosition(e);\r\n var initialMouseOrthogonalPosition = this._sliderOrthogonalMousePosition(e);\r\n var initialScrollbarState = this._scrollbarState.clone();\r\n this.slider.toggleClassName('active', true);\r\n this._mouseMoveMonitor.startMonitoring(standardMouseMoveMerger, function (mouseMoveData) {\r\n var mouseOrthogonalPosition = _this._sliderOrthogonalMousePosition(mouseMoveData);\r\n var mouseOrthogonalDelta = Math.abs(mouseOrthogonalPosition - initialMouseOrthogonalPosition);\r\n if (platform.isWindows && mouseOrthogonalDelta > MOUSE_DRAG_RESET_DISTANCE) {\r\n // The mouse has wondered away from the scrollbar => reset dragging\r\n _this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\r\n return;\r\n }\r\n var mousePosition = _this._sliderMousePosition(mouseMoveData);\r\n var mouseDelta = mousePosition - initialMousePosition;\r\n _this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(mouseDelta));\r\n }, function () {\r\n _this.slider.toggleClassName('active', false);\r\n _this._host.onDragEnd();\r\n onDragFinished();\r\n });\r\n this._host.onDragStart();\r\n };\r\n AbstractScrollbar.prototype._setDesiredScrollPositionNow = function (_desiredScrollPosition) {\r\n var desiredScrollPosition = {};\r\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\r\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\r\n };\r\n return AbstractScrollbar;\r\n}(Widget));\r\nexport { AbstractScrollbar };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * The minimal size of the slider (such that it can still be clickable) -- it is artificially enlarged.\r\n */\r\nvar MINIMUM_SLIDER_SIZE = 20;\r\nvar ScrollbarState = /** @class */ (function () {\r\n function ScrollbarState(arrowSize, scrollbarSize, oppositeScrollbarSize) {\r\n this._scrollbarSize = Math.round(scrollbarSize);\r\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\r\n this._arrowSize = Math.round(arrowSize);\r\n this._visibleSize = 0;\r\n this._scrollSize = 0;\r\n this._scrollPosition = 0;\r\n this._computedAvailableSize = 0;\r\n this._computedIsNeeded = false;\r\n this._computedSliderSize = 0;\r\n this._computedSliderRatio = 0;\r\n this._computedSliderPosition = 0;\r\n this._refreshComputedValues();\r\n }\r\n ScrollbarState.prototype.clone = function () {\r\n var r = new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize);\r\n r.setVisibleSize(this._visibleSize);\r\n r.setScrollSize(this._scrollSize);\r\n r.setScrollPosition(this._scrollPosition);\r\n return r;\r\n };\r\n ScrollbarState.prototype.setVisibleSize = function (visibleSize) {\r\n var iVisibleSize = Math.round(visibleSize);\r\n if (this._visibleSize !== iVisibleSize) {\r\n this._visibleSize = iVisibleSize;\r\n this._refreshComputedValues();\r\n return true;\r\n }\r\n return false;\r\n };\r\n ScrollbarState.prototype.setScrollSize = function (scrollSize) {\r\n var iScrollSize = Math.round(scrollSize);\r\n if (this._scrollSize !== iScrollSize) {\r\n this._scrollSize = iScrollSize;\r\n this._refreshComputedValues();\r\n return true;\r\n }\r\n return false;\r\n };\r\n ScrollbarState.prototype.setScrollPosition = function (scrollPosition) {\r\n var iScrollPosition = Math.round(scrollPosition);\r\n if (this._scrollPosition !== iScrollPosition) {\r\n this._scrollPosition = iScrollPosition;\r\n this._refreshComputedValues();\r\n return true;\r\n }\r\n return false;\r\n };\r\n ScrollbarState._computeValues = function (oppositeScrollbarSize, arrowSize, visibleSize, scrollSize, scrollPosition) {\r\n var computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\r\n var computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\r\n var computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\r\n if (!computedIsNeeded) {\r\n // There is no need for a slider\r\n return {\r\n computedAvailableSize: Math.round(computedAvailableSize),\r\n computedIsNeeded: computedIsNeeded,\r\n computedSliderSize: Math.round(computedRepresentableSize),\r\n computedSliderRatio: 0,\r\n computedSliderPosition: 0,\r\n };\r\n }\r\n // We must artificially increase the size of the slider if needed, since the slider would be too small to grab with the mouse otherwise\r\n var computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\r\n // The slider can move from 0 to `computedRepresentableSize` - `computedSliderSize`\r\n // in the same way `scrollPosition` can move from 0 to `scrollSize` - `visibleSize`.\r\n var computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\r\n var computedSliderPosition = (scrollPosition * computedSliderRatio);\r\n return {\r\n computedAvailableSize: Math.round(computedAvailableSize),\r\n computedIsNeeded: computedIsNeeded,\r\n computedSliderSize: Math.round(computedSliderSize),\r\n computedSliderRatio: computedSliderRatio,\r\n computedSliderPosition: Math.round(computedSliderPosition),\r\n };\r\n };\r\n ScrollbarState.prototype._refreshComputedValues = function () {\r\n var r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\r\n this._computedAvailableSize = r.computedAvailableSize;\r\n this._computedIsNeeded = r.computedIsNeeded;\r\n this._computedSliderSize = r.computedSliderSize;\r\n this._computedSliderRatio = r.computedSliderRatio;\r\n this._computedSliderPosition = r.computedSliderPosition;\r\n };\r\n ScrollbarState.prototype.getArrowSize = function () {\r\n return this._arrowSize;\r\n };\r\n ScrollbarState.prototype.getScrollPosition = function () {\r\n return this._scrollPosition;\r\n };\r\n ScrollbarState.prototype.getRectangleLargeSize = function () {\r\n return this._computedAvailableSize;\r\n };\r\n ScrollbarState.prototype.getRectangleSmallSize = function () {\r\n return this._scrollbarSize;\r\n };\r\n ScrollbarState.prototype.isNeeded = function () {\r\n return this._computedIsNeeded;\r\n };\r\n ScrollbarState.prototype.getSliderSize = function () {\r\n return this._computedSliderSize;\r\n };\r\n ScrollbarState.prototype.getSliderPosition = function () {\r\n return this._computedSliderPosition;\r\n };\r\n /**\r\n * Compute a desired `scrollPosition` such that `offset` ends up in the center of the slider.\r\n * `offset` is based on the same coordinate system as the `sliderPosition`.\r\n */\r\n ScrollbarState.prototype.getDesiredScrollPositionFromOffset = function (offset) {\r\n if (!this._computedIsNeeded) {\r\n // no need for a slider\r\n return 0;\r\n }\r\n var desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\r\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\r\n };\r\n /**\r\n * Compute a desired `scrollPosition` such that the slider moves by `delta`.\r\n */\r\n ScrollbarState.prototype.getDesiredScrollPositionFromDelta = function (delta) {\r\n if (!this._computedIsNeeded) {\r\n // no need for a slider\r\n return 0;\r\n }\r\n var desiredSliderPosition = this._computedSliderPosition + delta;\r\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\r\n };\r\n return ScrollbarState;\r\n}());\r\nexport { ScrollbarState };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { StandardWheelEvent } from '../../mouseEvent.js';\r\nimport { AbstractScrollbar } from './abstractScrollbar.js';\r\nimport { ARROW_IMG_SIZE } from './scrollbarArrow.js';\r\nimport { ScrollbarState } from './scrollbarState.js';\r\nvar HorizontalScrollbar = /** @class */ (function (_super) {\r\n __extends(HorizontalScrollbar, _super);\r\n function HorizontalScrollbar(scrollable, options, host) {\r\n var _this = _super.call(this, {\r\n lazyRender: options.lazyRender,\r\n host: host,\r\n scrollbarState: new ScrollbarState((options.horizontalHasArrows ? options.arrowSize : 0), (options.horizontal === 2 /* Hidden */ ? 0 : options.horizontalScrollbarSize), (options.vertical === 2 /* Hidden */ ? 0 : options.verticalScrollbarSize)),\r\n visibility: options.horizontal,\r\n extraScrollbarClassName: 'horizontal',\r\n scrollable: scrollable\r\n }) || this;\r\n if (options.horizontalHasArrows) {\r\n var arrowDelta = (options.arrowSize - ARROW_IMG_SIZE) / 2;\r\n var scrollbarDelta = (options.horizontalScrollbarSize - ARROW_IMG_SIZE) / 2;\r\n _this._createArrow({\r\n className: 'left-arrow',\r\n top: scrollbarDelta,\r\n left: arrowDelta,\r\n bottom: undefined,\r\n right: undefined,\r\n bgWidth: options.arrowSize,\r\n bgHeight: options.horizontalScrollbarSize,\r\n onActivate: function () { return _this._host.onMouseWheel(new StandardWheelEvent(null, 1, 0)); },\r\n });\r\n _this._createArrow({\r\n className: 'right-arrow',\r\n top: scrollbarDelta,\r\n left: undefined,\r\n bottom: undefined,\r\n right: arrowDelta,\r\n bgWidth: options.arrowSize,\r\n bgHeight: options.horizontalScrollbarSize,\r\n onActivate: function () { return _this._host.onMouseWheel(new StandardWheelEvent(null, -1, 0)); },\r\n });\r\n }\r\n _this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\r\n return _this;\r\n }\r\n HorizontalScrollbar.prototype._updateSlider = function (sliderSize, sliderPosition) {\r\n this.slider.setWidth(sliderSize);\r\n this.slider.setLeft(sliderPosition);\r\n };\r\n HorizontalScrollbar.prototype._renderDomNode = function (largeSize, smallSize) {\r\n this.domNode.setWidth(largeSize);\r\n this.domNode.setHeight(smallSize);\r\n this.domNode.setLeft(0);\r\n this.domNode.setBottom(0);\r\n };\r\n HorizontalScrollbar.prototype.onDidScroll = function (e) {\r\n this._shouldRender = this._onElementScrollSize(e.scrollWidth) || this._shouldRender;\r\n this._shouldRender = this._onElementScrollPosition(e.scrollLeft) || this._shouldRender;\r\n this._shouldRender = this._onElementSize(e.width) || this._shouldRender;\r\n return this._shouldRender;\r\n };\r\n HorizontalScrollbar.prototype._mouseDownRelativePosition = function (offsetX, offsetY) {\r\n return offsetX;\r\n };\r\n HorizontalScrollbar.prototype._sliderMousePosition = function (e) {\r\n return e.posx;\r\n };\r\n HorizontalScrollbar.prototype._sliderOrthogonalMousePosition = function (e) {\r\n return e.posy;\r\n };\r\n HorizontalScrollbar.prototype.writeScrollPosition = function (target, scrollPosition) {\r\n target.scrollLeft = scrollPosition;\r\n };\r\n return HorizontalScrollbar;\r\n}(AbstractScrollbar));\r\nexport { HorizontalScrollbar };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { StandardWheelEvent } from '../../mouseEvent.js';\r\nimport { AbstractScrollbar } from './abstractScrollbar.js';\r\nimport { ARROW_IMG_SIZE } from './scrollbarArrow.js';\r\nimport { ScrollbarState } from './scrollbarState.js';\r\nvar VerticalScrollbar = /** @class */ (function (_super) {\r\n __extends(VerticalScrollbar, _super);\r\n function VerticalScrollbar(scrollable, options, host) {\r\n var _this = _super.call(this, {\r\n lazyRender: options.lazyRender,\r\n host: host,\r\n scrollbarState: new ScrollbarState((options.verticalHasArrows ? options.arrowSize : 0), (options.vertical === 2 /* Hidden */ ? 0 : options.verticalScrollbarSize), \r\n // give priority to vertical scroll bar over horizontal and let it scroll all the way to the bottom\r\n 0),\r\n visibility: options.vertical,\r\n extraScrollbarClassName: 'vertical',\r\n scrollable: scrollable\r\n }) || this;\r\n if (options.verticalHasArrows) {\r\n var arrowDelta = (options.arrowSize - ARROW_IMG_SIZE) / 2;\r\n var scrollbarDelta = (options.verticalScrollbarSize - ARROW_IMG_SIZE) / 2;\r\n _this._createArrow({\r\n className: 'up-arrow',\r\n top: arrowDelta,\r\n left: scrollbarDelta,\r\n bottom: undefined,\r\n right: undefined,\r\n bgWidth: options.verticalScrollbarSize,\r\n bgHeight: options.arrowSize,\r\n onActivate: function () { return _this._host.onMouseWheel(new StandardWheelEvent(null, 0, 1)); },\r\n });\r\n _this._createArrow({\r\n className: 'down-arrow',\r\n top: undefined,\r\n left: scrollbarDelta,\r\n bottom: arrowDelta,\r\n right: undefined,\r\n bgWidth: options.verticalScrollbarSize,\r\n bgHeight: options.arrowSize,\r\n onActivate: function () { return _this._host.onMouseWheel(new StandardWheelEvent(null, 0, -1)); },\r\n });\r\n }\r\n _this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\r\n return _this;\r\n }\r\n VerticalScrollbar.prototype._updateSlider = function (sliderSize, sliderPosition) {\r\n this.slider.setHeight(sliderSize);\r\n this.slider.setTop(sliderPosition);\r\n };\r\n VerticalScrollbar.prototype._renderDomNode = function (largeSize, smallSize) {\r\n this.domNode.setWidth(smallSize);\r\n this.domNode.setHeight(largeSize);\r\n this.domNode.setRight(0);\r\n this.domNode.setTop(0);\r\n };\r\n VerticalScrollbar.prototype.onDidScroll = function (e) {\r\n this._shouldRender = this._onElementScrollSize(e.scrollHeight) || this._shouldRender;\r\n this._shouldRender = this._onElementScrollPosition(e.scrollTop) || this._shouldRender;\r\n this._shouldRender = this._onElementSize(e.height) || this._shouldRender;\r\n return this._shouldRender;\r\n };\r\n VerticalScrollbar.prototype._mouseDownRelativePosition = function (offsetX, offsetY) {\r\n return offsetY;\r\n };\r\n VerticalScrollbar.prototype._sliderMousePosition = function (e) {\r\n return e.posy;\r\n };\r\n VerticalScrollbar.prototype._sliderOrthogonalMousePosition = function (e) {\r\n return e.posx;\r\n };\r\n VerticalScrollbar.prototype.writeScrollPosition = function (target, scrollPosition) {\r\n target.scrollTop = scrollPosition;\r\n };\r\n return VerticalScrollbar;\r\n}(AbstractScrollbar));\r\nexport { VerticalScrollbar };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Emitter } from './event.js';\r\nimport { Disposable } from './lifecycle.js';\r\nvar ScrollState = /** @class */ (function () {\r\n function ScrollState(width, scrollWidth, scrollLeft, height, scrollHeight, scrollTop) {\r\n width = width | 0;\r\n scrollWidth = scrollWidth | 0;\r\n scrollLeft = scrollLeft | 0;\r\n height = height | 0;\r\n scrollHeight = scrollHeight | 0;\r\n scrollTop = scrollTop | 0;\r\n if (width < 0) {\r\n width = 0;\r\n }\r\n if (scrollLeft + width > scrollWidth) {\r\n scrollLeft = scrollWidth - width;\r\n }\r\n if (scrollLeft < 0) {\r\n scrollLeft = 0;\r\n }\r\n if (height < 0) {\r\n height = 0;\r\n }\r\n if (scrollTop + height > scrollHeight) {\r\n scrollTop = scrollHeight - height;\r\n }\r\n if (scrollTop < 0) {\r\n scrollTop = 0;\r\n }\r\n this.width = width;\r\n this.scrollWidth = scrollWidth;\r\n this.scrollLeft = scrollLeft;\r\n this.height = height;\r\n this.scrollHeight = scrollHeight;\r\n this.scrollTop = scrollTop;\r\n }\r\n ScrollState.prototype.equals = function (other) {\r\n return (this.width === other.width\r\n && this.scrollWidth === other.scrollWidth\r\n && this.scrollLeft === other.scrollLeft\r\n && this.height === other.height\r\n && this.scrollHeight === other.scrollHeight\r\n && this.scrollTop === other.scrollTop);\r\n };\r\n ScrollState.prototype.withScrollDimensions = function (update) {\r\n return new ScrollState((typeof update.width !== 'undefined' ? update.width : this.width), (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth), this.scrollLeft, (typeof update.height !== 'undefined' ? update.height : this.height), (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight), this.scrollTop);\r\n };\r\n ScrollState.prototype.withScrollPosition = function (update) {\r\n return new ScrollState(this.width, this.scrollWidth, (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.scrollLeft), this.height, this.scrollHeight, (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.scrollTop));\r\n };\r\n ScrollState.prototype.createScrollEvent = function (previous) {\r\n var widthChanged = (this.width !== previous.width);\r\n var scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\r\n var scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\r\n var heightChanged = (this.height !== previous.height);\r\n var scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\r\n var scrollTopChanged = (this.scrollTop !== previous.scrollTop);\r\n return {\r\n width: this.width,\r\n scrollWidth: this.scrollWidth,\r\n scrollLeft: this.scrollLeft,\r\n height: this.height,\r\n scrollHeight: this.scrollHeight,\r\n scrollTop: this.scrollTop,\r\n widthChanged: widthChanged,\r\n scrollWidthChanged: scrollWidthChanged,\r\n scrollLeftChanged: scrollLeftChanged,\r\n heightChanged: heightChanged,\r\n scrollHeightChanged: scrollHeightChanged,\r\n scrollTopChanged: scrollTopChanged,\r\n };\r\n };\r\n return ScrollState;\r\n}());\r\nexport { ScrollState };\r\nvar Scrollable = /** @class */ (function (_super) {\r\n __extends(Scrollable, _super);\r\n function Scrollable(smoothScrollDuration, scheduleAtNextAnimationFrame) {\r\n var _this = _super.call(this) || this;\r\n _this._onScroll = _this._register(new Emitter());\r\n _this.onScroll = _this._onScroll.event;\r\n _this._smoothScrollDuration = smoothScrollDuration;\r\n _this._scheduleAtNextAnimationFrame = scheduleAtNextAnimationFrame;\r\n _this._state = new ScrollState(0, 0, 0, 0, 0, 0);\r\n _this._smoothScrolling = null;\r\n return _this;\r\n }\r\n Scrollable.prototype.dispose = function () {\r\n if (this._smoothScrolling) {\r\n this._smoothScrolling.dispose();\r\n this._smoothScrolling = null;\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n Scrollable.prototype.setSmoothScrollDuration = function (smoothScrollDuration) {\r\n this._smoothScrollDuration = smoothScrollDuration;\r\n };\r\n Scrollable.prototype.validateScrollPosition = function (scrollPosition) {\r\n return this._state.withScrollPosition(scrollPosition);\r\n };\r\n Scrollable.prototype.getScrollDimensions = function () {\r\n return this._state;\r\n };\r\n Scrollable.prototype.setScrollDimensions = function (dimensions) {\r\n var newState = this._state.withScrollDimensions(dimensions);\r\n this._setState(newState);\r\n // Validate outstanding animated scroll position target\r\n if (this._smoothScrolling) {\r\n this._smoothScrolling.acceptScrollDimensions(this._state);\r\n }\r\n };\r\n /**\r\n * Returns the final scroll position that the instance will have once the smooth scroll animation concludes.\r\n * If no scroll animation is occurring, it will return the current scroll position instead.\r\n */\r\n Scrollable.prototype.getFutureScrollPosition = function () {\r\n if (this._smoothScrolling) {\r\n return this._smoothScrolling.to;\r\n }\r\n return this._state;\r\n };\r\n /**\r\n * Returns the current scroll position.\r\n * Note: This result might be an intermediate scroll position, as there might be an ongoing smooth scroll animation.\r\n */\r\n Scrollable.prototype.getCurrentScrollPosition = function () {\r\n return this._state;\r\n };\r\n Scrollable.prototype.setScrollPositionNow = function (update) {\r\n // no smooth scrolling requested\r\n var newState = this._state.withScrollPosition(update);\r\n // Terminate any outstanding smooth scrolling\r\n if (this._smoothScrolling) {\r\n this._smoothScrolling.dispose();\r\n this._smoothScrolling = null;\r\n }\r\n this._setState(newState);\r\n };\r\n Scrollable.prototype.setScrollPositionSmooth = function (update) {\r\n var _this = this;\r\n if (this._smoothScrollDuration === 0) {\r\n // Smooth scrolling not supported.\r\n return this.setScrollPositionNow(update);\r\n }\r\n if (this._smoothScrolling) {\r\n // Combine our pending scrollLeft/scrollTop with incoming scrollLeft/scrollTop\r\n update = {\r\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\r\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\r\n };\r\n // Validate `update`\r\n var validTarget = this._state.withScrollPosition(update);\r\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\r\n // No need to interrupt or extend the current animation since we're going to the same place\r\n return;\r\n }\r\n var newSmoothScrolling = this._smoothScrolling.combine(this._state, validTarget, this._smoothScrollDuration);\r\n this._smoothScrolling.dispose();\r\n this._smoothScrolling = newSmoothScrolling;\r\n }\r\n else {\r\n // Validate `update`\r\n var validTarget = this._state.withScrollPosition(update);\r\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\r\n }\r\n // Begin smooth scrolling animation\r\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(function () {\r\n if (!_this._smoothScrolling) {\r\n return;\r\n }\r\n _this._smoothScrolling.animationFrameDisposable = null;\r\n _this._performSmoothScrolling();\r\n });\r\n };\r\n Scrollable.prototype._performSmoothScrolling = function () {\r\n var _this = this;\r\n if (!this._smoothScrolling) {\r\n return;\r\n }\r\n var update = this._smoothScrolling.tick();\r\n var newState = this._state.withScrollPosition(update);\r\n this._setState(newState);\r\n if (update.isDone) {\r\n this._smoothScrolling.dispose();\r\n this._smoothScrolling = null;\r\n return;\r\n }\r\n // Continue smooth scrolling animation\r\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(function () {\r\n if (!_this._smoothScrolling) {\r\n return;\r\n }\r\n _this._smoothScrolling.animationFrameDisposable = null;\r\n _this._performSmoothScrolling();\r\n });\r\n };\r\n Scrollable.prototype._setState = function (newState) {\r\n var oldState = this._state;\r\n if (oldState.equals(newState)) {\r\n // no change\r\n return;\r\n }\r\n this._state = newState;\r\n this._onScroll.fire(this._state.createScrollEvent(oldState));\r\n };\r\n return Scrollable;\r\n}(Disposable));\r\nexport { Scrollable };\r\nvar SmoothScrollingUpdate = /** @class */ (function () {\r\n function SmoothScrollingUpdate(scrollLeft, scrollTop, isDone) {\r\n this.scrollLeft = scrollLeft;\r\n this.scrollTop = scrollTop;\r\n this.isDone = isDone;\r\n }\r\n return SmoothScrollingUpdate;\r\n}());\r\nexport { SmoothScrollingUpdate };\r\nfunction createEaseOutCubic(from, to) {\r\n var delta = to - from;\r\n return function (completion) {\r\n return from + delta * easeOutCubic(completion);\r\n };\r\n}\r\nfunction createComposed(a, b, cut) {\r\n return function (completion) {\r\n if (completion < cut) {\r\n return a(completion / cut);\r\n }\r\n return b((completion - cut) / (1 - cut));\r\n };\r\n}\r\nvar SmoothScrollingOperation = /** @class */ (function () {\r\n function SmoothScrollingOperation(from, to, startTime, duration) {\r\n this.from = from;\r\n this.to = to;\r\n this.duration = duration;\r\n this._startTime = startTime;\r\n this.animationFrameDisposable = null;\r\n this._initAnimations();\r\n }\r\n SmoothScrollingOperation.prototype._initAnimations = function () {\r\n this.scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\r\n this.scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\r\n };\r\n SmoothScrollingOperation.prototype._initAnimation = function (from, to, viewportSize) {\r\n var delta = Math.abs(from - to);\r\n if (delta > 2.5 * viewportSize) {\r\n var stop1 = void 0, stop2 = void 0;\r\n if (from < to) {\r\n // scroll to 75% of the viewportSize\r\n stop1 = from + 0.75 * viewportSize;\r\n stop2 = to - 0.75 * viewportSize;\r\n }\r\n else {\r\n stop1 = from - 0.75 * viewportSize;\r\n stop2 = to + 0.75 * viewportSize;\r\n }\r\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\r\n }\r\n return createEaseOutCubic(from, to);\r\n };\r\n SmoothScrollingOperation.prototype.dispose = function () {\r\n if (this.animationFrameDisposable !== null) {\r\n this.animationFrameDisposable.dispose();\r\n this.animationFrameDisposable = null;\r\n }\r\n };\r\n SmoothScrollingOperation.prototype.acceptScrollDimensions = function (state) {\r\n this.to = state.withScrollPosition(this.to);\r\n this._initAnimations();\r\n };\r\n SmoothScrollingOperation.prototype.tick = function () {\r\n return this._tick(Date.now());\r\n };\r\n SmoothScrollingOperation.prototype._tick = function (now) {\r\n var completion = (now - this._startTime) / this.duration;\r\n if (completion < 1) {\r\n var newScrollLeft = this.scrollLeft(completion);\r\n var newScrollTop = this.scrollTop(completion);\r\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\r\n }\r\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\r\n };\r\n SmoothScrollingOperation.prototype.combine = function (from, to, duration) {\r\n return SmoothScrollingOperation.start(from, to, duration);\r\n };\r\n SmoothScrollingOperation.start = function (from, to, duration) {\r\n // +10 / -10 : pretend the animation already started for a quicker response to a scroll request\r\n duration = duration + 10;\r\n var startTime = Date.now() - 10;\r\n return new SmoothScrollingOperation(from, to, startTime, duration);\r\n };\r\n return SmoothScrollingOperation;\r\n}());\r\nexport { SmoothScrollingOperation };\r\nfunction easeInCubic(t) {\r\n return Math.pow(t, 3);\r\n}\r\nfunction easeOutCubic(t) {\r\n return 1 - easeInCubic(1 - t);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './media/scrollbars.css';\r\nimport { isEdgeOrIE } from '../../browser.js';\r\nimport * as dom from '../../dom.js';\r\nimport { createFastDomNode } from '../../fastDomNode.js';\r\nimport { StandardWheelEvent } from '../../mouseEvent.js';\r\nimport { HorizontalScrollbar } from './horizontalScrollbar.js';\r\nimport { VerticalScrollbar } from './verticalScrollbar.js';\r\nimport { Widget } from '../widget.js';\r\nimport { TimeoutTimer } from '../../../common/async.js';\r\nimport { Emitter } from '../../../common/event.js';\r\nimport { dispose } from '../../../common/lifecycle.js';\r\nimport * as platform from '../../../common/platform.js';\r\nimport { Scrollable } from '../../../common/scrollable.js';\r\nvar HIDE_TIMEOUT = 500;\r\nvar SCROLL_WHEEL_SENSITIVITY = 50;\r\nvar SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED = true;\r\nvar MouseWheelClassifierItem = /** @class */ (function () {\r\n function MouseWheelClassifierItem(timestamp, deltaX, deltaY) {\r\n this.timestamp = timestamp;\r\n this.deltaX = deltaX;\r\n this.deltaY = deltaY;\r\n this.score = 0;\r\n }\r\n return MouseWheelClassifierItem;\r\n}());\r\nvar MouseWheelClassifier = /** @class */ (function () {\r\n function MouseWheelClassifier() {\r\n this._capacity = 5;\r\n this._memory = [];\r\n this._front = -1;\r\n this._rear = -1;\r\n }\r\n MouseWheelClassifier.prototype.isPhysicalMouseWheel = function () {\r\n if (this._front === -1 && this._rear === -1) {\r\n // no elements\r\n return false;\r\n }\r\n // 0.5 * last + 0.25 * 2nd last + 0.125 * 3rd last + ...\r\n var remainingInfluence = 1;\r\n var score = 0;\r\n var iteration = 1;\r\n var index = this._rear;\r\n do {\r\n var influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\r\n remainingInfluence -= influence;\r\n score += this._memory[index].score * influence;\r\n if (index === this._front) {\r\n break;\r\n }\r\n index = (this._capacity + index - 1) % this._capacity;\r\n iteration++;\r\n } while (true);\r\n return (score <= 0.5);\r\n };\r\n MouseWheelClassifier.prototype.accept = function (timestamp, deltaX, deltaY) {\r\n var item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\r\n item.score = this._computeScore(item);\r\n if (this._front === -1 && this._rear === -1) {\r\n this._memory[0] = item;\r\n this._front = 0;\r\n this._rear = 0;\r\n }\r\n else {\r\n this._rear = (this._rear + 1) % this._capacity;\r\n if (this._rear === this._front) {\r\n // Drop oldest\r\n this._front = (this._front + 1) % this._capacity;\r\n }\r\n this._memory[this._rear] = item;\r\n }\r\n };\r\n /**\r\n * A score between 0 and 1 for `item`.\r\n * - a score towards 0 indicates that the source appears to be a physical mouse wheel\r\n * - a score towards 1 indicates that the source appears to be a touchpad or magic mouse, etc.\r\n */\r\n MouseWheelClassifier.prototype._computeScore = function (item) {\r\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\r\n // both axes exercised => definitely not a physical mouse wheel\r\n return 1;\r\n }\r\n var score = 0.5;\r\n var prev = (this._front === -1 && this._rear === -1 ? null : this._memory[this._rear]);\r\n if (prev) {\r\n // const deltaT = item.timestamp - prev.timestamp;\r\n // if (deltaT < 1000 / 30) {\r\n // \t// sooner than X times per second => indicator that this is not a physical mouse wheel\r\n // \tscore += 0.25;\r\n // }\r\n // if (item.deltaX === prev.deltaX && item.deltaY === prev.deltaY) {\r\n // \t// equal amplitude => indicator that this is a physical mouse wheel\r\n // \tscore -= 0.25;\r\n // }\r\n }\r\n if (Math.abs(item.deltaX - Math.round(item.deltaX)) > 0 || Math.abs(item.deltaY - Math.round(item.deltaY)) > 0) {\r\n // non-integer deltas => indicator that this is not a physical mouse wheel\r\n score += 0.25;\r\n }\r\n return Math.min(Math.max(score, 0), 1);\r\n };\r\n MouseWheelClassifier.INSTANCE = new MouseWheelClassifier();\r\n return MouseWheelClassifier;\r\n}());\r\nexport { MouseWheelClassifier };\r\nvar AbstractScrollableElement = /** @class */ (function (_super) {\r\n __extends(AbstractScrollableElement, _super);\r\n function AbstractScrollableElement(element, options, scrollable) {\r\n var _this = _super.call(this) || this;\r\n _this._onScroll = _this._register(new Emitter());\r\n _this.onScroll = _this._onScroll.event;\r\n element.style.overflow = 'hidden';\r\n _this._options = resolveOptions(options);\r\n _this._scrollable = scrollable;\r\n _this._register(_this._scrollable.onScroll(function (e) {\r\n _this._onDidScroll(e);\r\n _this._onScroll.fire(e);\r\n }));\r\n var scrollbarHost = {\r\n onMouseWheel: function (mouseWheelEvent) { return _this._onMouseWheel(mouseWheelEvent); },\r\n onDragStart: function () { return _this._onDragStart(); },\r\n onDragEnd: function () { return _this._onDragEnd(); },\r\n };\r\n _this._verticalScrollbar = _this._register(new VerticalScrollbar(_this._scrollable, _this._options, scrollbarHost));\r\n _this._horizontalScrollbar = _this._register(new HorizontalScrollbar(_this._scrollable, _this._options, scrollbarHost));\r\n _this._domNode = document.createElement('div');\r\n _this._domNode.className = 'monaco-scrollable-element ' + _this._options.className;\r\n _this._domNode.setAttribute('role', 'presentation');\r\n _this._domNode.style.position = 'relative';\r\n _this._domNode.style.overflow = 'hidden';\r\n _this._domNode.appendChild(element);\r\n _this._domNode.appendChild(_this._horizontalScrollbar.domNode.domNode);\r\n _this._domNode.appendChild(_this._verticalScrollbar.domNode.domNode);\r\n if (_this._options.useShadows) {\r\n _this._leftShadowDomNode = createFastDomNode(document.createElement('div'));\r\n _this._leftShadowDomNode.setClassName('shadow');\r\n _this._domNode.appendChild(_this._leftShadowDomNode.domNode);\r\n _this._topShadowDomNode = createFastDomNode(document.createElement('div'));\r\n _this._topShadowDomNode.setClassName('shadow');\r\n _this._domNode.appendChild(_this._topShadowDomNode.domNode);\r\n _this._topLeftShadowDomNode = createFastDomNode(document.createElement('div'));\r\n _this._topLeftShadowDomNode.setClassName('shadow top-left-corner');\r\n _this._domNode.appendChild(_this._topLeftShadowDomNode.domNode);\r\n }\r\n else {\r\n _this._leftShadowDomNode = null;\r\n _this._topShadowDomNode = null;\r\n _this._topLeftShadowDomNode = null;\r\n }\r\n _this._listenOnDomNode = _this._options.listenOnDomNode || _this._domNode;\r\n _this._mouseWheelToDispose = [];\r\n _this._setListeningToMouseWheel(_this._options.handleMouseWheel);\r\n _this.onmouseover(_this._listenOnDomNode, function (e) { return _this._onMouseOver(e); });\r\n _this.onnonbubblingmouseout(_this._listenOnDomNode, function (e) { return _this._onMouseOut(e); });\r\n _this._hideTimeout = _this._register(new TimeoutTimer());\r\n _this._isDragging = false;\r\n _this._mouseIsOver = false;\r\n _this._shouldRender = true;\r\n _this._revealOnScroll = true;\r\n return _this;\r\n }\r\n AbstractScrollableElement.prototype.dispose = function () {\r\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\r\n _super.prototype.dispose.call(this);\r\n };\r\n /**\r\n * Get the generated 'scrollable' dom node\r\n */\r\n AbstractScrollableElement.prototype.getDomNode = function () {\r\n return this._domNode;\r\n };\r\n AbstractScrollableElement.prototype.getOverviewRulerLayoutInfo = function () {\r\n return {\r\n parent: this._domNode,\r\n insertBefore: this._verticalScrollbar.domNode.domNode,\r\n };\r\n };\r\n /**\r\n * Delegate a mouse down event to the vertical scrollbar.\r\n * This is to help with clicking somewhere else and having the scrollbar react.\r\n */\r\n AbstractScrollableElement.prototype.delegateVerticalScrollbarMouseDown = function (browserEvent) {\r\n this._verticalScrollbar.delegateMouseDown(browserEvent);\r\n };\r\n AbstractScrollableElement.prototype.getScrollDimensions = function () {\r\n return this._scrollable.getScrollDimensions();\r\n };\r\n AbstractScrollableElement.prototype.setScrollDimensions = function (dimensions) {\r\n this._scrollable.setScrollDimensions(dimensions);\r\n };\r\n /**\r\n * Update the class name of the scrollable element.\r\n */\r\n AbstractScrollableElement.prototype.updateClassName = function (newClassName) {\r\n this._options.className = newClassName;\r\n // Defaults are different on Macs\r\n if (platform.isMacintosh) {\r\n this._options.className += ' mac';\r\n }\r\n this._domNode.className = 'monaco-scrollable-element ' + this._options.className;\r\n };\r\n /**\r\n * Update configuration options for the scrollbar.\r\n * Really this is Editor.IEditorScrollbarOptions, but base shouldn't\r\n * depend on Editor.\r\n */\r\n AbstractScrollableElement.prototype.updateOptions = function (newOptions) {\r\n var massagedOptions = resolveOptions(newOptions);\r\n this._options.handleMouseWheel = massagedOptions.handleMouseWheel;\r\n this._options.mouseWheelScrollSensitivity = massagedOptions.mouseWheelScrollSensitivity;\r\n this._options.fastScrollSensitivity = massagedOptions.fastScrollSensitivity;\r\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\r\n if (!this._options.lazyRender) {\r\n this._render();\r\n }\r\n };\r\n // -------------------- mouse wheel scrolling --------------------\r\n AbstractScrollableElement.prototype._setListeningToMouseWheel = function (shouldListen) {\r\n var _this = this;\r\n var isListening = (this._mouseWheelToDispose.length > 0);\r\n if (isListening === shouldListen) {\r\n // No change\r\n return;\r\n }\r\n // Stop listening (if necessary)\r\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\r\n // Start listening (if necessary)\r\n if (shouldListen) {\r\n var onMouseWheel = function (browserEvent) {\r\n _this._onMouseWheel(new StandardWheelEvent(browserEvent));\r\n };\r\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, isEdgeOrIE ? 'mousewheel' : 'wheel', onMouseWheel, { passive: false }));\r\n }\r\n };\r\n AbstractScrollableElement.prototype._onMouseWheel = function (e) {\r\n var _a;\r\n var classifier = MouseWheelClassifier.INSTANCE;\r\n if (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED) {\r\n classifier.accept(Date.now(), e.deltaX, e.deltaY);\r\n }\r\n // console.log(`${Date.now()}, ${e.deltaY}, ${e.deltaX}`);\r\n if (e.deltaY || e.deltaX) {\r\n var deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\r\n var deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\r\n if (this._options.flipAxes) {\r\n _a = [deltaX, deltaY], deltaY = _a[0], deltaX = _a[1];\r\n }\r\n // Convert vertical scrolling to horizontal if shift is held, this\r\n // is handled at a higher level on Mac\r\n var shiftConvert = !platform.isMacintosh && e.browserEvent && e.browserEvent.shiftKey;\r\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\r\n deltaX = deltaY;\r\n deltaY = 0;\r\n }\r\n if (e.browserEvent && e.browserEvent.altKey) {\r\n // fastScrolling\r\n deltaX = deltaX * this._options.fastScrollSensitivity;\r\n deltaY = deltaY * this._options.fastScrollSensitivity;\r\n }\r\n var futureScrollPosition = this._scrollable.getFutureScrollPosition();\r\n var desiredScrollPosition = {};\r\n if (deltaY) {\r\n var desiredScrollTop = futureScrollPosition.scrollTop - SCROLL_WHEEL_SENSITIVITY * deltaY;\r\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\r\n }\r\n if (deltaX) {\r\n var desiredScrollLeft = futureScrollPosition.scrollLeft - SCROLL_WHEEL_SENSITIVITY * deltaX;\r\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\r\n }\r\n // Check that we are scrolling towards a location which is valid\r\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\r\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\r\n var canPerformSmoothScroll = (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED\r\n && this._options.mouseWheelSmoothScroll\r\n && classifier.isPhysicalMouseWheel());\r\n if (canPerformSmoothScroll) {\r\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\r\n }\r\n else {\r\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\r\n }\r\n this._shouldRender = true;\r\n }\r\n }\r\n if (this._options.alwaysConsumeMouseWheel || this._shouldRender) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n };\r\n AbstractScrollableElement.prototype._onDidScroll = function (e) {\r\n this._shouldRender = this._horizontalScrollbar.onDidScroll(e) || this._shouldRender;\r\n this._shouldRender = this._verticalScrollbar.onDidScroll(e) || this._shouldRender;\r\n if (this._options.useShadows) {\r\n this._shouldRender = true;\r\n }\r\n if (this._revealOnScroll) {\r\n this._reveal();\r\n }\r\n if (!this._options.lazyRender) {\r\n this._render();\r\n }\r\n };\r\n /**\r\n * Render / mutate the DOM now.\r\n * Should be used together with the ctor option `lazyRender`.\r\n */\r\n AbstractScrollableElement.prototype.renderNow = function () {\r\n if (!this._options.lazyRender) {\r\n throw new Error('Please use `lazyRender` together with `renderNow`!');\r\n }\r\n this._render();\r\n };\r\n AbstractScrollableElement.prototype._render = function () {\r\n if (!this._shouldRender) {\r\n return;\r\n }\r\n this._shouldRender = false;\r\n this._horizontalScrollbar.render();\r\n this._verticalScrollbar.render();\r\n if (this._options.useShadows) {\r\n var scrollState = this._scrollable.getCurrentScrollPosition();\r\n var enableTop = scrollState.scrollTop > 0;\r\n var enableLeft = scrollState.scrollLeft > 0;\r\n this._leftShadowDomNode.setClassName('shadow' + (enableLeft ? ' left' : ''));\r\n this._topShadowDomNode.setClassName('shadow' + (enableTop ? ' top' : ''));\r\n this._topLeftShadowDomNode.setClassName('shadow top-left-corner' + (enableTop ? ' top' : '') + (enableLeft ? ' left' : ''));\r\n }\r\n };\r\n // -------------------- fade in / fade out --------------------\r\n AbstractScrollableElement.prototype._onDragStart = function () {\r\n this._isDragging = true;\r\n this._reveal();\r\n };\r\n AbstractScrollableElement.prototype._onDragEnd = function () {\r\n this._isDragging = false;\r\n this._hide();\r\n };\r\n AbstractScrollableElement.prototype._onMouseOut = function (e) {\r\n this._mouseIsOver = false;\r\n this._hide();\r\n };\r\n AbstractScrollableElement.prototype._onMouseOver = function (e) {\r\n this._mouseIsOver = true;\r\n this._reveal();\r\n };\r\n AbstractScrollableElement.prototype._reveal = function () {\r\n this._verticalScrollbar.beginReveal();\r\n this._horizontalScrollbar.beginReveal();\r\n this._scheduleHide();\r\n };\r\n AbstractScrollableElement.prototype._hide = function () {\r\n if (!this._mouseIsOver && !this._isDragging) {\r\n this._verticalScrollbar.beginHide();\r\n this._horizontalScrollbar.beginHide();\r\n }\r\n };\r\n AbstractScrollableElement.prototype._scheduleHide = function () {\r\n var _this = this;\r\n if (!this._mouseIsOver && !this._isDragging) {\r\n this._hideTimeout.cancelAndSet(function () { return _this._hide(); }, HIDE_TIMEOUT);\r\n }\r\n };\r\n return AbstractScrollableElement;\r\n}(Widget));\r\nexport { AbstractScrollableElement };\r\nvar ScrollableElement = /** @class */ (function (_super) {\r\n __extends(ScrollableElement, _super);\r\n function ScrollableElement(element, options) {\r\n var _this = this;\r\n options = options || {};\r\n options.mouseWheelSmoothScroll = false;\r\n var scrollable = new Scrollable(0, function (callback) { return dom.scheduleAtNextAnimationFrame(callback); });\r\n _this = _super.call(this, element, options, scrollable) || this;\r\n _this._register(scrollable);\r\n return _this;\r\n }\r\n ScrollableElement.prototype.setScrollPosition = function (update) {\r\n this._scrollable.setScrollPositionNow(update);\r\n };\r\n ScrollableElement.prototype.getScrollPosition = function () {\r\n return this._scrollable.getCurrentScrollPosition();\r\n };\r\n return ScrollableElement;\r\n}(AbstractScrollableElement));\r\nexport { ScrollableElement };\r\nvar SmoothScrollableElement = /** @class */ (function (_super) {\r\n __extends(SmoothScrollableElement, _super);\r\n function SmoothScrollableElement(element, options, scrollable) {\r\n return _super.call(this, element, options, scrollable) || this;\r\n }\r\n return SmoothScrollableElement;\r\n}(AbstractScrollableElement));\r\nexport { SmoothScrollableElement };\r\nvar DomScrollableElement = /** @class */ (function (_super) {\r\n __extends(DomScrollableElement, _super);\r\n function DomScrollableElement(element, options) {\r\n var _this = _super.call(this, element, options) || this;\r\n _this._element = element;\r\n _this.onScroll(function (e) {\r\n if (e.scrollTopChanged) {\r\n _this._element.scrollTop = e.scrollTop;\r\n }\r\n if (e.scrollLeftChanged) {\r\n _this._element.scrollLeft = e.scrollLeft;\r\n }\r\n });\r\n _this.scanDomNode();\r\n return _this;\r\n }\r\n DomScrollableElement.prototype.scanDomNode = function () {\r\n // width, scrollLeft, scrollWidth, height, scrollTop, scrollHeight\r\n this.setScrollDimensions({\r\n width: this._element.clientWidth,\r\n scrollWidth: this._element.scrollWidth,\r\n height: this._element.clientHeight,\r\n scrollHeight: this._element.scrollHeight\r\n });\r\n this.setScrollPosition({\r\n scrollLeft: this._element.scrollLeft,\r\n scrollTop: this._element.scrollTop,\r\n });\r\n };\r\n return DomScrollableElement;\r\n}(ScrollableElement));\r\nexport { DomScrollableElement };\r\nfunction resolveOptions(opts) {\r\n var result = {\r\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\r\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\r\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\r\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\r\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\r\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\r\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\r\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\r\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\r\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\r\n arrowSize: (typeof opts.arrowSize !== 'undefined' ? opts.arrowSize : 11),\r\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\r\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : 1 /* Auto */),\r\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\r\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\r\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\r\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : 1 /* Auto */),\r\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\r\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\r\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0)\r\n };\r\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\r\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\r\n // Defaults are different on Macs\r\n if (platform.isMacintosh) {\r\n result.className += ' mac';\r\n }\r\n return result;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as dom from '../../../../base/browser/dom.js';\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { SmoothScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js';\r\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\r\nimport { getThemeTypeSelector } from '../../../../platform/theme/common/themeService.js';\r\nvar EditorScrollbar = /** @class */ (function (_super) {\r\n __extends(EditorScrollbar, _super);\r\n function EditorScrollbar(context, linesContent, viewDomNode, overflowGuardDomNode) {\r\n var _this = _super.call(this, context) || this;\r\n var options = _this._context.configuration.options;\r\n var scrollbar = options.get(74 /* scrollbar */);\r\n var mouseWheelScrollSensitivity = options.get(54 /* mouseWheelScrollSensitivity */);\r\n var fastScrollSensitivity = options.get(26 /* fastScrollSensitivity */);\r\n var scrollbarOptions = {\r\n listenOnDomNode: viewDomNode.domNode,\r\n className: 'editor-scrollable' + ' ' + getThemeTypeSelector(context.theme.type),\r\n useShadows: false,\r\n lazyRender: true,\r\n vertical: scrollbar.vertical,\r\n horizontal: scrollbar.horizontal,\r\n verticalHasArrows: scrollbar.verticalHasArrows,\r\n horizontalHasArrows: scrollbar.horizontalHasArrows,\r\n verticalScrollbarSize: scrollbar.verticalScrollbarSize,\r\n verticalSliderSize: scrollbar.verticalSliderSize,\r\n horizontalScrollbarSize: scrollbar.horizontalScrollbarSize,\r\n horizontalSliderSize: scrollbar.horizontalSliderSize,\r\n handleMouseWheel: scrollbar.handleMouseWheel,\r\n alwaysConsumeMouseWheel: scrollbar.alwaysConsumeMouseWheel,\r\n arrowSize: scrollbar.arrowSize,\r\n mouseWheelScrollSensitivity: mouseWheelScrollSensitivity,\r\n fastScrollSensitivity: fastScrollSensitivity,\r\n };\r\n _this.scrollbar = _this._register(new SmoothScrollableElement(linesContent.domNode, scrollbarOptions, _this._context.viewLayout.scrollable));\r\n PartFingerprints.write(_this.scrollbar.getDomNode(), 5 /* ScrollableElement */);\r\n _this.scrollbarDomNode = createFastDomNode(_this.scrollbar.getDomNode());\r\n _this.scrollbarDomNode.setPosition('absolute');\r\n _this._setLayout();\r\n // When having a zone widget that calls .focus() on one of its dom elements,\r\n // the browser will try desperately to reveal that dom node, unexpectedly\r\n // changing the .scrollTop of this.linesContent\r\n var onBrowserDesperateReveal = function (domNode, lookAtScrollTop, lookAtScrollLeft) {\r\n var newScrollPosition = {};\r\n if (lookAtScrollTop) {\r\n var deltaTop = domNode.scrollTop;\r\n if (deltaTop) {\r\n newScrollPosition.scrollTop = _this._context.viewLayout.getCurrentScrollTop() + deltaTop;\r\n domNode.scrollTop = 0;\r\n }\r\n }\r\n if (lookAtScrollLeft) {\r\n var deltaLeft = domNode.scrollLeft;\r\n if (deltaLeft) {\r\n newScrollPosition.scrollLeft = _this._context.viewLayout.getCurrentScrollLeft() + deltaLeft;\r\n domNode.scrollLeft = 0;\r\n }\r\n }\r\n _this._context.viewLayout.setScrollPositionNow(newScrollPosition);\r\n };\r\n // I've seen this happen both on the view dom node & on the lines content dom node.\r\n _this._register(dom.addDisposableListener(viewDomNode.domNode, 'scroll', function (e) { return onBrowserDesperateReveal(viewDomNode.domNode, true, true); }));\r\n _this._register(dom.addDisposableListener(linesContent.domNode, 'scroll', function (e) { return onBrowserDesperateReveal(linesContent.domNode, true, false); }));\r\n _this._register(dom.addDisposableListener(overflowGuardDomNode.domNode, 'scroll', function (e) { return onBrowserDesperateReveal(overflowGuardDomNode.domNode, true, false); }));\r\n _this._register(dom.addDisposableListener(_this.scrollbarDomNode.domNode, 'scroll', function (e) { return onBrowserDesperateReveal(_this.scrollbarDomNode.domNode, true, false); }));\r\n return _this;\r\n }\r\n EditorScrollbar.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n EditorScrollbar.prototype._setLayout = function () {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this.scrollbarDomNode.setLeft(layoutInfo.contentLeft);\r\n var minimap = options.get(52 /* minimap */);\r\n var side = minimap.side;\r\n if (side === 'right') {\r\n this.scrollbarDomNode.setWidth(layoutInfo.contentWidth + layoutInfo.minimapWidth);\r\n }\r\n else {\r\n this.scrollbarDomNode.setWidth(layoutInfo.contentWidth);\r\n }\r\n this.scrollbarDomNode.setHeight(layoutInfo.contentHeight);\r\n };\r\n EditorScrollbar.prototype.getOverviewRulerLayoutInfo = function () {\r\n return this.scrollbar.getOverviewRulerLayoutInfo();\r\n };\r\n EditorScrollbar.prototype.getDomNode = function () {\r\n return this.scrollbarDomNode;\r\n };\r\n EditorScrollbar.prototype.delegateVerticalScrollbarMouseDown = function (browserEvent) {\r\n this.scrollbar.delegateVerticalScrollbarMouseDown(browserEvent);\r\n };\r\n // --- begin event handlers\r\n EditorScrollbar.prototype.onConfigurationChanged = function (e) {\r\n if (e.hasChanged(74 /* scrollbar */)\r\n || e.hasChanged(54 /* mouseWheelScrollSensitivity */)\r\n || e.hasChanged(26 /* fastScrollSensitivity */)) {\r\n var options = this._context.configuration.options;\r\n var scrollbar = options.get(74 /* scrollbar */);\r\n var mouseWheelScrollSensitivity = options.get(54 /* mouseWheelScrollSensitivity */);\r\n var fastScrollSensitivity = options.get(26 /* fastScrollSensitivity */);\r\n var newOpts = {\r\n handleMouseWheel: scrollbar.handleMouseWheel,\r\n mouseWheelScrollSensitivity: mouseWheelScrollSensitivity,\r\n fastScrollSensitivity: fastScrollSensitivity\r\n };\r\n this.scrollbar.updateOptions(newOpts);\r\n }\r\n if (e.hasChanged(103 /* layoutInfo */)) {\r\n this._setLayout();\r\n }\r\n return true;\r\n };\r\n EditorScrollbar.prototype.onScrollChanged = function (e) {\r\n return true;\r\n };\r\n EditorScrollbar.prototype.onThemeChanged = function (e) {\r\n this.scrollbar.updateClassName('editor-scrollable' + ' ' + getThemeTypeSelector(this._context.theme.type));\r\n return true;\r\n };\r\n // --- end event handlers\r\n EditorScrollbar.prototype.prepareRender = function (ctx) {\r\n // Nothing to do\r\n };\r\n EditorScrollbar.prototype.render = function (ctx) {\r\n this.scrollbar.renderNow();\r\n };\r\n return EditorScrollbar;\r\n}(ViewPart));\r\nexport { EditorScrollbar };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './glyphMargin.css';\r\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\r\nvar DecorationToRender = /** @class */ (function () {\r\n function DecorationToRender(startLineNumber, endLineNumber, className) {\r\n this.startLineNumber = +startLineNumber;\r\n this.endLineNumber = +endLineNumber;\r\n this.className = String(className);\r\n }\r\n return DecorationToRender;\r\n}());\r\nexport { DecorationToRender };\r\nvar DedupOverlay = /** @class */ (function (_super) {\r\n __extends(DedupOverlay, _super);\r\n function DedupOverlay() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DedupOverlay.prototype._render = function (visibleStartLineNumber, visibleEndLineNumber, decorations) {\r\n var output = [];\r\n for (var lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\r\n var lineIndex = lineNumber - visibleStartLineNumber;\r\n output[lineIndex] = [];\r\n }\r\n if (decorations.length === 0) {\r\n return output;\r\n }\r\n decorations.sort(function (a, b) {\r\n if (a.className === b.className) {\r\n if (a.startLineNumber === b.startLineNumber) {\r\n return a.endLineNumber - b.endLineNumber;\r\n }\r\n return a.startLineNumber - b.startLineNumber;\r\n }\r\n return (a.className < b.className ? -1 : 1);\r\n });\r\n var prevClassName = null;\r\n var prevEndLineIndex = 0;\r\n for (var i = 0, len = decorations.length; i < len; i++) {\r\n var d = decorations[i];\r\n var className = d.className;\r\n var startLineIndex = Math.max(d.startLineNumber, visibleStartLineNumber) - visibleStartLineNumber;\r\n var endLineIndex = Math.min(d.endLineNumber, visibleEndLineNumber) - visibleStartLineNumber;\r\n if (prevClassName === className) {\r\n startLineIndex = Math.max(prevEndLineIndex + 1, startLineIndex);\r\n prevEndLineIndex = Math.max(prevEndLineIndex, endLineIndex);\r\n }\r\n else {\r\n prevClassName = className;\r\n prevEndLineIndex = endLineIndex;\r\n }\r\n for (var i_1 = startLineIndex; i_1 <= prevEndLineIndex; i_1++) {\r\n output[i_1].push(prevClassName);\r\n }\r\n }\r\n return output;\r\n };\r\n return DedupOverlay;\r\n}(DynamicViewOverlay));\r\nexport { DedupOverlay };\r\nvar GlyphMarginOverlay = /** @class */ (function (_super) {\r\n __extends(GlyphMarginOverlay, _super);\r\n function GlyphMarginOverlay(context) {\r\n var _this = _super.call(this) || this;\r\n _this._context = context;\r\n var options = _this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._lineHeight = options.get(47 /* lineHeight */);\r\n _this._glyphMargin = options.get(38 /* glyphMargin */);\r\n _this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\r\n _this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\r\n _this._renderResult = null;\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n GlyphMarginOverlay.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n this._renderResult = null;\r\n _super.prototype.dispose.call(this);\r\n };\r\n // --- begin event handlers\r\n GlyphMarginOverlay.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._glyphMargin = options.get(38 /* glyphMargin */);\r\n this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\r\n this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\r\n return true;\r\n };\r\n GlyphMarginOverlay.prototype.onDecorationsChanged = function (e) {\r\n return true;\r\n };\r\n GlyphMarginOverlay.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n GlyphMarginOverlay.prototype.onLinesChanged = function (e) {\r\n return true;\r\n };\r\n GlyphMarginOverlay.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n GlyphMarginOverlay.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n GlyphMarginOverlay.prototype.onScrollChanged = function (e) {\r\n return e.scrollTopChanged;\r\n };\r\n GlyphMarginOverlay.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // --- end event handlers\r\n GlyphMarginOverlay.prototype._getDecorations = function (ctx) {\r\n var decorations = ctx.getDecorationsInViewport();\r\n var r = [], rLen = 0;\r\n for (var i = 0, len = decorations.length; i < len; i++) {\r\n var d = decorations[i];\r\n var glyphMarginClassName = d.options.glyphMarginClassName;\r\n if (glyphMarginClassName) {\r\n r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, glyphMarginClassName);\r\n }\r\n }\r\n return r;\r\n };\r\n GlyphMarginOverlay.prototype.prepareRender = function (ctx) {\r\n if (!this._glyphMargin) {\r\n this._renderResult = null;\r\n return;\r\n }\r\n var visibleStartLineNumber = ctx.visibleRange.startLineNumber;\r\n var visibleEndLineNumber = ctx.visibleRange.endLineNumber;\r\n var toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));\r\n var lineHeight = this._lineHeight.toString();\r\n var left = this._glyphMarginLeft.toString();\r\n var width = this._glyphMarginWidth.toString();\r\n var common = '\" style=\"left:' + left + 'px;width:' + width + 'px' + ';height:' + lineHeight + 'px;\">';\r\n var output = [];\r\n for (var lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\r\n var lineIndex = lineNumber - visibleStartLineNumber;\r\n var classNames = toRender[lineIndex];\r\n if (classNames.length === 0) {\r\n output[lineIndex] = '';\r\n }\r\n else {\r\n output[lineIndex] = ('
= this._renderResult.length) {\r\n return '';\r\n }\r\n return this._renderResult[lineIndex];\r\n };\r\n return GlyphMarginOverlay;\r\n}(DedupOverlay));\r\nexport { GlyphMarginOverlay };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './indentGuides.css';\r\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\r\nimport { Position } from '../../../common/core/position.js';\r\nimport { editorActiveIndentGuides, editorIndentGuides } from '../../../common/view/editorColorRegistry.js';\r\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\r\nvar IndentGuidesOverlay = /** @class */ (function (_super) {\r\n __extends(IndentGuidesOverlay, _super);\r\n function IndentGuidesOverlay(context) {\r\n var _this = _super.call(this) || this;\r\n _this._context = context;\r\n _this._primaryLineNumber = 0;\r\n var options = _this._context.configuration.options;\r\n var wrappingInfo = options.get(104 /* wrappingInfo */);\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n _this._lineHeight = options.get(47 /* lineHeight */);\r\n _this._spaceWidth = fontInfo.spaceWidth;\r\n _this._enabled = options.get(67 /* renderIndentGuides */);\r\n _this._activeIndentEnabled = options.get(41 /* highlightActiveIndentGuide */);\r\n _this._maxIndentLeft = wrappingInfo.wrappingColumn === -1 ? -1 : (wrappingInfo.wrappingColumn * fontInfo.typicalHalfwidthCharacterWidth);\r\n _this._renderResult = null;\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n IndentGuidesOverlay.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n this._renderResult = null;\r\n _super.prototype.dispose.call(this);\r\n };\r\n // --- begin event handlers\r\n IndentGuidesOverlay.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var wrappingInfo = options.get(104 /* wrappingInfo */);\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._spaceWidth = fontInfo.spaceWidth;\r\n this._enabled = options.get(67 /* renderIndentGuides */);\r\n this._activeIndentEnabled = options.get(41 /* highlightActiveIndentGuide */);\r\n this._maxIndentLeft = wrappingInfo.wrappingColumn === -1 ? -1 : (wrappingInfo.wrappingColumn * fontInfo.typicalHalfwidthCharacterWidth);\r\n return true;\r\n };\r\n IndentGuidesOverlay.prototype.onCursorStateChanged = function (e) {\r\n var selection = e.selections[0];\r\n var newPrimaryLineNumber = selection.isEmpty() ? selection.positionLineNumber : 0;\r\n if (this._primaryLineNumber !== newPrimaryLineNumber) {\r\n this._primaryLineNumber = newPrimaryLineNumber;\r\n return true;\r\n }\r\n return false;\r\n };\r\n IndentGuidesOverlay.prototype.onDecorationsChanged = function (e) {\r\n // true for inline decorations\r\n return true;\r\n };\r\n IndentGuidesOverlay.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n IndentGuidesOverlay.prototype.onLinesChanged = function (e) {\r\n return true;\r\n };\r\n IndentGuidesOverlay.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n IndentGuidesOverlay.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n IndentGuidesOverlay.prototype.onScrollChanged = function (e) {\r\n return e.scrollTopChanged; // || e.scrollWidthChanged;\r\n };\r\n IndentGuidesOverlay.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n IndentGuidesOverlay.prototype.onLanguageConfigurationChanged = function (e) {\r\n return true;\r\n };\r\n // --- end event handlers\r\n IndentGuidesOverlay.prototype.prepareRender = function (ctx) {\r\n if (!this._enabled) {\r\n this._renderResult = null;\r\n return;\r\n }\r\n var visibleStartLineNumber = ctx.visibleRange.startLineNumber;\r\n var visibleEndLineNumber = ctx.visibleRange.endLineNumber;\r\n var indentSize = this._context.model.getOptions().indentSize;\r\n var indentWidth = indentSize * this._spaceWidth;\r\n var scrollWidth = ctx.scrollWidth;\r\n var lineHeight = this._lineHeight;\r\n var indents = this._context.model.getLinesIndentGuides(visibleStartLineNumber, visibleEndLineNumber);\r\n var activeIndentStartLineNumber = 0;\r\n var activeIndentEndLineNumber = 0;\r\n var activeIndentLevel = 0;\r\n if (this._activeIndentEnabled && this._primaryLineNumber) {\r\n var activeIndentInfo = this._context.model.getActiveIndentGuide(this._primaryLineNumber, visibleStartLineNumber, visibleEndLineNumber);\r\n activeIndentStartLineNumber = activeIndentInfo.startLineNumber;\r\n activeIndentEndLineNumber = activeIndentInfo.endLineNumber;\r\n activeIndentLevel = activeIndentInfo.indent;\r\n }\r\n var output = [];\r\n for (var lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\r\n var containsActiveIndentGuide = (activeIndentStartLineNumber <= lineNumber && lineNumber <= activeIndentEndLineNumber);\r\n var lineIndex = lineNumber - visibleStartLineNumber;\r\n var indent = indents[lineIndex];\r\n var result = '';\r\n var leftMostVisiblePosition = ctx.visibleRangeForPosition(new Position(lineNumber, 1));\r\n var left = leftMostVisiblePosition ? leftMostVisiblePosition.left : 0;\r\n for (var i = 1; i <= indent; i++) {\r\n var className = (containsActiveIndentGuide && i === activeIndentLevel ? 'cigra' : 'cigr');\r\n result += \"
\";\r\n left += indentWidth;\r\n if (left > scrollWidth || (this._maxIndentLeft > 0 && left > this._maxIndentLeft)) {\r\n break;\r\n }\r\n }\r\n output[lineIndex] = result;\r\n }\r\n this._renderResult = output;\r\n };\r\n IndentGuidesOverlay.prototype.render = function (startLineNumber, lineNumber) {\r\n if (!this._renderResult) {\r\n return '';\r\n }\r\n var lineIndex = lineNumber - startLineNumber;\r\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\r\n return '';\r\n }\r\n return this._renderResult[lineIndex];\r\n };\r\n return IndentGuidesOverlay;\r\n}(DynamicViewOverlay));\r\nexport { IndentGuidesOverlay };\r\nregisterThemingParticipant(function (theme, collector) {\r\n var editorIndentGuidesColor = theme.getColor(editorIndentGuides);\r\n if (editorIndentGuidesColor) {\r\n collector.addRule(\".monaco-editor .lines-content .cigr { box-shadow: 1px 0 0 0 \" + editorIndentGuidesColor + \" inset; }\");\r\n }\r\n var editorActiveIndentGuidesColor = theme.getColor(editorActiveIndentGuides) || editorIndentGuidesColor;\r\n if (editorActiveIndentGuidesColor) {\r\n collector.addRule(\".monaco-editor .lines-content .cigra { box-shadow: 1px 0 0 0 \" + editorActiveIndentGuidesColor + \" inset; }\");\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './viewLines.css';\r\nimport { RunOnceScheduler } from '../../../../base/common/async.js';\r\nimport { Configuration } from '../../config/configuration.js';\r\nimport { VisibleLinesCollection } from '../../view/viewLayer.js';\r\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\r\nimport { DomReadingContext, ViewLine, ViewLineOptions } from './viewLine.js';\r\nimport { Position } from '../../../common/core/position.js';\r\nimport { Range } from '../../../common/core/range.js';\r\nimport { LineVisibleRanges, HorizontalPosition } from '../../../common/view/renderingContext.js';\r\nvar LastRenderedData = /** @class */ (function () {\r\n function LastRenderedData() {\r\n this._currentVisibleRange = new Range(1, 1, 1, 1);\r\n }\r\n LastRenderedData.prototype.getCurrentVisibleRange = function () {\r\n return this._currentVisibleRange;\r\n };\r\n LastRenderedData.prototype.setCurrentVisibleRange = function (currentVisibleRange) {\r\n this._currentVisibleRange = currentVisibleRange;\r\n };\r\n return LastRenderedData;\r\n}());\r\nvar HorizontalRevealRequest = /** @class */ (function () {\r\n function HorizontalRevealRequest(lineNumber, startColumn, endColumn, startScrollTop, stopScrollTop, scrollType) {\r\n this.lineNumber = lineNumber;\r\n this.startColumn = startColumn;\r\n this.endColumn = endColumn;\r\n this.startScrollTop = startScrollTop;\r\n this.stopScrollTop = stopScrollTop;\r\n this.scrollType = scrollType;\r\n }\r\n return HorizontalRevealRequest;\r\n}());\r\nvar ViewLines = /** @class */ (function (_super) {\r\n __extends(ViewLines, _super);\r\n function ViewLines(context, linesContent) {\r\n var _this = _super.call(this, context) || this;\r\n _this._linesContent = linesContent;\r\n _this._textRangeRestingSpot = document.createElement('div');\r\n _this._visibleLines = new VisibleLinesCollection(_this);\r\n _this.domNode = _this._visibleLines.domNode;\r\n var conf = _this._context.configuration;\r\n var options = _this._context.configuration.options;\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n var wrappingInfo = options.get(104 /* wrappingInfo */);\r\n _this._lineHeight = options.get(47 /* lineHeight */);\r\n _this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\r\n _this._isViewportWrapping = wrappingInfo.isViewportWrapping;\r\n _this._revealHorizontalRightPadding = options.get(71 /* revealHorizontalRightPadding */);\r\n _this._cursorSurroundingLines = options.get(18 /* cursorSurroundingLines */);\r\n _this._cursorSurroundingLinesStyle = options.get(19 /* cursorSurroundingLinesStyle */);\r\n _this._canUseLayerHinting = !options.get(21 /* disableLayerHinting */);\r\n _this._viewLineOptions = new ViewLineOptions(conf, _this._context.theme.type);\r\n PartFingerprints.write(_this.domNode, 7 /* ViewLines */);\r\n _this.domNode.setClassName('view-lines');\r\n Configuration.applyFontInfo(_this.domNode, fontInfo);\r\n // --- width & height\r\n _this._maxLineWidth = 0;\r\n _this._asyncUpdateLineWidths = new RunOnceScheduler(function () {\r\n _this._updateLineWidthsSlow();\r\n }, 200);\r\n _this._lastRenderedData = new LastRenderedData();\r\n _this._horizontalRevealRequest = null;\r\n return _this;\r\n }\r\n ViewLines.prototype.dispose = function () {\r\n this._asyncUpdateLineWidths.dispose();\r\n _super.prototype.dispose.call(this);\r\n };\r\n ViewLines.prototype.getDomNode = function () {\r\n return this.domNode;\r\n };\r\n // ---- begin IVisibleLinesHost\r\n ViewLines.prototype.createVisibleLine = function () {\r\n return new ViewLine(this._viewLineOptions);\r\n };\r\n // ---- end IVisibleLinesHost\r\n // ---- begin view event handlers\r\n ViewLines.prototype.onConfigurationChanged = function (e) {\r\n this._visibleLines.onConfigurationChanged(e);\r\n if (e.hasChanged(104 /* wrappingInfo */)) {\r\n this._maxLineWidth = 0;\r\n }\r\n var options = this._context.configuration.options;\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n var wrappingInfo = options.get(104 /* wrappingInfo */);\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\r\n this._isViewportWrapping = wrappingInfo.isViewportWrapping;\r\n this._revealHorizontalRightPadding = options.get(71 /* revealHorizontalRightPadding */);\r\n this._cursorSurroundingLines = options.get(18 /* cursorSurroundingLines */);\r\n this._cursorSurroundingLinesStyle = options.get(19 /* cursorSurroundingLinesStyle */);\r\n this._canUseLayerHinting = !options.get(21 /* disableLayerHinting */);\r\n Configuration.applyFontInfo(this.domNode, fontInfo);\r\n this._onOptionsMaybeChanged();\r\n if (e.hasChanged(103 /* layoutInfo */)) {\r\n this._maxLineWidth = 0;\r\n }\r\n return true;\r\n };\r\n ViewLines.prototype._onOptionsMaybeChanged = function () {\r\n var conf = this._context.configuration;\r\n var newViewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\r\n if (!this._viewLineOptions.equals(newViewLineOptions)) {\r\n this._viewLineOptions = newViewLineOptions;\r\n var startLineNumber = this._visibleLines.getStartLineNumber();\r\n var endLineNumber = this._visibleLines.getEndLineNumber();\r\n for (var lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\r\n var line = this._visibleLines.getVisibleLine(lineNumber);\r\n line.onOptionsChanged(this._viewLineOptions);\r\n }\r\n return true;\r\n }\r\n return false;\r\n };\r\n ViewLines.prototype.onCursorStateChanged = function (e) {\r\n var rendStartLineNumber = this._visibleLines.getStartLineNumber();\r\n var rendEndLineNumber = this._visibleLines.getEndLineNumber();\r\n var r = false;\r\n for (var lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\r\n r = this._visibleLines.getVisibleLine(lineNumber).onSelectionChanged() || r;\r\n }\r\n return r;\r\n };\r\n ViewLines.prototype.onDecorationsChanged = function (e) {\r\n if (true /*e.inlineDecorationsChanged*/) {\r\n var rendStartLineNumber = this._visibleLines.getStartLineNumber();\r\n var rendEndLineNumber = this._visibleLines.getEndLineNumber();\r\n for (var lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\r\n this._visibleLines.getVisibleLine(lineNumber).onDecorationsChanged();\r\n }\r\n }\r\n return true;\r\n };\r\n ViewLines.prototype.onFlushed = function (e) {\r\n var shouldRender = this._visibleLines.onFlushed(e);\r\n this._maxLineWidth = 0;\r\n return shouldRender;\r\n };\r\n ViewLines.prototype.onLinesChanged = function (e) {\r\n return this._visibleLines.onLinesChanged(e);\r\n };\r\n ViewLines.prototype.onLinesDeleted = function (e) {\r\n return this._visibleLines.onLinesDeleted(e);\r\n };\r\n ViewLines.prototype.onLinesInserted = function (e) {\r\n return this._visibleLines.onLinesInserted(e);\r\n };\r\n ViewLines.prototype.onRevealRangeRequest = function (e) {\r\n // Using the future viewport here in order to handle multiple\r\n // incoming reveal range requests that might all desire to be animated\r\n var desiredScrollTop = this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(), e.source, e.range, e.verticalType);\r\n // validate the new desired scroll top\r\n var newScrollPosition = this._context.viewLayout.validateScrollPosition({ scrollTop: desiredScrollTop });\r\n if (e.revealHorizontal) {\r\n if (e.range.startLineNumber !== e.range.endLineNumber) {\r\n // Two or more lines? => scroll to base (That's how you see most of the two lines)\r\n newScrollPosition = {\r\n scrollTop: newScrollPosition.scrollTop,\r\n scrollLeft: 0\r\n };\r\n }\r\n else {\r\n // We don't necessarily know the horizontal offset of this range since the line might not be in the view...\r\n this._horizontalRevealRequest = new HorizontalRevealRequest(e.range.startLineNumber, e.range.startColumn, e.range.endColumn, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\r\n }\r\n }\r\n else {\r\n this._horizontalRevealRequest = null;\r\n }\r\n var scrollTopDelta = Math.abs(this._context.viewLayout.getCurrentScrollTop() - newScrollPosition.scrollTop);\r\n if (e.scrollType === 0 /* Smooth */ && scrollTopDelta > this._lineHeight) {\r\n this._context.viewLayout.setScrollPositionSmooth(newScrollPosition);\r\n }\r\n else {\r\n this._context.viewLayout.setScrollPositionNow(newScrollPosition);\r\n }\r\n return true;\r\n };\r\n ViewLines.prototype.onScrollChanged = function (e) {\r\n if (this._horizontalRevealRequest && e.scrollLeftChanged) {\r\n // cancel any outstanding horizontal reveal request if someone else scrolls horizontally.\r\n this._horizontalRevealRequest = null;\r\n }\r\n if (this._horizontalRevealRequest && e.scrollTopChanged) {\r\n var min = Math.min(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\r\n var max = Math.max(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\r\n if (e.scrollTop < min || e.scrollTop > max) {\r\n // cancel any outstanding horizontal reveal request if someone else scrolls vertically.\r\n this._horizontalRevealRequest = null;\r\n }\r\n }\r\n this.domNode.setWidth(e.scrollWidth);\r\n return this._visibleLines.onScrollChanged(e) || true;\r\n };\r\n ViewLines.prototype.onTokensChanged = function (e) {\r\n return this._visibleLines.onTokensChanged(e);\r\n };\r\n ViewLines.prototype.onZonesChanged = function (e) {\r\n this._context.viewLayout.onMaxLineWidthChanged(this._maxLineWidth);\r\n return this._visibleLines.onZonesChanged(e);\r\n };\r\n ViewLines.prototype.onThemeChanged = function (e) {\r\n return this._onOptionsMaybeChanged();\r\n };\r\n // ---- end view event handlers\r\n // ----------- HELPERS FOR OTHERS\r\n ViewLines.prototype.getPositionFromDOMInfo = function (spanNode, offset) {\r\n var viewLineDomNode = this._getViewLineDomNode(spanNode);\r\n if (viewLineDomNode === null) {\r\n // Couldn't find view line node\r\n return null;\r\n }\r\n var lineNumber = this._getLineNumberFor(viewLineDomNode);\r\n if (lineNumber === -1) {\r\n // Couldn't find view line node\r\n return null;\r\n }\r\n if (lineNumber < 1 || lineNumber > this._context.model.getLineCount()) {\r\n // lineNumber is outside range\r\n return null;\r\n }\r\n if (this._context.model.getLineMaxColumn(lineNumber) === 1) {\r\n // Line is empty\r\n return new Position(lineNumber, 1);\r\n }\r\n var rendStartLineNumber = this._visibleLines.getStartLineNumber();\r\n var rendEndLineNumber = this._visibleLines.getEndLineNumber();\r\n if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\r\n // Couldn't find line\r\n return null;\r\n }\r\n var column = this._visibleLines.getVisibleLine(lineNumber).getColumnOfNodeOffset(lineNumber, spanNode, offset);\r\n var minColumn = this._context.model.getLineMinColumn(lineNumber);\r\n if (column < minColumn) {\r\n column = minColumn;\r\n }\r\n return new Position(lineNumber, column);\r\n };\r\n ViewLines.prototype._getViewLineDomNode = function (node) {\r\n while (node && node.nodeType === 1) {\r\n if (node.className === ViewLine.CLASS_NAME) {\r\n return node;\r\n }\r\n node = node.parentElement;\r\n }\r\n return null;\r\n };\r\n /**\r\n * @returns the line number of this view line dom node.\r\n */\r\n ViewLines.prototype._getLineNumberFor = function (domNode) {\r\n var startLineNumber = this._visibleLines.getStartLineNumber();\r\n var endLineNumber = this._visibleLines.getEndLineNumber();\r\n for (var lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\r\n var line = this._visibleLines.getVisibleLine(lineNumber);\r\n if (domNode === line.getDomNode()) {\r\n return lineNumber;\r\n }\r\n }\r\n return -1;\r\n };\r\n ViewLines.prototype.getLineWidth = function (lineNumber) {\r\n var rendStartLineNumber = this._visibleLines.getStartLineNumber();\r\n var rendEndLineNumber = this._visibleLines.getEndLineNumber();\r\n if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\r\n // Couldn't find line\r\n return -1;\r\n }\r\n return this._visibleLines.getVisibleLine(lineNumber).getWidth();\r\n };\r\n ViewLines.prototype.linesVisibleRangesForRange = function (_range, includeNewLines) {\r\n if (this.shouldRender()) {\r\n // Cannot read from the DOM because it is dirty\r\n // i.e. the model & the dom are out of sync, so I'd be reading something stale\r\n return null;\r\n }\r\n var originalEndLineNumber = _range.endLineNumber;\r\n var range = Range.intersectRanges(_range, this._lastRenderedData.getCurrentVisibleRange());\r\n if (!range) {\r\n return null;\r\n }\r\n var visibleRanges = [], visibleRangesLen = 0;\r\n var domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\r\n var nextLineModelLineNumber = 0;\r\n if (includeNewLines) {\r\n nextLineModelLineNumber = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;\r\n }\r\n var rendStartLineNumber = this._visibleLines.getStartLineNumber();\r\n var rendEndLineNumber = this._visibleLines.getEndLineNumber();\r\n for (var lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\r\n if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\r\n continue;\r\n }\r\n var startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;\r\n var endColumn = lineNumber === range.endLineNumber ? range.endColumn : this._context.model.getLineMaxColumn(lineNumber);\r\n var visibleRangesForLine = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, domReadingContext);\r\n if (!visibleRangesForLine) {\r\n continue;\r\n }\r\n if (includeNewLines && lineNumber < originalEndLineNumber) {\r\n var currentLineModelLineNumber = nextLineModelLineNumber;\r\n nextLineModelLineNumber = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber + 1, 1)).lineNumber;\r\n if (currentLineModelLineNumber !== nextLineModelLineNumber) {\r\n visibleRangesForLine.ranges[visibleRangesForLine.ranges.length - 1].width += this._typicalHalfwidthCharacterWidth;\r\n }\r\n }\r\n visibleRanges[visibleRangesLen++] = new LineVisibleRanges(visibleRangesForLine.outsideRenderedLine, lineNumber, visibleRangesForLine.ranges);\r\n }\r\n if (visibleRangesLen === 0) {\r\n return null;\r\n }\r\n return visibleRanges;\r\n };\r\n ViewLines.prototype._visibleRangesForLineRange = function (lineNumber, startColumn, endColumn) {\r\n if (this.shouldRender()) {\r\n // Cannot read from the DOM because it is dirty\r\n // i.e. the model & the dom are out of sync, so I'd be reading something stale\r\n return null;\r\n }\r\n if (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\r\n return null;\r\n }\r\n return this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot));\r\n };\r\n ViewLines.prototype.visibleRangeForPosition = function (position) {\r\n var visibleRanges = this._visibleRangesForLineRange(position.lineNumber, position.column, position.column);\r\n if (!visibleRanges) {\r\n return null;\r\n }\r\n return new HorizontalPosition(visibleRanges.outsideRenderedLine, visibleRanges.ranges[0].left);\r\n };\r\n // --- implementation\r\n ViewLines.prototype.updateLineWidths = function () {\r\n this._updateLineWidths(false);\r\n };\r\n /**\r\n * Updates the max line width if it is fast to compute.\r\n * Returns true if all lines were taken into account.\r\n * Returns false if some lines need to be reevaluated (in a slow fashion).\r\n */\r\n ViewLines.prototype._updateLineWidthsFast = function () {\r\n return this._updateLineWidths(true);\r\n };\r\n ViewLines.prototype._updateLineWidthsSlow = function () {\r\n this._updateLineWidths(false);\r\n };\r\n ViewLines.prototype._updateLineWidths = function (fast) {\r\n var rendStartLineNumber = this._visibleLines.getStartLineNumber();\r\n var rendEndLineNumber = this._visibleLines.getEndLineNumber();\r\n var localMaxLineWidth = 1;\r\n var allWidthsComputed = true;\r\n for (var lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\r\n var visibleLine = this._visibleLines.getVisibleLine(lineNumber);\r\n if (fast && !visibleLine.getWidthIsFast()) {\r\n // Cannot compute width in a fast way for this line\r\n allWidthsComputed = false;\r\n continue;\r\n }\r\n localMaxLineWidth = Math.max(localMaxLineWidth, visibleLine.getWidth());\r\n }\r\n if (allWidthsComputed && rendStartLineNumber === 1 && rendEndLineNumber === this._context.model.getLineCount()) {\r\n // we know the max line width for all the lines\r\n this._maxLineWidth = 0;\r\n }\r\n this._ensureMaxLineWidth(localMaxLineWidth);\r\n return allWidthsComputed;\r\n };\r\n ViewLines.prototype.prepareRender = function () {\r\n throw new Error('Not supported');\r\n };\r\n ViewLines.prototype.render = function () {\r\n throw new Error('Not supported');\r\n };\r\n ViewLines.prototype.renderText = function (viewportData) {\r\n // (1) render lines - ensures lines are in the DOM\r\n this._visibleLines.renderLines(viewportData);\r\n this._lastRenderedData.setCurrentVisibleRange(viewportData.visibleRange);\r\n this.domNode.setWidth(this._context.viewLayout.getScrollWidth());\r\n this.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(), 1000000));\r\n // (2) compute horizontal scroll position:\r\n // - this must happen after the lines are in the DOM since it might need a line that rendered just now\r\n // - it might change `scrollWidth` and `scrollLeft`\r\n if (this._horizontalRevealRequest) {\r\n var revealLineNumber = this._horizontalRevealRequest.lineNumber;\r\n var revealStartColumn = this._horizontalRevealRequest.startColumn;\r\n var revealEndColumn = this._horizontalRevealRequest.endColumn;\r\n var scrollType = this._horizontalRevealRequest.scrollType;\r\n // Check that we have the line that contains the horizontal range in the viewport\r\n if (viewportData.startLineNumber <= revealLineNumber && revealLineNumber <= viewportData.endLineNumber) {\r\n this._horizontalRevealRequest = null;\r\n // allow `visibleRangesForRange2` to work\r\n this.onDidRender();\r\n // compute new scroll position\r\n var newScrollLeft = this._computeScrollLeftToRevealRange(revealLineNumber, revealStartColumn, revealEndColumn);\r\n var isViewportWrapping = this._isViewportWrapping;\r\n if (!isViewportWrapping) {\r\n // ensure `scrollWidth` is large enough\r\n this._ensureMaxLineWidth(newScrollLeft.maxHorizontalOffset);\r\n }\r\n // set `scrollLeft`\r\n if (scrollType === 0 /* Smooth */) {\r\n this._context.viewLayout.setScrollPositionSmooth({\r\n scrollLeft: newScrollLeft.scrollLeft\r\n });\r\n }\r\n else {\r\n this._context.viewLayout.setScrollPositionNow({\r\n scrollLeft: newScrollLeft.scrollLeft\r\n });\r\n }\r\n }\r\n }\r\n // Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)\r\n if (!this._updateLineWidthsFast()) {\r\n // Computing the width of some lines would be slow => delay it\r\n this._asyncUpdateLineWidths.schedule();\r\n }\r\n // (3) handle scrolling\r\n this._linesContent.setLayerHinting(this._canUseLayerHinting);\r\n this._linesContent.setContain('strict');\r\n var adjustedScrollTop = this._context.viewLayout.getCurrentScrollTop() - viewportData.bigNumbersDelta;\r\n this._linesContent.setTop(-adjustedScrollTop);\r\n this._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft());\r\n };\r\n // --- width\r\n ViewLines.prototype._ensureMaxLineWidth = function (lineWidth) {\r\n var iLineWidth = Math.ceil(lineWidth);\r\n if (this._maxLineWidth < iLineWidth) {\r\n this._maxLineWidth = iLineWidth;\r\n this._context.viewLayout.onMaxLineWidthChanged(this._maxLineWidth);\r\n }\r\n };\r\n ViewLines.prototype._computeScrollTopToRevealRange = function (viewport, source, range, verticalType) {\r\n var viewportStartY = viewport.top;\r\n var viewportHeight = viewport.height;\r\n var viewportEndY = viewportStartY + viewportHeight;\r\n var boxStartY;\r\n var boxEndY;\r\n // Have a box that includes one extra line height (for the horizontal scrollbar)\r\n boxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.startLineNumber);\r\n boxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.endLineNumber) + this._lineHeight;\r\n var shouldIgnoreScrollOff = source === 'mouse' && this._cursorSurroundingLinesStyle === 'default';\r\n if (!shouldIgnoreScrollOff) {\r\n var context = Math.min((viewportHeight / this._lineHeight) / 2, this._cursorSurroundingLines);\r\n boxStartY -= context * this._lineHeight;\r\n boxEndY += Math.max(0, (context - 1)) * this._lineHeight;\r\n }\r\n if (verticalType === 0 /* Simple */ || verticalType === 4 /* Bottom */) {\r\n // Reveal one line more when the last line would be covered by the scrollbar - arrow down case or revealing a line explicitly at bottom\r\n boxEndY += this._lineHeight;\r\n }\r\n var newScrollTop;\r\n if (boxEndY - boxStartY > viewportHeight) {\r\n // the box is larger than the viewport ... scroll to its top\r\n newScrollTop = boxStartY;\r\n }\r\n else if (verticalType === 1 /* Center */ || verticalType === 2 /* CenterIfOutsideViewport */) {\r\n if (verticalType === 2 /* CenterIfOutsideViewport */ && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\r\n // Box is already in the viewport... do nothing\r\n newScrollTop = viewportStartY;\r\n }\r\n else {\r\n // Box is outside the viewport... center it\r\n var boxMiddleY = (boxStartY + boxEndY) / 2;\r\n newScrollTop = Math.max(0, boxMiddleY - viewportHeight / 2);\r\n }\r\n }\r\n else {\r\n newScrollTop = this._computeMinimumScrolling(viewportStartY, viewportEndY, boxStartY, boxEndY, verticalType === 3 /* Top */, verticalType === 4 /* Bottom */);\r\n }\r\n return newScrollTop;\r\n };\r\n ViewLines.prototype._computeScrollLeftToRevealRange = function (lineNumber, startColumn, endColumn) {\r\n var maxHorizontalOffset = 0;\r\n var viewport = this._context.viewLayout.getCurrentViewport();\r\n var viewportStartX = viewport.left;\r\n var viewportEndX = viewportStartX + viewport.width;\r\n var visibleRanges = this._visibleRangesForLineRange(lineNumber, startColumn, endColumn);\r\n var boxStartX = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\r\n var boxEndX = 0;\r\n if (!visibleRanges) {\r\n // Unknown\r\n return {\r\n scrollLeft: viewportStartX,\r\n maxHorizontalOffset: maxHorizontalOffset\r\n };\r\n }\r\n for (var _i = 0, _a = visibleRanges.ranges; _i < _a.length; _i++) {\r\n var visibleRange = _a[_i];\r\n if (visibleRange.left < boxStartX) {\r\n boxStartX = visibleRange.left;\r\n }\r\n if (visibleRange.left + visibleRange.width > boxEndX) {\r\n boxEndX = visibleRange.left + visibleRange.width;\r\n }\r\n }\r\n maxHorizontalOffset = boxEndX;\r\n boxStartX = Math.max(0, boxStartX - ViewLines.HORIZONTAL_EXTRA_PX);\r\n boxEndX += this._revealHorizontalRightPadding;\r\n var newScrollLeft = this._computeMinimumScrolling(viewportStartX, viewportEndX, boxStartX, boxEndX);\r\n return {\r\n scrollLeft: newScrollLeft,\r\n maxHorizontalOffset: maxHorizontalOffset\r\n };\r\n };\r\n ViewLines.prototype._computeMinimumScrolling = function (viewportStart, viewportEnd, boxStart, boxEnd, revealAtStart, revealAtEnd) {\r\n viewportStart = viewportStart | 0;\r\n viewportEnd = viewportEnd | 0;\r\n boxStart = boxStart | 0;\r\n boxEnd = boxEnd | 0;\r\n revealAtStart = !!revealAtStart;\r\n revealAtEnd = !!revealAtEnd;\r\n var viewportLength = viewportEnd - viewportStart;\r\n var boxLength = boxEnd - boxStart;\r\n if (boxLength < viewportLength) {\r\n // The box would fit in the viewport\r\n if (revealAtStart) {\r\n return boxStart;\r\n }\r\n if (revealAtEnd) {\r\n return Math.max(0, boxEnd - viewportLength);\r\n }\r\n if (boxStart < viewportStart) {\r\n // The box is above the viewport\r\n return boxStart;\r\n }\r\n else if (boxEnd > viewportEnd) {\r\n // The box is below the viewport\r\n return Math.max(0, boxEnd - viewportLength);\r\n }\r\n }\r\n else {\r\n // The box would not fit in the viewport\r\n // Reveal the beginning of the box\r\n return boxStart;\r\n }\r\n return viewportStart;\r\n };\r\n /**\r\n * Adds this amount of pixels to the right of lines (no-one wants to type near the edge of the viewport)\r\n */\r\n ViewLines.HORIZONTAL_EXTRA_PX = 30;\r\n return ViewLines;\r\n}(ViewPart));\r\nexport { ViewLines };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './linesDecorations.css';\r\nimport { DecorationToRender, DedupOverlay } from '../glyphMargin/glyphMargin.js';\r\nvar LinesDecorationsOverlay = /** @class */ (function (_super) {\r\n __extends(LinesDecorationsOverlay, _super);\r\n function LinesDecorationsOverlay(context) {\r\n var _this = _super.call(this) || this;\r\n _this._context = context;\r\n var options = _this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._decorationsLeft = layoutInfo.decorationsLeft;\r\n _this._decorationsWidth = layoutInfo.decorationsWidth;\r\n _this._renderResult = null;\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n LinesDecorationsOverlay.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n this._renderResult = null;\r\n _super.prototype.dispose.call(this);\r\n };\r\n // --- begin event handlers\r\n LinesDecorationsOverlay.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._decorationsLeft = layoutInfo.decorationsLeft;\r\n this._decorationsWidth = layoutInfo.decorationsWidth;\r\n return true;\r\n };\r\n LinesDecorationsOverlay.prototype.onDecorationsChanged = function (e) {\r\n return true;\r\n };\r\n LinesDecorationsOverlay.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n LinesDecorationsOverlay.prototype.onLinesChanged = function (e) {\r\n return true;\r\n };\r\n LinesDecorationsOverlay.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n LinesDecorationsOverlay.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n LinesDecorationsOverlay.prototype.onScrollChanged = function (e) {\r\n return e.scrollTopChanged;\r\n };\r\n LinesDecorationsOverlay.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // --- end event handlers\r\n LinesDecorationsOverlay.prototype._getDecorations = function (ctx) {\r\n var decorations = ctx.getDecorationsInViewport();\r\n var r = [], rLen = 0;\r\n for (var i = 0, len = decorations.length; i < len; i++) {\r\n var d = decorations[i];\r\n var linesDecorationsClassName = d.options.linesDecorationsClassName;\r\n if (linesDecorationsClassName) {\r\n r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, linesDecorationsClassName);\r\n }\r\n }\r\n return r;\r\n };\r\n LinesDecorationsOverlay.prototype.prepareRender = function (ctx) {\r\n var visibleStartLineNumber = ctx.visibleRange.startLineNumber;\r\n var visibleEndLineNumber = ctx.visibleRange.endLineNumber;\r\n var toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));\r\n var left = this._decorationsLeft.toString();\r\n var width = this._decorationsWidth.toString();\r\n var common = '\" style=\"left:' + left + 'px;width:' + width + 'px;\">
';\r\n var output = [];\r\n for (var lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\r\n var lineIndex = lineNumber - visibleStartLineNumber;\r\n var classNames = toRender[lineIndex];\r\n var lineOutput = '';\r\n for (var i = 0, len = classNames.length; i < len; i++) {\r\n lineOutput += '
';\r\n }\r\n output[lineIndex] = lineOutput;\r\n }\r\n this._renderResult = output;\r\n };\r\n MarginViewLineDecorationsOverlay.prototype.render = function (startLineNumber, lineNumber) {\r\n if (!this._renderResult) {\r\n return '';\r\n }\r\n return this._renderResult[lineNumber - startLineNumber];\r\n };\r\n return MarginViewLineDecorationsOverlay;\r\n}(DedupOverlay));\r\nexport { MarginViewLineDecorationsOverlay };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * A very VM friendly rgba datastructure.\r\n * Please don't touch unless you take a look at the IR.\r\n */\r\nvar RGBA8 = /** @class */ (function () {\r\n function RGBA8(r, g, b, a) {\r\n this.r = RGBA8._clamp(r);\r\n this.g = RGBA8._clamp(g);\r\n this.b = RGBA8._clamp(b);\r\n this.a = RGBA8._clamp(a);\r\n }\r\n RGBA8._clamp = function (c) {\r\n if (c < 0) {\r\n return 0;\r\n }\r\n if (c > 255) {\r\n return 255;\r\n }\r\n return c | 0;\r\n };\r\n RGBA8.Empty = new RGBA8(0, 0, 0, 0);\r\n return RGBA8;\r\n}());\r\nexport { RGBA8 };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { RGBA8 } from '../core/rgba.js';\r\nimport { TokenizationRegistry } from '../modes.js';\r\nvar MinimapTokensColorTracker = /** @class */ (function () {\r\n function MinimapTokensColorTracker() {\r\n var _this = this;\r\n this._onDidChange = new Emitter();\r\n this.onDidChange = this._onDidChange.event;\r\n this._updateColorMap();\r\n TokenizationRegistry.onDidChange(function (e) {\r\n if (e.changedColorMap) {\r\n _this._updateColorMap();\r\n }\r\n });\r\n }\r\n MinimapTokensColorTracker.getInstance = function () {\r\n if (!this._INSTANCE) {\r\n this._INSTANCE = new MinimapTokensColorTracker();\r\n }\r\n return this._INSTANCE;\r\n };\r\n MinimapTokensColorTracker.prototype._updateColorMap = function () {\r\n var colorMap = TokenizationRegistry.getColorMap();\r\n if (!colorMap) {\r\n this._colors = [RGBA8.Empty];\r\n this._backgroundIsLight = true;\r\n return;\r\n }\r\n this._colors = [RGBA8.Empty];\r\n for (var colorId = 1; colorId < colorMap.length; colorId++) {\r\n var source = colorMap[colorId].rgba;\r\n // Use a VM friendly data-type\r\n this._colors[colorId] = new RGBA8(source.r, source.g, source.b, Math.round(source.a * 255));\r\n }\r\n var backgroundLuminosity = colorMap[2 /* DefaultBackground */].getRelativeLuminance();\r\n this._backgroundIsLight = backgroundLuminosity >= 0.5;\r\n this._onDidChange.fire(undefined);\r\n };\r\n MinimapTokensColorTracker.prototype.getColor = function (colorId) {\r\n if (colorId < 1 || colorId >= this._colors.length) {\r\n // background color (basically invisible)\r\n colorId = 2 /* DefaultBackground */;\r\n }\r\n return this._colors[colorId];\r\n };\r\n MinimapTokensColorTracker.prototype.backgroundIsLight = function () {\r\n return this._backgroundIsLight;\r\n };\r\n MinimapTokensColorTracker._INSTANCE = null;\r\n return MinimapTokensColorTracker;\r\n}());\r\nexport { MinimapTokensColorTracker };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport var allCharCodes = (function () {\r\n var v = [];\r\n for (var i = 32 /* START_CH_CODE */; i <= 126 /* END_CH_CODE */; i++) {\r\n v.push(i);\r\n }\r\n v.push(65533 /* UNKNOWN_CODE */);\r\n return v;\r\n})();\r\nexport var getCharIndex = function (chCode, fontScale) {\r\n chCode -= 32 /* START_CH_CODE */;\r\n if (chCode < 0 || chCode > 96 /* CHAR_COUNT */) {\r\n if (fontScale <= 2) {\r\n // for smaller scales, we can get away with using any ASCII character...\r\n return (chCode + 96 /* CHAR_COUNT */) % 96 /* CHAR_COUNT */;\r\n }\r\n return 96 /* CHAR_COUNT */ - 1; // unknown symbol\r\n }\r\n return chCode;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCharIndex } from './minimapCharSheet.js';\r\nvar MinimapCharRenderer = /** @class */ (function () {\r\n function MinimapCharRenderer(charData, scale) {\r\n this.scale = scale;\r\n this.charDataNormal = MinimapCharRenderer.soften(charData, 12 / 15);\r\n this.charDataLight = MinimapCharRenderer.soften(charData, 50 / 60);\r\n }\r\n MinimapCharRenderer.soften = function (input, ratio) {\r\n var result = new Uint8ClampedArray(input.length);\r\n for (var i = 0, len = input.length; i < len; i++) {\r\n result[i] = input[i] * ratio;\r\n }\r\n return result;\r\n };\r\n MinimapCharRenderer.prototype.renderChar = function (target, dx, dy, chCode, color, backgroundColor, fontScale, useLighterFont) {\r\n var charWidth = 1 /* BASE_CHAR_WIDTH */ * this.scale;\r\n var charHeight = 2 /* BASE_CHAR_HEIGHT */ * this.scale;\r\n if (dx + charWidth > target.width || dy + charHeight > target.height) {\r\n console.warn('bad render request outside image data');\r\n return;\r\n }\r\n var charData = useLighterFont ? this.charDataLight : this.charDataNormal;\r\n var charIndex = getCharIndex(chCode, fontScale);\r\n var destWidth = target.width * 4 /* RGBA_CHANNELS_CNT */;\r\n var backgroundR = backgroundColor.r;\r\n var backgroundG = backgroundColor.g;\r\n var backgroundB = backgroundColor.b;\r\n var deltaR = color.r - backgroundR;\r\n var deltaG = color.g - backgroundG;\r\n var deltaB = color.b - backgroundB;\r\n var dest = target.data;\r\n var sourceOffset = charIndex * charWidth * charHeight;\r\n var row = dy * destWidth + dx * 4 /* RGBA_CHANNELS_CNT */;\r\n for (var y = 0; y < charHeight; y++) {\r\n var column = row;\r\n for (var x = 0; x < charWidth; x++) {\r\n var c = charData[sourceOffset++] / 255;\r\n dest[column++] = backgroundR + deltaR * c;\r\n dest[column++] = backgroundG + deltaG * c;\r\n dest[column++] = backgroundB + deltaB * c;\r\n column++;\r\n }\r\n row += destWidth;\r\n }\r\n };\r\n MinimapCharRenderer.prototype.blockRenderChar = function (target, dx, dy, color, backgroundColor, useLighterFont) {\r\n var charWidth = 1 /* BASE_CHAR_WIDTH */ * this.scale;\r\n var charHeight = 2 /* BASE_CHAR_HEIGHT */ * this.scale;\r\n if (dx + charWidth > target.width || dy + charHeight > target.height) {\r\n console.warn('bad render request outside image data');\r\n return;\r\n }\r\n var destWidth = target.width * 4 /* RGBA_CHANNELS_CNT */;\r\n var c = 0.5;\r\n var backgroundR = backgroundColor.r;\r\n var backgroundG = backgroundColor.g;\r\n var backgroundB = backgroundColor.b;\r\n var deltaR = color.r - backgroundR;\r\n var deltaG = color.g - backgroundG;\r\n var deltaB = color.b - backgroundB;\r\n var colorR = backgroundR + deltaR * c;\r\n var colorG = backgroundG + deltaG * c;\r\n var colorB = backgroundB + deltaB * c;\r\n var dest = target.data;\r\n var row = dy * destWidth + dx * 4 /* RGBA_CHANNELS_CNT */;\r\n for (var y = 0; y < charHeight; y++) {\r\n var column = row;\r\n for (var x = 0; x < charWidth; x++) {\r\n dest[column++] = colorR;\r\n dest[column++] = colorG;\r\n dest[column++] = colorB;\r\n column++;\r\n }\r\n row += destWidth;\r\n }\r\n };\r\n return MinimapCharRenderer;\r\n}());\r\nexport { MinimapCharRenderer };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { once } from '../../../../base/common/functional.js';\r\nvar charTable = {\r\n '0': 0,\r\n '1': 1,\r\n '2': 2,\r\n '3': 3,\r\n '4': 4,\r\n '5': 5,\r\n '6': 6,\r\n '7': 7,\r\n '8': 8,\r\n '9': 9,\r\n A: 10,\r\n B: 11,\r\n C: 12,\r\n D: 13,\r\n E: 14,\r\n F: 15\r\n};\r\nvar decodeData = function (str) {\r\n var output = new Uint8ClampedArray(str.length / 2);\r\n for (var i = 0; i < str.length; i += 2) {\r\n output[i >> 1] = (charTable[str[i]] << 4) | (charTable[str[i + 1]] & 0xF);\r\n }\r\n return output;\r\n};\r\n/*\r\nconst encodeData = (data: Uint8ClampedArray, length: string) => {\r\n const chars = '0123456789ABCDEF';\r\n let output = '';\r\n for (let i = 0; i < data.length; i++) {\r\n output += chars[data[i] >> 4] + chars[data[i] & 0xf];\r\n }\r\n return output;\r\n};\r\n*/\r\n/**\r\n * Map of minimap scales to prebaked sample data at those scales. We don't\r\n * sample much larger data, because then font family becomes visible, which\r\n * is use-configurable.\r\n */\r\nexport var prebakedMiniMaps = {\r\n 1: once(function () {\r\n return decodeData('0000511D6300CF609C709645A78432005642574171487021003C451900274D35D762755E8B629C5BA856AF57BA649530C167D1512A272A3F6038604460398526BCA2A968DB6F8957C768BE5FBE2FB467CF5D8D5B795DC7625B5DFF50DE64C466DB2FC47CD860A65E9A2EB96CB54CE06DA763AB2EA26860524D3763536601005116008177A8705E53AB738E6A982F88BAA35B5F5B626D9C636B449B737E5B7B678598869A662F6B5B8542706C704C80736A607578685B70594A49715A4522E792');\r\n }),\r\n 2: once(function () {\r\n return decodeData('000000000000000055394F383D2800008B8B1F210002000081B1CBCBCC820000847AAF6B9AAF2119BE08B8881AD60000A44FD07DCCF107015338130C00000000385972265F390B406E2437634B4B48031B12B8A0847000001E15B29A402F0000000000004B33460B00007A752C2A0000000000004D3900000084394B82013400ABA5CFC7AD9C0302A45A3E5A98AB000089A43382D97900008BA54AA087A70A0248A6A7AE6DBE0000BF6F94987EA40A01A06DCFA7A7A9030496C32F77891D0000A99FB1A0AFA80603B29AB9CA75930D010C0948354D3900000C0948354F37460D0028BE673D8400000000AF9D7B6E00002B007AA8933400007AA642675C2700007984CFB9C3985B768772A8A6B7B20000CAAECAAFC4B700009F94A6009F840009D09F9BA4CA9C0000CC8FC76DC87F0000C991C472A2000000A894A48CA7B501079BA2C9C69BA20000B19A5D3FA89000005CA6009DA2960901B0A7F0669FB200009D009E00B7890000DAD0F5D092820000D294D4C48BD10000B5A7A4A3B1A50402CAB6CBA6A2000000B5A7A4A3B1A8044FCDADD19D9CB00000B7778F7B8AAE0803C9AB5D3F5D3F00009EA09EA0BAB006039EA0989A8C7900009B9EF4D6B7C00000A9A7816CACA80000ABAC84705D3F000096DA635CDC8C00006F486F266F263D4784006124097B00374F6D2D6D2D6D4A3A95872322000000030000000000008D8939130000000000002E22A5C9CBC70600AB25C0B5C9B400061A2DB04CA67001082AA6BEBEBFC606002321DACBC19E03087AA08B6768380000282FBAC0B8CA7A88AD25BBA5A29900004C396C5894A6000040485A6E356E9442A32CD17EADA70000B4237923628600003E2DE9C1D7B500002F25BBA5A2990000231DB6AFB4A804023025C0B5CAB588062B2CBDBEC0C706882435A75CA20000002326BD6A82A908048B4B9A5A668000002423A09CB4BB060025259C9D8A7900001C1FCAB2C7C700002A2A9387ABA200002626A4A47D6E9D14333163A0C87500004B6F9C2D643A257049364936493647358A34438355497F1A0000A24C1D590000D38DFFBDD4CD3126');\r\n })\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { MinimapCharRenderer } from './minimapCharRenderer.js';\r\nimport { allCharCodes } from './minimapCharSheet.js';\r\nimport { prebakedMiniMaps } from './minimapPreBaked.js';\r\n/**\r\n * Creates character renderers. It takes a 'scale' that determines how large\r\n * characters should be drawn. Using this, it draws data into a canvas and\r\n * then downsamples the characters as necessary for the current display.\r\n * This makes rendering more efficient, rather than drawing a full (tiny)\r\n * font, or downsampling in real-time.\r\n */\r\nvar MinimapCharRendererFactory = /** @class */ (function () {\r\n function MinimapCharRendererFactory() {\r\n }\r\n /**\r\n * Creates a new character renderer factory with the given scale.\r\n */\r\n MinimapCharRendererFactory.create = function (scale, fontFamily) {\r\n // renderers are immutable. By default we'll 'create' a new minimap\r\n // character renderer whenever we switch editors, no need to do extra work.\r\n if (this.lastCreated && scale === this.lastCreated.scale && fontFamily === this.lastFontFamily) {\r\n return this.lastCreated;\r\n }\r\n var factory;\r\n if (prebakedMiniMaps[scale]) {\r\n factory = new MinimapCharRenderer(prebakedMiniMaps[scale](), scale);\r\n }\r\n else {\r\n factory = MinimapCharRendererFactory.createFromSampleData(MinimapCharRendererFactory.createSampleData(fontFamily).data, scale);\r\n }\r\n this.lastFontFamily = fontFamily;\r\n this.lastCreated = factory;\r\n return factory;\r\n };\r\n /**\r\n * Creates the font sample data, writing to a canvas.\r\n */\r\n MinimapCharRendererFactory.createSampleData = function (fontFamily) {\r\n var canvas = document.createElement('canvas');\r\n var ctx = canvas.getContext('2d');\r\n canvas.style.height = 16 /* SAMPLED_CHAR_HEIGHT */ + \"px\";\r\n canvas.height = 16 /* SAMPLED_CHAR_HEIGHT */;\r\n canvas.width = 96 /* CHAR_COUNT */ * 10 /* SAMPLED_CHAR_WIDTH */;\r\n canvas.style.width = 96 /* CHAR_COUNT */ * 10 /* SAMPLED_CHAR_WIDTH */ + 'px';\r\n ctx.fillStyle = '#ffffff';\r\n ctx.font = \"bold \" + 16 /* SAMPLED_CHAR_HEIGHT */ + \"px \" + fontFamily;\r\n ctx.textBaseline = 'middle';\r\n var x = 0;\r\n for (var _i = 0, allCharCodes_1 = allCharCodes; _i < allCharCodes_1.length; _i++) {\r\n var code = allCharCodes_1[_i];\r\n ctx.fillText(String.fromCharCode(code), x, 16 /* SAMPLED_CHAR_HEIGHT */ / 2);\r\n x += 10 /* SAMPLED_CHAR_WIDTH */;\r\n }\r\n return ctx.getImageData(0, 0, 96 /* CHAR_COUNT */ * 10 /* SAMPLED_CHAR_WIDTH */, 16 /* SAMPLED_CHAR_HEIGHT */);\r\n };\r\n /**\r\n * Creates a character renderer from the canvas sample data.\r\n */\r\n MinimapCharRendererFactory.createFromSampleData = function (source, scale) {\r\n var expectedLength = 16 /* SAMPLED_CHAR_HEIGHT */ * 10 /* SAMPLED_CHAR_WIDTH */ * 4 /* RGBA_CHANNELS_CNT */ * 96 /* CHAR_COUNT */;\r\n if (source.length !== expectedLength) {\r\n throw new Error('Unexpected source in MinimapCharRenderer');\r\n }\r\n var charData = MinimapCharRendererFactory._downsample(source, scale);\r\n return new MinimapCharRenderer(charData, scale);\r\n };\r\n MinimapCharRendererFactory._downsampleChar = function (source, sourceOffset, dest, destOffset, scale) {\r\n var width = 1 /* BASE_CHAR_WIDTH */ * scale;\r\n var height = 2 /* BASE_CHAR_HEIGHT */ * scale;\r\n var targetIndex = destOffset;\r\n var brightest = 0;\r\n // This is essentially an ad-hoc rescaling algorithm. Standard approaches\r\n // like bicubic interpolation are awesome for scaling between image sizes,\r\n // but don't work so well when scaling to very small pixel values, we end\r\n // up with blurry, indistinct forms.\r\n //\r\n // The approach taken here is simply mapping each source pixel to the target\r\n // pixels, and taking the weighted values for all pixels in each, and then\r\n // averaging them out. Finally we apply an intensity boost in _downsample,\r\n // since when scaling to the smallest pixel sizes there's more black space\r\n // which causes characters to be much less distinct.\r\n for (var y = 0; y < height; y++) {\r\n // 1. For this destination pixel, get the source pixels we're sampling\r\n // from (x1, y1) to the next pixel (x2, y2)\r\n var sourceY1 = (y / height) * 16 /* SAMPLED_CHAR_HEIGHT */;\r\n var sourceY2 = ((y + 1) / height) * 16 /* SAMPLED_CHAR_HEIGHT */;\r\n for (var x = 0; x < width; x++) {\r\n var sourceX1 = (x / width) * 10 /* SAMPLED_CHAR_WIDTH */;\r\n var sourceX2 = ((x + 1) / width) * 10 /* SAMPLED_CHAR_WIDTH */;\r\n // 2. Sample all of them, summing them up and weighting them. Similar\r\n // to bilinear interpolation.\r\n var value = 0;\r\n var samples = 0;\r\n for (var sy = sourceY1; sy < sourceY2; sy++) {\r\n var sourceRow = sourceOffset + Math.floor(sy) * 3840 /* RGBA_SAMPLED_ROW_WIDTH */;\r\n var yBalance = 1 - (sy - Math.floor(sy));\r\n for (var sx = sourceX1; sx < sourceX2; sx++) {\r\n var xBalance = 1 - (sx - Math.floor(sx));\r\n var sourceIndex = sourceRow + Math.floor(sx) * 4 /* RGBA_CHANNELS_CNT */;\r\n var weight = xBalance * yBalance;\r\n samples += weight;\r\n value += ((source[sourceIndex] * source[sourceIndex + 3]) / 255) * weight;\r\n }\r\n }\r\n var final = value / samples;\r\n brightest = Math.max(brightest, final);\r\n dest[targetIndex++] = final;\r\n }\r\n }\r\n return brightest;\r\n };\r\n MinimapCharRendererFactory._downsample = function (data, scale) {\r\n var pixelsPerCharacter = 2 /* BASE_CHAR_HEIGHT */ * scale * 1 /* BASE_CHAR_WIDTH */ * scale;\r\n var resultLen = pixelsPerCharacter * 96 /* CHAR_COUNT */;\r\n var result = new Uint8ClampedArray(resultLen);\r\n var resultOffset = 0;\r\n var sourceOffset = 0;\r\n var brightest = 0;\r\n for (var charIndex = 0; charIndex < 96 /* CHAR_COUNT */; charIndex++) {\r\n brightest = Math.max(brightest, this._downsampleChar(data, sourceOffset, result, resultOffset, scale));\r\n resultOffset += pixelsPerCharacter;\r\n sourceOffset += 10 /* SAMPLED_CHAR_WIDTH */ * 4 /* RGBA_CHANNELS_CNT */;\r\n }\r\n if (brightest > 0) {\r\n var adjust = 255 / brightest;\r\n for (var i = 0; i < resultLen; i++) {\r\n result[i] *= adjust;\r\n }\r\n }\r\n return result;\r\n };\r\n return MinimapCharRendererFactory;\r\n}());\r\nexport { MinimapCharRendererFactory };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './minimap.css';\r\nimport * as dom from '../../../../base/browser/dom.js';\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../../../base/browser/globalMouseMoveMonitor.js';\r\nimport * as platform from '../../../../base/common/platform.js';\r\nimport * as strings from '../../../../base/common/strings.js';\r\nimport { RenderedLinesCollection } from '../../view/viewLayer.js';\r\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\r\nimport { MINIMAP_GUTTER_WIDTH } from '../../../common/config/editorOptions.js';\r\nimport { Range } from '../../../common/core/range.js';\r\nimport { MinimapTokensColorTracker } from '../../../common/viewModel/minimapTokensColorTracker.js';\r\nimport * as viewEvents from '../../../common/view/viewEvents.js';\r\nimport { scrollbarShadow, scrollbarSliderActiveBackground, scrollbarSliderBackground, scrollbarSliderHoverBackground, minimapSelection } from '../../../../platform/theme/common/colorRegistry.js';\r\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\r\nimport { EventType, Gesture } from '../../../../base/browser/touch.js';\r\nimport { MinimapCharRendererFactory } from './minimapCharRendererFactory.js';\r\nimport { MinimapPosition } from '../../../common/model.js';\r\nimport { once } from '../../../../base/common/functional.js';\r\nfunction getMinimapLineHeight(renderMinimap, scale) {\r\n if (renderMinimap === 1 /* Text */) {\r\n return 2 /* BASE_CHAR_HEIGHT */ * scale;\r\n }\r\n // RenderMinimap.Blocks\r\n return (2 /* BASE_CHAR_HEIGHT */ + 1) * scale;\r\n}\r\nfunction getMinimapCharWidth(renderMinimap, scale) {\r\n if (renderMinimap === 1 /* Text */) {\r\n return 1 /* BASE_CHAR_WIDTH */ * scale;\r\n }\r\n // RenderMinimap.Blocks\r\n return 1 /* BASE_CHAR_WIDTH */ * scale;\r\n}\r\n/**\r\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\r\n */\r\nvar MOUSE_DRAG_RESET_DISTANCE = 140;\r\nvar GUTTER_DECORATION_WIDTH = 2;\r\nvar MinimapOptions = /** @class */ (function () {\r\n function MinimapOptions(configuration) {\r\n var _this = this;\r\n var options = configuration.options;\r\n var pixelRatio = options.get(101 /* pixelRatio */);\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n this.renderMinimap = layoutInfo.renderMinimap | 0;\r\n this.scrollBeyondLastLine = options.get(76 /* scrollBeyondLastLine */);\r\n var minimapOpts = options.get(52 /* minimap */);\r\n this.showSlider = minimapOpts.showSlider;\r\n this.fontScale = Math.round(minimapOpts.scale * pixelRatio);\r\n this.charRenderer = once(function () { return MinimapCharRendererFactory.create(_this.fontScale, fontInfo.fontFamily); });\r\n this.pixelRatio = pixelRatio;\r\n this.typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\r\n this.lineHeight = options.get(47 /* lineHeight */);\r\n this.minimapLeft = layoutInfo.minimapLeft;\r\n this.minimapWidth = layoutInfo.minimapWidth;\r\n this.minimapHeight = layoutInfo.height;\r\n this.canvasInnerWidth = Math.max(1, Math.floor(pixelRatio * this.minimapWidth));\r\n this.canvasInnerHeight = Math.max(1, Math.floor(pixelRatio * this.minimapHeight));\r\n this.canvasOuterWidth = this.canvasInnerWidth / pixelRatio;\r\n this.canvasOuterHeight = this.canvasInnerHeight / pixelRatio;\r\n }\r\n MinimapOptions.prototype.equals = function (other) {\r\n return (this.renderMinimap === other.renderMinimap\r\n && this.scrollBeyondLastLine === other.scrollBeyondLastLine\r\n && this.showSlider === other.showSlider\r\n && this.pixelRatio === other.pixelRatio\r\n && this.typicalHalfwidthCharacterWidth === other.typicalHalfwidthCharacterWidth\r\n && this.lineHeight === other.lineHeight\r\n && this.fontScale === other.fontScale\r\n && this.minimapLeft === other.minimapLeft\r\n && this.minimapWidth === other.minimapWidth\r\n && this.minimapHeight === other.minimapHeight\r\n && this.canvasInnerWidth === other.canvasInnerWidth\r\n && this.canvasInnerHeight === other.canvasInnerHeight\r\n && this.canvasOuterWidth === other.canvasOuterWidth\r\n && this.canvasOuterHeight === other.canvasOuterHeight);\r\n };\r\n return MinimapOptions;\r\n}());\r\nvar MinimapLayout = /** @class */ (function () {\r\n function MinimapLayout(scrollTop, scrollHeight, computedSliderRatio, sliderTop, sliderHeight, startLineNumber, endLineNumber) {\r\n this.scrollTop = scrollTop;\r\n this.scrollHeight = scrollHeight;\r\n this._computedSliderRatio = computedSliderRatio;\r\n this.sliderTop = sliderTop;\r\n this.sliderHeight = sliderHeight;\r\n this.startLineNumber = startLineNumber;\r\n this.endLineNumber = endLineNumber;\r\n }\r\n /**\r\n * Compute a desired `scrollPosition` such that the slider moves by `delta`.\r\n */\r\n MinimapLayout.prototype.getDesiredScrollTopFromDelta = function (delta) {\r\n var desiredSliderPosition = this.sliderTop + delta;\r\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\r\n };\r\n MinimapLayout.prototype.getDesiredScrollTopFromTouchLocation = function (pageY) {\r\n return Math.round((pageY - this.sliderHeight / 2) / this._computedSliderRatio);\r\n };\r\n MinimapLayout.create = function (options, viewportStartLineNumber, viewportEndLineNumber, viewportHeight, viewportContainsWhitespaceGaps, lineCount, scrollTop, scrollHeight, previousLayout) {\r\n var pixelRatio = options.pixelRatio;\r\n var minimapLineHeight = getMinimapLineHeight(options.renderMinimap, options.fontScale);\r\n var minimapLinesFitting = Math.floor(options.canvasInnerHeight / minimapLineHeight);\r\n var lineHeight = options.lineHeight;\r\n // The visible line count in a viewport can change due to a number of reasons:\r\n // a) with the same viewport width, different scroll positions can result in partial lines being visible:\r\n // e.g. for a line height of 20, and a viewport height of 600\r\n // * scrollTop = 0 => visible lines are [1, 30]\r\n // * scrollTop = 10 => visible lines are [1, 31] (with lines 1 and 31 partially visible)\r\n // * scrollTop = 20 => visible lines are [2, 31]\r\n // b) whitespace gaps might make their way in the viewport (which results in a decrease in the visible line count)\r\n // c) we could be in the scroll beyond last line case (which also results in a decrease in the visible line count, down to possibly only one line being visible)\r\n // We must first establish a desirable slider height.\r\n var sliderHeight;\r\n if (viewportContainsWhitespaceGaps && viewportEndLineNumber !== lineCount) {\r\n // case b) from above: there are whitespace gaps in the viewport.\r\n // In this case, the height of the slider directly reflects the visible line count.\r\n var viewportLineCount = viewportEndLineNumber - viewportStartLineNumber + 1;\r\n sliderHeight = Math.floor(viewportLineCount * minimapLineHeight / pixelRatio);\r\n }\r\n else {\r\n // The slider has a stable height\r\n var expectedViewportLineCount = viewportHeight / lineHeight;\r\n sliderHeight = Math.floor(expectedViewportLineCount * minimapLineHeight / pixelRatio);\r\n }\r\n var maxMinimapSliderTop;\r\n if (options.scrollBeyondLastLine) {\r\n // The minimap slider, when dragged all the way down, will contain the last line at its top\r\n maxMinimapSliderTop = (lineCount - 1) * minimapLineHeight / pixelRatio;\r\n }\r\n else {\r\n // The minimap slider, when dragged all the way down, will contain the last line at its bottom\r\n maxMinimapSliderTop = Math.max(0, lineCount * minimapLineHeight / pixelRatio - sliderHeight);\r\n }\r\n maxMinimapSliderTop = Math.min(options.minimapHeight - sliderHeight, maxMinimapSliderTop);\r\n // The slider can move from 0 to `maxMinimapSliderTop`\r\n // in the same way `scrollTop` can move from 0 to `scrollHeight` - `viewportHeight`.\r\n var computedSliderRatio = (maxMinimapSliderTop) / (scrollHeight - viewportHeight);\r\n var sliderTop = (scrollTop * computedSliderRatio);\r\n var extraLinesAtTheBottom = 0;\r\n if (options.scrollBeyondLastLine) {\r\n var expectedViewportLineCount = viewportHeight / lineHeight;\r\n extraLinesAtTheBottom = expectedViewportLineCount;\r\n }\r\n if (minimapLinesFitting >= lineCount + extraLinesAtTheBottom) {\r\n // All lines fit in the minimap\r\n var startLineNumber = 1;\r\n var endLineNumber = lineCount;\r\n return new MinimapLayout(scrollTop, scrollHeight, computedSliderRatio, sliderTop, sliderHeight, startLineNumber, endLineNumber);\r\n }\r\n else {\r\n var startLineNumber = Math.max(1, Math.floor(viewportStartLineNumber - sliderTop * pixelRatio / minimapLineHeight));\r\n // Avoid flickering caused by a partial viewport start line\r\n // by being consistent w.r.t. the previous layout decision\r\n if (previousLayout && previousLayout.scrollHeight === scrollHeight) {\r\n if (previousLayout.scrollTop > scrollTop) {\r\n // Scrolling up => never increase `startLineNumber`\r\n startLineNumber = Math.min(startLineNumber, previousLayout.startLineNumber);\r\n }\r\n if (previousLayout.scrollTop < scrollTop) {\r\n // Scrolling down => never decrease `startLineNumber`\r\n startLineNumber = Math.max(startLineNumber, previousLayout.startLineNumber);\r\n }\r\n }\r\n var endLineNumber = Math.min(lineCount, startLineNumber + minimapLinesFitting - 1);\r\n return new MinimapLayout(scrollTop, scrollHeight, computedSliderRatio, sliderTop, sliderHeight, startLineNumber, endLineNumber);\r\n }\r\n };\r\n return MinimapLayout;\r\n}());\r\nvar MinimapLine = /** @class */ (function () {\r\n function MinimapLine(dy) {\r\n this.dy = dy;\r\n }\r\n MinimapLine.prototype.onContentChanged = function () {\r\n this.dy = -1;\r\n };\r\n MinimapLine.prototype.onTokensChanged = function () {\r\n this.dy = -1;\r\n };\r\n MinimapLine.INVALID = new MinimapLine(-1);\r\n return MinimapLine;\r\n}());\r\nvar RenderData = /** @class */ (function () {\r\n function RenderData(renderedLayout, imageData, lines) {\r\n this.renderedLayout = renderedLayout;\r\n this._imageData = imageData;\r\n this._renderedLines = new RenderedLinesCollection(function () { return MinimapLine.INVALID; });\r\n this._renderedLines._set(renderedLayout.startLineNumber, lines);\r\n }\r\n /**\r\n * Check if the current RenderData matches accurately the new desired layout and no painting is needed.\r\n */\r\n RenderData.prototype.linesEquals = function (layout) {\r\n if (!this.scrollEquals(layout)) {\r\n return false;\r\n }\r\n var tmp = this._renderedLines._get();\r\n var lines = tmp.lines;\r\n for (var i = 0, len = lines.length; i < len; i++) {\r\n if (lines[i].dy === -1) {\r\n // This line is invalid\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * Check if the current RenderData matches the new layout's scroll position\r\n */\r\n RenderData.prototype.scrollEquals = function (layout) {\r\n return this.renderedLayout.startLineNumber === layout.startLineNumber\r\n && this.renderedLayout.endLineNumber === layout.endLineNumber;\r\n };\r\n RenderData.prototype._get = function () {\r\n var tmp = this._renderedLines._get();\r\n return {\r\n imageData: this._imageData,\r\n rendLineNumberStart: tmp.rendLineNumberStart,\r\n lines: tmp.lines\r\n };\r\n };\r\n RenderData.prototype.onLinesChanged = function (e) {\r\n return this._renderedLines.onLinesChanged(e.fromLineNumber, e.toLineNumber);\r\n };\r\n RenderData.prototype.onLinesDeleted = function (e) {\r\n this._renderedLines.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\r\n };\r\n RenderData.prototype.onLinesInserted = function (e) {\r\n this._renderedLines.onLinesInserted(e.fromLineNumber, e.toLineNumber);\r\n };\r\n RenderData.prototype.onTokensChanged = function (e) {\r\n return this._renderedLines.onTokensChanged(e.ranges);\r\n };\r\n return RenderData;\r\n}());\r\n/**\r\n * Some sort of double buffering.\r\n *\r\n * Keeps two buffers around that will be rotated for painting.\r\n * Always gives a buffer that is filled with the background color.\r\n */\r\nvar MinimapBuffers = /** @class */ (function () {\r\n function MinimapBuffers(ctx, WIDTH, HEIGHT, background) {\r\n this._backgroundFillData = MinimapBuffers._createBackgroundFillData(WIDTH, HEIGHT, background);\r\n this._buffers = [\r\n ctx.createImageData(WIDTH, HEIGHT),\r\n ctx.createImageData(WIDTH, HEIGHT)\r\n ];\r\n this._lastUsedBuffer = 0;\r\n }\r\n MinimapBuffers.prototype.getBuffer = function () {\r\n // rotate buffers\r\n this._lastUsedBuffer = 1 - this._lastUsedBuffer;\r\n var result = this._buffers[this._lastUsedBuffer];\r\n // fill with background color\r\n result.data.set(this._backgroundFillData);\r\n return result;\r\n };\r\n MinimapBuffers._createBackgroundFillData = function (WIDTH, HEIGHT, background) {\r\n var backgroundR = background.r;\r\n var backgroundG = background.g;\r\n var backgroundB = background.b;\r\n var result = new Uint8ClampedArray(WIDTH * HEIGHT * 4);\r\n var offset = 0;\r\n for (var i = 0; i < HEIGHT; i++) {\r\n for (var j = 0; j < WIDTH; j++) {\r\n result[offset] = backgroundR;\r\n result[offset + 1] = backgroundG;\r\n result[offset + 2] = backgroundB;\r\n result[offset + 3] = 255;\r\n offset += 4;\r\n }\r\n }\r\n return result;\r\n };\r\n return MinimapBuffers;\r\n}());\r\nvar Minimap = /** @class */ (function (_super) {\r\n __extends(Minimap, _super);\r\n function Minimap(context) {\r\n var _this = _super.call(this, context) || this;\r\n _this._selections = [];\r\n _this._renderDecorations = false;\r\n _this._gestureInProgress = false;\r\n _this._options = new MinimapOptions(_this._context.configuration);\r\n _this._lastRenderData = null;\r\n _this._buffers = null;\r\n _this._selectionColor = _this._context.theme.getColor(minimapSelection);\r\n _this._domNode = createFastDomNode(document.createElement('div'));\r\n PartFingerprints.write(_this._domNode, 8 /* Minimap */);\r\n _this._domNode.setClassName(_this._getMinimapDomNodeClassName());\r\n _this._domNode.setPosition('absolute');\r\n _this._domNode.setAttribute('role', 'presentation');\r\n _this._domNode.setAttribute('aria-hidden', 'true');\r\n _this._shadow = createFastDomNode(document.createElement('div'));\r\n _this._shadow.setClassName('minimap-shadow-hidden');\r\n _this._domNode.appendChild(_this._shadow);\r\n _this._canvas = createFastDomNode(document.createElement('canvas'));\r\n _this._canvas.setPosition('absolute');\r\n _this._canvas.setLeft(0);\r\n _this._domNode.appendChild(_this._canvas);\r\n _this._decorationsCanvas = createFastDomNode(document.createElement('canvas'));\r\n _this._decorationsCanvas.setPosition('absolute');\r\n _this._decorationsCanvas.setClassName('minimap-decorations-layer');\r\n _this._decorationsCanvas.setLeft(0);\r\n _this._domNode.appendChild(_this._decorationsCanvas);\r\n _this._slider = createFastDomNode(document.createElement('div'));\r\n _this._slider.setPosition('absolute');\r\n _this._slider.setClassName('minimap-slider');\r\n _this._slider.setLayerHinting(true);\r\n _this._slider.setContain('strict');\r\n _this._domNode.appendChild(_this._slider);\r\n _this._sliderHorizontal = createFastDomNode(document.createElement('div'));\r\n _this._sliderHorizontal.setPosition('absolute');\r\n _this._sliderHorizontal.setClassName('minimap-slider-horizontal');\r\n _this._slider.appendChild(_this._sliderHorizontal);\r\n _this._tokensColorTracker = MinimapTokensColorTracker.getInstance();\r\n _this._applyLayout();\r\n _this._mouseDownListener = dom.addStandardDisposableListener(_this._domNode.domNode, 'mousedown', function (e) {\r\n e.preventDefault();\r\n var renderMinimap = _this._options.renderMinimap;\r\n if (renderMinimap === 0 /* None */) {\r\n return;\r\n }\r\n if (!_this._lastRenderData) {\r\n return;\r\n }\r\n var minimapLineHeight = getMinimapLineHeight(renderMinimap, _this._options.fontScale);\r\n var internalOffsetY = _this._options.pixelRatio * e.browserEvent.offsetY;\r\n var lineIndex = Math.floor(internalOffsetY / minimapLineHeight);\r\n var lineNumber = lineIndex + _this._lastRenderData.renderedLayout.startLineNumber;\r\n lineNumber = Math.min(lineNumber, _this._context.model.getLineCount());\r\n _this._context.privateViewEventBus.emit(new viewEvents.ViewRevealRangeRequestEvent('mouse', new Range(lineNumber, 1, lineNumber, 1), 1 /* Center */, false, 0 /* Smooth */));\r\n });\r\n _this._sliderMouseMoveMonitor = new GlobalMouseMoveMonitor();\r\n _this._sliderMouseDownListener = dom.addStandardDisposableListener(_this._slider.domNode, 'mousedown', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (e.leftButton && _this._lastRenderData) {\r\n var initialMousePosition_1 = e.posy;\r\n var initialMouseOrthogonalPosition_1 = e.posx;\r\n var initialSliderState_1 = _this._lastRenderData.renderedLayout;\r\n _this._slider.toggleClassName('active', true);\r\n _this._sliderMouseMoveMonitor.startMonitoring(standardMouseMoveMerger, function (mouseMoveData) {\r\n var mouseOrthogonalDelta = Math.abs(mouseMoveData.posx - initialMouseOrthogonalPosition_1);\r\n if (platform.isWindows && mouseOrthogonalDelta > MOUSE_DRAG_RESET_DISTANCE) {\r\n // The mouse has wondered away from the scrollbar => reset dragging\r\n _this._context.viewLayout.setScrollPositionNow({\r\n scrollTop: initialSliderState_1.scrollTop\r\n });\r\n return;\r\n }\r\n var mouseDelta = mouseMoveData.posy - initialMousePosition_1;\r\n _this._context.viewLayout.setScrollPositionNow({\r\n scrollTop: initialSliderState_1.getDesiredScrollTopFromDelta(mouseDelta)\r\n });\r\n }, function () {\r\n _this._slider.toggleClassName('active', false);\r\n });\r\n }\r\n });\r\n _this._gestureDisposable = Gesture.addTarget(_this._domNode.domNode);\r\n _this._sliderTouchStartListener = dom.addDisposableListener(_this._domNode.domNode, EventType.Start, function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (_this._lastRenderData) {\r\n _this._slider.toggleClassName('active', true);\r\n _this._gestureInProgress = true;\r\n _this.scrollDueToTouchEvent(e);\r\n }\r\n });\r\n _this._sliderTouchMoveListener = dom.addStandardDisposableListener(_this._domNode.domNode, EventType.Change, function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (_this._lastRenderData && _this._gestureInProgress) {\r\n _this.scrollDueToTouchEvent(e);\r\n }\r\n });\r\n _this._sliderTouchEndListener = dom.addStandardDisposableListener(_this._domNode.domNode, EventType.End, function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n _this._gestureInProgress = false;\r\n _this._slider.toggleClassName('active', false);\r\n });\r\n return _this;\r\n }\r\n Minimap.prototype.scrollDueToTouchEvent = function (touch) {\r\n var startY = this._domNode.domNode.getBoundingClientRect().top;\r\n var scrollTop = this._lastRenderData.renderedLayout.getDesiredScrollTopFromTouchLocation(touch.pageY - startY);\r\n this._context.viewLayout.setScrollPositionNow({\r\n scrollTop: scrollTop\r\n });\r\n };\r\n Minimap.prototype.dispose = function () {\r\n this._mouseDownListener.dispose();\r\n this._sliderMouseMoveMonitor.dispose();\r\n this._sliderMouseDownListener.dispose();\r\n this._gestureDisposable.dispose();\r\n this._sliderTouchStartListener.dispose();\r\n this._sliderTouchMoveListener.dispose();\r\n this._sliderTouchEndListener.dispose();\r\n _super.prototype.dispose.call(this);\r\n };\r\n Minimap.prototype._getMinimapDomNodeClassName = function () {\r\n if (this._options.showSlider === 'always') {\r\n return 'minimap slider-always';\r\n }\r\n return 'minimap slider-mouseover';\r\n };\r\n Minimap.prototype.getDomNode = function () {\r\n return this._domNode;\r\n };\r\n Minimap.prototype._applyLayout = function () {\r\n this._domNode.setLeft(this._options.minimapLeft);\r\n this._domNode.setWidth(this._options.minimapWidth);\r\n this._domNode.setHeight(this._options.minimapHeight);\r\n this._shadow.setHeight(this._options.minimapHeight);\r\n this._canvas.setWidth(this._options.canvasOuterWidth);\r\n this._canvas.setHeight(this._options.canvasOuterHeight);\r\n this._canvas.domNode.width = this._options.canvasInnerWidth;\r\n this._canvas.domNode.height = this._options.canvasInnerHeight;\r\n this._decorationsCanvas.setWidth(this._options.canvasOuterWidth);\r\n this._decorationsCanvas.setHeight(this._options.canvasOuterHeight);\r\n this._decorationsCanvas.domNode.width = this._options.canvasInnerWidth;\r\n this._decorationsCanvas.domNode.height = this._options.canvasInnerHeight;\r\n this._slider.setWidth(this._options.minimapWidth);\r\n };\r\n Minimap.prototype._getBuffer = function () {\r\n if (!this._buffers) {\r\n this._buffers = new MinimapBuffers(this._canvas.domNode.getContext('2d'), this._options.canvasInnerWidth, this._options.canvasInnerHeight, this._tokensColorTracker.getColor(2 /* DefaultBackground */));\r\n }\r\n return this._buffers.getBuffer();\r\n };\r\n Minimap.prototype._onOptionsMaybeChanged = function () {\r\n var opts = new MinimapOptions(this._context.configuration);\r\n if (this._options.equals(opts)) {\r\n return false;\r\n }\r\n this._options = opts;\r\n this._lastRenderData = null;\r\n this._buffers = null;\r\n this._applyLayout();\r\n this._domNode.setClassName(this._getMinimapDomNodeClassName());\r\n return true;\r\n };\r\n // ---- begin view event handlers\r\n Minimap.prototype.onConfigurationChanged = function (e) {\r\n return this._onOptionsMaybeChanged();\r\n };\r\n Minimap.prototype.onCursorStateChanged = function (e) {\r\n this._selections = e.selections;\r\n this._renderDecorations = true;\r\n return true;\r\n };\r\n Minimap.prototype.onFlushed = function (e) {\r\n this._lastRenderData = null;\r\n return true;\r\n };\r\n Minimap.prototype.onLinesChanged = function (e) {\r\n if (this._lastRenderData) {\r\n return this._lastRenderData.onLinesChanged(e);\r\n }\r\n return false;\r\n };\r\n Minimap.prototype.onLinesDeleted = function (e) {\r\n if (this._lastRenderData) {\r\n this._lastRenderData.onLinesDeleted(e);\r\n }\r\n return true;\r\n };\r\n Minimap.prototype.onLinesInserted = function (e) {\r\n if (this._lastRenderData) {\r\n this._lastRenderData.onLinesInserted(e);\r\n }\r\n return true;\r\n };\r\n Minimap.prototype.onScrollChanged = function (e) {\r\n this._renderDecorations = true;\r\n return true;\r\n };\r\n Minimap.prototype.onTokensChanged = function (e) {\r\n if (this._lastRenderData) {\r\n return this._lastRenderData.onTokensChanged(e);\r\n }\r\n return false;\r\n };\r\n Minimap.prototype.onTokensColorsChanged = function (e) {\r\n this._lastRenderData = null;\r\n this._buffers = null;\r\n return true;\r\n };\r\n Minimap.prototype.onZonesChanged = function (e) {\r\n this._lastRenderData = null;\r\n return true;\r\n };\r\n Minimap.prototype.onDecorationsChanged = function (e) {\r\n this._renderDecorations = true;\r\n return true;\r\n };\r\n Minimap.prototype.onThemeChanged = function (e) {\r\n this._context.model.invalidateMinimapColorCache();\r\n this._selectionColor = this._context.theme.getColor(minimapSelection);\r\n this._renderDecorations = true;\r\n return true;\r\n };\r\n // --- end event handlers\r\n Minimap.prototype.prepareRender = function (ctx) {\r\n // Nothing to read\r\n };\r\n Minimap.prototype.render = function (renderingCtx) {\r\n var renderMinimap = this._options.renderMinimap;\r\n if (renderMinimap === 0 /* None */) {\r\n this._shadow.setClassName('minimap-shadow-hidden');\r\n this._sliderHorizontal.setWidth(0);\r\n this._sliderHorizontal.setHeight(0);\r\n return;\r\n }\r\n if (renderingCtx.scrollLeft + renderingCtx.viewportWidth >= renderingCtx.scrollWidth) {\r\n this._shadow.setClassName('minimap-shadow-hidden');\r\n }\r\n else {\r\n this._shadow.setClassName('minimap-shadow-visible');\r\n }\r\n var layout = MinimapLayout.create(this._options, renderingCtx.visibleRange.startLineNumber, renderingCtx.visibleRange.endLineNumber, renderingCtx.viewportHeight, (renderingCtx.viewportData.whitespaceViewportData.length > 0), this._context.model.getLineCount(), renderingCtx.scrollTop, renderingCtx.scrollHeight, this._lastRenderData ? this._lastRenderData.renderedLayout : null);\r\n this._slider.setTop(layout.sliderTop);\r\n this._slider.setHeight(layout.sliderHeight);\r\n // Compute horizontal slider coordinates\r\n var scrollLeftChars = renderingCtx.scrollLeft / this._options.typicalHalfwidthCharacterWidth;\r\n var horizontalSliderLeft = Math.min(this._options.minimapWidth, Math.round(scrollLeftChars * getMinimapCharWidth(this._options.renderMinimap, this._options.fontScale) / this._options.pixelRatio));\r\n this._sliderHorizontal.setLeft(horizontalSliderLeft);\r\n this._sliderHorizontal.setWidth(this._options.minimapWidth - horizontalSliderLeft);\r\n this._sliderHorizontal.setTop(0);\r\n this._sliderHorizontal.setHeight(layout.sliderHeight);\r\n this.renderDecorations(layout);\r\n this._lastRenderData = this.renderLines(layout);\r\n };\r\n Minimap.prototype.renderDecorations = function (layout) {\r\n if (this._renderDecorations) {\r\n this._renderDecorations = false;\r\n var decorations = this._context.model.getDecorationsInViewport(new Range(layout.startLineNumber, 1, layout.endLineNumber, this._context.model.getLineMaxColumn(layout.endLineNumber)));\r\n var _a = this._options, renderMinimap = _a.renderMinimap, canvasInnerWidth = _a.canvasInnerWidth, canvasInnerHeight = _a.canvasInnerHeight;\r\n var lineHeight = getMinimapLineHeight(renderMinimap, this._options.fontScale);\r\n var characterWidth = getMinimapCharWidth(renderMinimap, this._options.fontScale);\r\n var tabSize = this._context.model.getOptions().tabSize;\r\n var canvasContext = this._decorationsCanvas.domNode.getContext('2d');\r\n canvasContext.clearRect(0, 0, canvasInnerWidth, canvasInnerHeight);\r\n var lineOffsetMap = new Map();\r\n for (var i = 0; i < this._selections.length; i++) {\r\n var selection = this._selections[i];\r\n for (var line = selection.startLineNumber; line <= selection.endLineNumber; line++) {\r\n this.renderDecorationOnLine(canvasContext, lineOffsetMap, selection, this._selectionColor, layout, line, lineHeight, lineHeight, tabSize, characterWidth);\r\n }\r\n }\r\n // Loop over decorations, ignoring those that don't have the minimap property set and rendering rectangles for each line the decoration spans\r\n for (var i = 0; i < decorations.length; i++) {\r\n var decoration = decorations[i];\r\n if (!decoration.options.minimap) {\r\n continue;\r\n }\r\n var decorationColor = decoration.options.minimap.getColor(this._context.theme);\r\n for (var line = decoration.range.startLineNumber; line <= decoration.range.endLineNumber; line++) {\r\n switch (decoration.options.minimap.position) {\r\n case MinimapPosition.Inline:\r\n this.renderDecorationOnLine(canvasContext, lineOffsetMap, decoration.range, decorationColor, layout, line, lineHeight, lineHeight, tabSize, characterWidth);\r\n continue;\r\n case MinimapPosition.Gutter:\r\n var y = (line - layout.startLineNumber) * lineHeight;\r\n var x = 2;\r\n this.renderDecoration(canvasContext, decorationColor, x, y, GUTTER_DECORATION_WIDTH, lineHeight);\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n Minimap.prototype.renderDecorationOnLine = function (canvasContext, lineOffsetMap, decorationRange, decorationColor, layout, lineNumber, height, lineHeight, tabSize, charWidth) {\r\n var y = (lineNumber - layout.startLineNumber) * lineHeight;\r\n // Skip rendering the line if it's vertically outside our viewport\r\n if (y + height < 0 || y > this._options.canvasOuterHeight) {\r\n return;\r\n }\r\n // Cache line offset data so that it is only read once per line\r\n var lineIndexToXOffset = lineOffsetMap.get(lineNumber);\r\n var isFirstDecorationForLine = !lineIndexToXOffset;\r\n if (!lineIndexToXOffset) {\r\n var lineData = this._context.model.getLineContent(lineNumber);\r\n lineIndexToXOffset = [MINIMAP_GUTTER_WIDTH];\r\n for (var i = 1; i < lineData.length + 1; i++) {\r\n var charCode = lineData.charCodeAt(i - 1);\r\n var dx = charCode === 9 /* Tab */\r\n ? tabSize * charWidth\r\n : strings.isFullWidthCharacter(charCode)\r\n ? 2 * charWidth\r\n : charWidth;\r\n lineIndexToXOffset[i] = lineIndexToXOffset[i - 1] + dx;\r\n }\r\n lineOffsetMap.set(lineNumber, lineIndexToXOffset);\r\n }\r\n var startColumn = decorationRange.startColumn, endColumn = decorationRange.endColumn, startLineNumber = decorationRange.startLineNumber, endLineNumber = decorationRange.endLineNumber;\r\n var x = startLineNumber === lineNumber ? lineIndexToXOffset[startColumn - 1] : MINIMAP_GUTTER_WIDTH;\r\n var endColumnForLine = endLineNumber > lineNumber ? lineIndexToXOffset.length - 1 : endColumn - 1;\r\n if (endColumnForLine > 0) {\r\n // If the decoration starts at the last character of the column and spans over it, ensure it has a width\r\n var width = lineIndexToXOffset[endColumnForLine] - x || 2;\r\n this.renderDecoration(canvasContext, decorationColor, x, y, width, height);\r\n }\r\n if (isFirstDecorationForLine) {\r\n this.renderLineHighlight(canvasContext, decorationColor, y, height);\r\n }\r\n };\r\n Minimap.prototype.renderLineHighlight = function (canvasContext, decorationColor, y, height) {\r\n canvasContext.fillStyle = decorationColor && decorationColor.transparent(0.5).toString() || '';\r\n canvasContext.fillRect(MINIMAP_GUTTER_WIDTH, y, canvasContext.canvas.width, height);\r\n };\r\n Minimap.prototype.renderDecoration = function (canvasContext, decorationColor, x, y, width, height) {\r\n canvasContext.fillStyle = decorationColor && decorationColor.toString() || '';\r\n canvasContext.fillRect(x, y, width, height);\r\n };\r\n Minimap.prototype.renderLines = function (layout) {\r\n var renderMinimap = this._options.renderMinimap;\r\n var charRenderer = this._options.charRenderer();\r\n var startLineNumber = layout.startLineNumber;\r\n var endLineNumber = layout.endLineNumber;\r\n var minimapLineHeight = getMinimapLineHeight(renderMinimap, this._options.fontScale);\r\n // Check if nothing changed w.r.t. lines from last frame\r\n if (this._lastRenderData && this._lastRenderData.linesEquals(layout)) {\r\n var _lastData = this._lastRenderData._get();\r\n // Nice!! Nothing changed from last frame\r\n return new RenderData(layout, _lastData.imageData, _lastData.lines);\r\n }\r\n // Oh well!! We need to repaint some lines...\r\n var imageData = this._getBuffer();\r\n // Render untouched lines by using last rendered data.\r\n var _a = Minimap._renderUntouchedLines(imageData, startLineNumber, endLineNumber, minimapLineHeight, this._lastRenderData), _dirtyY1 = _a[0], _dirtyY2 = _a[1], needed = _a[2];\r\n // Fetch rendering info from view model for rest of lines that need rendering.\r\n var lineInfo = this._context.model.getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed);\r\n var tabSize = lineInfo.tabSize;\r\n var background = this._tokensColorTracker.getColor(2 /* DefaultBackground */);\r\n var useLighterFont = this._tokensColorTracker.backgroundIsLight();\r\n // Render the rest of lines\r\n var dy = 0;\r\n var renderedLines = [];\r\n for (var lineIndex = 0, lineCount = endLineNumber - startLineNumber + 1; lineIndex < lineCount; lineIndex++) {\r\n if (needed[lineIndex]) {\r\n Minimap._renderLine(imageData, background, useLighterFont, renderMinimap, this._tokensColorTracker, charRenderer, dy, tabSize, lineInfo.data[lineIndex], this._options.fontScale);\r\n }\r\n renderedLines[lineIndex] = new MinimapLine(dy);\r\n dy += minimapLineHeight;\r\n }\r\n var dirtyY1 = (_dirtyY1 === -1 ? 0 : _dirtyY1);\r\n var dirtyY2 = (_dirtyY2 === -1 ? imageData.height : _dirtyY2);\r\n var dirtyHeight = dirtyY2 - dirtyY1;\r\n // Finally, paint to the canvas\r\n var ctx = this._canvas.domNode.getContext('2d');\r\n ctx.putImageData(imageData, 0, 0, 0, dirtyY1, imageData.width, dirtyHeight);\r\n // Save rendered data for reuse on next frame if possible\r\n return new RenderData(layout, imageData, renderedLines);\r\n };\r\n Minimap._renderUntouchedLines = function (target, startLineNumber, endLineNumber, minimapLineHeight, lastRenderData) {\r\n var needed = [];\r\n if (!lastRenderData) {\r\n for (var i = 0, len = endLineNumber - startLineNumber + 1; i < len; i++) {\r\n needed[i] = true;\r\n }\r\n return [-1, -1, needed];\r\n }\r\n var _lastData = lastRenderData._get();\r\n var lastTargetData = _lastData.imageData.data;\r\n var lastStartLineNumber = _lastData.rendLineNumberStart;\r\n var lastLines = _lastData.lines;\r\n var lastLinesLength = lastLines.length;\r\n var WIDTH = target.width;\r\n var targetData = target.data;\r\n var maxDestPixel = (endLineNumber - startLineNumber + 1) * minimapLineHeight * WIDTH * 4;\r\n var dirtyPixel1 = -1; // the pixel offset up to which all the data is equal to the prev frame\r\n var dirtyPixel2 = -1; // the pixel offset after which all the data is equal to the prev frame\r\n var copySourceStart = -1;\r\n var copySourceEnd = -1;\r\n var copyDestStart = -1;\r\n var copyDestEnd = -1;\r\n var dest_dy = 0;\r\n for (var lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\r\n var lineIndex = lineNumber - startLineNumber;\r\n var lastLineIndex = lineNumber - lastStartLineNumber;\r\n var source_dy = (lastLineIndex >= 0 && lastLineIndex < lastLinesLength ? lastLines[lastLineIndex].dy : -1);\r\n if (source_dy === -1) {\r\n needed[lineIndex] = true;\r\n dest_dy += minimapLineHeight;\r\n continue;\r\n }\r\n var sourceStart = source_dy * WIDTH * 4;\r\n var sourceEnd = (source_dy + minimapLineHeight) * WIDTH * 4;\r\n var destStart = dest_dy * WIDTH * 4;\r\n var destEnd = (dest_dy + minimapLineHeight) * WIDTH * 4;\r\n if (copySourceEnd === sourceStart && copyDestEnd === destStart) {\r\n // contiguous zone => extend copy request\r\n copySourceEnd = sourceEnd;\r\n copyDestEnd = destEnd;\r\n }\r\n else {\r\n if (copySourceStart !== -1) {\r\n // flush existing copy request\r\n targetData.set(lastTargetData.subarray(copySourceStart, copySourceEnd), copyDestStart);\r\n if (dirtyPixel1 === -1 && copySourceStart === 0 && copySourceStart === copyDestStart) {\r\n dirtyPixel1 = copySourceEnd;\r\n }\r\n if (dirtyPixel2 === -1 && copySourceEnd === maxDestPixel && copySourceStart === copyDestStart) {\r\n dirtyPixel2 = copySourceStart;\r\n }\r\n }\r\n copySourceStart = sourceStart;\r\n copySourceEnd = sourceEnd;\r\n copyDestStart = destStart;\r\n copyDestEnd = destEnd;\r\n }\r\n needed[lineIndex] = false;\r\n dest_dy += minimapLineHeight;\r\n }\r\n if (copySourceStart !== -1) {\r\n // flush existing copy request\r\n targetData.set(lastTargetData.subarray(copySourceStart, copySourceEnd), copyDestStart);\r\n if (dirtyPixel1 === -1 && copySourceStart === 0 && copySourceStart === copyDestStart) {\r\n dirtyPixel1 = copySourceEnd;\r\n }\r\n if (dirtyPixel2 === -1 && copySourceEnd === maxDestPixel && copySourceStart === copyDestStart) {\r\n dirtyPixel2 = copySourceStart;\r\n }\r\n }\r\n var dirtyY1 = (dirtyPixel1 === -1 ? -1 : dirtyPixel1 / (WIDTH * 4));\r\n var dirtyY2 = (dirtyPixel2 === -1 ? -1 : dirtyPixel2 / (WIDTH * 4));\r\n return [dirtyY1, dirtyY2, needed];\r\n };\r\n Minimap._renderLine = function (target, backgroundColor, useLighterFont, renderMinimap, colorTracker, minimapCharRenderer, dy, tabSize, lineData, fontScale) {\r\n var content = lineData.content;\r\n var tokens = lineData.tokens;\r\n var charWidth = getMinimapCharWidth(renderMinimap, fontScale);\r\n var maxDx = target.width - charWidth;\r\n var dx = MINIMAP_GUTTER_WIDTH;\r\n var charIndex = 0;\r\n var tabsCharDelta = 0;\r\n for (var tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\r\n var tokenEndIndex = tokens.getEndOffset(tokenIndex);\r\n var tokenColorId = tokens.getForeground(tokenIndex);\r\n var tokenColor = colorTracker.getColor(tokenColorId);\r\n for (; charIndex < tokenEndIndex; charIndex++) {\r\n if (dx > maxDx) {\r\n // hit edge of minimap\r\n return;\r\n }\r\n var charCode = content.charCodeAt(charIndex);\r\n if (charCode === 9 /* Tab */) {\r\n var insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\r\n tabsCharDelta += insertSpacesCount - 1;\r\n // No need to render anything since tab is invisible\r\n dx += insertSpacesCount * charWidth;\r\n }\r\n else if (charCode === 32 /* Space */) {\r\n // No need to render anything since space is invisible\r\n dx += charWidth;\r\n }\r\n else {\r\n // Render twice for a full width character\r\n var count = strings.isFullWidthCharacter(charCode) ? 2 : 1;\r\n for (var i = 0; i < count; i++) {\r\n if (renderMinimap === 2 /* Blocks */) {\r\n minimapCharRenderer.blockRenderChar(target, dx, dy, tokenColor, backgroundColor, useLighterFont);\r\n }\r\n else { // RenderMinimap.Text\r\n minimapCharRenderer.renderChar(target, dx, dy, charCode, tokenColor, backgroundColor, fontScale, useLighterFont);\r\n }\r\n dx += charWidth;\r\n if (dx > maxDx) {\r\n // hit edge of minimap\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n return Minimap;\r\n}(ViewPart));\r\nexport { Minimap };\r\nregisterThemingParticipant(function (theme, collector) {\r\n var sliderBackground = theme.getColor(scrollbarSliderBackground);\r\n if (sliderBackground) {\r\n var halfSliderBackground = sliderBackground.transparent(0.5);\r\n collector.addRule(\".monaco-editor .minimap-slider, .monaco-editor .minimap-slider .minimap-slider-horizontal { background: \" + halfSliderBackground + \"; }\");\r\n }\r\n var sliderHoverBackground = theme.getColor(scrollbarSliderHoverBackground);\r\n if (sliderHoverBackground) {\r\n var halfSliderHoverBackground = sliderHoverBackground.transparent(0.5);\r\n collector.addRule(\".monaco-editor .minimap-slider:hover, .monaco-editor .minimap-slider:hover .minimap-slider-horizontal { background: \" + halfSliderHoverBackground + \"; }\");\r\n }\r\n var sliderActiveBackground = theme.getColor(scrollbarSliderActiveBackground);\r\n if (sliderActiveBackground) {\r\n var halfSliderActiveBackground = sliderActiveBackground.transparent(0.5);\r\n collector.addRule(\".monaco-editor .minimap-slider.active, .monaco-editor .minimap-slider.active .minimap-slider-horizontal { background: \" + halfSliderActiveBackground + \"; }\");\r\n }\r\n var shadow = theme.getColor(scrollbarShadow);\r\n if (shadow) {\r\n collector.addRule(\".monaco-editor .minimap-shadow-visible { box-shadow: \" + shadow + \" -6px 0 6px -6px inset; }\");\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './overlayWidgets.css';\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\r\nvar ViewOverlayWidgets = /** @class */ (function (_super) {\r\n __extends(ViewOverlayWidgets, _super);\r\n function ViewOverlayWidgets(context) {\r\n var _this = _super.call(this, context) || this;\r\n var options = _this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._widgets = {};\r\n _this._verticalScrollbarWidth = layoutInfo.verticalScrollbarWidth;\r\n _this._minimapWidth = layoutInfo.minimapWidth;\r\n _this._horizontalScrollbarHeight = layoutInfo.horizontalScrollbarHeight;\r\n _this._editorHeight = layoutInfo.height;\r\n _this._editorWidth = layoutInfo.width;\r\n _this._domNode = createFastDomNode(document.createElement('div'));\r\n PartFingerprints.write(_this._domNode, 4 /* OverlayWidgets */);\r\n _this._domNode.setClassName('overlayWidgets');\r\n return _this;\r\n }\r\n ViewOverlayWidgets.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this._widgets = {};\r\n };\r\n ViewOverlayWidgets.prototype.getDomNode = function () {\r\n return this._domNode;\r\n };\r\n // ---- begin view event handlers\r\n ViewOverlayWidgets.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._verticalScrollbarWidth = layoutInfo.verticalScrollbarWidth;\r\n this._minimapWidth = layoutInfo.minimapWidth;\r\n this._horizontalScrollbarHeight = layoutInfo.horizontalScrollbarHeight;\r\n this._editorHeight = layoutInfo.height;\r\n this._editorWidth = layoutInfo.width;\r\n return true;\r\n };\r\n // ---- end view event handlers\r\n ViewOverlayWidgets.prototype.addWidget = function (widget) {\r\n var domNode = createFastDomNode(widget.getDomNode());\r\n this._widgets[widget.getId()] = {\r\n widget: widget,\r\n preference: null,\r\n domNode: domNode\r\n };\r\n // This is sync because a widget wants to be in the dom\r\n domNode.setPosition('absolute');\r\n domNode.setAttribute('widgetId', widget.getId());\r\n this._domNode.appendChild(domNode);\r\n this.setShouldRender();\r\n };\r\n ViewOverlayWidgets.prototype.setWidgetPosition = function (widget, preference) {\r\n var widgetData = this._widgets[widget.getId()];\r\n if (widgetData.preference === preference) {\r\n return false;\r\n }\r\n widgetData.preference = preference;\r\n this.setShouldRender();\r\n return true;\r\n };\r\n ViewOverlayWidgets.prototype.removeWidget = function (widget) {\r\n var widgetId = widget.getId();\r\n if (this._widgets.hasOwnProperty(widgetId)) {\r\n var widgetData = this._widgets[widgetId];\r\n var domNode = widgetData.domNode.domNode;\r\n delete this._widgets[widgetId];\r\n domNode.parentNode.removeChild(domNode);\r\n this.setShouldRender();\r\n }\r\n };\r\n ViewOverlayWidgets.prototype._renderWidget = function (widgetData) {\r\n var domNode = widgetData.domNode;\r\n if (widgetData.preference === null) {\r\n domNode.unsetTop();\r\n return;\r\n }\r\n if (widgetData.preference === 0 /* TOP_RIGHT_CORNER */) {\r\n domNode.setTop(0);\r\n domNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);\r\n }\r\n else if (widgetData.preference === 1 /* BOTTOM_RIGHT_CORNER */) {\r\n var widgetHeight = domNode.domNode.clientHeight;\r\n domNode.setTop((this._editorHeight - widgetHeight - 2 * this._horizontalScrollbarHeight));\r\n domNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);\r\n }\r\n else if (widgetData.preference === 2 /* TOP_CENTER */) {\r\n domNode.setTop(0);\r\n domNode.domNode.style.right = '50%';\r\n }\r\n };\r\n ViewOverlayWidgets.prototype.prepareRender = function (ctx) {\r\n // Nothing to read\r\n };\r\n ViewOverlayWidgets.prototype.render = function (ctx) {\r\n this._domNode.setWidth(this._editorWidth);\r\n var keys = Object.keys(this._widgets);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var widgetId = keys[i];\r\n this._renderWidget(this._widgets[widgetId]);\r\n }\r\n };\r\n return ViewOverlayWidgets;\r\n}(ViewPart));\r\nexport { ViewOverlayWidgets };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { Color } from '../../../../base/common/color.js';\r\nimport { ViewPart } from '../../view/viewPart.js';\r\nimport { Position } from '../../../common/core/position.js';\r\nimport { TokenizationRegistry } from '../../../common/modes.js';\r\nimport { editorCursorForeground, editorOverviewRulerBorder } from '../../../common/view/editorColorRegistry.js';\r\nvar Settings = /** @class */ (function () {\r\n function Settings(config, theme) {\r\n var options = config.options;\r\n this.lineHeight = options.get(47 /* lineHeight */);\r\n this.pixelRatio = options.get(101 /* pixelRatio */);\r\n this.overviewRulerLanes = options.get(61 /* overviewRulerLanes */);\r\n this.renderBorder = options.get(60 /* overviewRulerBorder */);\r\n var borderColor = theme.getColor(editorOverviewRulerBorder);\r\n this.borderColor = borderColor ? borderColor.toString() : null;\r\n this.hideCursor = options.get(40 /* hideCursorInOverviewRuler */);\r\n var cursorColor = theme.getColor(editorCursorForeground);\r\n this.cursorColor = cursorColor ? cursorColor.transparent(0.7).toString() : null;\r\n this.themeType = theme.type;\r\n var minimapOpts = options.get(52 /* minimap */);\r\n var minimapEnabled = minimapOpts.enabled;\r\n var minimapSide = minimapOpts.side;\r\n var backgroundColor = (minimapEnabled ? TokenizationRegistry.getDefaultBackground() : null);\r\n if (backgroundColor === null || minimapSide === 'left') {\r\n this.backgroundColor = null;\r\n }\r\n else {\r\n this.backgroundColor = Color.Format.CSS.formatHex(backgroundColor);\r\n }\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n var position = layoutInfo.overviewRuler;\r\n this.top = position.top;\r\n this.right = position.right;\r\n this.domWidth = position.width;\r\n this.domHeight = position.height;\r\n this.canvasWidth = (this.domWidth * this.pixelRatio) | 0;\r\n this.canvasHeight = (this.domHeight * this.pixelRatio) | 0;\r\n var _a = this._initLanes(1, this.canvasWidth, this.overviewRulerLanes), x = _a[0], w = _a[1];\r\n this.x = x;\r\n this.w = w;\r\n }\r\n Settings.prototype._initLanes = function (canvasLeftOffset, canvasWidth, laneCount) {\r\n var remainingWidth = canvasWidth - canvasLeftOffset;\r\n if (laneCount >= 3) {\r\n var leftWidth = Math.floor(remainingWidth / 3);\r\n var rightWidth = Math.floor(remainingWidth / 3);\r\n var centerWidth = remainingWidth - leftWidth - rightWidth;\r\n var leftOffset = canvasLeftOffset;\r\n var centerOffset = leftOffset + leftWidth;\r\n var rightOffset = leftOffset + leftWidth + centerWidth;\r\n return [\r\n [\r\n 0,\r\n leftOffset,\r\n centerOffset,\r\n leftOffset,\r\n rightOffset,\r\n leftOffset,\r\n centerOffset,\r\n leftOffset,\r\n ], [\r\n 0,\r\n leftWidth,\r\n centerWidth,\r\n leftWidth + centerWidth,\r\n rightWidth,\r\n leftWidth + centerWidth + rightWidth,\r\n centerWidth + rightWidth,\r\n leftWidth + centerWidth + rightWidth,\r\n ]\r\n ];\r\n }\r\n else if (laneCount === 2) {\r\n var leftWidth = Math.floor(remainingWidth / 2);\r\n var rightWidth = remainingWidth - leftWidth;\r\n var leftOffset = canvasLeftOffset;\r\n var rightOffset = leftOffset + leftWidth;\r\n return [\r\n [\r\n 0,\r\n leftOffset,\r\n leftOffset,\r\n leftOffset,\r\n rightOffset,\r\n leftOffset,\r\n leftOffset,\r\n leftOffset,\r\n ], [\r\n 0,\r\n leftWidth,\r\n leftWidth,\r\n leftWidth,\r\n rightWidth,\r\n leftWidth + rightWidth,\r\n leftWidth + rightWidth,\r\n leftWidth + rightWidth,\r\n ]\r\n ];\r\n }\r\n else {\r\n var offset = canvasLeftOffset;\r\n var width = remainingWidth;\r\n return [\r\n [\r\n 0,\r\n offset,\r\n offset,\r\n offset,\r\n offset,\r\n offset,\r\n offset,\r\n offset,\r\n ], [\r\n 0,\r\n width,\r\n width,\r\n width,\r\n width,\r\n width,\r\n width,\r\n width,\r\n ]\r\n ];\r\n }\r\n };\r\n Settings.prototype.equals = function (other) {\r\n return (this.lineHeight === other.lineHeight\r\n && this.pixelRatio === other.pixelRatio\r\n && this.overviewRulerLanes === other.overviewRulerLanes\r\n && this.renderBorder === other.renderBorder\r\n && this.borderColor === other.borderColor\r\n && this.hideCursor === other.hideCursor\r\n && this.cursorColor === other.cursorColor\r\n && this.themeType === other.themeType\r\n && this.backgroundColor === other.backgroundColor\r\n && this.top === other.top\r\n && this.right === other.right\r\n && this.domWidth === other.domWidth\r\n && this.domHeight === other.domHeight\r\n && this.canvasWidth === other.canvasWidth\r\n && this.canvasHeight === other.canvasHeight);\r\n };\r\n return Settings;\r\n}());\r\nvar DecorationsOverviewRuler = /** @class */ (function (_super) {\r\n __extends(DecorationsOverviewRuler, _super);\r\n function DecorationsOverviewRuler(context) {\r\n var _this = _super.call(this, context) || this;\r\n _this._domNode = createFastDomNode(document.createElement('canvas'));\r\n _this._domNode.setClassName('decorationsOverviewRuler');\r\n _this._domNode.setPosition('absolute');\r\n _this._domNode.setLayerHinting(true);\r\n _this._domNode.setContain('strict');\r\n _this._domNode.setAttribute('aria-hidden', 'true');\r\n _this._updateSettings(false);\r\n _this._tokensColorTrackerListener = TokenizationRegistry.onDidChange(function (e) {\r\n if (e.changedColorMap) {\r\n _this._updateSettings(true);\r\n }\r\n });\r\n _this._cursorPositions = [];\r\n return _this;\r\n }\r\n DecorationsOverviewRuler.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this._tokensColorTrackerListener.dispose();\r\n };\r\n DecorationsOverviewRuler.prototype._updateSettings = function (renderNow) {\r\n var newSettings = new Settings(this._context.configuration, this._context.theme);\r\n if (this._settings && this._settings.equals(newSettings)) {\r\n // nothing to do\r\n return false;\r\n }\r\n this._settings = newSettings;\r\n this._domNode.setTop(this._settings.top);\r\n this._domNode.setRight(this._settings.right);\r\n this._domNode.setWidth(this._settings.domWidth);\r\n this._domNode.setHeight(this._settings.domHeight);\r\n this._domNode.domNode.width = this._settings.canvasWidth;\r\n this._domNode.domNode.height = this._settings.canvasHeight;\r\n if (renderNow) {\r\n this._render();\r\n }\r\n return true;\r\n };\r\n // ---- begin view event handlers\r\n DecorationsOverviewRuler.prototype.onConfigurationChanged = function (e) {\r\n return this._updateSettings(false);\r\n };\r\n DecorationsOverviewRuler.prototype.onCursorStateChanged = function (e) {\r\n this._cursorPositions = [];\r\n for (var i = 0, len = e.selections.length; i < len; i++) {\r\n this._cursorPositions[i] = e.selections[i].getPosition();\r\n }\r\n this._cursorPositions.sort(Position.compare);\r\n return true;\r\n };\r\n DecorationsOverviewRuler.prototype.onDecorationsChanged = function (e) {\r\n return true;\r\n };\r\n DecorationsOverviewRuler.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n DecorationsOverviewRuler.prototype.onScrollChanged = function (e) {\r\n return e.scrollHeightChanged;\r\n };\r\n DecorationsOverviewRuler.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n DecorationsOverviewRuler.prototype.onThemeChanged = function (e) {\r\n // invalidate color cache\r\n this._context.model.invalidateOverviewRulerColorCache();\r\n return this._updateSettings(false);\r\n };\r\n // ---- end view event handlers\r\n DecorationsOverviewRuler.prototype.getDomNode = function () {\r\n return this._domNode.domNode;\r\n };\r\n DecorationsOverviewRuler.prototype.prepareRender = function (ctx) {\r\n // Nothing to read\r\n };\r\n DecorationsOverviewRuler.prototype.render = function (editorCtx) {\r\n this._render();\r\n };\r\n DecorationsOverviewRuler.prototype._render = function () {\r\n var canvasWidth = this._settings.canvasWidth;\r\n var canvasHeight = this._settings.canvasHeight;\r\n var lineHeight = this._settings.lineHeight;\r\n var viewLayout = this._context.viewLayout;\r\n var outerHeight = this._context.viewLayout.getScrollHeight();\r\n var heightRatio = canvasHeight / outerHeight;\r\n var decorations = this._context.model.getAllOverviewRulerDecorations(this._context.theme);\r\n var minDecorationHeight = (6 /* MIN_DECORATION_HEIGHT */ * this._settings.pixelRatio) | 0;\r\n var halfMinDecorationHeight = (minDecorationHeight / 2) | 0;\r\n var canvasCtx = this._domNode.domNode.getContext('2d');\r\n if (this._settings.backgroundColor === null) {\r\n canvasCtx.clearRect(0, 0, canvasWidth, canvasHeight);\r\n }\r\n else {\r\n canvasCtx.fillStyle = this._settings.backgroundColor;\r\n canvasCtx.fillRect(0, 0, canvasWidth, canvasHeight);\r\n }\r\n var x = this._settings.x;\r\n var w = this._settings.w;\r\n // Avoid flickering by always rendering the colors in the same order\r\n // colors that don't use transparency will be sorted last (they start with #)\r\n var colors = Object.keys(decorations);\r\n colors.sort();\r\n for (var cIndex = 0, cLen = colors.length; cIndex < cLen; cIndex++) {\r\n var color = colors[cIndex];\r\n var colorDecorations = decorations[color];\r\n canvasCtx.fillStyle = color;\r\n var prevLane = 0;\r\n var prevY1 = 0;\r\n var prevY2 = 0;\r\n for (var i = 0, len = colorDecorations.length; i < len; i++) {\r\n var lane = colorDecorations[3 * i];\r\n var startLineNumber = colorDecorations[3 * i + 1];\r\n var endLineNumber = colorDecorations[3 * i + 2];\r\n var y1 = (viewLayout.getVerticalOffsetForLineNumber(startLineNumber) * heightRatio) | 0;\r\n var y2 = ((viewLayout.getVerticalOffsetForLineNumber(endLineNumber) + lineHeight) * heightRatio) | 0;\r\n var height = y2 - y1;\r\n if (height < minDecorationHeight) {\r\n var yCenter = ((y1 + y2) / 2) | 0;\r\n if (yCenter < halfMinDecorationHeight) {\r\n yCenter = halfMinDecorationHeight;\r\n }\r\n else if (yCenter + halfMinDecorationHeight > canvasHeight) {\r\n yCenter = canvasHeight - halfMinDecorationHeight;\r\n }\r\n y1 = yCenter - halfMinDecorationHeight;\r\n y2 = yCenter + halfMinDecorationHeight;\r\n }\r\n if (y1 > prevY2 + 1 || lane !== prevLane) {\r\n // flush prev\r\n if (i !== 0) {\r\n canvasCtx.fillRect(x[prevLane], prevY1, w[prevLane], prevY2 - prevY1);\r\n }\r\n prevLane = lane;\r\n prevY1 = y1;\r\n prevY2 = y2;\r\n }\r\n else {\r\n // merge into prev\r\n if (y2 > prevY2) {\r\n prevY2 = y2;\r\n }\r\n }\r\n }\r\n canvasCtx.fillRect(x[prevLane], prevY1, w[prevLane], prevY2 - prevY1);\r\n }\r\n // Draw cursors\r\n if (!this._settings.hideCursor && this._settings.cursorColor) {\r\n var cursorHeight = (2 * this._settings.pixelRatio) | 0;\r\n var halfCursorHeight = (cursorHeight / 2) | 0;\r\n var cursorX = this._settings.x[7 /* Full */];\r\n var cursorW = this._settings.w[7 /* Full */];\r\n canvasCtx.fillStyle = this._settings.cursorColor;\r\n var prevY1 = -100;\r\n var prevY2 = -100;\r\n for (var i = 0, len = this._cursorPositions.length; i < len; i++) {\r\n var cursor = this._cursorPositions[i];\r\n var yCenter = (viewLayout.getVerticalOffsetForLineNumber(cursor.lineNumber) * heightRatio) | 0;\r\n if (yCenter < halfCursorHeight) {\r\n yCenter = halfCursorHeight;\r\n }\r\n else if (yCenter + halfCursorHeight > canvasHeight) {\r\n yCenter = canvasHeight - halfCursorHeight;\r\n }\r\n var y1 = yCenter - halfCursorHeight;\r\n var y2 = y1 + cursorHeight;\r\n if (y1 > prevY2 + 1) {\r\n // flush prev\r\n if (i !== 0) {\r\n canvasCtx.fillRect(cursorX, prevY1, cursorW, prevY2 - prevY1);\r\n }\r\n prevY1 = y1;\r\n prevY2 = y2;\r\n }\r\n else {\r\n // merge into prev\r\n if (y2 > prevY2) {\r\n prevY2 = y2;\r\n }\r\n }\r\n }\r\n canvasCtx.fillRect(cursorX, prevY1, cursorW, prevY2 - prevY1);\r\n }\r\n if (this._settings.renderBorder && this._settings.borderColor && this._settings.overviewRulerLanes > 0) {\r\n canvasCtx.beginPath();\r\n canvasCtx.lineWidth = 1;\r\n canvasCtx.strokeStyle = this._settings.borderColor;\r\n canvasCtx.moveTo(0, 0);\r\n canvasCtx.lineTo(0, canvasHeight);\r\n canvasCtx.stroke();\r\n canvasCtx.moveTo(0, 0);\r\n canvasCtx.lineTo(canvasWidth, 0);\r\n canvasCtx.stroke();\r\n }\r\n };\r\n return DecorationsOverviewRuler;\r\n}(ViewPart));\r\nexport { DecorationsOverviewRuler };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar ColorZone = /** @class */ (function () {\r\n function ColorZone(from, to, colorId) {\r\n this.from = from | 0;\r\n this.to = to | 0;\r\n this.colorId = colorId | 0;\r\n }\r\n ColorZone.compare = function (a, b) {\r\n if (a.colorId === b.colorId) {\r\n if (a.from === b.from) {\r\n return a.to - b.to;\r\n }\r\n return a.from - b.from;\r\n }\r\n return a.colorId - b.colorId;\r\n };\r\n return ColorZone;\r\n}());\r\nexport { ColorZone };\r\n/**\r\n * A zone in the overview ruler\r\n */\r\nvar OverviewRulerZone = /** @class */ (function () {\r\n function OverviewRulerZone(startLineNumber, endLineNumber, color) {\r\n this.startLineNumber = startLineNumber;\r\n this.endLineNumber = endLineNumber;\r\n this.color = color;\r\n this._colorZone = null;\r\n }\r\n OverviewRulerZone.compare = function (a, b) {\r\n if (a.color === b.color) {\r\n if (a.startLineNumber === b.startLineNumber) {\r\n return a.endLineNumber - b.endLineNumber;\r\n }\r\n return a.startLineNumber - b.startLineNumber;\r\n }\r\n return a.color < b.color ? -1 : 1;\r\n };\r\n OverviewRulerZone.prototype.setColorZone = function (colorZone) {\r\n this._colorZone = colorZone;\r\n };\r\n OverviewRulerZone.prototype.getColorZones = function () {\r\n return this._colorZone;\r\n };\r\n return OverviewRulerZone;\r\n}());\r\nexport { OverviewRulerZone };\r\nvar OverviewZoneManager = /** @class */ (function () {\r\n function OverviewZoneManager(getVerticalOffsetForLine) {\r\n this._getVerticalOffsetForLine = getVerticalOffsetForLine;\r\n this._zones = [];\r\n this._colorZonesInvalid = false;\r\n this._lineHeight = 0;\r\n this._domWidth = 0;\r\n this._domHeight = 0;\r\n this._outerHeight = 0;\r\n this._pixelRatio = 1;\r\n this._lastAssignedId = 0;\r\n this._color2Id = Object.create(null);\r\n this._id2Color = [];\r\n }\r\n OverviewZoneManager.prototype.getId2Color = function () {\r\n return this._id2Color;\r\n };\r\n OverviewZoneManager.prototype.setZones = function (newZones) {\r\n this._zones = newZones;\r\n this._zones.sort(OverviewRulerZone.compare);\r\n };\r\n OverviewZoneManager.prototype.setLineHeight = function (lineHeight) {\r\n if (this._lineHeight === lineHeight) {\r\n return false;\r\n }\r\n this._lineHeight = lineHeight;\r\n this._colorZonesInvalid = true;\r\n return true;\r\n };\r\n OverviewZoneManager.prototype.setPixelRatio = function (pixelRatio) {\r\n this._pixelRatio = pixelRatio;\r\n this._colorZonesInvalid = true;\r\n };\r\n OverviewZoneManager.prototype.getDOMWidth = function () {\r\n return this._domWidth;\r\n };\r\n OverviewZoneManager.prototype.getCanvasWidth = function () {\r\n return this._domWidth * this._pixelRatio;\r\n };\r\n OverviewZoneManager.prototype.setDOMWidth = function (width) {\r\n if (this._domWidth === width) {\r\n return false;\r\n }\r\n this._domWidth = width;\r\n this._colorZonesInvalid = true;\r\n return true;\r\n };\r\n OverviewZoneManager.prototype.getDOMHeight = function () {\r\n return this._domHeight;\r\n };\r\n OverviewZoneManager.prototype.getCanvasHeight = function () {\r\n return this._domHeight * this._pixelRatio;\r\n };\r\n OverviewZoneManager.prototype.setDOMHeight = function (height) {\r\n if (this._domHeight === height) {\r\n return false;\r\n }\r\n this._domHeight = height;\r\n this._colorZonesInvalid = true;\r\n return true;\r\n };\r\n OverviewZoneManager.prototype.getOuterHeight = function () {\r\n return this._outerHeight;\r\n };\r\n OverviewZoneManager.prototype.setOuterHeight = function (outerHeight) {\r\n if (this._outerHeight === outerHeight) {\r\n return false;\r\n }\r\n this._outerHeight = outerHeight;\r\n this._colorZonesInvalid = true;\r\n return true;\r\n };\r\n OverviewZoneManager.prototype.resolveColorZones = function () {\r\n var colorZonesInvalid = this._colorZonesInvalid;\r\n var lineHeight = Math.floor(this._lineHeight); // @perf\r\n var totalHeight = Math.floor(this.getCanvasHeight()); // @perf\r\n var outerHeight = Math.floor(this._outerHeight); // @perf\r\n var heightRatio = totalHeight / outerHeight;\r\n var halfMinimumHeight = Math.floor(4 /* MINIMUM_HEIGHT */ * this._pixelRatio / 2);\r\n var allColorZones = [];\r\n for (var i = 0, len = this._zones.length; i < len; i++) {\r\n var zone = this._zones[i];\r\n if (!colorZonesInvalid) {\r\n var colorZone_1 = zone.getColorZones();\r\n if (colorZone_1) {\r\n allColorZones.push(colorZone_1);\r\n continue;\r\n }\r\n }\r\n var y1 = Math.floor(heightRatio * (this._getVerticalOffsetForLine(zone.startLineNumber)));\r\n var y2 = Math.floor(heightRatio * (this._getVerticalOffsetForLine(zone.endLineNumber) + lineHeight));\r\n var ycenter = Math.floor((y1 + y2) / 2);\r\n var halfHeight = (y2 - ycenter);\r\n if (halfHeight < halfMinimumHeight) {\r\n halfHeight = halfMinimumHeight;\r\n }\r\n if (ycenter - halfHeight < 0) {\r\n ycenter = halfHeight;\r\n }\r\n if (ycenter + halfHeight > totalHeight) {\r\n ycenter = totalHeight - halfHeight;\r\n }\r\n var color = zone.color;\r\n var colorId = this._color2Id[color];\r\n if (!colorId) {\r\n colorId = (++this._lastAssignedId);\r\n this._color2Id[color] = colorId;\r\n this._id2Color[colorId] = color;\r\n }\r\n var colorZone = new ColorZone(ycenter - halfHeight, ycenter + halfHeight, colorId);\r\n zone.setColorZone(colorZone);\r\n allColorZones.push(colorZone);\r\n }\r\n this._colorZonesInvalid = false;\r\n allColorZones.sort(ColorZone.compare);\r\n return allColorZones;\r\n };\r\n return OverviewZoneManager;\r\n}());\r\nexport { OverviewZoneManager };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { OverviewZoneManager } from '../../../common/view/overviewZoneManager.js';\r\nimport { ViewEventHandler } from '../../../common/viewModel/viewEventHandler.js';\r\nvar OverviewRuler = /** @class */ (function (_super) {\r\n __extends(OverviewRuler, _super);\r\n function OverviewRuler(context, cssClassName) {\r\n var _this = _super.call(this) || this;\r\n _this._context = context;\r\n var options = _this._context.configuration.options;\r\n _this._domNode = createFastDomNode(document.createElement('canvas'));\r\n _this._domNode.setClassName(cssClassName);\r\n _this._domNode.setPosition('absolute');\r\n _this._domNode.setLayerHinting(true);\r\n _this._domNode.setContain('strict');\r\n _this._zoneManager = new OverviewZoneManager(function (lineNumber) { return _this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber); });\r\n _this._zoneManager.setDOMWidth(0);\r\n _this._zoneManager.setDOMHeight(0);\r\n _this._zoneManager.setOuterHeight(_this._context.viewLayout.getScrollHeight());\r\n _this._zoneManager.setLineHeight(options.get(47 /* lineHeight */));\r\n _this._zoneManager.setPixelRatio(options.get(101 /* pixelRatio */));\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n OverviewRuler.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n _super.prototype.dispose.call(this);\r\n };\r\n // ---- begin view event handlers\r\n OverviewRuler.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n if (e.hasChanged(47 /* lineHeight */)) {\r\n this._zoneManager.setLineHeight(options.get(47 /* lineHeight */));\r\n this._render();\r\n }\r\n if (e.hasChanged(101 /* pixelRatio */)) {\r\n this._zoneManager.setPixelRatio(options.get(101 /* pixelRatio */));\r\n this._domNode.setWidth(this._zoneManager.getDOMWidth());\r\n this._domNode.setHeight(this._zoneManager.getDOMHeight());\r\n this._domNode.domNode.width = this._zoneManager.getCanvasWidth();\r\n this._domNode.domNode.height = this._zoneManager.getCanvasHeight();\r\n this._render();\r\n }\r\n return true;\r\n };\r\n OverviewRuler.prototype.onFlushed = function (e) {\r\n this._render();\r\n return true;\r\n };\r\n OverviewRuler.prototype.onScrollChanged = function (e) {\r\n if (e.scrollHeightChanged) {\r\n this._zoneManager.setOuterHeight(e.scrollHeight);\r\n this._render();\r\n }\r\n return true;\r\n };\r\n OverviewRuler.prototype.onZonesChanged = function (e) {\r\n this._render();\r\n return true;\r\n };\r\n // ---- end view event handlers\r\n OverviewRuler.prototype.getDomNode = function () {\r\n return this._domNode.domNode;\r\n };\r\n OverviewRuler.prototype.setLayout = function (position) {\r\n this._domNode.setTop(position.top);\r\n this._domNode.setRight(position.right);\r\n var hasChanged = false;\r\n hasChanged = this._zoneManager.setDOMWidth(position.width) || hasChanged;\r\n hasChanged = this._zoneManager.setDOMHeight(position.height) || hasChanged;\r\n if (hasChanged) {\r\n this._domNode.setWidth(this._zoneManager.getDOMWidth());\r\n this._domNode.setHeight(this._zoneManager.getDOMHeight());\r\n this._domNode.domNode.width = this._zoneManager.getCanvasWidth();\r\n this._domNode.domNode.height = this._zoneManager.getCanvasHeight();\r\n this._render();\r\n }\r\n };\r\n OverviewRuler.prototype.setZones = function (zones) {\r\n this._zoneManager.setZones(zones);\r\n this._render();\r\n };\r\n OverviewRuler.prototype._render = function () {\r\n if (this._zoneManager.getOuterHeight() === 0) {\r\n return false;\r\n }\r\n var width = this._zoneManager.getCanvasWidth();\r\n var height = this._zoneManager.getCanvasHeight();\r\n var colorZones = this._zoneManager.resolveColorZones();\r\n var id2Color = this._zoneManager.getId2Color();\r\n var ctx = this._domNode.domNode.getContext('2d');\r\n ctx.clearRect(0, 0, width, height);\r\n if (colorZones.length > 0) {\r\n this._renderOneLane(ctx, colorZones, id2Color, width);\r\n }\r\n return true;\r\n };\r\n OverviewRuler.prototype._renderOneLane = function (ctx, colorZones, id2Color, width) {\r\n var currentColorId = 0;\r\n var currentFrom = 0;\r\n var currentTo = 0;\r\n for (var _i = 0, colorZones_1 = colorZones; _i < colorZones_1.length; _i++) {\r\n var zone = colorZones_1[_i];\r\n var zoneColorId = zone.colorId;\r\n var zoneFrom = zone.from;\r\n var zoneTo = zone.to;\r\n if (zoneColorId !== currentColorId) {\r\n ctx.fillRect(0, currentFrom, width, currentTo - currentFrom);\r\n currentColorId = zoneColorId;\r\n ctx.fillStyle = id2Color[currentColorId];\r\n currentFrom = zoneFrom;\r\n currentTo = zoneTo;\r\n }\r\n else {\r\n if (currentTo >= zoneFrom) {\r\n currentTo = Math.max(currentTo, zoneTo);\r\n }\r\n else {\r\n ctx.fillRect(0, currentFrom, width, currentTo - currentFrom);\r\n currentFrom = zoneFrom;\r\n currentTo = zoneTo;\r\n }\r\n }\r\n }\r\n ctx.fillRect(0, currentFrom, width, currentTo - currentFrom);\r\n };\r\n return OverviewRuler;\r\n}(ViewEventHandler));\r\nexport { OverviewRuler };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './rulers.css';\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { ViewPart } from '../../view/viewPart.js';\r\nimport { editorRuler } from '../../../common/view/editorColorRegistry.js';\r\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\r\nvar Rulers = /** @class */ (function (_super) {\r\n __extends(Rulers, _super);\r\n function Rulers(context) {\r\n var _this = _super.call(this, context) || this;\r\n _this.domNode = createFastDomNode(document.createElement('div'));\r\n _this.domNode.setAttribute('role', 'presentation');\r\n _this.domNode.setAttribute('aria-hidden', 'true');\r\n _this.domNode.setClassName('view-rulers');\r\n _this._renderedRulers = [];\r\n var options = _this._context.configuration.options;\r\n _this._rulers = options.get(73 /* rulers */);\r\n _this._typicalHalfwidthCharacterWidth = options.get(32 /* fontInfo */).typicalHalfwidthCharacterWidth;\r\n return _this;\r\n }\r\n Rulers.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n // --- begin event handlers\r\n Rulers.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n this._rulers = options.get(73 /* rulers */);\r\n this._typicalHalfwidthCharacterWidth = options.get(32 /* fontInfo */).typicalHalfwidthCharacterWidth;\r\n return true;\r\n };\r\n Rulers.prototype.onScrollChanged = function (e) {\r\n return e.scrollHeightChanged;\r\n };\r\n // --- end event handlers\r\n Rulers.prototype.prepareRender = function (ctx) {\r\n // Nothing to read\r\n };\r\n Rulers.prototype._ensureRulersCount = function () {\r\n var currentCount = this._renderedRulers.length;\r\n var desiredCount = this._rulers.length;\r\n if (currentCount === desiredCount) {\r\n // Nothing to do\r\n return;\r\n }\r\n if (currentCount < desiredCount) {\r\n var tabSize = this._context.model.getOptions().tabSize;\r\n var rulerWidth = tabSize;\r\n var addCount = desiredCount - currentCount;\r\n while (addCount > 0) {\r\n var node = createFastDomNode(document.createElement('div'));\r\n node.setClassName('view-ruler');\r\n node.setWidth(rulerWidth);\r\n this.domNode.appendChild(node);\r\n this._renderedRulers.push(node);\r\n addCount--;\r\n }\r\n return;\r\n }\r\n var removeCount = currentCount - desiredCount;\r\n while (removeCount > 0) {\r\n var node = this._renderedRulers.pop();\r\n this.domNode.removeChild(node);\r\n removeCount--;\r\n }\r\n };\r\n Rulers.prototype.render = function (ctx) {\r\n this._ensureRulersCount();\r\n for (var i = 0, len = this._rulers.length; i < len; i++) {\r\n var node = this._renderedRulers[i];\r\n node.setHeight(Math.min(ctx.scrollHeight, 1000000));\r\n node.setLeft(this._rulers[i] * this._typicalHalfwidthCharacterWidth);\r\n }\r\n };\r\n return Rulers;\r\n}(ViewPart));\r\nexport { Rulers };\r\nregisterThemingParticipant(function (theme, collector) {\r\n var rulerColor = theme.getColor(editorRuler);\r\n if (rulerColor) {\r\n collector.addRule(\".monaco-editor .view-ruler { box-shadow: 1px 0 0 0 \" + rulerColor + \" inset; }\");\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './scrollDecoration.css';\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { ViewPart } from '../../view/viewPart.js';\r\nimport { scrollbarShadow } from '../../../../platform/theme/common/colorRegistry.js';\r\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\r\nvar ScrollDecorationViewPart = /** @class */ (function (_super) {\r\n __extends(ScrollDecorationViewPart, _super);\r\n function ScrollDecorationViewPart(context) {\r\n var _this = _super.call(this, context) || this;\r\n _this._scrollTop = 0;\r\n _this._width = 0;\r\n _this._updateWidth();\r\n _this._shouldShow = false;\r\n var options = _this._context.configuration.options;\r\n var scrollbar = options.get(74 /* scrollbar */);\r\n _this._useShadows = scrollbar.useShadows;\r\n _this._domNode = createFastDomNode(document.createElement('div'));\r\n _this._domNode.setAttribute('role', 'presentation');\r\n _this._domNode.setAttribute('aria-hidden', 'true');\r\n return _this;\r\n }\r\n ScrollDecorationViewPart.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n ScrollDecorationViewPart.prototype._updateShouldShow = function () {\r\n var newShouldShow = (this._useShadows && this._scrollTop > 0);\r\n if (this._shouldShow !== newShouldShow) {\r\n this._shouldShow = newShouldShow;\r\n return true;\r\n }\r\n return false;\r\n };\r\n ScrollDecorationViewPart.prototype.getDomNode = function () {\r\n return this._domNode;\r\n };\r\n ScrollDecorationViewPart.prototype._updateWidth = function () {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n if (layoutInfo.renderMinimap === 0 || (layoutInfo.minimapWidth > 0 && layoutInfo.minimapLeft === 0)) {\r\n this._width = layoutInfo.width;\r\n }\r\n else {\r\n this._width = layoutInfo.width - layoutInfo.minimapWidth - layoutInfo.verticalScrollbarWidth;\r\n }\r\n };\r\n // --- begin event handlers\r\n ScrollDecorationViewPart.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var scrollbar = options.get(74 /* scrollbar */);\r\n this._useShadows = scrollbar.useShadows;\r\n this._updateWidth();\r\n this._updateShouldShow();\r\n return true;\r\n };\r\n ScrollDecorationViewPart.prototype.onScrollChanged = function (e) {\r\n this._scrollTop = e.scrollTop;\r\n return this._updateShouldShow();\r\n };\r\n // --- end event handlers\r\n ScrollDecorationViewPart.prototype.prepareRender = function (ctx) {\r\n // Nothing to read\r\n };\r\n ScrollDecorationViewPart.prototype.render = function (ctx) {\r\n this._domNode.setWidth(this._width);\r\n this._domNode.setClassName(this._shouldShow ? 'scroll-decoration' : '');\r\n };\r\n return ScrollDecorationViewPart;\r\n}(ViewPart));\r\nexport { ScrollDecorationViewPart };\r\nregisterThemingParticipant(function (theme, collector) {\r\n var shadow = theme.getColor(scrollbarShadow);\r\n if (shadow) {\r\n collector.addRule(\".monaco-editor .scroll-decoration { box-shadow: \" + shadow + \" 0 6px 6px -6px inset; }\");\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './selections.css';\r\nimport * as browser from '../../../../base/browser/browser.js';\r\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\r\nimport { editorInactiveSelection, editorSelectionBackground, editorSelectionForeground } from '../../../../platform/theme/common/colorRegistry.js';\r\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\r\nvar HorizontalRangeWithStyle = /** @class */ (function () {\r\n function HorizontalRangeWithStyle(other) {\r\n this.left = other.left;\r\n this.width = other.width;\r\n this.startStyle = null;\r\n this.endStyle = null;\r\n }\r\n return HorizontalRangeWithStyle;\r\n}());\r\nvar LineVisibleRangesWithStyle = /** @class */ (function () {\r\n function LineVisibleRangesWithStyle(lineNumber, ranges) {\r\n this.lineNumber = lineNumber;\r\n this.ranges = ranges;\r\n }\r\n return LineVisibleRangesWithStyle;\r\n}());\r\nfunction toStyledRange(item) {\r\n return new HorizontalRangeWithStyle(item);\r\n}\r\nfunction toStyled(item) {\r\n return new LineVisibleRangesWithStyle(item.lineNumber, item.ranges.map(toStyledRange));\r\n}\r\n// TODO@Alex: Remove this once IE11 fixes Bug #524217\r\n// The problem in IE11 is that it does some sort of auto-zooming to accomodate for displays with different pixel density.\r\n// Unfortunately, this auto-zooming is buggy around dealing with rounded borders\r\nvar isIEWithZoomingIssuesNearRoundedBorders = browser.isEdgeOrIE;\r\nvar SelectionsOverlay = /** @class */ (function (_super) {\r\n __extends(SelectionsOverlay, _super);\r\n function SelectionsOverlay(context) {\r\n var _this = _super.call(this) || this;\r\n _this._previousFrameVisibleRangesWithStyle = [];\r\n _this._context = context;\r\n var options = _this._context.configuration.options;\r\n _this._lineHeight = options.get(47 /* lineHeight */);\r\n _this._roundedSelection = options.get(72 /* roundedSelection */);\r\n _this._typicalHalfwidthCharacterWidth = options.get(32 /* fontInfo */).typicalHalfwidthCharacterWidth;\r\n _this._selections = [];\r\n _this._renderResult = null;\r\n _this._context.addEventHandler(_this);\r\n return _this;\r\n }\r\n SelectionsOverlay.prototype.dispose = function () {\r\n this._context.removeEventHandler(this);\r\n this._renderResult = null;\r\n _super.prototype.dispose.call(this);\r\n };\r\n // --- begin event handlers\r\n SelectionsOverlay.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._roundedSelection = options.get(72 /* roundedSelection */);\r\n this._typicalHalfwidthCharacterWidth = options.get(32 /* fontInfo */).typicalHalfwidthCharacterWidth;\r\n return true;\r\n };\r\n SelectionsOverlay.prototype.onCursorStateChanged = function (e) {\r\n this._selections = e.selections.slice(0);\r\n return true;\r\n };\r\n SelectionsOverlay.prototype.onDecorationsChanged = function (e) {\r\n // true for inline decorations that can end up relayouting text\r\n return true; //e.inlineDecorationsChanged;\r\n };\r\n SelectionsOverlay.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n SelectionsOverlay.prototype.onLinesChanged = function (e) {\r\n return true;\r\n };\r\n SelectionsOverlay.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n SelectionsOverlay.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n SelectionsOverlay.prototype.onScrollChanged = function (e) {\r\n return e.scrollTopChanged;\r\n };\r\n SelectionsOverlay.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // --- end event handlers\r\n SelectionsOverlay.prototype._visibleRangesHaveGaps = function (linesVisibleRanges) {\r\n for (var i = 0, len = linesVisibleRanges.length; i < len; i++) {\r\n var lineVisibleRanges = linesVisibleRanges[i];\r\n if (lineVisibleRanges.ranges.length > 1) {\r\n // There are two ranges on the same line\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n SelectionsOverlay.prototype._enrichVisibleRangesWithStyle = function (viewport, linesVisibleRanges, previousFrame) {\r\n var epsilon = this._typicalHalfwidthCharacterWidth / 4;\r\n var previousFrameTop = null;\r\n var previousFrameBottom = null;\r\n if (previousFrame && previousFrame.length > 0 && linesVisibleRanges.length > 0) {\r\n var topLineNumber = linesVisibleRanges[0].lineNumber;\r\n if (topLineNumber === viewport.startLineNumber) {\r\n for (var i = 0; !previousFrameTop && i < previousFrame.length; i++) {\r\n if (previousFrame[i].lineNumber === topLineNumber) {\r\n previousFrameTop = previousFrame[i].ranges[0];\r\n }\r\n }\r\n }\r\n var bottomLineNumber = linesVisibleRanges[linesVisibleRanges.length - 1].lineNumber;\r\n if (bottomLineNumber === viewport.endLineNumber) {\r\n for (var i = previousFrame.length - 1; !previousFrameBottom && i >= 0; i--) {\r\n if (previousFrame[i].lineNumber === bottomLineNumber) {\r\n previousFrameBottom = previousFrame[i].ranges[0];\r\n }\r\n }\r\n }\r\n if (previousFrameTop && !previousFrameTop.startStyle) {\r\n previousFrameTop = null;\r\n }\r\n if (previousFrameBottom && !previousFrameBottom.startStyle) {\r\n previousFrameBottom = null;\r\n }\r\n }\r\n for (var i = 0, len = linesVisibleRanges.length; i < len; i++) {\r\n // We know for a fact that there is precisely one range on each line\r\n var curLineRange = linesVisibleRanges[i].ranges[0];\r\n var curLeft = curLineRange.left;\r\n var curRight = curLineRange.left + curLineRange.width;\r\n var startStyle = {\r\n top: 0 /* EXTERN */,\r\n bottom: 0 /* EXTERN */\r\n };\r\n var endStyle = {\r\n top: 0 /* EXTERN */,\r\n bottom: 0 /* EXTERN */\r\n };\r\n if (i > 0) {\r\n // Look above\r\n var prevLeft = linesVisibleRanges[i - 1].ranges[0].left;\r\n var prevRight = linesVisibleRanges[i - 1].ranges[0].left + linesVisibleRanges[i - 1].ranges[0].width;\r\n if (abs(curLeft - prevLeft) < epsilon) {\r\n startStyle.top = 2 /* FLAT */;\r\n }\r\n else if (curLeft > prevLeft) {\r\n startStyle.top = 1 /* INTERN */;\r\n }\r\n if (abs(curRight - prevRight) < epsilon) {\r\n endStyle.top = 2 /* FLAT */;\r\n }\r\n else if (prevLeft < curRight && curRight < prevRight) {\r\n endStyle.top = 1 /* INTERN */;\r\n }\r\n }\r\n else if (previousFrameTop) {\r\n // Accept some hick-ups near the viewport edges to save on repaints\r\n startStyle.top = previousFrameTop.startStyle.top;\r\n endStyle.top = previousFrameTop.endStyle.top;\r\n }\r\n if (i + 1 < len) {\r\n // Look below\r\n var nextLeft = linesVisibleRanges[i + 1].ranges[0].left;\r\n var nextRight = linesVisibleRanges[i + 1].ranges[0].left + linesVisibleRanges[i + 1].ranges[0].width;\r\n if (abs(curLeft - nextLeft) < epsilon) {\r\n startStyle.bottom = 2 /* FLAT */;\r\n }\r\n else if (nextLeft < curLeft && curLeft < nextRight) {\r\n startStyle.bottom = 1 /* INTERN */;\r\n }\r\n if (abs(curRight - nextRight) < epsilon) {\r\n endStyle.bottom = 2 /* FLAT */;\r\n }\r\n else if (curRight < nextRight) {\r\n endStyle.bottom = 1 /* INTERN */;\r\n }\r\n }\r\n else if (previousFrameBottom) {\r\n // Accept some hick-ups near the viewport edges to save on repaints\r\n startStyle.bottom = previousFrameBottom.startStyle.bottom;\r\n endStyle.bottom = previousFrameBottom.endStyle.bottom;\r\n }\r\n curLineRange.startStyle = startStyle;\r\n curLineRange.endStyle = endStyle;\r\n }\r\n };\r\n SelectionsOverlay.prototype._getVisibleRangesWithStyle = function (selection, ctx, previousFrame) {\r\n var _linesVisibleRanges = ctx.linesVisibleRangesForRange(selection, true) || [];\r\n var linesVisibleRanges = _linesVisibleRanges.map(toStyled);\r\n var visibleRangesHaveGaps = this._visibleRangesHaveGaps(linesVisibleRanges);\r\n if (!isIEWithZoomingIssuesNearRoundedBorders && !visibleRangesHaveGaps && this._roundedSelection) {\r\n this._enrichVisibleRangesWithStyle(ctx.visibleRange, linesVisibleRanges, previousFrame);\r\n }\r\n // The visible ranges are sorted TOP-BOTTOM and LEFT-RIGHT\r\n return linesVisibleRanges;\r\n };\r\n SelectionsOverlay.prototype._createSelectionPiece = function (top, height, className, left, width) {\r\n return ('
');\r\n };\r\n SelectionsOverlay.prototype._actualRenderOneSelection = function (output2, visibleStartLineNumber, hasMultipleSelections, visibleRanges) {\r\n if (visibleRanges.length === 0) {\r\n return;\r\n }\r\n var visibleRangesHaveStyle = !!visibleRanges[0].ranges[0].startStyle;\r\n var fullLineHeight = (this._lineHeight).toString();\r\n var reducedLineHeight = (this._lineHeight - 1).toString();\r\n var firstLineNumber = visibleRanges[0].lineNumber;\r\n var lastLineNumber = visibleRanges[visibleRanges.length - 1].lineNumber;\r\n for (var i = 0, len = visibleRanges.length; i < len; i++) {\r\n var lineVisibleRanges = visibleRanges[i];\r\n var lineNumber = lineVisibleRanges.lineNumber;\r\n var lineIndex = lineNumber - visibleStartLineNumber;\r\n var lineHeight = hasMultipleSelections ? (lineNumber === lastLineNumber || lineNumber === firstLineNumber ? reducedLineHeight : fullLineHeight) : fullLineHeight;\r\n var top_1 = hasMultipleSelections ? (lineNumber === firstLineNumber ? 1 : 0) : 0;\r\n var innerCornerOutput = '';\r\n var restOfSelectionOutput = '';\r\n for (var j = 0, lenJ = lineVisibleRanges.ranges.length; j < lenJ; j++) {\r\n var visibleRange = lineVisibleRanges.ranges[j];\r\n if (visibleRangesHaveStyle) {\r\n var startStyle = visibleRange.startStyle;\r\n var endStyle = visibleRange.endStyle;\r\n if (startStyle.top === 1 /* INTERN */ || startStyle.bottom === 1 /* INTERN */) {\r\n // Reverse rounded corner to the left\r\n // First comes the selection (blue layer)\r\n innerCornerOutput += this._createSelectionPiece(top_1, lineHeight, SelectionsOverlay.SELECTION_CLASS_NAME, visibleRange.left - SelectionsOverlay.ROUNDED_PIECE_WIDTH, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\r\n // Second comes the background (white layer) with inverse border radius\r\n var className_1 = SelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME;\r\n if (startStyle.top === 1 /* INTERN */) {\r\n className_1 += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\r\n }\r\n if (startStyle.bottom === 1 /* INTERN */) {\r\n className_1 += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\r\n }\r\n innerCornerOutput += this._createSelectionPiece(top_1, lineHeight, className_1, visibleRange.left - SelectionsOverlay.ROUNDED_PIECE_WIDTH, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\r\n }\r\n if (endStyle.top === 1 /* INTERN */ || endStyle.bottom === 1 /* INTERN */) {\r\n // Reverse rounded corner to the right\r\n // First comes the selection (blue layer)\r\n innerCornerOutput += this._createSelectionPiece(top_1, lineHeight, SelectionsOverlay.SELECTION_CLASS_NAME, visibleRange.left + visibleRange.width, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\r\n // Second comes the background (white layer) with inverse border radius\r\n var className_2 = SelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME;\r\n if (endStyle.top === 1 /* INTERN */) {\r\n className_2 += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\r\n }\r\n if (endStyle.bottom === 1 /* INTERN */) {\r\n className_2 += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\r\n }\r\n innerCornerOutput += this._createSelectionPiece(top_1, lineHeight, className_2, visibleRange.left + visibleRange.width, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\r\n }\r\n }\r\n var className = SelectionsOverlay.SELECTION_CLASS_NAME;\r\n if (visibleRangesHaveStyle) {\r\n var startStyle = visibleRange.startStyle;\r\n var endStyle = visibleRange.endStyle;\r\n if (startStyle.top === 0 /* EXTERN */) {\r\n className += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\r\n }\r\n if (startStyle.bottom === 0 /* EXTERN */) {\r\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\r\n }\r\n if (endStyle.top === 0 /* EXTERN */) {\r\n className += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\r\n }\r\n if (endStyle.bottom === 0 /* EXTERN */) {\r\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\r\n }\r\n }\r\n restOfSelectionOutput += this._createSelectionPiece(top_1, lineHeight, className, visibleRange.left, visibleRange.width);\r\n }\r\n output2[lineIndex][0] += innerCornerOutput;\r\n output2[lineIndex][1] += restOfSelectionOutput;\r\n }\r\n };\r\n SelectionsOverlay.prototype.prepareRender = function (ctx) {\r\n // Build HTML for inner corners separate from HTML for the rest of selections,\r\n // as the inner corner HTML can interfere with that of other selections.\r\n // In final render, make sure to place the inner corner HTML before the rest of selection HTML. See issue #77777.\r\n var output = [];\r\n var visibleStartLineNumber = ctx.visibleRange.startLineNumber;\r\n var visibleEndLineNumber = ctx.visibleRange.endLineNumber;\r\n for (var lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\r\n var lineIndex = lineNumber - visibleStartLineNumber;\r\n output[lineIndex] = ['', ''];\r\n }\r\n var thisFrameVisibleRangesWithStyle = [];\r\n for (var i = 0, len = this._selections.length; i < len; i++) {\r\n var selection = this._selections[i];\r\n if (selection.isEmpty()) {\r\n thisFrameVisibleRangesWithStyle[i] = null;\r\n continue;\r\n }\r\n var visibleRangesWithStyle = this._getVisibleRangesWithStyle(selection, ctx, this._previousFrameVisibleRangesWithStyle[i]);\r\n thisFrameVisibleRangesWithStyle[i] = visibleRangesWithStyle;\r\n this._actualRenderOneSelection(output, visibleStartLineNumber, this._selections.length > 1, visibleRangesWithStyle);\r\n }\r\n this._previousFrameVisibleRangesWithStyle = thisFrameVisibleRangesWithStyle;\r\n this._renderResult = output.map(function (_a) {\r\n var internalCorners = _a[0], restOfSelection = _a[1];\r\n return internalCorners + restOfSelection;\r\n });\r\n };\r\n SelectionsOverlay.prototype.render = function (startLineNumber, lineNumber) {\r\n if (!this._renderResult) {\r\n return '';\r\n }\r\n var lineIndex = lineNumber - startLineNumber;\r\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\r\n return '';\r\n }\r\n return this._renderResult[lineIndex];\r\n };\r\n SelectionsOverlay.SELECTION_CLASS_NAME = 'selected-text';\r\n SelectionsOverlay.SELECTION_TOP_LEFT = 'top-left-radius';\r\n SelectionsOverlay.SELECTION_BOTTOM_LEFT = 'bottom-left-radius';\r\n SelectionsOverlay.SELECTION_TOP_RIGHT = 'top-right-radius';\r\n SelectionsOverlay.SELECTION_BOTTOM_RIGHT = 'bottom-right-radius';\r\n SelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME = 'monaco-editor-background';\r\n SelectionsOverlay.ROUNDED_PIECE_WIDTH = 10;\r\n return SelectionsOverlay;\r\n}(DynamicViewOverlay));\r\nexport { SelectionsOverlay };\r\nregisterThemingParticipant(function (theme, collector) {\r\n var editorSelectionColor = theme.getColor(editorSelectionBackground);\r\n if (editorSelectionColor) {\r\n collector.addRule(\".monaco-editor .focused .selected-text { background-color: \" + editorSelectionColor + \"; }\");\r\n }\r\n var editorInactiveSelectionColor = theme.getColor(editorInactiveSelection);\r\n if (editorInactiveSelectionColor) {\r\n collector.addRule(\".monaco-editor .selected-text { background-color: \" + editorInactiveSelectionColor + \"; }\");\r\n }\r\n var editorSelectionForegroundColor = theme.getColor(editorSelectionForeground);\r\n if (editorSelectionForegroundColor) {\r\n collector.addRule(\".monaco-editor .view-line span.inline-selected-text { color: \" + editorSelectionForegroundColor + \"; }\");\r\n }\r\n});\r\nfunction abs(n) {\r\n return n < 0 ? -n : n;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as dom from '../../../../base/browser/dom.js';\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport * as strings from '../../../../base/common/strings.js';\r\nimport { Configuration } from '../../config/configuration.js';\r\nimport { TextEditorCursorStyle } from '../../../common/config/editorOptions.js';\r\nimport { Position } from '../../../common/core/position.js';\r\nimport { Range } from '../../../common/core/range.js';\r\nvar ViewCursorRenderData = /** @class */ (function () {\r\n function ViewCursorRenderData(top, left, width, height, textContent, textContentClassName) {\r\n this.top = top;\r\n this.left = left;\r\n this.width = width;\r\n this.height = height;\r\n this.textContent = textContent;\r\n this.textContentClassName = textContentClassName;\r\n }\r\n return ViewCursorRenderData;\r\n}());\r\nvar ViewCursor = /** @class */ (function () {\r\n function ViewCursor(context) {\r\n this._context = context;\r\n var options = this._context.configuration.options;\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n this._cursorStyle = options.get(17 /* cursorStyle */);\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\r\n this._lineCursorWidth = Math.min(options.get(20 /* cursorWidth */), this._typicalHalfwidthCharacterWidth);\r\n this._isVisible = true;\r\n // Create the dom node\r\n this._domNode = createFastDomNode(document.createElement('div'));\r\n this._domNode.setClassName('cursor');\r\n this._domNode.setHeight(this._lineHeight);\r\n this._domNode.setTop(0);\r\n this._domNode.setLeft(0);\r\n Configuration.applyFontInfo(this._domNode, fontInfo);\r\n this._domNode.setDisplay('none');\r\n this._position = new Position(1, 1);\r\n this._lastRenderedContent = '';\r\n this._renderData = null;\r\n }\r\n ViewCursor.prototype.getDomNode = function () {\r\n return this._domNode;\r\n };\r\n ViewCursor.prototype.getPosition = function () {\r\n return this._position;\r\n };\r\n ViewCursor.prototype.show = function () {\r\n if (!this._isVisible) {\r\n this._domNode.setVisibility('inherit');\r\n this._isVisible = true;\r\n }\r\n };\r\n ViewCursor.prototype.hide = function () {\r\n if (this._isVisible) {\r\n this._domNode.setVisibility('hidden');\r\n this._isVisible = false;\r\n }\r\n };\r\n ViewCursor.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n this._cursorStyle = options.get(17 /* cursorStyle */);\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\r\n this._lineCursorWidth = Math.min(options.get(20 /* cursorWidth */), this._typicalHalfwidthCharacterWidth);\r\n Configuration.applyFontInfo(this._domNode, fontInfo);\r\n return true;\r\n };\r\n ViewCursor.prototype.onCursorPositionChanged = function (position) {\r\n this._position = position;\r\n return true;\r\n };\r\n ViewCursor.prototype._prepareRender = function (ctx) {\r\n var textContent = '';\r\n if (this._cursorStyle === TextEditorCursorStyle.Line || this._cursorStyle === TextEditorCursorStyle.LineThin) {\r\n var visibleRange = ctx.visibleRangeForPosition(this._position);\r\n if (!visibleRange || visibleRange.outsideRenderedLine) {\r\n // Outside viewport\r\n return null;\r\n }\r\n var width_1;\r\n if (this._cursorStyle === TextEditorCursorStyle.Line) {\r\n width_1 = dom.computeScreenAwareSize(this._lineCursorWidth > 0 ? this._lineCursorWidth : 2);\r\n if (width_1 > 2) {\r\n var lineContent_1 = this._context.model.getLineContent(this._position.lineNumber);\r\n var nextCharLength_1 = strings.nextCharLength(lineContent_1, this._position.column - 1);\r\n textContent = lineContent_1.substr(this._position.column - 1, nextCharLength_1);\r\n }\r\n }\r\n else {\r\n width_1 = dom.computeScreenAwareSize(1);\r\n }\r\n var left = visibleRange.left;\r\n if (width_1 >= 2 && left >= 1) {\r\n // try to center cursor\r\n left -= 1;\r\n }\r\n var top_1 = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta;\r\n return new ViewCursorRenderData(top_1, left, width_1, this._lineHeight, textContent, '');\r\n }\r\n var lineContent = this._context.model.getLineContent(this._position.lineNumber);\r\n var nextCharLength = strings.nextCharLength(lineContent, this._position.column - 1);\r\n var visibleRangeForCharacter = ctx.linesVisibleRangesForRange(new Range(this._position.lineNumber, this._position.column, this._position.lineNumber, this._position.column + nextCharLength), false);\r\n if (!visibleRangeForCharacter || visibleRangeForCharacter.length === 0) {\r\n // Outside viewport\r\n return null;\r\n }\r\n var firstVisibleRangeForCharacter = visibleRangeForCharacter[0];\r\n if (firstVisibleRangeForCharacter.outsideRenderedLine || firstVisibleRangeForCharacter.ranges.length === 0) {\r\n // Outside viewport\r\n return null;\r\n }\r\n var range = firstVisibleRangeForCharacter.ranges[0];\r\n var width = range.width < 1 ? this._typicalHalfwidthCharacterWidth : range.width;\r\n var textContentClassName = '';\r\n if (this._cursorStyle === TextEditorCursorStyle.Block) {\r\n var lineData = this._context.model.getViewLineData(this._position.lineNumber);\r\n textContent = lineContent.substr(this._position.column - 1, nextCharLength);\r\n var tokenIndex = lineData.tokens.findTokenIndexAtOffset(this._position.column - 1);\r\n textContentClassName = lineData.tokens.getClassName(tokenIndex);\r\n }\r\n var top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta;\r\n var height = this._lineHeight;\r\n // Underline might interfere with clicking\r\n if (this._cursorStyle === TextEditorCursorStyle.Underline || this._cursorStyle === TextEditorCursorStyle.UnderlineThin) {\r\n top += this._lineHeight - 2;\r\n height = 2;\r\n }\r\n return new ViewCursorRenderData(top, range.left, width, height, textContent, textContentClassName);\r\n };\r\n ViewCursor.prototype.prepareRender = function (ctx) {\r\n this._renderData = this._prepareRender(ctx);\r\n };\r\n ViewCursor.prototype.render = function (ctx) {\r\n if (!this._renderData) {\r\n this._domNode.setDisplay('none');\r\n return null;\r\n }\r\n if (this._lastRenderedContent !== this._renderData.textContent) {\r\n this._lastRenderedContent = this._renderData.textContent;\r\n this._domNode.domNode.textContent = this._lastRenderedContent;\r\n }\r\n this._domNode.setClassName('cursor ' + this._renderData.textContentClassName);\r\n this._domNode.setDisplay('block');\r\n this._domNode.setTop(this._renderData.top);\r\n this._domNode.setLeft(this._renderData.left);\r\n this._domNode.setWidth(this._renderData.width);\r\n this._domNode.setLineHeight(this._renderData.height);\r\n this._domNode.setHeight(this._renderData.height);\r\n return {\r\n domNode: this._domNode.domNode,\r\n position: this._position,\r\n contentLeft: this._renderData.left,\r\n height: this._renderData.height,\r\n width: 2\r\n };\r\n };\r\n return ViewCursor;\r\n}());\r\nexport { ViewCursor };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './viewCursors.css';\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { IntervalTimer, TimeoutTimer } from '../../../../base/common/async.js';\r\nimport { ViewPart } from '../../view/viewPart.js';\r\nimport { ViewCursor } from './viewCursor.js';\r\nimport { TextEditorCursorStyle } from '../../../common/config/editorOptions.js';\r\nimport { editorCursorBackground, editorCursorForeground } from '../../../common/view/editorColorRegistry.js';\r\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\r\nvar ViewCursors = /** @class */ (function (_super) {\r\n __extends(ViewCursors, _super);\r\n function ViewCursors(context) {\r\n var _this = _super.call(this, context) || this;\r\n var options = _this._context.configuration.options;\r\n _this._readOnly = options.get(65 /* readOnly */);\r\n _this._cursorBlinking = options.get(15 /* cursorBlinking */);\r\n _this._cursorStyle = options.get(17 /* cursorStyle */);\r\n _this._cursorSmoothCaretAnimation = options.get(16 /* cursorSmoothCaretAnimation */);\r\n _this._selectionIsEmpty = true;\r\n _this._isVisible = false;\r\n _this._primaryCursor = new ViewCursor(_this._context);\r\n _this._secondaryCursors = [];\r\n _this._renderData = [];\r\n _this._domNode = createFastDomNode(document.createElement('div'));\r\n _this._domNode.setAttribute('role', 'presentation');\r\n _this._domNode.setAttribute('aria-hidden', 'true');\r\n _this._updateDomClassName();\r\n _this._domNode.appendChild(_this._primaryCursor.getDomNode());\r\n _this._startCursorBlinkAnimation = new TimeoutTimer();\r\n _this._cursorFlatBlinkInterval = new IntervalTimer();\r\n _this._blinkingEnabled = false;\r\n _this._editorHasFocus = false;\r\n _this._updateBlinking();\r\n return _this;\r\n }\r\n ViewCursors.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this._startCursorBlinkAnimation.dispose();\r\n this._cursorFlatBlinkInterval.dispose();\r\n };\r\n ViewCursors.prototype.getDomNode = function () {\r\n return this._domNode;\r\n };\r\n // --- begin event handlers\r\n ViewCursors.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n this._readOnly = options.get(65 /* readOnly */);\r\n this._cursorBlinking = options.get(15 /* cursorBlinking */);\r\n this._cursorStyle = options.get(17 /* cursorStyle */);\r\n this._cursorSmoothCaretAnimation = options.get(16 /* cursorSmoothCaretAnimation */);\r\n this._updateBlinking();\r\n this._updateDomClassName();\r\n this._primaryCursor.onConfigurationChanged(e);\r\n for (var i = 0, len = this._secondaryCursors.length; i < len; i++) {\r\n this._secondaryCursors[i].onConfigurationChanged(e);\r\n }\r\n return true;\r\n };\r\n ViewCursors.prototype._onCursorPositionChanged = function (position, secondaryPositions) {\r\n this._primaryCursor.onCursorPositionChanged(position);\r\n this._updateBlinking();\r\n if (this._secondaryCursors.length < secondaryPositions.length) {\r\n // Create new cursors\r\n var addCnt = secondaryPositions.length - this._secondaryCursors.length;\r\n for (var i = 0; i < addCnt; i++) {\r\n var newCursor = new ViewCursor(this._context);\r\n this._domNode.domNode.insertBefore(newCursor.getDomNode().domNode, this._primaryCursor.getDomNode().domNode.nextSibling);\r\n this._secondaryCursors.push(newCursor);\r\n }\r\n }\r\n else if (this._secondaryCursors.length > secondaryPositions.length) {\r\n // Remove some cursors\r\n var removeCnt = this._secondaryCursors.length - secondaryPositions.length;\r\n for (var i = 0; i < removeCnt; i++) {\r\n this._domNode.removeChild(this._secondaryCursors[0].getDomNode());\r\n this._secondaryCursors.splice(0, 1);\r\n }\r\n }\r\n for (var i = 0; i < secondaryPositions.length; i++) {\r\n this._secondaryCursors[i].onCursorPositionChanged(secondaryPositions[i]);\r\n }\r\n };\r\n ViewCursors.prototype.onCursorStateChanged = function (e) {\r\n var positions = [];\r\n for (var i = 0, len = e.selections.length; i < len; i++) {\r\n positions[i] = e.selections[i].getPosition();\r\n }\r\n this._onCursorPositionChanged(positions[0], positions.slice(1));\r\n var selectionIsEmpty = e.selections[0].isEmpty();\r\n if (this._selectionIsEmpty !== selectionIsEmpty) {\r\n this._selectionIsEmpty = selectionIsEmpty;\r\n this._updateDomClassName();\r\n }\r\n return true;\r\n };\r\n ViewCursors.prototype.onDecorationsChanged = function (e) {\r\n // true for inline decorations that can end up relayouting text\r\n return true;\r\n };\r\n ViewCursors.prototype.onFlushed = function (e) {\r\n return true;\r\n };\r\n ViewCursors.prototype.onFocusChanged = function (e) {\r\n this._editorHasFocus = e.isFocused;\r\n this._updateBlinking();\r\n return false;\r\n };\r\n ViewCursors.prototype.onLinesChanged = function (e) {\r\n return true;\r\n };\r\n ViewCursors.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n ViewCursors.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n ViewCursors.prototype.onScrollChanged = function (e) {\r\n return true;\r\n };\r\n ViewCursors.prototype.onTokensChanged = function (e) {\r\n var shouldRender = function (position) {\r\n for (var i = 0, len = e.ranges.length; i < len; i++) {\r\n if (e.ranges[i].fromLineNumber <= position.lineNumber && position.lineNumber <= e.ranges[i].toLineNumber) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n if (shouldRender(this._primaryCursor.getPosition())) {\r\n return true;\r\n }\r\n for (var _i = 0, _a = this._secondaryCursors; _i < _a.length; _i++) {\r\n var secondaryCursor = _a[_i];\r\n if (shouldRender(secondaryCursor.getPosition())) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n ViewCursors.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n // --- end event handlers\r\n // ---- blinking logic\r\n ViewCursors.prototype._getCursorBlinking = function () {\r\n if (!this._editorHasFocus) {\r\n return 0 /* Hidden */;\r\n }\r\n if (this._readOnly) {\r\n return 5 /* Solid */;\r\n }\r\n return this._cursorBlinking;\r\n };\r\n ViewCursors.prototype._updateBlinking = function () {\r\n var _this = this;\r\n this._startCursorBlinkAnimation.cancel();\r\n this._cursorFlatBlinkInterval.cancel();\r\n var blinkingStyle = this._getCursorBlinking();\r\n // hidden and solid are special as they involve no animations\r\n var isHidden = (blinkingStyle === 0 /* Hidden */);\r\n var isSolid = (blinkingStyle === 5 /* Solid */);\r\n if (isHidden) {\r\n this._hide();\r\n }\r\n else {\r\n this._show();\r\n }\r\n this._blinkingEnabled = false;\r\n this._updateDomClassName();\r\n if (!isHidden && !isSolid) {\r\n if (blinkingStyle === 1 /* Blink */) {\r\n // flat blinking is handled by JavaScript to save battery life due to Chromium step timing issue https://bugs.chromium.org/p/chromium/issues/detail?id=361587\r\n this._cursorFlatBlinkInterval.cancelAndSet(function () {\r\n if (_this._isVisible) {\r\n _this._hide();\r\n }\r\n else {\r\n _this._show();\r\n }\r\n }, ViewCursors.BLINK_INTERVAL);\r\n }\r\n else {\r\n this._startCursorBlinkAnimation.setIfNotSet(function () {\r\n _this._blinkingEnabled = true;\r\n _this._updateDomClassName();\r\n }, ViewCursors.BLINK_INTERVAL);\r\n }\r\n }\r\n };\r\n // --- end blinking logic\r\n ViewCursors.prototype._updateDomClassName = function () {\r\n this._domNode.setClassName(this._getClassName());\r\n };\r\n ViewCursors.prototype._getClassName = function () {\r\n var result = 'cursors-layer';\r\n if (!this._selectionIsEmpty) {\r\n result += ' has-selection';\r\n }\r\n switch (this._cursorStyle) {\r\n case TextEditorCursorStyle.Line:\r\n result += ' cursor-line-style';\r\n break;\r\n case TextEditorCursorStyle.Block:\r\n result += ' cursor-block-style';\r\n break;\r\n case TextEditorCursorStyle.Underline:\r\n result += ' cursor-underline-style';\r\n break;\r\n case TextEditorCursorStyle.LineThin:\r\n result += ' cursor-line-thin-style';\r\n break;\r\n case TextEditorCursorStyle.BlockOutline:\r\n result += ' cursor-block-outline-style';\r\n break;\r\n case TextEditorCursorStyle.UnderlineThin:\r\n result += ' cursor-underline-thin-style';\r\n break;\r\n default:\r\n result += ' cursor-line-style';\r\n }\r\n if (this._blinkingEnabled) {\r\n switch (this._getCursorBlinking()) {\r\n case 1 /* Blink */:\r\n result += ' cursor-blink';\r\n break;\r\n case 2 /* Smooth */:\r\n result += ' cursor-smooth';\r\n break;\r\n case 3 /* Phase */:\r\n result += ' cursor-phase';\r\n break;\r\n case 4 /* Expand */:\r\n result += ' cursor-expand';\r\n break;\r\n case 5 /* Solid */:\r\n result += ' cursor-solid';\r\n break;\r\n default:\r\n result += ' cursor-solid';\r\n }\r\n }\r\n else {\r\n result += ' cursor-solid';\r\n }\r\n if (this._cursorSmoothCaretAnimation) {\r\n result += ' cursor-smooth-caret-animation';\r\n }\r\n return result;\r\n };\r\n ViewCursors.prototype._show = function () {\r\n this._primaryCursor.show();\r\n for (var i = 0, len = this._secondaryCursors.length; i < len; i++) {\r\n this._secondaryCursors[i].show();\r\n }\r\n this._isVisible = true;\r\n };\r\n ViewCursors.prototype._hide = function () {\r\n this._primaryCursor.hide();\r\n for (var i = 0, len = this._secondaryCursors.length; i < len; i++) {\r\n this._secondaryCursors[i].hide();\r\n }\r\n this._isVisible = false;\r\n };\r\n // ---- IViewPart implementation\r\n ViewCursors.prototype.prepareRender = function (ctx) {\r\n this._primaryCursor.prepareRender(ctx);\r\n for (var i = 0, len = this._secondaryCursors.length; i < len; i++) {\r\n this._secondaryCursors[i].prepareRender(ctx);\r\n }\r\n };\r\n ViewCursors.prototype.render = function (ctx) {\r\n var renderData = [], renderDataLen = 0;\r\n var primaryRenderData = this._primaryCursor.render(ctx);\r\n if (primaryRenderData) {\r\n renderData[renderDataLen++] = primaryRenderData;\r\n }\r\n for (var i = 0, len = this._secondaryCursors.length; i < len; i++) {\r\n var secondaryRenderData = this._secondaryCursors[i].render(ctx);\r\n if (secondaryRenderData) {\r\n renderData[renderDataLen++] = secondaryRenderData;\r\n }\r\n }\r\n this._renderData = renderData;\r\n };\r\n ViewCursors.prototype.getLastRenderData = function () {\r\n return this._renderData;\r\n };\r\n ViewCursors.BLINK_INTERVAL = 500;\r\n return ViewCursors;\r\n}(ViewPart));\r\nexport { ViewCursors };\r\nregisterThemingParticipant(function (theme, collector) {\r\n var caret = theme.getColor(editorCursorForeground);\r\n if (caret) {\r\n var caretBackground = theme.getColor(editorCursorBackground);\r\n if (!caretBackground) {\r\n caretBackground = caret.opposite();\r\n }\r\n collector.addRule(\".monaco-editor .cursor { background-color: \" + caret + \"; border-color: \" + caret + \"; color: \" + caretBackground + \"; }\");\r\n if (theme.type === 'hc') {\r\n collector.addRule(\".monaco-editor .cursors-layer.has-selection .cursor { border-left: 1px solid \" + caretBackground + \"; border-right: 1px solid \" + caretBackground + \"; }\");\r\n }\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\r\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\r\nimport { ViewPart } from '../../view/viewPart.js';\r\nimport { Position } from '../../../common/core/position.js';\r\nvar invalidFunc = function () { throw new Error(\"Invalid change accessor\"); };\r\nvar ViewZones = /** @class */ (function (_super) {\r\n __extends(ViewZones, _super);\r\n function ViewZones(context) {\r\n var _this = _super.call(this, context) || this;\r\n var options = _this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._lineHeight = options.get(47 /* lineHeight */);\r\n _this._contentWidth = layoutInfo.contentWidth;\r\n _this._contentLeft = layoutInfo.contentLeft;\r\n _this.domNode = createFastDomNode(document.createElement('div'));\r\n _this.domNode.setClassName('view-zones');\r\n _this.domNode.setPosition('absolute');\r\n _this.domNode.setAttribute('role', 'presentation');\r\n _this.domNode.setAttribute('aria-hidden', 'true');\r\n _this.marginDomNode = createFastDomNode(document.createElement('div'));\r\n _this.marginDomNode.setClassName('margin-view-zones');\r\n _this.marginDomNode.setPosition('absolute');\r\n _this.marginDomNode.setAttribute('role', 'presentation');\r\n _this.marginDomNode.setAttribute('aria-hidden', 'true');\r\n _this._zones = {};\r\n return _this;\r\n }\r\n ViewZones.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this._zones = {};\r\n };\r\n // ---- begin view event handlers\r\n ViewZones.prototype._recomputeWhitespacesProps = function () {\r\n var _this = this;\r\n var whitespaces = this._context.viewLayout.getWhitespaces();\r\n var oldWhitespaces = new Map();\r\n for (var _i = 0, whitespaces_1 = whitespaces; _i < whitespaces_1.length; _i++) {\r\n var whitespace = whitespaces_1[_i];\r\n oldWhitespaces.set(whitespace.id, whitespace);\r\n }\r\n return this._context.viewLayout.changeWhitespace(function (whitespaceAccessor) {\r\n var hadAChange = false;\r\n var keys = Object.keys(_this._zones);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var id = keys[i];\r\n var zone = _this._zones[id];\r\n var props = _this._computeWhitespaceProps(zone.delegate);\r\n var oldWhitespace = oldWhitespaces.get(id);\r\n if (oldWhitespace && (oldWhitespace.afterLineNumber !== props.afterViewLineNumber || oldWhitespace.height !== props.heightInPx)) {\r\n whitespaceAccessor.changeOneWhitespace(id, props.afterViewLineNumber, props.heightInPx);\r\n _this._safeCallOnComputedHeight(zone.delegate, props.heightInPx);\r\n hadAChange = true;\r\n }\r\n }\r\n return hadAChange;\r\n });\r\n };\r\n ViewZones.prototype.onConfigurationChanged = function (e) {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this._lineHeight = options.get(47 /* lineHeight */);\r\n this._contentWidth = layoutInfo.contentWidth;\r\n this._contentLeft = layoutInfo.contentLeft;\r\n if (e.hasChanged(47 /* lineHeight */)) {\r\n this._recomputeWhitespacesProps();\r\n }\r\n return true;\r\n };\r\n ViewZones.prototype.onLineMappingChanged = function (e) {\r\n var hadAChange = this._recomputeWhitespacesProps();\r\n if (hadAChange) {\r\n this._context.viewLayout.onHeightMaybeChanged();\r\n }\r\n return hadAChange;\r\n };\r\n ViewZones.prototype.onLinesDeleted = function (e) {\r\n return true;\r\n };\r\n ViewZones.prototype.onScrollChanged = function (e) {\r\n return e.scrollTopChanged || e.scrollWidthChanged;\r\n };\r\n ViewZones.prototype.onZonesChanged = function (e) {\r\n return true;\r\n };\r\n ViewZones.prototype.onLinesInserted = function (e) {\r\n return true;\r\n };\r\n // ---- end view event handlers\r\n ViewZones.prototype._getZoneOrdinal = function (zone) {\r\n if (typeof zone.afterColumn !== 'undefined') {\r\n return zone.afterColumn;\r\n }\r\n return 10000;\r\n };\r\n ViewZones.prototype._computeWhitespaceProps = function (zone) {\r\n if (zone.afterLineNumber === 0) {\r\n return {\r\n afterViewLineNumber: 0,\r\n heightInPx: this._heightInPixels(zone),\r\n minWidthInPx: this._minWidthInPixels(zone)\r\n };\r\n }\r\n var zoneAfterModelPosition;\r\n if (typeof zone.afterColumn !== 'undefined') {\r\n zoneAfterModelPosition = this._context.model.validateModelPosition({\r\n lineNumber: zone.afterLineNumber,\r\n column: zone.afterColumn\r\n });\r\n }\r\n else {\r\n var validAfterLineNumber = this._context.model.validateModelPosition({\r\n lineNumber: zone.afterLineNumber,\r\n column: 1\r\n }).lineNumber;\r\n zoneAfterModelPosition = new Position(validAfterLineNumber, this._context.model.getModelLineMaxColumn(validAfterLineNumber));\r\n }\r\n var zoneBeforeModelPosition;\r\n if (zoneAfterModelPosition.column === this._context.model.getModelLineMaxColumn(zoneAfterModelPosition.lineNumber)) {\r\n zoneBeforeModelPosition = this._context.model.validateModelPosition({\r\n lineNumber: zoneAfterModelPosition.lineNumber + 1,\r\n column: 1\r\n });\r\n }\r\n else {\r\n zoneBeforeModelPosition = this._context.model.validateModelPosition({\r\n lineNumber: zoneAfterModelPosition.lineNumber,\r\n column: zoneAfterModelPosition.column + 1\r\n });\r\n }\r\n var viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(zoneAfterModelPosition);\r\n var isVisible = this._context.model.coordinatesConverter.modelPositionIsVisible(zoneBeforeModelPosition);\r\n return {\r\n afterViewLineNumber: viewPosition.lineNumber,\r\n heightInPx: (isVisible ? this._heightInPixels(zone) : 0),\r\n minWidthInPx: this._minWidthInPixels(zone)\r\n };\r\n };\r\n ViewZones.prototype.changeViewZones = function (callback) {\r\n var _this = this;\r\n return this._context.viewLayout.changeWhitespace(function (whitespaceAccessor) {\r\n var zonesHaveChanged = false;\r\n var changeAccessor = {\r\n addZone: function (zone) {\r\n zonesHaveChanged = true;\r\n return _this._addZone(whitespaceAccessor, zone);\r\n },\r\n removeZone: function (id) {\r\n if (!id) {\r\n return;\r\n }\r\n zonesHaveChanged = _this._removeZone(whitespaceAccessor, id) || zonesHaveChanged;\r\n },\r\n layoutZone: function (id) {\r\n if (!id) {\r\n return;\r\n }\r\n zonesHaveChanged = _this._layoutZone(whitespaceAccessor, id) || zonesHaveChanged;\r\n }\r\n };\r\n safeInvoke1Arg(callback, changeAccessor);\r\n // Invalidate changeAccessor\r\n changeAccessor.addZone = invalidFunc;\r\n changeAccessor.removeZone = invalidFunc;\r\n changeAccessor.layoutZone = invalidFunc;\r\n return zonesHaveChanged;\r\n });\r\n };\r\n ViewZones.prototype._addZone = function (whitespaceAccessor, zone) {\r\n var props = this._computeWhitespaceProps(zone);\r\n var whitespaceId = whitespaceAccessor.insertWhitespace(props.afterViewLineNumber, this._getZoneOrdinal(zone), props.heightInPx, props.minWidthInPx);\r\n var myZone = {\r\n whitespaceId: whitespaceId,\r\n delegate: zone,\r\n isVisible: false,\r\n domNode: createFastDomNode(zone.domNode),\r\n marginDomNode: zone.marginDomNode ? createFastDomNode(zone.marginDomNode) : null\r\n };\r\n this._safeCallOnComputedHeight(myZone.delegate, props.heightInPx);\r\n myZone.domNode.setPosition('absolute');\r\n myZone.domNode.domNode.style.width = '100%';\r\n myZone.domNode.setDisplay('none');\r\n myZone.domNode.setAttribute('monaco-view-zone', myZone.whitespaceId);\r\n this.domNode.appendChild(myZone.domNode);\r\n if (myZone.marginDomNode) {\r\n myZone.marginDomNode.setPosition('absolute');\r\n myZone.marginDomNode.domNode.style.width = '100%';\r\n myZone.marginDomNode.setDisplay('none');\r\n myZone.marginDomNode.setAttribute('monaco-view-zone', myZone.whitespaceId);\r\n this.marginDomNode.appendChild(myZone.marginDomNode);\r\n }\r\n this._zones[myZone.whitespaceId] = myZone;\r\n this.setShouldRender();\r\n return myZone.whitespaceId;\r\n };\r\n ViewZones.prototype._removeZone = function (whitespaceAccessor, id) {\r\n if (this._zones.hasOwnProperty(id)) {\r\n var zone = this._zones[id];\r\n delete this._zones[id];\r\n whitespaceAccessor.removeWhitespace(zone.whitespaceId);\r\n zone.domNode.removeAttribute('monaco-visible-view-zone');\r\n zone.domNode.removeAttribute('monaco-view-zone');\r\n zone.domNode.domNode.parentNode.removeChild(zone.domNode.domNode);\r\n if (zone.marginDomNode) {\r\n zone.marginDomNode.removeAttribute('monaco-visible-view-zone');\r\n zone.marginDomNode.removeAttribute('monaco-view-zone');\r\n zone.marginDomNode.domNode.parentNode.removeChild(zone.marginDomNode.domNode);\r\n }\r\n this.setShouldRender();\r\n return true;\r\n }\r\n return false;\r\n };\r\n ViewZones.prototype._layoutZone = function (whitespaceAccessor, id) {\r\n if (this._zones.hasOwnProperty(id)) {\r\n var zone = this._zones[id];\r\n var props = this._computeWhitespaceProps(zone.delegate);\r\n // const newOrdinal = this._getZoneOrdinal(zone.delegate);\r\n whitespaceAccessor.changeOneWhitespace(zone.whitespaceId, props.afterViewLineNumber, props.heightInPx);\r\n // TODO@Alex: change `newOrdinal` too\r\n this._safeCallOnComputedHeight(zone.delegate, props.heightInPx);\r\n this.setShouldRender();\r\n return true;\r\n }\r\n return false;\r\n };\r\n ViewZones.prototype.shouldSuppressMouseDownOnViewZone = function (id) {\r\n if (this._zones.hasOwnProperty(id)) {\r\n var zone = this._zones[id];\r\n return Boolean(zone.delegate.suppressMouseDown);\r\n }\r\n return false;\r\n };\r\n ViewZones.prototype._heightInPixels = function (zone) {\r\n if (typeof zone.heightInPx === 'number') {\r\n return zone.heightInPx;\r\n }\r\n if (typeof zone.heightInLines === 'number') {\r\n return this._lineHeight * zone.heightInLines;\r\n }\r\n return this._lineHeight;\r\n };\r\n ViewZones.prototype._minWidthInPixels = function (zone) {\r\n if (typeof zone.minWidthInPx === 'number') {\r\n return zone.minWidthInPx;\r\n }\r\n return 0;\r\n };\r\n ViewZones.prototype._safeCallOnComputedHeight = function (zone, height) {\r\n if (typeof zone.onComputedHeight === 'function') {\r\n try {\r\n zone.onComputedHeight(height);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n }\r\n }\r\n };\r\n ViewZones.prototype._safeCallOnDomNodeTop = function (zone, top) {\r\n if (typeof zone.onDomNodeTop === 'function') {\r\n try {\r\n zone.onDomNodeTop(top);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n }\r\n }\r\n };\r\n ViewZones.prototype.prepareRender = function (ctx) {\r\n // Nothing to read\r\n };\r\n ViewZones.prototype.render = function (ctx) {\r\n var visibleWhitespaces = ctx.viewportData.whitespaceViewportData;\r\n var visibleZones = {};\r\n var hasVisibleZone = false;\r\n for (var i = 0, len = visibleWhitespaces.length; i < len; i++) {\r\n visibleZones[visibleWhitespaces[i].id] = visibleWhitespaces[i];\r\n hasVisibleZone = true;\r\n }\r\n var keys = Object.keys(this._zones);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var id = keys[i];\r\n var zone = this._zones[id];\r\n var newTop = 0;\r\n var newHeight = 0;\r\n var newDisplay = 'none';\r\n if (visibleZones.hasOwnProperty(id)) {\r\n newTop = visibleZones[id].verticalOffset - ctx.bigNumbersDelta;\r\n newHeight = visibleZones[id].height;\r\n newDisplay = 'block';\r\n // zone is visible\r\n if (!zone.isVisible) {\r\n zone.domNode.setAttribute('monaco-visible-view-zone', 'true');\r\n zone.isVisible = true;\r\n }\r\n this._safeCallOnDomNodeTop(zone.delegate, ctx.getScrolledTopFromAbsoluteTop(visibleZones[id].verticalOffset));\r\n }\r\n else {\r\n if (zone.isVisible) {\r\n zone.domNode.removeAttribute('monaco-visible-view-zone');\r\n zone.isVisible = false;\r\n }\r\n this._safeCallOnDomNodeTop(zone.delegate, ctx.getScrolledTopFromAbsoluteTop(-1000000));\r\n }\r\n zone.domNode.setTop(newTop);\r\n zone.domNode.setHeight(newHeight);\r\n zone.domNode.setDisplay(newDisplay);\r\n if (zone.marginDomNode) {\r\n zone.marginDomNode.setTop(newTop);\r\n zone.marginDomNode.setHeight(newHeight);\r\n zone.marginDomNode.setDisplay(newDisplay);\r\n }\r\n }\r\n if (hasVisibleZone) {\r\n this.domNode.setWidth(Math.max(ctx.scrollWidth, this._contentWidth));\r\n this.marginDomNode.setWidth(this._contentLeft);\r\n }\r\n };\r\n return ViewZones;\r\n}(ViewPart));\r\nexport { ViewZones };\r\nfunction safeInvoke1Arg(func, arg1) {\r\n try {\r\n return func(arg1);\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar ViewContext = /** @class */ (function () {\r\n function ViewContext(configuration, theme, model, privateViewEventBus) {\r\n this.configuration = configuration;\r\n this.theme = theme;\r\n this.model = model;\r\n this.viewLayout = model.viewLayout;\r\n this.privateViewEventBus = privateViewEventBus;\r\n }\r\n ViewContext.prototype.addEventHandler = function (eventHandler) {\r\n this.privateViewEventBus.addEventHandler(eventHandler);\r\n };\r\n ViewContext.prototype.removeEventHandler = function (eventHandler) {\r\n this.privateViewEventBus.removeEventHandler(eventHandler);\r\n };\r\n return ViewContext;\r\n}());\r\nexport { ViewContext };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar ViewEventDispatcher = /** @class */ (function () {\r\n function ViewEventDispatcher(eventHandlerGateKeeper) {\r\n this._eventHandlerGateKeeper = eventHandlerGateKeeper;\r\n this._eventHandlers = [];\r\n this._eventQueue = null;\r\n this._isConsumingQueue = false;\r\n }\r\n ViewEventDispatcher.prototype.addEventHandler = function (eventHandler) {\r\n for (var i = 0, len = this._eventHandlers.length; i < len; i++) {\r\n if (this._eventHandlers[i] === eventHandler) {\r\n console.warn('Detected duplicate listener in ViewEventDispatcher', eventHandler);\r\n }\r\n }\r\n this._eventHandlers.push(eventHandler);\r\n };\r\n ViewEventDispatcher.prototype.removeEventHandler = function (eventHandler) {\r\n for (var i = 0; i < this._eventHandlers.length; i++) {\r\n if (this._eventHandlers[i] === eventHandler) {\r\n this._eventHandlers.splice(i, 1);\r\n break;\r\n }\r\n }\r\n };\r\n ViewEventDispatcher.prototype.emit = function (event) {\r\n if (this._eventQueue) {\r\n this._eventQueue.push(event);\r\n }\r\n else {\r\n this._eventQueue = [event];\r\n }\r\n if (!this._isConsumingQueue) {\r\n this.consumeQueue();\r\n }\r\n };\r\n ViewEventDispatcher.prototype.emitMany = function (events) {\r\n if (this._eventQueue) {\r\n this._eventQueue = this._eventQueue.concat(events);\r\n }\r\n else {\r\n this._eventQueue = events;\r\n }\r\n if (!this._isConsumingQueue) {\r\n this.consumeQueue();\r\n }\r\n };\r\n ViewEventDispatcher.prototype.consumeQueue = function () {\r\n var _this = this;\r\n this._eventHandlerGateKeeper(function () {\r\n try {\r\n _this._isConsumingQueue = true;\r\n _this._doConsumeQueue();\r\n }\r\n finally {\r\n _this._isConsumingQueue = false;\r\n }\r\n });\r\n };\r\n ViewEventDispatcher.prototype._doConsumeQueue = function () {\r\n while (this._eventQueue) {\r\n // Empty event queue, as events might come in while sending these off\r\n var events = this._eventQueue;\r\n this._eventQueue = null;\r\n // Use a clone of the event handlers list, as they might remove themselves\r\n var eventHandlers = this._eventHandlers.slice(0);\r\n for (var i = 0, len = eventHandlers.length; i < len; i++) {\r\n eventHandlers[i].handleEvents(events);\r\n }\r\n }\r\n };\r\n return ViewEventDispatcher;\r\n}());\r\nexport { ViewEventDispatcher };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Range } from '../core/range.js';\r\n/**\r\n * Contains all data needed to render at a specific viewport.\r\n */\r\nvar ViewportData = /** @class */ (function () {\r\n function ViewportData(selections, partialData, whitespaceViewportData, model) {\r\n this.selections = selections;\r\n this.startLineNumber = partialData.startLineNumber | 0;\r\n this.endLineNumber = partialData.endLineNumber | 0;\r\n this.relativeVerticalOffset = partialData.relativeVerticalOffset;\r\n this.bigNumbersDelta = partialData.bigNumbersDelta | 0;\r\n this.whitespaceViewportData = whitespaceViewportData;\r\n this._model = model;\r\n this.visibleRange = new Range(partialData.startLineNumber, this._model.getLineMinColumn(partialData.startLineNumber), partialData.endLineNumber, this._model.getLineMaxColumn(partialData.endLineNumber));\r\n }\r\n ViewportData.prototype.getViewLineRenderingData = function (lineNumber) {\r\n return this._model.getViewLineRenderingData(this.visibleRange, lineNumber);\r\n };\r\n ViewportData.prototype.getDecorationsInViewport = function () {\r\n return this._model.getDecorationsInViewport(this.visibleRange);\r\n };\r\n return ViewportData;\r\n}());\r\nexport { ViewportData };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nimport { PointerHandler } from '../controller/pointerHandler.js';\r\nimport { TextAreaHandler } from '../controller/textAreaHandler.js';\r\nimport { ViewController } from './viewController.js';\r\nimport { ViewOutgoingEvents } from './viewOutgoingEvents.js';\r\nimport { ContentViewOverlays, MarginViewOverlays } from './viewOverlays.js';\r\nimport { PartFingerprints } from './viewPart.js';\r\nimport { ViewContentWidgets } from '../viewParts/contentWidgets/contentWidgets.js';\r\nimport { CurrentLineHighlightOverlay, CurrentLineMarginHighlightOverlay } from '../viewParts/currentLineHighlight/currentLineHighlight.js';\r\nimport { DecorationsOverlay } from '../viewParts/decorations/decorations.js';\r\nimport { EditorScrollbar } from '../viewParts/editorScrollbar/editorScrollbar.js';\r\nimport { GlyphMarginOverlay } from '../viewParts/glyphMargin/glyphMargin.js';\r\nimport { IndentGuidesOverlay } from '../viewParts/indentGuides/indentGuides.js';\r\nimport { LineNumbersOverlay } from '../viewParts/lineNumbers/lineNumbers.js';\r\nimport { ViewLines } from '../viewParts/lines/viewLines.js';\r\nimport { LinesDecorationsOverlay } from '../viewParts/linesDecorations/linesDecorations.js';\r\nimport { Margin } from '../viewParts/margin/margin.js';\r\nimport { MarginViewLineDecorationsOverlay } from '../viewParts/marginDecorations/marginDecorations.js';\r\nimport { Minimap } from '../viewParts/minimap/minimap.js';\r\nimport { ViewOverlayWidgets } from '../viewParts/overlayWidgets/overlayWidgets.js';\r\nimport { DecorationsOverviewRuler } from '../viewParts/overviewRuler/decorationsOverviewRuler.js';\r\nimport { OverviewRuler } from '../viewParts/overviewRuler/overviewRuler.js';\r\nimport { Rulers } from '../viewParts/rulers/rulers.js';\r\nimport { ScrollDecorationViewPart } from '../viewParts/scrollDecoration/scrollDecoration.js';\r\nimport { SelectionsOverlay } from '../viewParts/selections/selections.js';\r\nimport { ViewCursors } from '../viewParts/viewCursors/viewCursors.js';\r\nimport { ViewZones } from '../viewParts/viewZones/viewZones.js';\r\nimport { Position } from '../../common/core/position.js';\r\nimport { RenderingContext } from '../../common/view/renderingContext.js';\r\nimport { ViewContext } from '../../common/view/viewContext.js';\r\nimport { ViewEventDispatcher } from '../../common/view/viewEventDispatcher.js';\r\nimport * as viewEvents from '../../common/view/viewEvents.js';\r\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\r\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\r\nimport { getThemeTypeSelector } from '../../../platform/theme/common/themeService.js';\r\nimport { PointerHandlerLastRenderData } from '../controller/mouseTarget.js';\r\nvar View = /** @class */ (function (_super) {\r\n __extends(View, _super);\r\n function View(commandDelegate, configuration, themeService, model, cursor, outgoingEvents) {\r\n var _this = _super.call(this) || this;\r\n _this._cursor = cursor;\r\n _this._renderAnimationFrame = null;\r\n _this.outgoingEvents = outgoingEvents;\r\n var viewController = new ViewController(configuration, model, _this.outgoingEvents, commandDelegate);\r\n // The event dispatcher will always go through _renderOnce before dispatching any events\r\n _this.eventDispatcher = new ViewEventDispatcher(function (callback) { return _this._renderOnce(callback); });\r\n // Ensure the view is the first event handler in order to update the layout\r\n _this.eventDispatcher.addEventHandler(_this);\r\n // The view context is passed on to most classes (basically to reduce param. counts in ctors)\r\n _this._context = new ViewContext(configuration, themeService.getTheme(), model, _this.eventDispatcher);\r\n _this._register(themeService.onThemeChange(function (theme) {\r\n _this._context.theme = theme;\r\n _this.eventDispatcher.emit(new viewEvents.ViewThemeChangedEvent());\r\n _this.render(true, false);\r\n }));\r\n _this.viewParts = [];\r\n // Keyboard handler\r\n _this._textAreaHandler = new TextAreaHandler(_this._context, viewController, _this.createTextAreaHandlerHelper());\r\n _this.viewParts.push(_this._textAreaHandler);\r\n // These two dom nodes must be constructed up front, since references are needed in the layout provider (scrolling & co.)\r\n _this.linesContent = createFastDomNode(document.createElement('div'));\r\n _this.linesContent.setClassName('lines-content' + ' monaco-editor-background');\r\n _this.linesContent.setPosition('absolute');\r\n _this.domNode = createFastDomNode(document.createElement('div'));\r\n _this.domNode.setClassName(_this.getEditorClassName());\r\n _this.overflowGuardContainer = createFastDomNode(document.createElement('div'));\r\n PartFingerprints.write(_this.overflowGuardContainer, 3 /* OverflowGuard */);\r\n _this.overflowGuardContainer.setClassName('overflow-guard');\r\n _this._scrollbar = new EditorScrollbar(_this._context, _this.linesContent, _this.domNode, _this.overflowGuardContainer);\r\n _this.viewParts.push(_this._scrollbar);\r\n // View Lines\r\n _this.viewLines = new ViewLines(_this._context, _this.linesContent);\r\n // View Zones\r\n _this.viewZones = new ViewZones(_this._context);\r\n _this.viewParts.push(_this.viewZones);\r\n // Decorations overview ruler\r\n var decorationsOverviewRuler = new DecorationsOverviewRuler(_this._context);\r\n _this.viewParts.push(decorationsOverviewRuler);\r\n var scrollDecoration = new ScrollDecorationViewPart(_this._context);\r\n _this.viewParts.push(scrollDecoration);\r\n var contentViewOverlays = new ContentViewOverlays(_this._context);\r\n _this.viewParts.push(contentViewOverlays);\r\n contentViewOverlays.addDynamicOverlay(new CurrentLineHighlightOverlay(_this._context));\r\n contentViewOverlays.addDynamicOverlay(new SelectionsOverlay(_this._context));\r\n contentViewOverlays.addDynamicOverlay(new IndentGuidesOverlay(_this._context));\r\n contentViewOverlays.addDynamicOverlay(new DecorationsOverlay(_this._context));\r\n var marginViewOverlays = new MarginViewOverlays(_this._context);\r\n _this.viewParts.push(marginViewOverlays);\r\n marginViewOverlays.addDynamicOverlay(new CurrentLineMarginHighlightOverlay(_this._context));\r\n marginViewOverlays.addDynamicOverlay(new GlyphMarginOverlay(_this._context));\r\n marginViewOverlays.addDynamicOverlay(new MarginViewLineDecorationsOverlay(_this._context));\r\n marginViewOverlays.addDynamicOverlay(new LinesDecorationsOverlay(_this._context));\r\n marginViewOverlays.addDynamicOverlay(new LineNumbersOverlay(_this._context));\r\n var margin = new Margin(_this._context);\r\n margin.getDomNode().appendChild(_this.viewZones.marginDomNode);\r\n margin.getDomNode().appendChild(marginViewOverlays.getDomNode());\r\n _this.viewParts.push(margin);\r\n // Content widgets\r\n _this.contentWidgets = new ViewContentWidgets(_this._context, _this.domNode);\r\n _this.viewParts.push(_this.contentWidgets);\r\n _this.viewCursors = new ViewCursors(_this._context);\r\n _this.viewParts.push(_this.viewCursors);\r\n // Overlay widgets\r\n _this.overlayWidgets = new ViewOverlayWidgets(_this._context);\r\n _this.viewParts.push(_this.overlayWidgets);\r\n var rulers = new Rulers(_this._context);\r\n _this.viewParts.push(rulers);\r\n var minimap = new Minimap(_this._context);\r\n _this.viewParts.push(minimap);\r\n // -------------- Wire dom nodes up\r\n if (decorationsOverviewRuler) {\r\n var overviewRulerData = _this._scrollbar.getOverviewRulerLayoutInfo();\r\n overviewRulerData.parent.insertBefore(decorationsOverviewRuler.getDomNode(), overviewRulerData.insertBefore);\r\n }\r\n _this.linesContent.appendChild(contentViewOverlays.getDomNode());\r\n _this.linesContent.appendChild(rulers.domNode);\r\n _this.linesContent.appendChild(_this.viewZones.domNode);\r\n _this.linesContent.appendChild(_this.viewLines.getDomNode());\r\n _this.linesContent.appendChild(_this.contentWidgets.domNode);\r\n _this.linesContent.appendChild(_this.viewCursors.getDomNode());\r\n _this.overflowGuardContainer.appendChild(margin.getDomNode());\r\n _this.overflowGuardContainer.appendChild(_this._scrollbar.getDomNode());\r\n _this.overflowGuardContainer.appendChild(scrollDecoration.getDomNode());\r\n _this.overflowGuardContainer.appendChild(_this._textAreaHandler.textArea);\r\n _this.overflowGuardContainer.appendChild(_this._textAreaHandler.textAreaCover);\r\n _this.overflowGuardContainer.appendChild(_this.overlayWidgets.getDomNode());\r\n _this.overflowGuardContainer.appendChild(minimap.getDomNode());\r\n _this.domNode.appendChild(_this.overflowGuardContainer);\r\n _this.domNode.appendChild(_this.contentWidgets.overflowingContentWidgetsDomNode);\r\n _this._applyLayout();\r\n // Pointer handler\r\n _this.pointerHandler = _this._register(new PointerHandler(_this._context, viewController, _this.createPointerHandlerHelper()));\r\n _this._register(model.addEventListener(function (events) {\r\n _this.eventDispatcher.emitMany(events);\r\n }));\r\n _this._register(_this._cursor.addEventListener(function (events) {\r\n _this.eventDispatcher.emitMany(events);\r\n }));\r\n return _this;\r\n }\r\n View.prototype._flushAccumulatedAndRenderNow = function () {\r\n this._renderNow();\r\n };\r\n View.prototype.createPointerHandlerHelper = function () {\r\n var _this = this;\r\n return {\r\n viewDomNode: this.domNode.domNode,\r\n linesContentDomNode: this.linesContent.domNode,\r\n focusTextArea: function () {\r\n _this.focus();\r\n },\r\n getLastRenderData: function () {\r\n var lastViewCursorsRenderData = _this.viewCursors.getLastRenderData() || [];\r\n var lastTextareaPosition = _this._textAreaHandler.getLastRenderData();\r\n return new PointerHandlerLastRenderData(lastViewCursorsRenderData, lastTextareaPosition);\r\n },\r\n shouldSuppressMouseDownOnViewZone: function (viewZoneId) {\r\n return _this.viewZones.shouldSuppressMouseDownOnViewZone(viewZoneId);\r\n },\r\n shouldSuppressMouseDownOnWidget: function (widgetId) {\r\n return _this.contentWidgets.shouldSuppressMouseDownOnWidget(widgetId);\r\n },\r\n getPositionFromDOMInfo: function (spanNode, offset) {\r\n _this._flushAccumulatedAndRenderNow();\r\n return _this.viewLines.getPositionFromDOMInfo(spanNode, offset);\r\n },\r\n visibleRangeForPosition: function (lineNumber, column) {\r\n _this._flushAccumulatedAndRenderNow();\r\n return _this.viewLines.visibleRangeForPosition(new Position(lineNumber, column));\r\n },\r\n getLineWidth: function (lineNumber) {\r\n _this._flushAccumulatedAndRenderNow();\r\n return _this.viewLines.getLineWidth(lineNumber);\r\n }\r\n };\r\n };\r\n View.prototype.createTextAreaHandlerHelper = function () {\r\n var _this = this;\r\n return {\r\n visibleRangeForPositionRelativeToEditor: function (lineNumber, column) {\r\n _this._flushAccumulatedAndRenderNow();\r\n return _this.viewLines.visibleRangeForPosition(new Position(lineNumber, column));\r\n }\r\n };\r\n };\r\n View.prototype._applyLayout = function () {\r\n var options = this._context.configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n this.domNode.setWidth(layoutInfo.width);\r\n this.domNode.setHeight(layoutInfo.height);\r\n this.overflowGuardContainer.setWidth(layoutInfo.width);\r\n this.overflowGuardContainer.setHeight(layoutInfo.height);\r\n this.linesContent.setWidth(1000000);\r\n this.linesContent.setHeight(1000000);\r\n };\r\n View.prototype.getEditorClassName = function () {\r\n var focused = this._textAreaHandler.isFocused() ? ' focused' : '';\r\n return this._context.configuration.options.get(100 /* editorClassName */) + ' ' + getThemeTypeSelector(this._context.theme.type) + focused;\r\n };\r\n // --- begin event handlers\r\n View.prototype.onConfigurationChanged = function (e) {\r\n this.domNode.setClassName(this.getEditorClassName());\r\n this._applyLayout();\r\n return false;\r\n };\r\n View.prototype.onFocusChanged = function (e) {\r\n this.domNode.setClassName(this.getEditorClassName());\r\n this._context.model.setHasFocus(e.isFocused);\r\n if (e.isFocused) {\r\n this.outgoingEvents.emitViewFocusGained();\r\n }\r\n else {\r\n this.outgoingEvents.emitViewFocusLost();\r\n }\r\n return false;\r\n };\r\n View.prototype.onScrollChanged = function (e) {\r\n this.outgoingEvents.emitScrollChanged(e);\r\n return false;\r\n };\r\n View.prototype.onThemeChanged = function (e) {\r\n this.domNode.setClassName(this.getEditorClassName());\r\n return false;\r\n };\r\n // --- end event handlers\r\n View.prototype.dispose = function () {\r\n if (this._renderAnimationFrame !== null) {\r\n this._renderAnimationFrame.dispose();\r\n this._renderAnimationFrame = null;\r\n }\r\n this.eventDispatcher.removeEventHandler(this);\r\n this.outgoingEvents.dispose();\r\n this.viewLines.dispose();\r\n // Destroy view parts\r\n for (var i = 0, len = this.viewParts.length; i < len; i++) {\r\n this.viewParts[i].dispose();\r\n }\r\n this.viewParts = [];\r\n _super.prototype.dispose.call(this);\r\n };\r\n View.prototype._renderOnce = function (callback) {\r\n var r = safeInvokeNoArg(callback);\r\n this._scheduleRender();\r\n return r;\r\n };\r\n View.prototype._scheduleRender = function () {\r\n if (this._renderAnimationFrame === null) {\r\n this._renderAnimationFrame = dom.runAtThisOrScheduleAtNextAnimationFrame(this._onRenderScheduled.bind(this), 100);\r\n }\r\n };\r\n View.prototype._onRenderScheduled = function () {\r\n this._renderAnimationFrame = null;\r\n this._flushAccumulatedAndRenderNow();\r\n };\r\n View.prototype._renderNow = function () {\r\n var _this = this;\r\n safeInvokeNoArg(function () { return _this._actualRender(); });\r\n };\r\n View.prototype._getViewPartsToRender = function () {\r\n var result = [], resultLen = 0;\r\n for (var i = 0, len = this.viewParts.length; i < len; i++) {\r\n var viewPart = this.viewParts[i];\r\n if (viewPart.shouldRender()) {\r\n result[resultLen++] = viewPart;\r\n }\r\n }\r\n return result;\r\n };\r\n View.prototype._actualRender = function () {\r\n if (!dom.isInDOM(this.domNode.domNode)) {\r\n return;\r\n }\r\n var viewPartsToRender = this._getViewPartsToRender();\r\n if (!this.viewLines.shouldRender() && viewPartsToRender.length === 0) {\r\n // Nothing to render\r\n return;\r\n }\r\n var partialViewportData = this._context.viewLayout.getLinesViewportData();\r\n this._context.model.setViewport(partialViewportData.startLineNumber, partialViewportData.endLineNumber, partialViewportData.centeredLineNumber);\r\n var viewportData = new ViewportData(this._cursor.getViewSelections(), partialViewportData, this._context.viewLayout.getWhitespaceViewportData(), this._context.model);\r\n if (this.contentWidgets.shouldRender()) {\r\n // Give the content widgets a chance to set their max width before a possible synchronous layout\r\n this.contentWidgets.onBeforeRender(viewportData);\r\n }\r\n if (this.viewLines.shouldRender()) {\r\n this.viewLines.renderText(viewportData);\r\n this.viewLines.onDidRender();\r\n // Rendering of viewLines might cause scroll events to occur, so collect view parts to render again\r\n viewPartsToRender = this._getViewPartsToRender();\r\n }\r\n var renderingContext = new RenderingContext(this._context.viewLayout, viewportData, this.viewLines);\r\n // Render the rest of the parts\r\n for (var i = 0, len = viewPartsToRender.length; i < len; i++) {\r\n var viewPart = viewPartsToRender[i];\r\n viewPart.prepareRender(renderingContext);\r\n }\r\n for (var i = 0, len = viewPartsToRender.length; i < len; i++) {\r\n var viewPart = viewPartsToRender[i];\r\n viewPart.render(renderingContext);\r\n viewPart.onDidRender();\r\n }\r\n };\r\n // --- BEGIN CodeEditor helpers\r\n View.prototype.delegateVerticalScrollbarMouseDown = function (browserEvent) {\r\n this._scrollbar.delegateVerticalScrollbarMouseDown(browserEvent);\r\n };\r\n View.prototype.restoreState = function (scrollPosition) {\r\n this._context.viewLayout.setScrollPositionNow({ scrollTop: scrollPosition.scrollTop });\r\n this._context.model.tokenizeViewport();\r\n this._renderNow();\r\n this.viewLines.updateLineWidths();\r\n this._context.viewLayout.setScrollPositionNow({ scrollLeft: scrollPosition.scrollLeft });\r\n };\r\n View.prototype.getOffsetForColumn = function (modelLineNumber, modelColumn) {\r\n var modelPosition = this._context.model.validateModelPosition({\r\n lineNumber: modelLineNumber,\r\n column: modelColumn\r\n });\r\n var viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\r\n this._flushAccumulatedAndRenderNow();\r\n var visibleRange = this.viewLines.visibleRangeForPosition(new Position(viewPosition.lineNumber, viewPosition.column));\r\n if (!visibleRange) {\r\n return -1;\r\n }\r\n return visibleRange.left;\r\n };\r\n View.prototype.getTargetAtClientPoint = function (clientX, clientY) {\r\n var mouseTarget = this.pointerHandler.getTargetAtClientPoint(clientX, clientY);\r\n if (!mouseTarget) {\r\n return null;\r\n }\r\n return ViewOutgoingEvents.convertViewToModelMouseTarget(mouseTarget, this._context.model.coordinatesConverter);\r\n };\r\n View.prototype.createOverviewRuler = function (cssClassName) {\r\n return new OverviewRuler(this._context, cssClassName);\r\n };\r\n View.prototype.change = function (callback) {\r\n var _this = this;\r\n return this._renderOnce(function () {\r\n var zonesHaveChanged = _this.viewZones.changeViewZones(callback);\r\n if (zonesHaveChanged) {\r\n _this._context.viewLayout.onHeightMaybeChanged();\r\n _this._context.privateViewEventBus.emit(new viewEvents.ViewZonesChangedEvent());\r\n }\r\n return zonesHaveChanged;\r\n });\r\n };\r\n View.prototype.render = function (now, everything) {\r\n if (everything) {\r\n // Force everything to render...\r\n this.viewLines.forceShouldRender();\r\n for (var i = 0, len = this.viewParts.length; i < len; i++) {\r\n var viewPart = this.viewParts[i];\r\n viewPart.forceShouldRender();\r\n }\r\n }\r\n if (now) {\r\n this._flushAccumulatedAndRenderNow();\r\n }\r\n else {\r\n this._scheduleRender();\r\n }\r\n };\r\n View.prototype.focus = function () {\r\n this._textAreaHandler.focusTextArea();\r\n };\r\n View.prototype.isFocused = function () {\r\n return this._textAreaHandler.isFocused();\r\n };\r\n View.prototype.addContentWidget = function (widgetData) {\r\n this.contentWidgets.addWidget(widgetData.widget);\r\n this.layoutContentWidget(widgetData);\r\n this._scheduleRender();\r\n };\r\n View.prototype.layoutContentWidget = function (widgetData) {\r\n var newPosition = widgetData.position ? widgetData.position.position : null;\r\n var newRange = widgetData.position ? widgetData.position.range || null : null;\r\n var newPreference = widgetData.position ? widgetData.position.preference : null;\r\n this.contentWidgets.setWidgetPosition(widgetData.widget, newPosition, newRange, newPreference);\r\n this._scheduleRender();\r\n };\r\n View.prototype.removeContentWidget = function (widgetData) {\r\n this.contentWidgets.removeWidget(widgetData.widget);\r\n this._scheduleRender();\r\n };\r\n View.prototype.addOverlayWidget = function (widgetData) {\r\n this.overlayWidgets.addWidget(widgetData.widget);\r\n this.layoutOverlayWidget(widgetData);\r\n this._scheduleRender();\r\n };\r\n View.prototype.layoutOverlayWidget = function (widgetData) {\r\n var newPreference = widgetData.position ? widgetData.position.preference : null;\r\n var shouldRender = this.overlayWidgets.setWidgetPosition(widgetData.widget, newPreference);\r\n if (shouldRender) {\r\n this._scheduleRender();\r\n }\r\n };\r\n View.prototype.removeOverlayWidget = function (widgetData) {\r\n this.overlayWidgets.removeWidget(widgetData.widget);\r\n this._scheduleRender();\r\n };\r\n return View;\r\n}(ViewEventHandler));\r\nexport { View };\r\nfunction safeInvokeNoArg(func) {\r\n try {\r\n return func();\r\n }\r\n catch (e) {\r\n onUnexpectedError(e);\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { CursorState, SingleCursorState } from './cursorCommon.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport { Selection } from '../core/selection.js';\r\nvar OneCursor = /** @class */ (function () {\r\n function OneCursor(context) {\r\n this._selTrackedRange = null;\r\n this._trackSelection = true;\r\n this._setState(context, new SingleCursorState(new Range(1, 1, 1, 1), 0, new Position(1, 1), 0), new SingleCursorState(new Range(1, 1, 1, 1), 0, new Position(1, 1), 0));\r\n }\r\n OneCursor.prototype.dispose = function (context) {\r\n this._removeTrackedRange(context);\r\n };\r\n OneCursor.prototype.startTrackingSelection = function (context) {\r\n this._trackSelection = true;\r\n this._updateTrackedRange(context);\r\n };\r\n OneCursor.prototype.stopTrackingSelection = function (context) {\r\n this._trackSelection = false;\r\n this._removeTrackedRange(context);\r\n };\r\n OneCursor.prototype._updateTrackedRange = function (context) {\r\n if (!this._trackSelection) {\r\n // don't track the selection\r\n return;\r\n }\r\n this._selTrackedRange = context.model._setTrackedRange(this._selTrackedRange, this.modelState.selection, 0 /* AlwaysGrowsWhenTypingAtEdges */);\r\n };\r\n OneCursor.prototype._removeTrackedRange = function (context) {\r\n this._selTrackedRange = context.model._setTrackedRange(this._selTrackedRange, null, 0 /* AlwaysGrowsWhenTypingAtEdges */);\r\n };\r\n OneCursor.prototype.asCursorState = function () {\r\n return new CursorState(this.modelState, this.viewState);\r\n };\r\n OneCursor.prototype.readSelectionFromMarkers = function (context) {\r\n var range = context.model._getTrackedRange(this._selTrackedRange);\r\n if (this.modelState.selection.getDirection() === 0 /* LTR */) {\r\n return new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\r\n }\r\n return new Selection(range.endLineNumber, range.endColumn, range.startLineNumber, range.startColumn);\r\n };\r\n OneCursor.prototype.ensureValidState = function (context) {\r\n this._setState(context, this.modelState, this.viewState);\r\n };\r\n OneCursor.prototype.setState = function (context, modelState, viewState) {\r\n this._setState(context, modelState, viewState);\r\n };\r\n OneCursor.prototype._setState = function (context, modelState, viewState) {\r\n if (!modelState) {\r\n if (!viewState) {\r\n return;\r\n }\r\n // We only have the view state => compute the model state\r\n var selectionStart = context.model.validateRange(context.convertViewRangeToModelRange(viewState.selectionStart));\r\n var position = context.model.validatePosition(context.convertViewPositionToModelPosition(viewState.position.lineNumber, viewState.position.column));\r\n modelState = new SingleCursorState(selectionStart, viewState.selectionStartLeftoverVisibleColumns, position, viewState.leftoverVisibleColumns);\r\n }\r\n else {\r\n // Validate new model state\r\n var selectionStart = context.model.validateRange(modelState.selectionStart);\r\n var selectionStartLeftoverVisibleColumns = modelState.selectionStart.equalsRange(selectionStart) ? modelState.selectionStartLeftoverVisibleColumns : 0;\r\n var position = context.model.validatePosition(modelState.position);\r\n var leftoverVisibleColumns = modelState.position.equals(position) ? modelState.leftoverVisibleColumns : 0;\r\n modelState = new SingleCursorState(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns);\r\n }\r\n if (!viewState) {\r\n // We only have the model state => compute the view state\r\n var viewSelectionStart1 = context.convertModelPositionToViewPosition(new Position(modelState.selectionStart.startLineNumber, modelState.selectionStart.startColumn));\r\n var viewSelectionStart2 = context.convertModelPositionToViewPosition(new Position(modelState.selectionStart.endLineNumber, modelState.selectionStart.endColumn));\r\n var viewSelectionStart = new Range(viewSelectionStart1.lineNumber, viewSelectionStart1.column, viewSelectionStart2.lineNumber, viewSelectionStart2.column);\r\n var viewPosition = context.convertModelPositionToViewPosition(modelState.position);\r\n viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns);\r\n }\r\n else {\r\n // Validate new view state\r\n var viewSelectionStart = context.validateViewRange(viewState.selectionStart, modelState.selectionStart);\r\n var viewPosition = context.validateViewPosition(viewState.position, modelState.position);\r\n viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns);\r\n }\r\n this.modelState = modelState;\r\n this.viewState = viewState;\r\n this._updateTrackedRange(context);\r\n };\r\n return OneCursor;\r\n}());\r\nexport { OneCursor };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { CursorState } from './cursorCommon.js';\r\nimport { OneCursor } from './oneCursor.js';\r\nimport { Selection } from '../core/selection.js';\r\nvar CursorCollection = /** @class */ (function () {\r\n function CursorCollection(context) {\r\n this.context = context;\r\n this.primaryCursor = new OneCursor(context);\r\n this.secondaryCursors = [];\r\n this.lastAddedCursorIndex = 0;\r\n }\r\n CursorCollection.prototype.dispose = function () {\r\n this.primaryCursor.dispose(this.context);\r\n this.killSecondaryCursors();\r\n };\r\n CursorCollection.prototype.startTrackingSelections = function () {\r\n this.primaryCursor.startTrackingSelection(this.context);\r\n for (var i = 0, len = this.secondaryCursors.length; i < len; i++) {\r\n this.secondaryCursors[i].startTrackingSelection(this.context);\r\n }\r\n };\r\n CursorCollection.prototype.stopTrackingSelections = function () {\r\n this.primaryCursor.stopTrackingSelection(this.context);\r\n for (var i = 0, len = this.secondaryCursors.length; i < len; i++) {\r\n this.secondaryCursors[i].stopTrackingSelection(this.context);\r\n }\r\n };\r\n CursorCollection.prototype.updateContext = function (context) {\r\n this.context = context;\r\n };\r\n CursorCollection.prototype.ensureValidState = function () {\r\n this.primaryCursor.ensureValidState(this.context);\r\n for (var i = 0, len = this.secondaryCursors.length; i < len; i++) {\r\n this.secondaryCursors[i].ensureValidState(this.context);\r\n }\r\n };\r\n CursorCollection.prototype.readSelectionFromMarkers = function () {\r\n var result = [];\r\n result[0] = this.primaryCursor.readSelectionFromMarkers(this.context);\r\n for (var i = 0, len = this.secondaryCursors.length; i < len; i++) {\r\n result[i + 1] = this.secondaryCursors[i].readSelectionFromMarkers(this.context);\r\n }\r\n return result;\r\n };\r\n CursorCollection.prototype.getAll = function () {\r\n var result = [];\r\n result[0] = this.primaryCursor.asCursorState();\r\n for (var i = 0, len = this.secondaryCursors.length; i < len; i++) {\r\n result[i + 1] = this.secondaryCursors[i].asCursorState();\r\n }\r\n return result;\r\n };\r\n CursorCollection.prototype.getViewPositions = function () {\r\n var result = [];\r\n result[0] = this.primaryCursor.viewState.position;\r\n for (var i = 0, len = this.secondaryCursors.length; i < len; i++) {\r\n result[i + 1] = this.secondaryCursors[i].viewState.position;\r\n }\r\n return result;\r\n };\r\n CursorCollection.prototype.getSelections = function () {\r\n var result = [];\r\n result[0] = this.primaryCursor.modelState.selection;\r\n for (var i = 0, len = this.secondaryCursors.length; i < len; i++) {\r\n result[i + 1] = this.secondaryCursors[i].modelState.selection;\r\n }\r\n return result;\r\n };\r\n CursorCollection.prototype.getViewSelections = function () {\r\n var result = [];\r\n result[0] = this.primaryCursor.viewState.selection;\r\n for (var i = 0, len = this.secondaryCursors.length; i < len; i++) {\r\n result[i + 1] = this.secondaryCursors[i].viewState.selection;\r\n }\r\n return result;\r\n };\r\n CursorCollection.prototype.setSelections = function (selections) {\r\n this.setStates(CursorState.fromModelSelections(selections));\r\n };\r\n CursorCollection.prototype.getPrimaryCursor = function () {\r\n return this.primaryCursor.asCursorState();\r\n };\r\n CursorCollection.prototype.setStates = function (states) {\r\n if (states === null) {\r\n return;\r\n }\r\n this.primaryCursor.setState(this.context, states[0].modelState, states[0].viewState);\r\n this._setSecondaryStates(states.slice(1));\r\n };\r\n /**\r\n * Creates or disposes secondary cursors as necessary to match the number of `secondarySelections`.\r\n */\r\n CursorCollection.prototype._setSecondaryStates = function (secondaryStates) {\r\n var secondaryCursorsLength = this.secondaryCursors.length;\r\n var secondaryStatesLength = secondaryStates.length;\r\n if (secondaryCursorsLength < secondaryStatesLength) {\r\n var createCnt = secondaryStatesLength - secondaryCursorsLength;\r\n for (var i = 0; i < createCnt; i++) {\r\n this._addSecondaryCursor();\r\n }\r\n }\r\n else if (secondaryCursorsLength > secondaryStatesLength) {\r\n var removeCnt = secondaryCursorsLength - secondaryStatesLength;\r\n for (var i = 0; i < removeCnt; i++) {\r\n this._removeSecondaryCursor(this.secondaryCursors.length - 1);\r\n }\r\n }\r\n for (var i = 0; i < secondaryStatesLength; i++) {\r\n this.secondaryCursors[i].setState(this.context, secondaryStates[i].modelState, secondaryStates[i].viewState);\r\n }\r\n };\r\n CursorCollection.prototype.killSecondaryCursors = function () {\r\n this._setSecondaryStates([]);\r\n };\r\n CursorCollection.prototype._addSecondaryCursor = function () {\r\n this.secondaryCursors.push(new OneCursor(this.context));\r\n this.lastAddedCursorIndex = this.secondaryCursors.length;\r\n };\r\n CursorCollection.prototype.getLastAddedCursorIndex = function () {\r\n if (this.secondaryCursors.length === 0 || this.lastAddedCursorIndex === 0) {\r\n return 0;\r\n }\r\n return this.lastAddedCursorIndex;\r\n };\r\n CursorCollection.prototype._removeSecondaryCursor = function (removeIndex) {\r\n if (this.lastAddedCursorIndex >= removeIndex + 1) {\r\n this.lastAddedCursorIndex--;\r\n }\r\n this.secondaryCursors[removeIndex].dispose(this.context);\r\n this.secondaryCursors.splice(removeIndex, 1);\r\n };\r\n CursorCollection.prototype._getAll = function () {\r\n var result = [];\r\n result[0] = this.primaryCursor;\r\n for (var i = 0, len = this.secondaryCursors.length; i < len; i++) {\r\n result[i + 1] = this.secondaryCursors[i];\r\n }\r\n return result;\r\n };\r\n CursorCollection.prototype.normalize = function () {\r\n if (this.secondaryCursors.length === 0) {\r\n return;\r\n }\r\n var cursors = this._getAll();\r\n var sortedCursors = [];\r\n for (var i = 0, len = cursors.length; i < len; i++) {\r\n sortedCursors.push({\r\n index: i,\r\n selection: cursors[i].modelState.selection,\r\n });\r\n }\r\n sortedCursors.sort(function (a, b) {\r\n if (a.selection.startLineNumber === b.selection.startLineNumber) {\r\n return a.selection.startColumn - b.selection.startColumn;\r\n }\r\n return a.selection.startLineNumber - b.selection.startLineNumber;\r\n });\r\n for (var sortedCursorIndex = 0; sortedCursorIndex < sortedCursors.length - 1; sortedCursorIndex++) {\r\n var current = sortedCursors[sortedCursorIndex];\r\n var next = sortedCursors[sortedCursorIndex + 1];\r\n var currentSelection = current.selection;\r\n var nextSelection = next.selection;\r\n if (!this.context.config.multiCursorMergeOverlapping) {\r\n continue;\r\n }\r\n var shouldMergeCursors = void 0;\r\n if (nextSelection.isEmpty() || currentSelection.isEmpty()) {\r\n // Merge touching cursors if one of them is collapsed\r\n shouldMergeCursors = nextSelection.getStartPosition().isBeforeOrEqual(currentSelection.getEndPosition());\r\n }\r\n else {\r\n // Merge only overlapping cursors (i.e. allow touching ranges)\r\n shouldMergeCursors = nextSelection.getStartPosition().isBefore(currentSelection.getEndPosition());\r\n }\r\n if (shouldMergeCursors) {\r\n var winnerSortedCursorIndex = current.index < next.index ? sortedCursorIndex : sortedCursorIndex + 1;\r\n var looserSortedCursorIndex = current.index < next.index ? sortedCursorIndex + 1 : sortedCursorIndex;\r\n var looserIndex = sortedCursors[looserSortedCursorIndex].index;\r\n var winnerIndex = sortedCursors[winnerSortedCursorIndex].index;\r\n var looserSelection = sortedCursors[looserSortedCursorIndex].selection;\r\n var winnerSelection = sortedCursors[winnerSortedCursorIndex].selection;\r\n if (!looserSelection.equalsSelection(winnerSelection)) {\r\n var resultingRange = looserSelection.plusRange(winnerSelection);\r\n var looserSelectionIsLTR = (looserSelection.selectionStartLineNumber === looserSelection.startLineNumber && looserSelection.selectionStartColumn === looserSelection.startColumn);\r\n var winnerSelectionIsLTR = (winnerSelection.selectionStartLineNumber === winnerSelection.startLineNumber && winnerSelection.selectionStartColumn === winnerSelection.startColumn);\r\n // Give more importance to the last added cursor (think Ctrl-dragging + hitting another cursor)\r\n var resultingSelectionIsLTR = void 0;\r\n if (looserIndex === this.lastAddedCursorIndex) {\r\n resultingSelectionIsLTR = looserSelectionIsLTR;\r\n this.lastAddedCursorIndex = winnerIndex;\r\n }\r\n else {\r\n // Winner takes it all\r\n resultingSelectionIsLTR = winnerSelectionIsLTR;\r\n }\r\n var resultingSelection = void 0;\r\n if (resultingSelectionIsLTR) {\r\n resultingSelection = new Selection(resultingRange.startLineNumber, resultingRange.startColumn, resultingRange.endLineNumber, resultingRange.endColumn);\r\n }\r\n else {\r\n resultingSelection = new Selection(resultingRange.endLineNumber, resultingRange.endColumn, resultingRange.startLineNumber, resultingRange.startColumn);\r\n }\r\n sortedCursors[winnerSortedCursorIndex].selection = resultingSelection;\r\n var resultingState = CursorState.fromModelSelection(resultingSelection);\r\n cursors[winnerIndex].setState(this.context, resultingState.modelState, resultingState.viewState);\r\n }\r\n for (var _i = 0, sortedCursors_1 = sortedCursors; _i < sortedCursors_1.length; _i++) {\r\n var sortedCursor = sortedCursors_1[_i];\r\n if (sortedCursor.index > looserIndex) {\r\n sortedCursor.index--;\r\n }\r\n }\r\n cursors.splice(looserIndex, 1);\r\n sortedCursors.splice(looserSortedCursorIndex, 1);\r\n this._removeSecondaryCursor(looserIndex - 1);\r\n sortedCursorIndex--;\r\n }\r\n }\r\n };\r\n return CursorCollection;\r\n}());\r\nexport { CursorCollection };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { CursorCollection } from './cursorCollection.js';\r\nimport { CursorColumns, CursorConfiguration, CursorContext, CursorState, EditOperationResult } from './cursorCommon.js';\r\nimport { DeleteOperations } from './cursorDeleteOperations.js';\r\nimport { TypeOperations, TypeWithAutoClosingCommand } from './cursorTypeOperations.js';\r\nimport { Range } from '../core/range.js';\r\nimport { Selection } from '../core/selection.js';\r\nimport * as editorCommon from '../editorCommon.js';\r\nimport * as viewEvents from '../view/viewEvents.js';\r\nimport { dispose } from '../../../base/common/lifecycle.js';\r\nfunction containsLineMappingChanged(events) {\r\n for (var i = 0, len = events.length; i < len; i++) {\r\n if (events[i].type === 6 /* ViewLineMappingChanged */) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nvar CursorStateChangedEvent = /** @class */ (function () {\r\n function CursorStateChangedEvent(selections, modelVersionId, oldSelections, oldModelVersionId, source, reason) {\r\n this.selections = selections;\r\n this.modelVersionId = modelVersionId;\r\n this.oldSelections = oldSelections;\r\n this.oldModelVersionId = oldModelVersionId;\r\n this.source = source;\r\n this.reason = reason;\r\n }\r\n return CursorStateChangedEvent;\r\n}());\r\nexport { CursorStateChangedEvent };\r\n/**\r\n * A snapshot of the cursor and the model state\r\n */\r\nvar CursorModelState = /** @class */ (function () {\r\n function CursorModelState(model, cursor) {\r\n this.modelVersionId = model.getVersionId();\r\n this.cursorState = cursor.getAll();\r\n }\r\n CursorModelState.prototype.equals = function (other) {\r\n if (!other) {\r\n return false;\r\n }\r\n if (this.modelVersionId !== other.modelVersionId) {\r\n return false;\r\n }\r\n if (this.cursorState.length !== other.cursorState.length) {\r\n return false;\r\n }\r\n for (var i = 0, len = this.cursorState.length; i < len; i++) {\r\n if (!this.cursorState[i].equals(other.cursorState[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n return CursorModelState;\r\n}());\r\nexport { CursorModelState };\r\nvar AutoClosedAction = /** @class */ (function () {\r\n function AutoClosedAction(model, autoClosedCharactersDecorations, autoClosedEnclosingDecorations) {\r\n this._model = model;\r\n this._autoClosedCharactersDecorations = autoClosedCharactersDecorations;\r\n this._autoClosedEnclosingDecorations = autoClosedEnclosingDecorations;\r\n }\r\n AutoClosedAction.getAllAutoClosedCharacters = function (autoClosedActions) {\r\n var autoClosedCharacters = [];\r\n for (var _i = 0, autoClosedActions_1 = autoClosedActions; _i < autoClosedActions_1.length; _i++) {\r\n var autoClosedAction = autoClosedActions_1[_i];\r\n autoClosedCharacters = autoClosedCharacters.concat(autoClosedAction.getAutoClosedCharactersRanges());\r\n }\r\n return autoClosedCharacters;\r\n };\r\n AutoClosedAction.prototype.dispose = function () {\r\n this._autoClosedCharactersDecorations = this._model.deltaDecorations(this._autoClosedCharactersDecorations, []);\r\n this._autoClosedEnclosingDecorations = this._model.deltaDecorations(this._autoClosedEnclosingDecorations, []);\r\n };\r\n AutoClosedAction.prototype.getAutoClosedCharactersRanges = function () {\r\n var result = [];\r\n for (var i = 0; i < this._autoClosedCharactersDecorations.length; i++) {\r\n var decorationRange = this._model.getDecorationRange(this._autoClosedCharactersDecorations[i]);\r\n if (decorationRange) {\r\n result.push(decorationRange);\r\n }\r\n }\r\n return result;\r\n };\r\n AutoClosedAction.prototype.isValid = function (selections) {\r\n var enclosingRanges = [];\r\n for (var i = 0; i < this._autoClosedEnclosingDecorations.length; i++) {\r\n var decorationRange = this._model.getDecorationRange(this._autoClosedEnclosingDecorations[i]);\r\n if (decorationRange) {\r\n enclosingRanges.push(decorationRange);\r\n if (decorationRange.startLineNumber !== decorationRange.endLineNumber) {\r\n // Stop tracking if the range becomes multiline...\r\n return false;\r\n }\r\n }\r\n }\r\n enclosingRanges.sort(Range.compareRangesUsingStarts);\r\n selections.sort(Range.compareRangesUsingStarts);\r\n for (var i = 0; i < selections.length; i++) {\r\n if (i >= enclosingRanges.length) {\r\n return false;\r\n }\r\n if (!enclosingRanges[i].strictContainsRange(selections[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n return AutoClosedAction;\r\n}());\r\nvar Cursor = /** @class */ (function (_super) {\r\n __extends(Cursor, _super);\r\n function Cursor(configuration, model, viewModel) {\r\n var _this = _super.call(this) || this;\r\n _this._onDidReachMaxCursorCount = _this._register(new Emitter());\r\n _this.onDidReachMaxCursorCount = _this._onDidReachMaxCursorCount.event;\r\n _this._onDidAttemptReadOnlyEdit = _this._register(new Emitter());\r\n _this.onDidAttemptReadOnlyEdit = _this._onDidAttemptReadOnlyEdit.event;\r\n _this._onDidChange = _this._register(new Emitter());\r\n _this.onDidChange = _this._onDidChange.event;\r\n _this._configuration = configuration;\r\n _this._model = model;\r\n _this._knownModelVersionId = _this._model.getVersionId();\r\n _this._viewModel = viewModel;\r\n _this.context = new CursorContext(_this._configuration, _this._model, _this._viewModel);\r\n _this._cursors = new CursorCollection(_this.context);\r\n _this._isHandling = false;\r\n _this._isDoingComposition = false;\r\n _this._selectionsWhenCompositionStarted = null;\r\n _this._columnSelectData = null;\r\n _this._autoClosedActions = [];\r\n _this._prevEditOperationType = 0 /* Other */;\r\n _this._register(_this._model.onDidChangeRawContent(function (e) {\r\n _this._knownModelVersionId = e.versionId;\r\n if (_this._isHandling) {\r\n return;\r\n }\r\n var hadFlushEvent = e.containsEvent(1 /* Flush */);\r\n _this._onModelContentChanged(hadFlushEvent);\r\n }));\r\n _this._register(viewModel.addEventListener(function (events) {\r\n if (!containsLineMappingChanged(events)) {\r\n return;\r\n }\r\n if (_this._knownModelVersionId !== _this._model.getVersionId()) {\r\n // There are model change events that I didn't yet receive.\r\n //\r\n // This can happen when editing the model, and the view model receives the change events first,\r\n // and the view model emits line mapping changed events, all before the cursor gets a chance to\r\n // recover from markers.\r\n //\r\n // The model change listener above will be called soon and we'll ensure a valid cursor state there.\r\n return;\r\n }\r\n // Ensure valid state\r\n _this.setStates('viewModel', 0 /* NotSet */, _this.getAll());\r\n }));\r\n var updateCursorContext = function () {\r\n _this.context = new CursorContext(_this._configuration, _this._model, _this._viewModel);\r\n _this._cursors.updateContext(_this.context);\r\n };\r\n _this._register(_this._model.onDidChangeLanguage(function (e) {\r\n updateCursorContext();\r\n }));\r\n _this._register(_this._model.onDidChangeLanguageConfiguration(function () {\r\n updateCursorContext();\r\n }));\r\n _this._register(_this._model.onDidChangeOptions(function () {\r\n updateCursorContext();\r\n }));\r\n _this._register(_this._configuration.onDidChange(function (e) {\r\n if (CursorConfiguration.shouldRecreate(e)) {\r\n updateCursorContext();\r\n }\r\n }));\r\n return _this;\r\n }\r\n Cursor.prototype.dispose = function () {\r\n this._cursors.dispose();\r\n this._autoClosedActions = dispose(this._autoClosedActions);\r\n _super.prototype.dispose.call(this);\r\n };\r\n Cursor.prototype._validateAutoClosedActions = function () {\r\n if (this._autoClosedActions.length > 0) {\r\n var selections = this._cursors.getSelections();\r\n for (var i = 0; i < this._autoClosedActions.length; i++) {\r\n var autoClosedAction = this._autoClosedActions[i];\r\n if (!autoClosedAction.isValid(selections)) {\r\n autoClosedAction.dispose();\r\n this._autoClosedActions.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n }\r\n };\r\n // ------ some getters/setters\r\n Cursor.prototype.getPrimaryCursor = function () {\r\n return this._cursors.getPrimaryCursor();\r\n };\r\n Cursor.prototype.getLastAddedCursorIndex = function () {\r\n return this._cursors.getLastAddedCursorIndex();\r\n };\r\n Cursor.prototype.getAll = function () {\r\n return this._cursors.getAll();\r\n };\r\n Cursor.prototype.setStates = function (source, reason, states) {\r\n if (states !== null && states.length > Cursor.MAX_CURSOR_COUNT) {\r\n states = states.slice(0, Cursor.MAX_CURSOR_COUNT);\r\n this._onDidReachMaxCursorCount.fire(undefined);\r\n }\r\n var oldState = new CursorModelState(this._model, this);\r\n this._cursors.setStates(states);\r\n this._cursors.normalize();\r\n this._columnSelectData = null;\r\n this._validateAutoClosedActions();\r\n this._emitStateChangedIfNecessary(source, reason, oldState);\r\n };\r\n Cursor.prototype.setColumnSelectData = function (columnSelectData) {\r\n this._columnSelectData = columnSelectData;\r\n };\r\n Cursor.prototype.reveal = function (source, horizontal, target, scrollType) {\r\n this._revealRange(source, target, 0 /* Simple */, horizontal, scrollType);\r\n };\r\n Cursor.prototype.revealRange = function (source, revealHorizontal, viewRange, verticalType, scrollType) {\r\n this.emitCursorRevealRange(source, viewRange, verticalType, revealHorizontal, scrollType);\r\n };\r\n Cursor.prototype.scrollTo = function (desiredScrollTop) {\r\n this._viewModel.viewLayout.setScrollPositionSmooth({\r\n scrollTop: desiredScrollTop\r\n });\r\n };\r\n Cursor.prototype.saveState = function () {\r\n var result = [];\r\n var selections = this._cursors.getSelections();\r\n for (var i = 0, len = selections.length; i < len; i++) {\r\n var selection = selections[i];\r\n result.push({\r\n inSelectionMode: !selection.isEmpty(),\r\n selectionStart: {\r\n lineNumber: selection.selectionStartLineNumber,\r\n column: selection.selectionStartColumn,\r\n },\r\n position: {\r\n lineNumber: selection.positionLineNumber,\r\n column: selection.positionColumn,\r\n }\r\n });\r\n }\r\n return result;\r\n };\r\n Cursor.prototype.restoreState = function (states) {\r\n var desiredSelections = [];\r\n for (var i = 0, len = states.length; i < len; i++) {\r\n var state = states[i];\r\n var positionLineNumber = 1;\r\n var positionColumn = 1;\r\n // Avoid missing properties on the literal\r\n if (state.position && state.position.lineNumber) {\r\n positionLineNumber = state.position.lineNumber;\r\n }\r\n if (state.position && state.position.column) {\r\n positionColumn = state.position.column;\r\n }\r\n var selectionStartLineNumber = positionLineNumber;\r\n var selectionStartColumn = positionColumn;\r\n // Avoid missing properties on the literal\r\n if (state.selectionStart && state.selectionStart.lineNumber) {\r\n selectionStartLineNumber = state.selectionStart.lineNumber;\r\n }\r\n if (state.selectionStart && state.selectionStart.column) {\r\n selectionStartColumn = state.selectionStart.column;\r\n }\r\n desiredSelections.push({\r\n selectionStartLineNumber: selectionStartLineNumber,\r\n selectionStartColumn: selectionStartColumn,\r\n positionLineNumber: positionLineNumber,\r\n positionColumn: positionColumn\r\n });\r\n }\r\n this.setStates('restoreState', 0 /* NotSet */, CursorState.fromModelSelections(desiredSelections));\r\n this.reveal('restoreState', true, 0 /* Primary */, 1 /* Immediate */);\r\n };\r\n Cursor.prototype._onModelContentChanged = function (hadFlushEvent) {\r\n this._prevEditOperationType = 0 /* Other */;\r\n if (hadFlushEvent) {\r\n // a model.setValue() was called\r\n this._cursors.dispose();\r\n this._cursors = new CursorCollection(this.context);\r\n this._validateAutoClosedActions();\r\n this._emitStateChangedIfNecessary('model', 1 /* ContentFlush */, null);\r\n }\r\n else {\r\n var selectionsFromMarkers = this._cursors.readSelectionFromMarkers();\r\n this.setStates('modelChange', 2 /* RecoverFromMarkers */, CursorState.fromModelSelections(selectionsFromMarkers));\r\n }\r\n };\r\n Cursor.prototype.getSelection = function () {\r\n return this._cursors.getPrimaryCursor().modelState.selection;\r\n };\r\n Cursor.prototype.getColumnSelectData = function () {\r\n if (this._columnSelectData) {\r\n return this._columnSelectData;\r\n }\r\n var primaryCursor = this._cursors.getPrimaryCursor();\r\n var primaryPos = primaryCursor.viewState.selectionStart.getStartPosition();\r\n var viewLineNumber = primaryPos.lineNumber;\r\n var viewVisualColumn = CursorColumns.visibleColumnFromColumn2(this.context.config, this.context.viewModel, primaryPos);\r\n return {\r\n isReal: false,\r\n fromViewLineNumber: viewLineNumber,\r\n fromViewVisualColumn: viewVisualColumn,\r\n toViewLineNumber: viewLineNumber,\r\n toViewVisualColumn: viewVisualColumn,\r\n };\r\n };\r\n Cursor.prototype.getSelections = function () {\r\n return this._cursors.getSelections();\r\n };\r\n Cursor.prototype.getViewSelections = function () {\r\n return this._cursors.getViewSelections();\r\n };\r\n Cursor.prototype.getPosition = function () {\r\n return this._cursors.getPrimaryCursor().modelState.position;\r\n };\r\n Cursor.prototype.setSelections = function (source, selections) {\r\n this.setStates(source, 0 /* NotSet */, CursorState.fromModelSelections(selections));\r\n };\r\n Cursor.prototype.getPrevEditOperationType = function () {\r\n return this._prevEditOperationType;\r\n };\r\n Cursor.prototype.setPrevEditOperationType = function (type) {\r\n this._prevEditOperationType = type;\r\n };\r\n // ------ auxiliary handling logic\r\n Cursor.prototype._pushAutoClosedAction = function (autoClosedCharactersRanges, autoClosedEnclosingRanges) {\r\n var autoClosedCharactersDeltaDecorations = [];\r\n var autoClosedEnclosingDeltaDecorations = [];\r\n for (var i = 0, len = autoClosedCharactersRanges.length; i < len; i++) {\r\n autoClosedCharactersDeltaDecorations.push({\r\n range: autoClosedCharactersRanges[i],\r\n options: {\r\n inlineClassName: 'auto-closed-character',\r\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */\r\n }\r\n });\r\n autoClosedEnclosingDeltaDecorations.push({\r\n range: autoClosedEnclosingRanges[i],\r\n options: {\r\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */\r\n }\r\n });\r\n }\r\n var autoClosedCharactersDecorations = this._model.deltaDecorations([], autoClosedCharactersDeltaDecorations);\r\n var autoClosedEnclosingDecorations = this._model.deltaDecorations([], autoClosedEnclosingDeltaDecorations);\r\n this._autoClosedActions.push(new AutoClosedAction(this._model, autoClosedCharactersDecorations, autoClosedEnclosingDecorations));\r\n };\r\n Cursor.prototype._executeEditOperation = function (opResult) {\r\n if (!opResult) {\r\n // Nothing to execute\r\n return;\r\n }\r\n if (opResult.shouldPushStackElementBefore) {\r\n this._model.pushStackElement();\r\n }\r\n var result = CommandExecutor.executeCommands(this._model, this._cursors.getSelections(), opResult.commands);\r\n if (result) {\r\n // The commands were applied correctly\r\n this._interpretCommandResult(result);\r\n // Check for auto-closing closed characters\r\n var autoClosedCharactersRanges = [];\r\n var autoClosedEnclosingRanges = [];\r\n for (var i = 0; i < opResult.commands.length; i++) {\r\n var command = opResult.commands[i];\r\n if (command instanceof TypeWithAutoClosingCommand && command.enclosingRange && command.closeCharacterRange) {\r\n autoClosedCharactersRanges.push(command.closeCharacterRange);\r\n autoClosedEnclosingRanges.push(command.enclosingRange);\r\n }\r\n }\r\n if (autoClosedCharactersRanges.length > 0) {\r\n this._pushAutoClosedAction(autoClosedCharactersRanges, autoClosedEnclosingRanges);\r\n }\r\n this._prevEditOperationType = opResult.type;\r\n }\r\n if (opResult.shouldPushStackElementAfter) {\r\n this._model.pushStackElement();\r\n }\r\n };\r\n Cursor.prototype._interpretCommandResult = function (cursorState) {\r\n if (!cursorState || cursorState.length === 0) {\r\n cursorState = this._cursors.readSelectionFromMarkers();\r\n }\r\n this._columnSelectData = null;\r\n this._cursors.setSelections(cursorState);\r\n this._cursors.normalize();\r\n };\r\n // -----------------------------------------------------------------------------------------------------------\r\n // ----- emitting events\r\n Cursor.prototype._emitStateChangedIfNecessary = function (source, reason, oldState) {\r\n var newState = new CursorModelState(this._model, this);\r\n if (newState.equals(oldState)) {\r\n return false;\r\n }\r\n var selections = this._cursors.getSelections();\r\n var viewSelections = this._cursors.getViewSelections();\r\n // Let the view get the event first.\r\n try {\r\n var eventsCollector = this._beginEmit();\r\n eventsCollector.emit(new viewEvents.ViewCursorStateChangedEvent(viewSelections));\r\n }\r\n finally {\r\n this._endEmit();\r\n }\r\n // Only after the view has been notified, let the rest of the world know...\r\n if (!oldState\r\n || oldState.cursorState.length !== newState.cursorState.length\r\n || newState.cursorState.some(function (newCursorState, i) { return !newCursorState.modelState.equals(oldState.cursorState[i].modelState); })) {\r\n var oldSelections = oldState ? oldState.cursorState.map(function (s) { return s.modelState.selection; }) : null;\r\n var oldModelVersionId = oldState ? oldState.modelVersionId : 0;\r\n this._onDidChange.fire(new CursorStateChangedEvent(selections, newState.modelVersionId, oldSelections, oldModelVersionId, source || 'keyboard', reason));\r\n }\r\n return true;\r\n };\r\n Cursor.prototype._revealRange = function (source, revealTarget, verticalType, revealHorizontal, scrollType) {\r\n var viewPositions = this._cursors.getViewPositions();\r\n var viewPosition = viewPositions[0];\r\n if (revealTarget === 1 /* TopMost */) {\r\n for (var i = 1; i < viewPositions.length; i++) {\r\n if (viewPositions[i].isBefore(viewPosition)) {\r\n viewPosition = viewPositions[i];\r\n }\r\n }\r\n }\r\n else if (revealTarget === 2 /* BottomMost */) {\r\n for (var i = 1; i < viewPositions.length; i++) {\r\n if (viewPosition.isBeforeOrEqual(viewPositions[i])) {\r\n viewPosition = viewPositions[i];\r\n }\r\n }\r\n }\r\n else {\r\n if (viewPositions.length > 1) {\r\n // no revealing!\r\n return;\r\n }\r\n }\r\n var viewRange = new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column);\r\n this.emitCursorRevealRange(source, viewRange, verticalType, revealHorizontal, scrollType);\r\n };\r\n Cursor.prototype.emitCursorRevealRange = function (source, viewRange, verticalType, revealHorizontal, scrollType) {\r\n try {\r\n var eventsCollector = this._beginEmit();\r\n eventsCollector.emit(new viewEvents.ViewRevealRangeRequestEvent(source, viewRange, verticalType, revealHorizontal, scrollType));\r\n }\r\n finally {\r\n this._endEmit();\r\n }\r\n };\r\n // -----------------------------------------------------------------------------------------------------------\r\n // ----- handlers beyond this point\r\n Cursor.prototype._findAutoClosingPairs = function (edits) {\r\n if (!edits.length) {\r\n return null;\r\n }\r\n var indices = [];\r\n for (var i = 0, len = edits.length; i < len; i++) {\r\n var edit = edits[i];\r\n if (!edit.text || edit.text.indexOf('\\n') >= 0) {\r\n return null;\r\n }\r\n var m = edit.text.match(/([)\\]}>'\"`])([^)\\]}>'\"`]*)$/);\r\n if (!m) {\r\n return null;\r\n }\r\n var closeChar = m[1];\r\n var autoClosingPairsCandidates = this.context.config.autoClosingPairsClose2.get(closeChar);\r\n if (!autoClosingPairsCandidates || autoClosingPairsCandidates.length !== 1) {\r\n return null;\r\n }\r\n var openChar = autoClosingPairsCandidates[0].open;\r\n var closeCharIndex = edit.text.length - m[2].length - 1;\r\n var openCharIndex = edit.text.lastIndexOf(openChar, closeCharIndex - 1);\r\n if (openCharIndex === -1) {\r\n return null;\r\n }\r\n indices.push([openCharIndex, closeCharIndex]);\r\n }\r\n return indices;\r\n };\r\n Cursor.prototype.executeEdits = function (source, edits, cursorStateComputer) {\r\n var _this = this;\r\n var autoClosingIndices = null;\r\n if (source === 'snippet') {\r\n autoClosingIndices = this._findAutoClosingPairs(edits);\r\n }\r\n if (autoClosingIndices) {\r\n edits[0]._isTracked = true;\r\n }\r\n var autoClosedCharactersRanges = [];\r\n var autoClosedEnclosingRanges = [];\r\n var selections = this._model.pushEditOperations(this.getSelections(), edits, function (undoEdits) {\r\n if (autoClosingIndices) {\r\n for (var i = 0, len = autoClosingIndices.length; i < len; i++) {\r\n var _a = autoClosingIndices[i], openCharInnerIndex = _a[0], closeCharInnerIndex = _a[1];\r\n var undoEdit = undoEdits[i];\r\n var lineNumber = undoEdit.range.startLineNumber;\r\n var openCharIndex = undoEdit.range.startColumn - 1 + openCharInnerIndex;\r\n var closeCharIndex = undoEdit.range.startColumn - 1 + closeCharInnerIndex;\r\n autoClosedCharactersRanges.push(new Range(lineNumber, closeCharIndex + 1, lineNumber, closeCharIndex + 2));\r\n autoClosedEnclosingRanges.push(new Range(lineNumber, openCharIndex + 1, lineNumber, closeCharIndex + 2));\r\n }\r\n }\r\n var selections = cursorStateComputer(undoEdits);\r\n if (selections) {\r\n // Don't recover the selection from markers because\r\n // we know what it should be.\r\n _this._isHandling = true;\r\n }\r\n return selections;\r\n });\r\n if (selections) {\r\n this._isHandling = false;\r\n this.setSelections(source, selections);\r\n }\r\n if (autoClosedCharactersRanges.length > 0) {\r\n this._pushAutoClosedAction(autoClosedCharactersRanges, autoClosedEnclosingRanges);\r\n }\r\n };\r\n Cursor.prototype.trigger = function (source, handlerId, payload) {\r\n var H = editorCommon.Handler;\r\n if (handlerId === H.CompositionStart) {\r\n this._isDoingComposition = true;\r\n this._selectionsWhenCompositionStarted = this.getSelections().slice(0);\r\n return;\r\n }\r\n if (handlerId === H.CompositionEnd) {\r\n this._isDoingComposition = false;\r\n }\r\n if (this._configuration.options.get(65 /* readOnly */)) {\r\n // All the remaining handlers will try to edit the model,\r\n // but we cannot edit when read only...\r\n this._onDidAttemptReadOnlyEdit.fire(undefined);\r\n return;\r\n }\r\n var oldState = new CursorModelState(this._model, this);\r\n var cursorChangeReason = 0 /* NotSet */;\r\n if (handlerId !== H.Undo && handlerId !== H.Redo) {\r\n // TODO@Alex: if the undo/redo stack contains non-null selections\r\n // it would also be OK to stop tracking selections here\r\n this._cursors.stopTrackingSelections();\r\n }\r\n // ensure valid state on all cursors\r\n this._cursors.ensureValidState();\r\n this._isHandling = true;\r\n try {\r\n switch (handlerId) {\r\n case H.Type:\r\n this._type(source, payload.text);\r\n break;\r\n case H.ReplacePreviousChar:\r\n this._replacePreviousChar(payload.text, payload.replaceCharCnt);\r\n break;\r\n case H.Paste:\r\n cursorChangeReason = 4 /* Paste */;\r\n this._paste(payload.text, payload.pasteOnNewLine, payload.multicursorText);\r\n break;\r\n case H.Cut:\r\n this._cut();\r\n break;\r\n case H.Undo:\r\n cursorChangeReason = 5 /* Undo */;\r\n this._interpretCommandResult(this._model.undo());\r\n break;\r\n case H.Redo:\r\n cursorChangeReason = 6 /* Redo */;\r\n this._interpretCommandResult(this._model.redo());\r\n break;\r\n case H.ExecuteCommand:\r\n this._externalExecuteCommand(payload);\r\n break;\r\n case H.ExecuteCommands:\r\n this._externalExecuteCommands(payload);\r\n break;\r\n case H.CompositionEnd:\r\n this._interpretCompositionEnd(source);\r\n break;\r\n }\r\n }\r\n catch (err) {\r\n onUnexpectedError(err);\r\n }\r\n this._isHandling = false;\r\n if (handlerId !== H.Undo && handlerId !== H.Redo) {\r\n this._cursors.startTrackingSelections();\r\n }\r\n this._validateAutoClosedActions();\r\n if (this._emitStateChangedIfNecessary(source, cursorChangeReason, oldState)) {\r\n this._revealRange(source, 0 /* Primary */, 0 /* Simple */, true, 0 /* Smooth */);\r\n }\r\n };\r\n Cursor.prototype._interpretCompositionEnd = function (source) {\r\n if (!this._isDoingComposition && source === 'keyboard') {\r\n // composition finishes, let's check if we need to auto complete if necessary.\r\n var autoClosedCharacters = AutoClosedAction.getAllAutoClosedCharacters(this._autoClosedActions);\r\n this._executeEditOperation(TypeOperations.compositionEndWithInterceptors(this._prevEditOperationType, this.context.config, this.context.model, this._selectionsWhenCompositionStarted, this.getSelections(), autoClosedCharacters));\r\n this._selectionsWhenCompositionStarted = null;\r\n }\r\n };\r\n Cursor.prototype._type = function (source, text) {\r\n if (!this._isDoingComposition && source === 'keyboard') {\r\n // If this event is coming straight from the keyboard, look for electric characters and enter\r\n var len = text.length;\r\n var offset = 0;\r\n while (offset < len) {\r\n var charLength = strings.nextCharLength(text, offset);\r\n var chr = text.substr(offset, charLength);\r\n // Here we must interpret each typed character individually\r\n var autoClosedCharacters = AutoClosedAction.getAllAutoClosedCharacters(this._autoClosedActions);\r\n this._executeEditOperation(TypeOperations.typeWithInterceptors(this._prevEditOperationType, this.context.config, this.context.model, this.getSelections(), autoClosedCharacters, chr));\r\n offset += charLength;\r\n }\r\n }\r\n else {\r\n this._executeEditOperation(TypeOperations.typeWithoutInterceptors(this._prevEditOperationType, this.context.config, this.context.model, this.getSelections(), text));\r\n }\r\n };\r\n Cursor.prototype._replacePreviousChar = function (text, replaceCharCnt) {\r\n this._executeEditOperation(TypeOperations.replacePreviousChar(this._prevEditOperationType, this.context.config, this.context.model, this.getSelections(), text, replaceCharCnt));\r\n };\r\n Cursor.prototype._paste = function (text, pasteOnNewLine, multicursorText) {\r\n this._executeEditOperation(TypeOperations.paste(this.context.config, this.context.model, this.getSelections(), text, pasteOnNewLine, multicursorText));\r\n };\r\n Cursor.prototype._cut = function () {\r\n this._executeEditOperation(DeleteOperations.cut(this.context.config, this.context.model, this.getSelections()));\r\n };\r\n Cursor.prototype._externalExecuteCommand = function (command) {\r\n this._cursors.killSecondaryCursors();\r\n this._executeEditOperation(new EditOperationResult(0 /* Other */, [command], {\r\n shouldPushStackElementBefore: false,\r\n shouldPushStackElementAfter: false\r\n }));\r\n };\r\n Cursor.prototype._externalExecuteCommands = function (commands) {\r\n this._executeEditOperation(new EditOperationResult(0 /* Other */, commands, {\r\n shouldPushStackElementBefore: false,\r\n shouldPushStackElementAfter: false\r\n }));\r\n };\r\n Cursor.MAX_CURSOR_COUNT = 10000;\r\n return Cursor;\r\n}(viewEvents.ViewEventEmitter));\r\nexport { Cursor };\r\nvar CommandExecutor = /** @class */ (function () {\r\n function CommandExecutor() {\r\n }\r\n CommandExecutor.executeCommands = function (model, selectionsBefore, commands) {\r\n var ctx = {\r\n model: model,\r\n selectionsBefore: selectionsBefore,\r\n trackedRanges: [],\r\n trackedRangesDirection: []\r\n };\r\n var result = this._innerExecuteCommands(ctx, commands);\r\n for (var i = 0, len = ctx.trackedRanges.length; i < len; i++) {\r\n ctx.model._setTrackedRange(ctx.trackedRanges[i], null, 0 /* AlwaysGrowsWhenTypingAtEdges */);\r\n }\r\n return result;\r\n };\r\n CommandExecutor._innerExecuteCommands = function (ctx, commands) {\r\n if (this._arrayIsEmpty(commands)) {\r\n return null;\r\n }\r\n var commandsData = this._getEditOperations(ctx, commands);\r\n if (commandsData.operations.length === 0) {\r\n return null;\r\n }\r\n var rawOperations = commandsData.operations;\r\n var loserCursorsMap = this._getLoserCursorMap(rawOperations);\r\n if (loserCursorsMap.hasOwnProperty('0')) {\r\n // These commands are very messed up\r\n console.warn('Ignoring commands');\r\n return null;\r\n }\r\n // Remove operations belonging to losing cursors\r\n var filteredOperations = [];\r\n for (var i = 0, len = rawOperations.length; i < len; i++) {\r\n if (!loserCursorsMap.hasOwnProperty(rawOperations[i].identifier.major.toString())) {\r\n filteredOperations.push(rawOperations[i]);\r\n }\r\n }\r\n // TODO@Alex: find a better way to do this.\r\n // give the hint that edit operations are tracked to the model\r\n if (commandsData.hadTrackedEditOperation && filteredOperations.length > 0) {\r\n filteredOperations[0]._isTracked = true;\r\n }\r\n var selectionsAfter = ctx.model.pushEditOperations(ctx.selectionsBefore, filteredOperations, function (inverseEditOperations) {\r\n var groupedInverseEditOperations = [];\r\n for (var i = 0; i < ctx.selectionsBefore.length; i++) {\r\n groupedInverseEditOperations[i] = [];\r\n }\r\n for (var _i = 0, inverseEditOperations_1 = inverseEditOperations; _i < inverseEditOperations_1.length; _i++) {\r\n var op = inverseEditOperations_1[_i];\r\n if (!op.identifier) {\r\n // perhaps auto whitespace trim edits\r\n continue;\r\n }\r\n groupedInverseEditOperations[op.identifier.major].push(op);\r\n }\r\n var minorBasedSorter = function (a, b) {\r\n return a.identifier.minor - b.identifier.minor;\r\n };\r\n var cursorSelections = [];\r\n var _loop_1 = function (i) {\r\n if (groupedInverseEditOperations[i].length > 0) {\r\n groupedInverseEditOperations[i].sort(minorBasedSorter);\r\n cursorSelections[i] = commands[i].computeCursorState(ctx.model, {\r\n getInverseEditOperations: function () {\r\n return groupedInverseEditOperations[i];\r\n },\r\n getTrackedSelection: function (id) {\r\n var idx = parseInt(id, 10);\r\n var range = ctx.model._getTrackedRange(ctx.trackedRanges[idx]);\r\n if (ctx.trackedRangesDirection[idx] === 0 /* LTR */) {\r\n return new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\r\n }\r\n return new Selection(range.endLineNumber, range.endColumn, range.startLineNumber, range.startColumn);\r\n }\r\n });\r\n }\r\n else {\r\n cursorSelections[i] = ctx.selectionsBefore[i];\r\n }\r\n };\r\n for (var i = 0; i < ctx.selectionsBefore.length; i++) {\r\n _loop_1(i);\r\n }\r\n return cursorSelections;\r\n });\r\n if (!selectionsAfter) {\r\n selectionsAfter = ctx.selectionsBefore;\r\n }\r\n // Extract losing cursors\r\n var losingCursors = [];\r\n for (var losingCursorIndex in loserCursorsMap) {\r\n if (loserCursorsMap.hasOwnProperty(losingCursorIndex)) {\r\n losingCursors.push(parseInt(losingCursorIndex, 10));\r\n }\r\n }\r\n // Sort losing cursors descending\r\n losingCursors.sort(function (a, b) {\r\n return b - a;\r\n });\r\n // Remove losing cursors\r\n for (var _i = 0, losingCursors_1 = losingCursors; _i < losingCursors_1.length; _i++) {\r\n var losingCursor = losingCursors_1[_i];\r\n selectionsAfter.splice(losingCursor, 1);\r\n }\r\n return selectionsAfter;\r\n };\r\n CommandExecutor._arrayIsEmpty = function (commands) {\r\n for (var i = 0, len = commands.length; i < len; i++) {\r\n if (commands[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n CommandExecutor._getEditOperations = function (ctx, commands) {\r\n var operations = [];\r\n var hadTrackedEditOperation = false;\r\n for (var i = 0, len = commands.length; i < len; i++) {\r\n var command = commands[i];\r\n if (command) {\r\n var r = this._getEditOperationsFromCommand(ctx, i, command);\r\n operations = operations.concat(r.operations);\r\n hadTrackedEditOperation = hadTrackedEditOperation || r.hadTrackedEditOperation;\r\n }\r\n }\r\n return {\r\n operations: operations,\r\n hadTrackedEditOperation: hadTrackedEditOperation\r\n };\r\n };\r\n CommandExecutor._getEditOperationsFromCommand = function (ctx, majorIdentifier, command) {\r\n // This method acts as a transaction, if the command fails\r\n // everything it has done is ignored\r\n var operations = [];\r\n var operationMinor = 0;\r\n var addEditOperation = function (selection, text) {\r\n if (selection.isEmpty() && text === '') {\r\n // This command wants to add a no-op => no thank you\r\n return;\r\n }\r\n operations.push({\r\n identifier: {\r\n major: majorIdentifier,\r\n minor: operationMinor++\r\n },\r\n range: selection,\r\n text: text,\r\n forceMoveMarkers: false,\r\n isAutoWhitespaceEdit: command.insertsAutoWhitespace\r\n });\r\n };\r\n var hadTrackedEditOperation = false;\r\n var addTrackedEditOperation = function (selection, text) {\r\n hadTrackedEditOperation = true;\r\n addEditOperation(selection, text);\r\n };\r\n var trackSelection = function (selection, trackPreviousOnEmpty) {\r\n var stickiness;\r\n if (selection.isEmpty()) {\r\n if (typeof trackPreviousOnEmpty === 'boolean') {\r\n if (trackPreviousOnEmpty) {\r\n stickiness = 2 /* GrowsOnlyWhenTypingBefore */;\r\n }\r\n else {\r\n stickiness = 3 /* GrowsOnlyWhenTypingAfter */;\r\n }\r\n }\r\n else {\r\n // Try to lock it with surrounding text\r\n var maxLineColumn = ctx.model.getLineMaxColumn(selection.startLineNumber);\r\n if (selection.startColumn === maxLineColumn) {\r\n stickiness = 2 /* GrowsOnlyWhenTypingBefore */;\r\n }\r\n else {\r\n stickiness = 3 /* GrowsOnlyWhenTypingAfter */;\r\n }\r\n }\r\n }\r\n else {\r\n stickiness = 1 /* NeverGrowsWhenTypingAtEdges */;\r\n }\r\n var l = ctx.trackedRanges.length;\r\n var id = ctx.model._setTrackedRange(null, selection, stickiness);\r\n ctx.trackedRanges[l] = id;\r\n ctx.trackedRangesDirection[l] = selection.getDirection();\r\n return l.toString();\r\n };\r\n var editOperationBuilder = {\r\n addEditOperation: addEditOperation,\r\n addTrackedEditOperation: addTrackedEditOperation,\r\n trackSelection: trackSelection\r\n };\r\n try {\r\n command.getEditOperations(ctx.model, editOperationBuilder);\r\n }\r\n catch (e) {\r\n // TODO@Alex use notification service if this should be user facing\r\n // e.friendlyMessage = nls.localize('corrupt.commands', \"Unexpected exception while executing command.\");\r\n onUnexpectedError(e);\r\n return {\r\n operations: [],\r\n hadTrackedEditOperation: false\r\n };\r\n }\r\n return {\r\n operations: operations,\r\n hadTrackedEditOperation: hadTrackedEditOperation\r\n };\r\n };\r\n CommandExecutor._getLoserCursorMap = function (operations) {\r\n // This is destructive on the array\r\n operations = operations.slice(0);\r\n // Sort operations with last one first\r\n operations.sort(function (a, b) {\r\n // Note the minus!\r\n return -(Range.compareRangesUsingEnds(a.range, b.range));\r\n });\r\n // Operations can not overlap!\r\n var loserCursorsMap = {};\r\n for (var i = 1; i < operations.length; i++) {\r\n var previousOp = operations[i - 1];\r\n var currentOp = operations[i];\r\n if (previousOp.range.getStartPosition().isBefore(currentOp.range.getEndPosition())) {\r\n var loserMajor = void 0;\r\n if (previousOp.identifier.major > currentOp.identifier.major) {\r\n // previousOp loses the battle\r\n loserMajor = previousOp.identifier.major;\r\n }\r\n else {\r\n loserMajor = currentOp.identifier.major;\r\n }\r\n loserCursorsMap[loserMajor.toString()] = true;\r\n for (var j = 0; j < operations.length; j++) {\r\n if (operations[j].identifier.major === loserMajor) {\r\n operations.splice(j, 1);\r\n if (j < i) {\r\n i--;\r\n }\r\n j--;\r\n }\r\n }\r\n if (i > 0) {\r\n i--;\r\n }\r\n }\r\n }\r\n return loserCursorsMap;\r\n };\r\n return CommandExecutor;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar InternalEditorAction = /** @class */ (function () {\r\n function InternalEditorAction(id, label, alias, precondition, run, contextKeyService) {\r\n this.id = id;\r\n this.label = label;\r\n this.alias = alias;\r\n this._precondition = precondition;\r\n this._run = run;\r\n this._contextKeyService = contextKeyService;\r\n }\r\n InternalEditorAction.prototype.isSupported = function () {\r\n return this._contextKeyService.contextMatchesRules(this._precondition);\r\n };\r\n InternalEditorAction.prototype.run = function () {\r\n if (!this.isSupported()) {\r\n return Promise.resolve(undefined);\r\n }\r\n var r = this._run();\r\n return r ? r : Promise.resolve(undefined);\r\n };\r\n return InternalEditorAction;\r\n}());\r\nexport { InternalEditorAction };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { LineTokens } from '../core/lineTokens.js';\r\nimport { NULL_STATE, nullTokenize2 } from './nullMode.js';\r\nvar fallback = {\r\n getInitialState: function () { return NULL_STATE; },\r\n tokenize2: function (buffer, state, deltaOffset) { return nullTokenize2(0 /* Null */, buffer, state, deltaOffset); }\r\n};\r\nexport function tokenizeToString(text, tokenizationSupport) {\r\n if (tokenizationSupport === void 0) { tokenizationSupport = fallback; }\r\n return _tokenizeToString(text, tokenizationSupport || fallback);\r\n}\r\nexport function tokenizeLineToHTML(text, viewLineTokens, colorMap, startOffset, endOffset, tabSize, useNbsp) {\r\n var result = \"
\";\r\n var charIndex = startOffset;\r\n var tabsCharDelta = 0;\r\n for (var tokenIndex = 0, tokenCount = viewLineTokens.getCount(); tokenIndex < tokenCount; tokenIndex++) {\r\n var tokenEndIndex = viewLineTokens.getEndOffset(tokenIndex);\r\n if (tokenEndIndex <= startOffset) {\r\n continue;\r\n }\r\n var partContent = '';\r\n for (; charIndex < tokenEndIndex && charIndex < endOffset; charIndex++) {\r\n var charCode = text.charCodeAt(charIndex);\r\n switch (charCode) {\r\n case 9 /* Tab */:\r\n var insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\r\n tabsCharDelta += insertSpacesCount - 1;\r\n while (insertSpacesCount > 0) {\r\n partContent += useNbsp ? ' ' : ' ';\r\n insertSpacesCount--;\r\n }\r\n break;\r\n case 60 /* LessThan */:\r\n partContent += '<';\r\n break;\r\n case 62 /* GreaterThan */:\r\n partContent += '>';\r\n break;\r\n case 38 /* Ampersand */:\r\n partContent += '&';\r\n break;\r\n case 0 /* Null */:\r\n partContent += '�';\r\n break;\r\n case 65279 /* UTF8_BOM */:\r\n case 8232 /* LINE_SEPARATOR_2028 */:\r\n partContent += '\\ufffd';\r\n break;\r\n case 13 /* CarriageReturn */:\r\n // zero width space, because carriage return would introduce a line break\r\n partContent += '​';\r\n break;\r\n case 32 /* Space */:\r\n partContent += useNbsp ? ' ' : ' ';\r\n break;\r\n default:\r\n partContent += String.fromCharCode(charCode);\r\n }\r\n }\r\n result += \"\" + partContent + \"\";\r\n if (tokenEndIndex > endOffset || charIndex >= endOffset) {\r\n break;\r\n }\r\n }\r\n result += \"
\";\r\n return result;\r\n}\r\nfunction _tokenizeToString(text, tokenizationSupport) {\r\n var result = \"
\";\r\n var lines = text.split(/\\r\\n|\\r|\\n/);\r\n var currentState = tokenizationSupport.getInitialState();\r\n for (var i = 0, len = lines.length; i < len; i++) {\r\n var line = lines[i];\r\n if (i > 0) {\r\n result += \"
\";\r\n }\r\n var tokenizationResult = tokenizationSupport.tokenize2(line, currentState, 0);\r\n LineTokens.convertToEndOffset(tokenizationResult.tokens, line.length);\r\n var lineTokens = new LineTokens(tokenizationResult.tokens, line);\r\n var viewLineTokens = lineTokens.inflate();\r\n var startOffset = 0;\r\n for (var j = 0, lenJ = viewLineTokens.getCount(); j < lenJ; j++) {\r\n var type = viewLineTokens.getClassName(j);\r\n var endIndex = viewLineTokens.getEndOffset(j);\r\n result += \"\" + strings.escape(line.substring(startOffset, endIndex)) + \"\";\r\n startOffset = endIndex;\r\n }\r\n currentState = tokenizationResult.endState;\r\n }\r\n result += \"
\";\r\n return result;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as strings from '../../../base/common/strings.js';\r\nvar PendingChanges = /** @class */ (function () {\r\n function PendingChanges() {\r\n this._hasPending = false;\r\n this._inserts = [];\r\n this._changes = [];\r\n this._removes = [];\r\n }\r\n PendingChanges.prototype.insert = function (x) {\r\n this._hasPending = true;\r\n this._inserts.push(x);\r\n };\r\n PendingChanges.prototype.change = function (x) {\r\n this._hasPending = true;\r\n this._changes.push(x);\r\n };\r\n PendingChanges.prototype.remove = function (x) {\r\n this._hasPending = true;\r\n this._removes.push(x);\r\n };\r\n PendingChanges.prototype.mustCommit = function () {\r\n return this._hasPending;\r\n };\r\n PendingChanges.prototype.commit = function (linesLayout) {\r\n if (!this._hasPending) {\r\n return;\r\n }\r\n var inserts = this._inserts;\r\n var changes = this._changes;\r\n var removes = this._removes;\r\n this._hasPending = false;\r\n this._inserts = [];\r\n this._changes = [];\r\n this._removes = [];\r\n linesLayout._commitPendingChanges(inserts, changes, removes);\r\n };\r\n return PendingChanges;\r\n}());\r\nvar EditorWhitespace = /** @class */ (function () {\r\n function EditorWhitespace(id, afterLineNumber, ordinal, height, minWidth) {\r\n this.id = id;\r\n this.afterLineNumber = afterLineNumber;\r\n this.ordinal = ordinal;\r\n this.height = height;\r\n this.minWidth = minWidth;\r\n this.prefixSum = 0;\r\n }\r\n return EditorWhitespace;\r\n}());\r\nexport { EditorWhitespace };\r\n/**\r\n * Layouting of objects that take vertical space (by having a height) and push down other objects.\r\n *\r\n * These objects are basically either text (lines) or spaces between those lines (whitespaces).\r\n * This provides commodity operations for working with lines that contain whitespace that pushes lines lower (vertically).\r\n */\r\nvar LinesLayout = /** @class */ (function () {\r\n function LinesLayout(lineCount, lineHeight) {\r\n this._instanceId = strings.singleLetterHash(++LinesLayout.INSTANCE_COUNT);\r\n this._pendingChanges = new PendingChanges();\r\n this._lastWhitespaceId = 0;\r\n this._arr = [];\r\n this._prefixSumValidIndex = -1;\r\n this._minWidth = -1; /* marker for not being computed */\r\n this._lineCount = lineCount;\r\n this._lineHeight = lineHeight;\r\n }\r\n /**\r\n * Find the insertion index for a new value inside a sorted array of values.\r\n * If the value is already present in the sorted array, the insertion index will be after the already existing value.\r\n */\r\n LinesLayout.findInsertionIndex = function (arr, afterLineNumber, ordinal) {\r\n var low = 0;\r\n var high = arr.length;\r\n while (low < high) {\r\n var mid = ((low + high) >>> 1);\r\n if (afterLineNumber === arr[mid].afterLineNumber) {\r\n if (ordinal < arr[mid].ordinal) {\r\n high = mid;\r\n }\r\n else {\r\n low = mid + 1;\r\n }\r\n }\r\n else if (afterLineNumber < arr[mid].afterLineNumber) {\r\n high = mid;\r\n }\r\n else {\r\n low = mid + 1;\r\n }\r\n }\r\n return low;\r\n };\r\n /**\r\n * Change the height of a line in pixels.\r\n */\r\n LinesLayout.prototype.setLineHeight = function (lineHeight) {\r\n this._checkPendingChanges();\r\n this._lineHeight = lineHeight;\r\n };\r\n /**\r\n * Set the number of lines.\r\n *\r\n * @param lineCount New number of lines.\r\n */\r\n LinesLayout.prototype.onFlushed = function (lineCount) {\r\n this._checkPendingChanges();\r\n this._lineCount = lineCount;\r\n };\r\n LinesLayout.prototype.changeWhitespace = function (callback) {\r\n var _this = this;\r\n try {\r\n var accessor = {\r\n insertWhitespace: function (afterLineNumber, ordinal, heightInPx, minWidth) {\r\n afterLineNumber = afterLineNumber | 0;\r\n ordinal = ordinal | 0;\r\n heightInPx = heightInPx | 0;\r\n minWidth = minWidth | 0;\r\n var id = _this._instanceId + (++_this._lastWhitespaceId);\r\n _this._pendingChanges.insert(new EditorWhitespace(id, afterLineNumber, ordinal, heightInPx, minWidth));\r\n return id;\r\n },\r\n changeOneWhitespace: function (id, newAfterLineNumber, newHeight) {\r\n newAfterLineNumber = newAfterLineNumber | 0;\r\n newHeight = newHeight | 0;\r\n _this._pendingChanges.change({ id: id, newAfterLineNumber: newAfterLineNumber, newHeight: newHeight });\r\n },\r\n removeWhitespace: function (id) {\r\n _this._pendingChanges.remove({ id: id });\r\n }\r\n };\r\n return callback(accessor);\r\n }\r\n finally {\r\n this._pendingChanges.commit(this);\r\n }\r\n };\r\n LinesLayout.prototype._commitPendingChanges = function (inserts, changes, removes) {\r\n if (inserts.length > 0 || removes.length > 0) {\r\n this._minWidth = -1; /* marker for not being computed */\r\n }\r\n if (inserts.length + changes.length + removes.length <= 1) {\r\n // when only one thing happened, handle it \"delicately\"\r\n for (var _i = 0, inserts_1 = inserts; _i < inserts_1.length; _i++) {\r\n var insert = inserts_1[_i];\r\n this._insertWhitespace(insert);\r\n }\r\n for (var _a = 0, changes_1 = changes; _a < changes_1.length; _a++) {\r\n var change = changes_1[_a];\r\n this._changeOneWhitespace(change.id, change.newAfterLineNumber, change.newHeight);\r\n }\r\n for (var _b = 0, removes_1 = removes; _b < removes_1.length; _b++) {\r\n var remove = removes_1[_b];\r\n var index = this._findWhitespaceIndex(remove.id);\r\n if (index === -1) {\r\n continue;\r\n }\r\n this._removeWhitespace(index);\r\n }\r\n return;\r\n }\r\n // simply rebuild the entire datastructure\r\n var toRemove = new Set();\r\n for (var _c = 0, removes_2 = removes; _c < removes_2.length; _c++) {\r\n var remove = removes_2[_c];\r\n toRemove.add(remove.id);\r\n }\r\n var toChange = new Map();\r\n for (var _d = 0, changes_2 = changes; _d < changes_2.length; _d++) {\r\n var change = changes_2[_d];\r\n toChange.set(change.id, change);\r\n }\r\n var applyRemoveAndChange = function (whitespaces) {\r\n var result = [];\r\n for (var _i = 0, whitespaces_1 = whitespaces; _i < whitespaces_1.length; _i++) {\r\n var whitespace = whitespaces_1[_i];\r\n if (toRemove.has(whitespace.id)) {\r\n continue;\r\n }\r\n if (toChange.has(whitespace.id)) {\r\n var change = toChange.get(whitespace.id);\r\n whitespace.afterLineNumber = change.newAfterLineNumber;\r\n whitespace.height = change.newHeight;\r\n }\r\n result.push(whitespace);\r\n }\r\n return result;\r\n };\r\n var result = applyRemoveAndChange(this._arr).concat(applyRemoveAndChange(inserts));\r\n result.sort(function (a, b) {\r\n if (a.afterLineNumber === b.afterLineNumber) {\r\n return a.ordinal - b.ordinal;\r\n }\r\n return a.afterLineNumber - b.afterLineNumber;\r\n });\r\n this._arr = result;\r\n this._prefixSumValidIndex = -1;\r\n };\r\n LinesLayout.prototype._checkPendingChanges = function () {\r\n if (this._pendingChanges.mustCommit()) {\r\n console.warn(\"Commiting pending changes before change accessor leaves due to read access.\");\r\n this._pendingChanges.commit(this);\r\n }\r\n };\r\n LinesLayout.prototype._insertWhitespace = function (whitespace) {\r\n var insertIndex = LinesLayout.findInsertionIndex(this._arr, whitespace.afterLineNumber, whitespace.ordinal);\r\n this._arr.splice(insertIndex, 0, whitespace);\r\n this._prefixSumValidIndex = Math.min(this._prefixSumValidIndex, insertIndex - 1);\r\n };\r\n LinesLayout.prototype._findWhitespaceIndex = function (id) {\r\n var arr = this._arr;\r\n for (var i = 0, len = arr.length; i < len; i++) {\r\n if (arr[i].id === id) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n LinesLayout.prototype._changeOneWhitespace = function (id, newAfterLineNumber, newHeight) {\r\n var index = this._findWhitespaceIndex(id);\r\n if (index === -1) {\r\n return;\r\n }\r\n if (this._arr[index].height !== newHeight) {\r\n this._arr[index].height = newHeight;\r\n this._prefixSumValidIndex = Math.min(this._prefixSumValidIndex, index - 1);\r\n }\r\n if (this._arr[index].afterLineNumber !== newAfterLineNumber) {\r\n // `afterLineNumber` changed for this whitespace\r\n // Record old whitespace\r\n var whitespace = this._arr[index];\r\n // Since changing `afterLineNumber` can trigger a reordering, we're gonna remove this whitespace\r\n this._removeWhitespace(index);\r\n whitespace.afterLineNumber = newAfterLineNumber;\r\n // And add it again\r\n this._insertWhitespace(whitespace);\r\n }\r\n };\r\n LinesLayout.prototype._removeWhitespace = function (removeIndex) {\r\n this._arr.splice(removeIndex, 1);\r\n this._prefixSumValidIndex = Math.min(this._prefixSumValidIndex, removeIndex - 1);\r\n };\r\n /**\r\n * Notify the layouter that lines have been deleted (a continuous zone of lines).\r\n *\r\n * @param fromLineNumber The line number at which the deletion started, inclusive\r\n * @param toLineNumber The line number at which the deletion ended, inclusive\r\n */\r\n LinesLayout.prototype.onLinesDeleted = function (fromLineNumber, toLineNumber) {\r\n this._checkPendingChanges();\r\n fromLineNumber = fromLineNumber | 0;\r\n toLineNumber = toLineNumber | 0;\r\n this._lineCount -= (toLineNumber - fromLineNumber + 1);\r\n for (var i = 0, len = this._arr.length; i < len; i++) {\r\n var afterLineNumber = this._arr[i].afterLineNumber;\r\n if (fromLineNumber <= afterLineNumber && afterLineNumber <= toLineNumber) {\r\n // The line this whitespace was after has been deleted\r\n // => move whitespace to before first deleted line\r\n this._arr[i].afterLineNumber = fromLineNumber - 1;\r\n }\r\n else if (afterLineNumber > toLineNumber) {\r\n // The line this whitespace was after has been moved up\r\n // => move whitespace up\r\n this._arr[i].afterLineNumber -= (toLineNumber - fromLineNumber + 1);\r\n }\r\n }\r\n };\r\n /**\r\n * Notify the layouter that lines have been inserted (a continuous zone of lines).\r\n *\r\n * @param fromLineNumber The line number at which the insertion started, inclusive\r\n * @param toLineNumber The line number at which the insertion ended, inclusive.\r\n */\r\n LinesLayout.prototype.onLinesInserted = function (fromLineNumber, toLineNumber) {\r\n this._checkPendingChanges();\r\n fromLineNumber = fromLineNumber | 0;\r\n toLineNumber = toLineNumber | 0;\r\n this._lineCount += (toLineNumber - fromLineNumber + 1);\r\n for (var i = 0, len = this._arr.length; i < len; i++) {\r\n var afterLineNumber = this._arr[i].afterLineNumber;\r\n if (fromLineNumber <= afterLineNumber) {\r\n this._arr[i].afterLineNumber += (toLineNumber - fromLineNumber + 1);\r\n }\r\n }\r\n };\r\n /**\r\n * Get the sum of all the whitespaces.\r\n */\r\n LinesLayout.prototype.getWhitespacesTotalHeight = function () {\r\n this._checkPendingChanges();\r\n if (this._arr.length === 0) {\r\n return 0;\r\n }\r\n return this.getWhitespacesAccumulatedHeight(this._arr.length - 1);\r\n };\r\n /**\r\n * Return the sum of the heights of the whitespaces at [0..index].\r\n * This includes the whitespace at `index`.\r\n *\r\n * @param index The index of the whitespace.\r\n * @return The sum of the heights of all whitespaces before the one at `index`, including the one at `index`.\r\n */\r\n LinesLayout.prototype.getWhitespacesAccumulatedHeight = function (index) {\r\n this._checkPendingChanges();\r\n index = index | 0;\r\n var startIndex = Math.max(0, this._prefixSumValidIndex + 1);\r\n if (startIndex === 0) {\r\n this._arr[0].prefixSum = this._arr[0].height;\r\n startIndex++;\r\n }\r\n for (var i = startIndex; i <= index; i++) {\r\n this._arr[i].prefixSum = this._arr[i - 1].prefixSum + this._arr[i].height;\r\n }\r\n this._prefixSumValidIndex = Math.max(this._prefixSumValidIndex, index);\r\n return this._arr[index].prefixSum;\r\n };\r\n /**\r\n * Get the sum of heights for all objects.\r\n *\r\n * @return The sum of heights for all objects.\r\n */\r\n LinesLayout.prototype.getLinesTotalHeight = function () {\r\n this._checkPendingChanges();\r\n var linesHeight = this._lineHeight * this._lineCount;\r\n var whitespacesHeight = this.getWhitespacesTotalHeight();\r\n return linesHeight + whitespacesHeight;\r\n };\r\n /**\r\n * Returns the accumulated height of whitespaces before the given line number.\r\n *\r\n * @param lineNumber The line number\r\n */\r\n LinesLayout.prototype.getWhitespaceAccumulatedHeightBeforeLineNumber = function (lineNumber) {\r\n this._checkPendingChanges();\r\n lineNumber = lineNumber | 0;\r\n var lastWhitespaceBeforeLineNumber = this._findLastWhitespaceBeforeLineNumber(lineNumber);\r\n if (lastWhitespaceBeforeLineNumber === -1) {\r\n return 0;\r\n }\r\n return this.getWhitespacesAccumulatedHeight(lastWhitespaceBeforeLineNumber);\r\n };\r\n LinesLayout.prototype._findLastWhitespaceBeforeLineNumber = function (lineNumber) {\r\n lineNumber = lineNumber | 0;\r\n // Find the whitespace before line number\r\n var arr = this._arr;\r\n var low = 0;\r\n var high = arr.length - 1;\r\n while (low <= high) {\r\n var delta = (high - low) | 0;\r\n var halfDelta = (delta / 2) | 0;\r\n var mid = (low + halfDelta) | 0;\r\n if (arr[mid].afterLineNumber < lineNumber) {\r\n if (mid + 1 >= arr.length || arr[mid + 1].afterLineNumber >= lineNumber) {\r\n return mid;\r\n }\r\n else {\r\n low = (mid + 1) | 0;\r\n }\r\n }\r\n else {\r\n high = (mid - 1) | 0;\r\n }\r\n }\r\n return -1;\r\n };\r\n LinesLayout.prototype._findFirstWhitespaceAfterLineNumber = function (lineNumber) {\r\n lineNumber = lineNumber | 0;\r\n var lastWhitespaceBeforeLineNumber = this._findLastWhitespaceBeforeLineNumber(lineNumber);\r\n var firstWhitespaceAfterLineNumber = lastWhitespaceBeforeLineNumber + 1;\r\n if (firstWhitespaceAfterLineNumber < this._arr.length) {\r\n return firstWhitespaceAfterLineNumber;\r\n }\r\n return -1;\r\n };\r\n /**\r\n * Find the index of the first whitespace which has `afterLineNumber` >= `lineNumber`.\r\n * @return The index of the first whitespace with `afterLineNumber` >= `lineNumber` or -1 if no whitespace is found.\r\n */\r\n LinesLayout.prototype.getFirstWhitespaceIndexAfterLineNumber = function (lineNumber) {\r\n this._checkPendingChanges();\r\n lineNumber = lineNumber | 0;\r\n return this._findFirstWhitespaceAfterLineNumber(lineNumber);\r\n };\r\n /**\r\n * Get the vertical offset (the sum of heights for all objects above) a certain line number.\r\n *\r\n * @param lineNumber The line number\r\n * @return The sum of heights for all objects above `lineNumber`.\r\n */\r\n LinesLayout.prototype.getVerticalOffsetForLineNumber = function (lineNumber) {\r\n this._checkPendingChanges();\r\n lineNumber = lineNumber | 0;\r\n var previousLinesHeight;\r\n if (lineNumber > 1) {\r\n previousLinesHeight = this._lineHeight * (lineNumber - 1);\r\n }\r\n else {\r\n previousLinesHeight = 0;\r\n }\r\n var previousWhitespacesHeight = this.getWhitespaceAccumulatedHeightBeforeLineNumber(lineNumber);\r\n return previousLinesHeight + previousWhitespacesHeight;\r\n };\r\n /**\r\n * The maximum min width for all whitespaces.\r\n */\r\n LinesLayout.prototype.getWhitespaceMinWidth = function () {\r\n this._checkPendingChanges();\r\n if (this._minWidth === -1) {\r\n var minWidth = 0;\r\n for (var i = 0, len = this._arr.length; i < len; i++) {\r\n minWidth = Math.max(minWidth, this._arr[i].minWidth);\r\n }\r\n this._minWidth = minWidth;\r\n }\r\n return this._minWidth;\r\n };\r\n /**\r\n * Check if `verticalOffset` is below all lines.\r\n */\r\n LinesLayout.prototype.isAfterLines = function (verticalOffset) {\r\n this._checkPendingChanges();\r\n var totalHeight = this.getLinesTotalHeight();\r\n return verticalOffset > totalHeight;\r\n };\r\n /**\r\n * Find the first line number that is at or after vertical offset `verticalOffset`.\r\n * i.e. if getVerticalOffsetForLine(line) is x and getVerticalOffsetForLine(line + 1) is y, then\r\n * getLineNumberAtOrAfterVerticalOffset(i) = line, x <= i < y.\r\n *\r\n * @param verticalOffset The vertical offset to search at.\r\n * @return The line number at or after vertical offset `verticalOffset`.\r\n */\r\n LinesLayout.prototype.getLineNumberAtOrAfterVerticalOffset = function (verticalOffset) {\r\n this._checkPendingChanges();\r\n verticalOffset = verticalOffset | 0;\r\n if (verticalOffset < 0) {\r\n return 1;\r\n }\r\n var linesCount = this._lineCount | 0;\r\n var lineHeight = this._lineHeight;\r\n var minLineNumber = 1;\r\n var maxLineNumber = linesCount;\r\n while (minLineNumber < maxLineNumber) {\r\n var midLineNumber = ((minLineNumber + maxLineNumber) / 2) | 0;\r\n var midLineNumberVerticalOffset = this.getVerticalOffsetForLineNumber(midLineNumber) | 0;\r\n if (verticalOffset >= midLineNumberVerticalOffset + lineHeight) {\r\n // vertical offset is after mid line number\r\n minLineNumber = midLineNumber + 1;\r\n }\r\n else if (verticalOffset >= midLineNumberVerticalOffset) {\r\n // Hit\r\n return midLineNumber;\r\n }\r\n else {\r\n // vertical offset is before mid line number, but mid line number could still be what we're searching for\r\n maxLineNumber = midLineNumber;\r\n }\r\n }\r\n if (minLineNumber > linesCount) {\r\n return linesCount;\r\n }\r\n return minLineNumber;\r\n };\r\n /**\r\n * Get all the lines and their relative vertical offsets that are positioned between `verticalOffset1` and `verticalOffset2`.\r\n *\r\n * @param verticalOffset1 The beginning of the viewport.\r\n * @param verticalOffset2 The end of the viewport.\r\n * @return A structure describing the lines positioned between `verticalOffset1` and `verticalOffset2`.\r\n */\r\n LinesLayout.prototype.getLinesViewportData = function (verticalOffset1, verticalOffset2) {\r\n this._checkPendingChanges();\r\n verticalOffset1 = verticalOffset1 | 0;\r\n verticalOffset2 = verticalOffset2 | 0;\r\n var lineHeight = this._lineHeight;\r\n // Find first line number\r\n // We don't live in a perfect world, so the line number might start before or after verticalOffset1\r\n var startLineNumber = this.getLineNumberAtOrAfterVerticalOffset(verticalOffset1) | 0;\r\n var startLineNumberVerticalOffset = this.getVerticalOffsetForLineNumber(startLineNumber) | 0;\r\n var endLineNumber = this._lineCount | 0;\r\n // Also keep track of what whitespace we've got\r\n var whitespaceIndex = this.getFirstWhitespaceIndexAfterLineNumber(startLineNumber) | 0;\r\n var whitespaceCount = this.getWhitespacesCount() | 0;\r\n var currentWhitespaceHeight;\r\n var currentWhitespaceAfterLineNumber;\r\n if (whitespaceIndex === -1) {\r\n whitespaceIndex = whitespaceCount;\r\n currentWhitespaceAfterLineNumber = endLineNumber + 1;\r\n currentWhitespaceHeight = 0;\r\n }\r\n else {\r\n currentWhitespaceAfterLineNumber = this.getAfterLineNumberForWhitespaceIndex(whitespaceIndex) | 0;\r\n currentWhitespaceHeight = this.getHeightForWhitespaceIndex(whitespaceIndex) | 0;\r\n }\r\n var currentVerticalOffset = startLineNumberVerticalOffset;\r\n var currentLineRelativeOffset = currentVerticalOffset;\r\n // IE (all versions) cannot handle units above about 1,533,908 px, so every 500k pixels bring numbers down\r\n var STEP_SIZE = 500000;\r\n var bigNumbersDelta = 0;\r\n if (startLineNumberVerticalOffset >= STEP_SIZE) {\r\n // Compute a delta that guarantees that lines are positioned at `lineHeight` increments\r\n bigNumbersDelta = Math.floor(startLineNumberVerticalOffset / STEP_SIZE) * STEP_SIZE;\r\n bigNumbersDelta = Math.floor(bigNumbersDelta / lineHeight) * lineHeight;\r\n currentLineRelativeOffset -= bigNumbersDelta;\r\n }\r\n var linesOffsets = [];\r\n var verticalCenter = verticalOffset1 + (verticalOffset2 - verticalOffset1) / 2;\r\n var centeredLineNumber = -1;\r\n // Figure out how far the lines go\r\n for (var lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\r\n if (centeredLineNumber === -1) {\r\n var currentLineTop = currentVerticalOffset;\r\n var currentLineBottom = currentVerticalOffset + lineHeight;\r\n if ((currentLineTop <= verticalCenter && verticalCenter < currentLineBottom) || currentLineTop > verticalCenter) {\r\n centeredLineNumber = lineNumber;\r\n }\r\n }\r\n // Count current line height in the vertical offsets\r\n currentVerticalOffset += lineHeight;\r\n linesOffsets[lineNumber - startLineNumber] = currentLineRelativeOffset;\r\n // Next line starts immediately after this one\r\n currentLineRelativeOffset += lineHeight;\r\n while (currentWhitespaceAfterLineNumber === lineNumber) {\r\n // Push down next line with the height of the current whitespace\r\n currentLineRelativeOffset += currentWhitespaceHeight;\r\n // Count current whitespace in the vertical offsets\r\n currentVerticalOffset += currentWhitespaceHeight;\r\n whitespaceIndex++;\r\n if (whitespaceIndex >= whitespaceCount) {\r\n currentWhitespaceAfterLineNumber = endLineNumber + 1;\r\n }\r\n else {\r\n currentWhitespaceAfterLineNumber = this.getAfterLineNumberForWhitespaceIndex(whitespaceIndex) | 0;\r\n currentWhitespaceHeight = this.getHeightForWhitespaceIndex(whitespaceIndex) | 0;\r\n }\r\n }\r\n if (currentVerticalOffset >= verticalOffset2) {\r\n // We have covered the entire viewport area, time to stop\r\n endLineNumber = lineNumber;\r\n break;\r\n }\r\n }\r\n if (centeredLineNumber === -1) {\r\n centeredLineNumber = endLineNumber;\r\n }\r\n var endLineNumberVerticalOffset = this.getVerticalOffsetForLineNumber(endLineNumber) | 0;\r\n var completelyVisibleStartLineNumber = startLineNumber;\r\n var completelyVisibleEndLineNumber = endLineNumber;\r\n if (completelyVisibleStartLineNumber < completelyVisibleEndLineNumber) {\r\n if (startLineNumberVerticalOffset < verticalOffset1) {\r\n completelyVisibleStartLineNumber++;\r\n }\r\n }\r\n if (completelyVisibleStartLineNumber < completelyVisibleEndLineNumber) {\r\n if (endLineNumberVerticalOffset + lineHeight > verticalOffset2) {\r\n completelyVisibleEndLineNumber--;\r\n }\r\n }\r\n return {\r\n bigNumbersDelta: bigNumbersDelta,\r\n startLineNumber: startLineNumber,\r\n endLineNumber: endLineNumber,\r\n relativeVerticalOffset: linesOffsets,\r\n centeredLineNumber: centeredLineNumber,\r\n completelyVisibleStartLineNumber: completelyVisibleStartLineNumber,\r\n completelyVisibleEndLineNumber: completelyVisibleEndLineNumber\r\n };\r\n };\r\n LinesLayout.prototype.getVerticalOffsetForWhitespaceIndex = function (whitespaceIndex) {\r\n this._checkPendingChanges();\r\n whitespaceIndex = whitespaceIndex | 0;\r\n var afterLineNumber = this.getAfterLineNumberForWhitespaceIndex(whitespaceIndex);\r\n var previousLinesHeight;\r\n if (afterLineNumber >= 1) {\r\n previousLinesHeight = this._lineHeight * afterLineNumber;\r\n }\r\n else {\r\n previousLinesHeight = 0;\r\n }\r\n var previousWhitespacesHeight;\r\n if (whitespaceIndex > 0) {\r\n previousWhitespacesHeight = this.getWhitespacesAccumulatedHeight(whitespaceIndex - 1);\r\n }\r\n else {\r\n previousWhitespacesHeight = 0;\r\n }\r\n return previousLinesHeight + previousWhitespacesHeight;\r\n };\r\n LinesLayout.prototype.getWhitespaceIndexAtOrAfterVerticallOffset = function (verticalOffset) {\r\n this._checkPendingChanges();\r\n verticalOffset = verticalOffset | 0;\r\n var minWhitespaceIndex = 0;\r\n var maxWhitespaceIndex = this.getWhitespacesCount() - 1;\r\n if (maxWhitespaceIndex < 0) {\r\n return -1;\r\n }\r\n // Special case: nothing to be found\r\n var maxWhitespaceVerticalOffset = this.getVerticalOffsetForWhitespaceIndex(maxWhitespaceIndex);\r\n var maxWhitespaceHeight = this.getHeightForWhitespaceIndex(maxWhitespaceIndex);\r\n if (verticalOffset >= maxWhitespaceVerticalOffset + maxWhitespaceHeight) {\r\n return -1;\r\n }\r\n while (minWhitespaceIndex < maxWhitespaceIndex) {\r\n var midWhitespaceIndex = Math.floor((minWhitespaceIndex + maxWhitespaceIndex) / 2);\r\n var midWhitespaceVerticalOffset = this.getVerticalOffsetForWhitespaceIndex(midWhitespaceIndex);\r\n var midWhitespaceHeight = this.getHeightForWhitespaceIndex(midWhitespaceIndex);\r\n if (verticalOffset >= midWhitespaceVerticalOffset + midWhitespaceHeight) {\r\n // vertical offset is after whitespace\r\n minWhitespaceIndex = midWhitespaceIndex + 1;\r\n }\r\n else if (verticalOffset >= midWhitespaceVerticalOffset) {\r\n // Hit\r\n return midWhitespaceIndex;\r\n }\r\n else {\r\n // vertical offset is before whitespace, but midWhitespaceIndex might still be what we're searching for\r\n maxWhitespaceIndex = midWhitespaceIndex;\r\n }\r\n }\r\n return minWhitespaceIndex;\r\n };\r\n /**\r\n * Get exactly the whitespace that is layouted at `verticalOffset`.\r\n *\r\n * @param verticalOffset The vertical offset.\r\n * @return Precisely the whitespace that is layouted at `verticaloffset` or null.\r\n */\r\n LinesLayout.prototype.getWhitespaceAtVerticalOffset = function (verticalOffset) {\r\n this._checkPendingChanges();\r\n verticalOffset = verticalOffset | 0;\r\n var candidateIndex = this.getWhitespaceIndexAtOrAfterVerticallOffset(verticalOffset);\r\n if (candidateIndex < 0) {\r\n return null;\r\n }\r\n if (candidateIndex >= this.getWhitespacesCount()) {\r\n return null;\r\n }\r\n var candidateTop = this.getVerticalOffsetForWhitespaceIndex(candidateIndex);\r\n if (candidateTop > verticalOffset) {\r\n return null;\r\n }\r\n var candidateHeight = this.getHeightForWhitespaceIndex(candidateIndex);\r\n var candidateId = this.getIdForWhitespaceIndex(candidateIndex);\r\n var candidateAfterLineNumber = this.getAfterLineNumberForWhitespaceIndex(candidateIndex);\r\n return {\r\n id: candidateId,\r\n afterLineNumber: candidateAfterLineNumber,\r\n verticalOffset: candidateTop,\r\n height: candidateHeight\r\n };\r\n };\r\n /**\r\n * Get a list of whitespaces that are positioned between `verticalOffset1` and `verticalOffset2`.\r\n *\r\n * @param verticalOffset1 The beginning of the viewport.\r\n * @param verticalOffset2 The end of the viewport.\r\n * @return An array with all the whitespaces in the viewport. If no whitespace is in viewport, the array is empty.\r\n */\r\n LinesLayout.prototype.getWhitespaceViewportData = function (verticalOffset1, verticalOffset2) {\r\n this._checkPendingChanges();\r\n verticalOffset1 = verticalOffset1 | 0;\r\n verticalOffset2 = verticalOffset2 | 0;\r\n var startIndex = this.getWhitespaceIndexAtOrAfterVerticallOffset(verticalOffset1);\r\n var endIndex = this.getWhitespacesCount() - 1;\r\n if (startIndex < 0) {\r\n return [];\r\n }\r\n var result = [];\r\n for (var i = startIndex; i <= endIndex; i++) {\r\n var top_1 = this.getVerticalOffsetForWhitespaceIndex(i);\r\n var height = this.getHeightForWhitespaceIndex(i);\r\n if (top_1 >= verticalOffset2) {\r\n break;\r\n }\r\n result.push({\r\n id: this.getIdForWhitespaceIndex(i),\r\n afterLineNumber: this.getAfterLineNumberForWhitespaceIndex(i),\r\n verticalOffset: top_1,\r\n height: height\r\n });\r\n }\r\n return result;\r\n };\r\n /**\r\n * Get all whitespaces.\r\n */\r\n LinesLayout.prototype.getWhitespaces = function () {\r\n this._checkPendingChanges();\r\n return this._arr.slice(0);\r\n };\r\n /**\r\n * The number of whitespaces.\r\n */\r\n LinesLayout.prototype.getWhitespacesCount = function () {\r\n this._checkPendingChanges();\r\n return this._arr.length;\r\n };\r\n /**\r\n * Get the `id` for whitespace at index `index`.\r\n *\r\n * @param index The index of the whitespace.\r\n * @return `id` of whitespace at `index`.\r\n */\r\n LinesLayout.prototype.getIdForWhitespaceIndex = function (index) {\r\n this._checkPendingChanges();\r\n index = index | 0;\r\n return this._arr[index].id;\r\n };\r\n /**\r\n * Get the `afterLineNumber` for whitespace at index `index`.\r\n *\r\n * @param index The index of the whitespace.\r\n * @return `afterLineNumber` of whitespace at `index`.\r\n */\r\n LinesLayout.prototype.getAfterLineNumberForWhitespaceIndex = function (index) {\r\n this._checkPendingChanges();\r\n index = index | 0;\r\n return this._arr[index].afterLineNumber;\r\n };\r\n /**\r\n * Get the `height` for whitespace at index `index`.\r\n *\r\n * @param index The index of the whitespace.\r\n * @return `height` of whitespace at `index`.\r\n */\r\n LinesLayout.prototype.getHeightForWhitespaceIndex = function (index) {\r\n this._checkPendingChanges();\r\n index = index | 0;\r\n return this._arr[index].height;\r\n };\r\n LinesLayout.INSTANCE_COUNT = 0;\r\n return LinesLayout;\r\n}());\r\nexport { LinesLayout };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { Scrollable } from '../../../base/common/scrollable.js';\r\nimport { LinesLayout } from './linesLayout.js';\r\nimport { Viewport } from '../viewModel/viewModel.js';\r\nvar SMOOTH_SCROLLING_TIME = 125;\r\nvar ViewLayout = /** @class */ (function (_super) {\r\n __extends(ViewLayout, _super);\r\n function ViewLayout(configuration, lineCount, scheduleAtNextAnimationFrame) {\r\n var _this = _super.call(this) || this;\r\n _this._configuration = configuration;\r\n var options = _this._configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._linesLayout = new LinesLayout(lineCount, options.get(47 /* lineHeight */));\r\n _this.scrollable = _this._register(new Scrollable(0, scheduleAtNextAnimationFrame));\r\n _this._configureSmoothScrollDuration();\r\n _this.scrollable.setScrollDimensions({\r\n width: layoutInfo.contentWidth,\r\n height: layoutInfo.contentHeight\r\n });\r\n _this.onDidScroll = _this.scrollable.onScroll;\r\n _this._updateHeight();\r\n return _this;\r\n }\r\n ViewLayout.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n ViewLayout.prototype.onHeightMaybeChanged = function () {\r\n this._updateHeight();\r\n };\r\n ViewLayout.prototype._configureSmoothScrollDuration = function () {\r\n this.scrollable.setSmoothScrollDuration(this._configuration.options.get(83 /* smoothScrolling */) ? SMOOTH_SCROLLING_TIME : 0);\r\n };\r\n // ---- begin view event handlers\r\n ViewLayout.prototype.onConfigurationChanged = function (e) {\r\n var options = this._configuration.options;\r\n if (e.hasChanged(47 /* lineHeight */)) {\r\n this._linesLayout.setLineHeight(options.get(47 /* lineHeight */));\r\n }\r\n if (e.hasChanged(103 /* layoutInfo */)) {\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n var width = layoutInfo.contentWidth;\r\n var height = layoutInfo.contentHeight;\r\n var scrollDimensions = this.scrollable.getScrollDimensions();\r\n var scrollWidth = scrollDimensions.scrollWidth;\r\n var scrollHeight = this._getTotalHeight(width, height, scrollWidth);\r\n this.scrollable.setScrollDimensions({\r\n width: width,\r\n height: height,\r\n scrollHeight: scrollHeight\r\n });\r\n }\r\n else {\r\n this._updateHeight();\r\n }\r\n if (e.hasChanged(83 /* smoothScrolling */)) {\r\n this._configureSmoothScrollDuration();\r\n }\r\n };\r\n ViewLayout.prototype.onFlushed = function (lineCount) {\r\n this._linesLayout.onFlushed(lineCount);\r\n };\r\n ViewLayout.prototype.onLinesDeleted = function (fromLineNumber, toLineNumber) {\r\n this._linesLayout.onLinesDeleted(fromLineNumber, toLineNumber);\r\n };\r\n ViewLayout.prototype.onLinesInserted = function (fromLineNumber, toLineNumber) {\r\n this._linesLayout.onLinesInserted(fromLineNumber, toLineNumber);\r\n };\r\n // ---- end view event handlers\r\n ViewLayout.prototype._getHorizontalScrollbarHeight = function (width, scrollWidth) {\r\n var options = this._configuration.options;\r\n var scrollbar = options.get(74 /* scrollbar */);\r\n if (scrollbar.horizontal === 2 /* Hidden */) {\r\n // horizontal scrollbar not visible\r\n return 0;\r\n }\r\n if (width >= scrollWidth) {\r\n // horizontal scrollbar not visible\r\n return 0;\r\n }\r\n return scrollbar.horizontalScrollbarSize;\r\n };\r\n ViewLayout.prototype._getTotalHeight = function (width, height, scrollWidth) {\r\n var options = this._configuration.options;\r\n var result = this._linesLayout.getLinesTotalHeight();\r\n if (options.get(76 /* scrollBeyondLastLine */)) {\r\n result += height - options.get(47 /* lineHeight */);\r\n }\r\n else {\r\n result += this._getHorizontalScrollbarHeight(width, scrollWidth);\r\n }\r\n return Math.max(height, result);\r\n };\r\n ViewLayout.prototype._updateHeight = function () {\r\n var scrollDimensions = this.scrollable.getScrollDimensions();\r\n var width = scrollDimensions.width;\r\n var height = scrollDimensions.height;\r\n var scrollWidth = scrollDimensions.scrollWidth;\r\n var scrollHeight = this._getTotalHeight(width, height, scrollWidth);\r\n this.scrollable.setScrollDimensions({\r\n scrollHeight: scrollHeight\r\n });\r\n };\r\n // ---- Layouting logic\r\n ViewLayout.prototype.getCurrentViewport = function () {\r\n var scrollDimensions = this.scrollable.getScrollDimensions();\r\n var currentScrollPosition = this.scrollable.getCurrentScrollPosition();\r\n return new Viewport(currentScrollPosition.scrollTop, currentScrollPosition.scrollLeft, scrollDimensions.width, scrollDimensions.height);\r\n };\r\n ViewLayout.prototype.getFutureViewport = function () {\r\n var scrollDimensions = this.scrollable.getScrollDimensions();\r\n var currentScrollPosition = this.scrollable.getFutureScrollPosition();\r\n return new Viewport(currentScrollPosition.scrollTop, currentScrollPosition.scrollLeft, scrollDimensions.width, scrollDimensions.height);\r\n };\r\n ViewLayout.prototype._computeScrollWidth = function (maxLineWidth, viewportWidth) {\r\n var options = this._configuration.options;\r\n var wrappingInfo = options.get(104 /* wrappingInfo */);\r\n var isViewportWrapping = wrappingInfo.isViewportWrapping;\r\n if (!isViewportWrapping) {\r\n var extraHorizontalSpace = options.get(75 /* scrollBeyondLastColumn */) * options.get(32 /* fontInfo */).typicalHalfwidthCharacterWidth;\r\n var whitespaceMinWidth = this._linesLayout.getWhitespaceMinWidth();\r\n return Math.max(maxLineWidth + extraHorizontalSpace, viewportWidth, whitespaceMinWidth);\r\n }\r\n return Math.max(maxLineWidth, viewportWidth);\r\n };\r\n ViewLayout.prototype.onMaxLineWidthChanged = function (maxLineWidth) {\r\n var newScrollWidth = this._computeScrollWidth(maxLineWidth, this.getCurrentViewport().width);\r\n this.scrollable.setScrollDimensions({\r\n scrollWidth: newScrollWidth\r\n });\r\n // The height might depend on the fact that there is a horizontal scrollbar or not\r\n this._updateHeight();\r\n };\r\n // ---- view state\r\n ViewLayout.prototype.saveState = function () {\r\n var currentScrollPosition = this.scrollable.getFutureScrollPosition();\r\n var scrollTop = currentScrollPosition.scrollTop;\r\n var firstLineNumberInViewport = this._linesLayout.getLineNumberAtOrAfterVerticalOffset(scrollTop);\r\n var whitespaceAboveFirstLine = this._linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(firstLineNumberInViewport);\r\n return {\r\n scrollTop: scrollTop,\r\n scrollTopWithoutViewZones: scrollTop - whitespaceAboveFirstLine,\r\n scrollLeft: currentScrollPosition.scrollLeft\r\n };\r\n };\r\n // ---- IVerticalLayoutProvider\r\n ViewLayout.prototype.changeWhitespace = function (callback) {\r\n return this._linesLayout.changeWhitespace(callback);\r\n };\r\n ViewLayout.prototype.getVerticalOffsetForLineNumber = function (lineNumber) {\r\n return this._linesLayout.getVerticalOffsetForLineNumber(lineNumber);\r\n };\r\n ViewLayout.prototype.isAfterLines = function (verticalOffset) {\r\n return this._linesLayout.isAfterLines(verticalOffset);\r\n };\r\n ViewLayout.prototype.getLineNumberAtVerticalOffset = function (verticalOffset) {\r\n return this._linesLayout.getLineNumberAtOrAfterVerticalOffset(verticalOffset);\r\n };\r\n ViewLayout.prototype.getWhitespaceAtVerticalOffset = function (verticalOffset) {\r\n return this._linesLayout.getWhitespaceAtVerticalOffset(verticalOffset);\r\n };\r\n ViewLayout.prototype.getLinesViewportData = function () {\r\n var visibleBox = this.getCurrentViewport();\r\n return this._linesLayout.getLinesViewportData(visibleBox.top, visibleBox.top + visibleBox.height);\r\n };\r\n ViewLayout.prototype.getLinesViewportDataAtScrollTop = function (scrollTop) {\r\n // do some minimal validations on scrollTop\r\n var scrollDimensions = this.scrollable.getScrollDimensions();\r\n if (scrollTop + scrollDimensions.height > scrollDimensions.scrollHeight) {\r\n scrollTop = scrollDimensions.scrollHeight - scrollDimensions.height;\r\n }\r\n if (scrollTop < 0) {\r\n scrollTop = 0;\r\n }\r\n return this._linesLayout.getLinesViewportData(scrollTop, scrollTop + scrollDimensions.height);\r\n };\r\n ViewLayout.prototype.getWhitespaceViewportData = function () {\r\n var visibleBox = this.getCurrentViewport();\r\n return this._linesLayout.getWhitespaceViewportData(visibleBox.top, visibleBox.top + visibleBox.height);\r\n };\r\n ViewLayout.prototype.getWhitespaces = function () {\r\n return this._linesLayout.getWhitespaces();\r\n };\r\n // ---- IScrollingProvider\r\n ViewLayout.prototype.getScrollWidth = function () {\r\n var scrollDimensions = this.scrollable.getScrollDimensions();\r\n return scrollDimensions.scrollWidth;\r\n };\r\n ViewLayout.prototype.getScrollHeight = function () {\r\n var scrollDimensions = this.scrollable.getScrollDimensions();\r\n return scrollDimensions.scrollHeight;\r\n };\r\n ViewLayout.prototype.getCurrentScrollLeft = function () {\r\n var currentScrollPosition = this.scrollable.getCurrentScrollPosition();\r\n return currentScrollPosition.scrollLeft;\r\n };\r\n ViewLayout.prototype.getCurrentScrollTop = function () {\r\n var currentScrollPosition = this.scrollable.getCurrentScrollPosition();\r\n return currentScrollPosition.scrollTop;\r\n };\r\n ViewLayout.prototype.validateScrollPosition = function (scrollPosition) {\r\n return this.scrollable.validateScrollPosition(scrollPosition);\r\n };\r\n ViewLayout.prototype.setScrollPositionNow = function (position) {\r\n this.scrollable.setScrollPositionNow(position);\r\n };\r\n ViewLayout.prototype.setScrollPositionSmooth = function (position) {\r\n this.scrollable.setScrollPositionSmooth(position);\r\n };\r\n ViewLayout.prototype.deltaScrollNow = function (deltaScrollLeft, deltaScrollTop) {\r\n var currentScrollPosition = this.scrollable.getCurrentScrollPosition();\r\n this.scrollable.setScrollPositionNow({\r\n scrollLeft: currentScrollPosition.scrollLeft + deltaScrollLeft,\r\n scrollTop: currentScrollPosition.scrollTop + deltaScrollTop\r\n });\r\n };\r\n return ViewLayout;\r\n}(Disposable));\r\nexport { ViewLayout };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport { ModelDecorationOptions } from '../model/textModel.js';\r\nimport * as viewEvents from '../view/viewEvents.js';\r\nimport { PrefixSumComputerWithCache } from './prefixSumComputer.js';\r\nimport { ViewLineData } from './viewModel.js';\r\nvar OutputPosition = /** @class */ (function () {\r\n function OutputPosition(outputLineIndex, outputOffset) {\r\n this.outputLineIndex = outputLineIndex;\r\n this.outputOffset = outputOffset;\r\n }\r\n return OutputPosition;\r\n}());\r\nexport { OutputPosition };\r\nvar CoordinatesConverter = /** @class */ (function () {\r\n function CoordinatesConverter(lines) {\r\n this._lines = lines;\r\n }\r\n // View -> Model conversion and related methods\r\n CoordinatesConverter.prototype.convertViewPositionToModelPosition = function (viewPosition) {\r\n return this._lines.convertViewPositionToModelPosition(viewPosition.lineNumber, viewPosition.column);\r\n };\r\n CoordinatesConverter.prototype.convertViewRangeToModelRange = function (viewRange) {\r\n var start = this._lines.convertViewPositionToModelPosition(viewRange.startLineNumber, viewRange.startColumn);\r\n var end = this._lines.convertViewPositionToModelPosition(viewRange.endLineNumber, viewRange.endColumn);\r\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\r\n };\r\n CoordinatesConverter.prototype.validateViewPosition = function (viewPosition, expectedModelPosition) {\r\n return this._lines.validateViewPosition(viewPosition.lineNumber, viewPosition.column, expectedModelPosition);\r\n };\r\n CoordinatesConverter.prototype.validateViewRange = function (viewRange, expectedModelRange) {\r\n var validViewStart = this._lines.validateViewPosition(viewRange.startLineNumber, viewRange.startColumn, expectedModelRange.getStartPosition());\r\n var validViewEnd = this._lines.validateViewPosition(viewRange.endLineNumber, viewRange.endColumn, expectedModelRange.getEndPosition());\r\n return new Range(validViewStart.lineNumber, validViewStart.column, validViewEnd.lineNumber, validViewEnd.column);\r\n };\r\n // Model -> View conversion and related methods\r\n CoordinatesConverter.prototype.convertModelPositionToViewPosition = function (modelPosition) {\r\n return this._lines.convertModelPositionToViewPosition(modelPosition.lineNumber, modelPosition.column);\r\n };\r\n CoordinatesConverter.prototype.convertModelRangeToViewRange = function (modelRange) {\r\n return this._lines.convertModelRangeToViewRange(modelRange);\r\n };\r\n CoordinatesConverter.prototype.modelPositionIsVisible = function (modelPosition) {\r\n return this._lines.modelPositionIsVisible(modelPosition.lineNumber, modelPosition.column);\r\n };\r\n return CoordinatesConverter;\r\n}());\r\nexport { CoordinatesConverter };\r\nvar SplitLinesCollection = /** @class */ (function () {\r\n function SplitLinesCollection(model, linePositionMapperFactory, tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent) {\r\n this.model = model;\r\n this._validModelVersionId = -1;\r\n this.tabSize = tabSize;\r\n this.wrappingColumn = wrappingColumn;\r\n this.columnsForFullWidthChar = columnsForFullWidthChar;\r\n this.wrappingIndent = wrappingIndent;\r\n this.linePositionMapperFactory = linePositionMapperFactory;\r\n this._constructLines(true);\r\n }\r\n SplitLinesCollection.prototype.dispose = function () {\r\n this.hiddenAreasIds = this.model.deltaDecorations(this.hiddenAreasIds, []);\r\n };\r\n SplitLinesCollection.prototype.createCoordinatesConverter = function () {\r\n return new CoordinatesConverter(this);\r\n };\r\n SplitLinesCollection.prototype._ensureValidState = function () {\r\n var modelVersion = this.model.getVersionId();\r\n if (modelVersion !== this._validModelVersionId) {\r\n // This is pretty bad, it means we lost track of the model...\r\n throw new Error(\"ViewModel is out of sync with Model!\");\r\n }\r\n if (this.lines.length !== this.model.getLineCount()) {\r\n // This is pretty bad, it means we lost track of the model...\r\n this._constructLines(false);\r\n }\r\n };\r\n SplitLinesCollection.prototype._constructLines = function (resetHiddenAreas) {\r\n var _this = this;\r\n this.lines = [];\r\n if (resetHiddenAreas) {\r\n this.hiddenAreasIds = [];\r\n }\r\n var linesContent = this.model.getLinesContent();\r\n var lineCount = linesContent.length;\r\n var values = new Uint32Array(lineCount);\r\n var hiddenAreas = this.hiddenAreasIds.map(function (areaId) { return _this.model.getDecorationRange(areaId); }).sort(Range.compareRangesUsingStarts);\r\n var hiddenAreaStart = 1, hiddenAreaEnd = 0;\r\n var hiddenAreaIdx = -1;\r\n var nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;\r\n for (var i = 0; i < lineCount; i++) {\r\n var lineNumber = i + 1;\r\n if (lineNumber === nextLineNumberToUpdateHiddenArea) {\r\n hiddenAreaIdx++;\r\n hiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;\r\n hiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;\r\n nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;\r\n }\r\n var isInHiddenArea = (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd);\r\n var line = createSplitLine(this.linePositionMapperFactory, linesContent[i], this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, !isInHiddenArea);\r\n values[i] = line.getViewLineCount();\r\n this.lines[i] = line;\r\n }\r\n this._validModelVersionId = this.model.getVersionId();\r\n this.prefixSumComputer = new PrefixSumComputerWithCache(values);\r\n };\r\n SplitLinesCollection.prototype.getHiddenAreas = function () {\r\n var _this = this;\r\n return this.hiddenAreasIds.map(function (decId) {\r\n return _this.model.getDecorationRange(decId);\r\n });\r\n };\r\n SplitLinesCollection.prototype._reduceRanges = function (_ranges) {\r\n var _this = this;\r\n if (_ranges.length === 0) {\r\n return [];\r\n }\r\n var ranges = _ranges.map(function (r) { return _this.model.validateRange(r); }).sort(Range.compareRangesUsingStarts);\r\n var result = [];\r\n var currentRangeStart = ranges[0].startLineNumber;\r\n var currentRangeEnd = ranges[0].endLineNumber;\r\n for (var i = 1, len = ranges.length; i < len; i++) {\r\n var range = ranges[i];\r\n if (range.startLineNumber > currentRangeEnd + 1) {\r\n result.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));\r\n currentRangeStart = range.startLineNumber;\r\n currentRangeEnd = range.endLineNumber;\r\n }\r\n else if (range.endLineNumber > currentRangeEnd) {\r\n currentRangeEnd = range.endLineNumber;\r\n }\r\n }\r\n result.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));\r\n return result;\r\n };\r\n SplitLinesCollection.prototype.setHiddenAreas = function (_ranges) {\r\n var _this = this;\r\n var newRanges = this._reduceRanges(_ranges);\r\n // BEGIN TODO@Martin: Please stop calling this method on each model change!\r\n var oldRanges = this.hiddenAreasIds.map(function (areaId) { return _this.model.getDecorationRange(areaId); }).sort(Range.compareRangesUsingStarts);\r\n if (newRanges.length === oldRanges.length) {\r\n var hasDifference = false;\r\n for (var i = 0; i < newRanges.length; i++) {\r\n if (!newRanges[i].equalsRange(oldRanges[i])) {\r\n hasDifference = true;\r\n break;\r\n }\r\n }\r\n if (!hasDifference) {\r\n return false;\r\n }\r\n }\r\n // END TODO@Martin: Please stop calling this method on each model change!\r\n var newDecorations = [];\r\n for (var _i = 0, newRanges_1 = newRanges; _i < newRanges_1.length; _i++) {\r\n var newRange = newRanges_1[_i];\r\n newDecorations.push({\r\n range: newRange,\r\n options: ModelDecorationOptions.EMPTY\r\n });\r\n }\r\n this.hiddenAreasIds = this.model.deltaDecorations(this.hiddenAreasIds, newDecorations);\r\n var hiddenAreas = newRanges;\r\n var hiddenAreaStart = 1, hiddenAreaEnd = 0;\r\n var hiddenAreaIdx = -1;\r\n var nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.lines.length + 2;\r\n var hasVisibleLine = false;\r\n for (var i = 0; i < this.lines.length; i++) {\r\n var lineNumber = i + 1;\r\n if (lineNumber === nextLineNumberToUpdateHiddenArea) {\r\n hiddenAreaIdx++;\r\n hiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;\r\n hiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;\r\n nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.lines.length + 2;\r\n }\r\n var lineChanged = false;\r\n if (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd) {\r\n // Line should be hidden\r\n if (this.lines[i].isVisible()) {\r\n this.lines[i] = this.lines[i].setVisible(false);\r\n lineChanged = true;\r\n }\r\n }\r\n else {\r\n hasVisibleLine = true;\r\n // Line should be visible\r\n if (!this.lines[i].isVisible()) {\r\n this.lines[i] = this.lines[i].setVisible(true);\r\n lineChanged = true;\r\n }\r\n }\r\n if (lineChanged) {\r\n var newOutputLineCount = this.lines[i].getViewLineCount();\r\n this.prefixSumComputer.changeValue(i, newOutputLineCount);\r\n }\r\n }\r\n if (!hasVisibleLine) {\r\n // Cannot have everything be hidden => reveal everything!\r\n this.setHiddenAreas([]);\r\n }\r\n return true;\r\n };\r\n SplitLinesCollection.prototype.modelPositionIsVisible = function (modelLineNumber, _modelColumn) {\r\n if (modelLineNumber < 1 || modelLineNumber > this.lines.length) {\r\n // invalid arguments\r\n return false;\r\n }\r\n return this.lines[modelLineNumber - 1].isVisible();\r\n };\r\n SplitLinesCollection.prototype.setTabSize = function (newTabSize) {\r\n if (this.tabSize === newTabSize) {\r\n return false;\r\n }\r\n this.tabSize = newTabSize;\r\n this._constructLines(false);\r\n return true;\r\n };\r\n SplitLinesCollection.prototype.setWrappingSettings = function (wrappingIndent, wrappingColumn, columnsForFullWidthChar) {\r\n if (this.wrappingIndent === wrappingIndent && this.wrappingColumn === wrappingColumn && this.columnsForFullWidthChar === columnsForFullWidthChar) {\r\n return false;\r\n }\r\n this.wrappingIndent = wrappingIndent;\r\n this.wrappingColumn = wrappingColumn;\r\n this.columnsForFullWidthChar = columnsForFullWidthChar;\r\n this._constructLines(false);\r\n return true;\r\n };\r\n SplitLinesCollection.prototype.onModelFlushed = function () {\r\n this._constructLines(true);\r\n };\r\n SplitLinesCollection.prototype.onModelLinesDeleted = function (versionId, fromLineNumber, toLineNumber) {\r\n if (versionId <= this._validModelVersionId) {\r\n // Here we check for versionId in case the lines were reconstructed in the meantime.\r\n // We don't want to apply stale change events on top of a newer read model state.\r\n return null;\r\n }\r\n var outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1);\r\n var outputToLineNumber = this.prefixSumComputer.getAccumulatedValue(toLineNumber - 1);\r\n this.lines.splice(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\r\n this.prefixSumComputer.removeValues(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\r\n return new viewEvents.ViewLinesDeletedEvent(outputFromLineNumber, outputToLineNumber);\r\n };\r\n SplitLinesCollection.prototype.onModelLinesInserted = function (versionId, fromLineNumber, _toLineNumber, text) {\r\n if (versionId <= this._validModelVersionId) {\r\n // Here we check for versionId in case the lines were reconstructed in the meantime.\r\n // We don't want to apply stale change events on top of a newer read model state.\r\n return null;\r\n }\r\n var hiddenAreas = this.getHiddenAreas();\r\n var isInHiddenArea = false;\r\n var testPosition = new Position(fromLineNumber, 1);\r\n for (var _i = 0, hiddenAreas_1 = hiddenAreas; _i < hiddenAreas_1.length; _i++) {\r\n var hiddenArea = hiddenAreas_1[_i];\r\n if (hiddenArea.containsPosition(testPosition)) {\r\n isInHiddenArea = true;\r\n break;\r\n }\r\n }\r\n var outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1);\r\n var totalOutputLineCount = 0;\r\n var insertLines = [];\r\n var insertPrefixSumValues = new Uint32Array(text.length);\r\n for (var i = 0, len = text.length; i < len; i++) {\r\n var line = createSplitLine(this.linePositionMapperFactory, text[i], this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, !isInHiddenArea);\r\n insertLines.push(line);\r\n var outputLineCount = line.getViewLineCount();\r\n totalOutputLineCount += outputLineCount;\r\n insertPrefixSumValues[i] = outputLineCount;\r\n }\r\n // TODO@Alex: use arrays.arrayInsert\r\n this.lines = this.lines.slice(0, fromLineNumber - 1).concat(insertLines).concat(this.lines.slice(fromLineNumber - 1));\r\n this.prefixSumComputer.insertValues(fromLineNumber - 1, insertPrefixSumValues);\r\n return new viewEvents.ViewLinesInsertedEvent(outputFromLineNumber, outputFromLineNumber + totalOutputLineCount - 1);\r\n };\r\n SplitLinesCollection.prototype.onModelLineChanged = function (versionId, lineNumber, newText) {\r\n if (versionId <= this._validModelVersionId) {\r\n // Here we check for versionId in case the lines were reconstructed in the meantime.\r\n // We don't want to apply stale change events on top of a newer read model state.\r\n return [false, null, null, null];\r\n }\r\n var lineIndex = lineNumber - 1;\r\n var oldOutputLineCount = this.lines[lineIndex].getViewLineCount();\r\n var isVisible = this.lines[lineIndex].isVisible();\r\n var line = createSplitLine(this.linePositionMapperFactory, newText, this.tabSize, this.wrappingColumn, this.columnsForFullWidthChar, this.wrappingIndent, isVisible);\r\n this.lines[lineIndex] = line;\r\n var newOutputLineCount = this.lines[lineIndex].getViewLineCount();\r\n var lineMappingChanged = false;\r\n var changeFrom = 0;\r\n var changeTo = -1;\r\n var insertFrom = 0;\r\n var insertTo = -1;\r\n var deleteFrom = 0;\r\n var deleteTo = -1;\r\n if (oldOutputLineCount > newOutputLineCount) {\r\n changeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1);\r\n changeTo = changeFrom + newOutputLineCount - 1;\r\n deleteFrom = changeTo + 1;\r\n deleteTo = deleteFrom + (oldOutputLineCount - newOutputLineCount) - 1;\r\n lineMappingChanged = true;\r\n }\r\n else if (oldOutputLineCount < newOutputLineCount) {\r\n changeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1);\r\n changeTo = changeFrom + oldOutputLineCount - 1;\r\n insertFrom = changeTo + 1;\r\n insertTo = insertFrom + (newOutputLineCount - oldOutputLineCount) - 1;\r\n lineMappingChanged = true;\r\n }\r\n else {\r\n changeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1);\r\n changeTo = changeFrom + newOutputLineCount - 1;\r\n }\r\n this.prefixSumComputer.changeValue(lineIndex, newOutputLineCount);\r\n var viewLinesChangedEvent = (changeFrom <= changeTo ? new viewEvents.ViewLinesChangedEvent(changeFrom, changeTo) : null);\r\n var viewLinesInsertedEvent = (insertFrom <= insertTo ? new viewEvents.ViewLinesInsertedEvent(insertFrom, insertTo) : null);\r\n var viewLinesDeletedEvent = (deleteFrom <= deleteTo ? new viewEvents.ViewLinesDeletedEvent(deleteFrom, deleteTo) : null);\r\n return [lineMappingChanged, viewLinesChangedEvent, viewLinesInsertedEvent, viewLinesDeletedEvent];\r\n };\r\n SplitLinesCollection.prototype.acceptVersionId = function (versionId) {\r\n this._validModelVersionId = versionId;\r\n if (this.lines.length === 1 && !this.lines[0].isVisible()) {\r\n // At least one line must be visible => reset hidden areas\r\n this.setHiddenAreas([]);\r\n }\r\n };\r\n SplitLinesCollection.prototype.getViewLineCount = function () {\r\n this._ensureValidState();\r\n return this.prefixSumComputer.getTotalValue();\r\n };\r\n SplitLinesCollection.prototype._toValidViewLineNumber = function (viewLineNumber) {\r\n if (viewLineNumber < 1) {\r\n return 1;\r\n }\r\n var viewLineCount = this.getViewLineCount();\r\n if (viewLineNumber > viewLineCount) {\r\n return viewLineCount;\r\n }\r\n return viewLineNumber;\r\n };\r\n /**\r\n * Gives a hint that a lot of requests are about to come in for these line numbers.\r\n */\r\n SplitLinesCollection.prototype.warmUpLookupCache = function (viewStartLineNumber, viewEndLineNumber) {\r\n this.prefixSumComputer.warmUpCache(viewStartLineNumber - 1, viewEndLineNumber - 1);\r\n };\r\n SplitLinesCollection.prototype.getActiveIndentGuide = function (viewLineNumber, minLineNumber, maxLineNumber) {\r\n this._ensureValidState();\r\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\r\n minLineNumber = this._toValidViewLineNumber(minLineNumber);\r\n maxLineNumber = this._toValidViewLineNumber(maxLineNumber);\r\n var modelPosition = this.convertViewPositionToModelPosition(viewLineNumber, this.getViewLineMinColumn(viewLineNumber));\r\n var modelMinPosition = this.convertViewPositionToModelPosition(minLineNumber, this.getViewLineMinColumn(minLineNumber));\r\n var modelMaxPosition = this.convertViewPositionToModelPosition(maxLineNumber, this.getViewLineMinColumn(maxLineNumber));\r\n var result = this.model.getActiveIndentGuide(modelPosition.lineNumber, modelMinPosition.lineNumber, modelMaxPosition.lineNumber);\r\n var viewStartPosition = this.convertModelPositionToViewPosition(result.startLineNumber, 1);\r\n var viewEndPosition = this.convertModelPositionToViewPosition(result.endLineNumber, this.model.getLineMaxColumn(result.endLineNumber));\r\n return {\r\n startLineNumber: viewStartPosition.lineNumber,\r\n endLineNumber: viewEndPosition.lineNumber,\r\n indent: result.indent\r\n };\r\n };\r\n SplitLinesCollection.prototype.getViewLinesIndentGuides = function (viewStartLineNumber, viewEndLineNumber) {\r\n this._ensureValidState();\r\n viewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);\r\n viewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);\r\n var modelStart = this.convertViewPositionToModelPosition(viewStartLineNumber, this.getViewLineMinColumn(viewStartLineNumber));\r\n var modelEnd = this.convertViewPositionToModelPosition(viewEndLineNumber, this.getViewLineMaxColumn(viewEndLineNumber));\r\n var result = [];\r\n var resultRepeatCount = [];\r\n var resultRepeatOption = [];\r\n var modelStartLineIndex = modelStart.lineNumber - 1;\r\n var modelEndLineIndex = modelEnd.lineNumber - 1;\r\n var reqStart = null;\r\n for (var modelLineIndex = modelStartLineIndex; modelLineIndex <= modelEndLineIndex; modelLineIndex++) {\r\n var line = this.lines[modelLineIndex];\r\n if (line.isVisible()) {\r\n var viewLineStartIndex = line.getViewLineNumberOfModelPosition(0, modelLineIndex === modelStartLineIndex ? modelStart.column : 1);\r\n var viewLineEndIndex = line.getViewLineNumberOfModelPosition(0, this.model.getLineMaxColumn(modelLineIndex + 1));\r\n var count = viewLineEndIndex - viewLineStartIndex + 1;\r\n var option = 0 /* BlockNone */;\r\n if (count > 1 && line.getViewLineMinColumn(this.model, modelLineIndex + 1, viewLineEndIndex) === 1) {\r\n // wrapped lines should block indent guides\r\n option = (viewLineStartIndex === 0 ? 1 /* BlockSubsequent */ : 2 /* BlockAll */);\r\n }\r\n resultRepeatCount.push(count);\r\n resultRepeatOption.push(option);\r\n // merge into previous request\r\n if (reqStart === null) {\r\n reqStart = new Position(modelLineIndex + 1, 0);\r\n }\r\n }\r\n else {\r\n // hit invisible line => flush request\r\n if (reqStart !== null) {\r\n result = result.concat(this.model.getLinesIndentGuides(reqStart.lineNumber, modelLineIndex));\r\n reqStart = null;\r\n }\r\n }\r\n }\r\n if (reqStart !== null) {\r\n result = result.concat(this.model.getLinesIndentGuides(reqStart.lineNumber, modelEnd.lineNumber));\r\n reqStart = null;\r\n }\r\n var viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;\r\n var viewIndents = new Array(viewLineCount);\r\n var currIndex = 0;\r\n for (var i = 0, len = result.length; i < len; i++) {\r\n var value = result[i];\r\n var count = Math.min(viewLineCount - currIndex, resultRepeatCount[i]);\r\n var option = resultRepeatOption[i];\r\n var blockAtIndex = void 0;\r\n if (option === 2 /* BlockAll */) {\r\n blockAtIndex = 0;\r\n }\r\n else if (option === 1 /* BlockSubsequent */) {\r\n blockAtIndex = 1;\r\n }\r\n else {\r\n blockAtIndex = count;\r\n }\r\n for (var j = 0; j < count; j++) {\r\n if (j === blockAtIndex) {\r\n value = 0;\r\n }\r\n viewIndents[currIndex++] = value;\r\n }\r\n }\r\n return viewIndents;\r\n };\r\n SplitLinesCollection.prototype.getViewLineContent = function (viewLineNumber) {\r\n this._ensureValidState();\r\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\r\n var r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\r\n var lineIndex = r.index;\r\n var remainder = r.remainder;\r\n return this.lines[lineIndex].getViewLineContent(this.model, lineIndex + 1, remainder);\r\n };\r\n SplitLinesCollection.prototype.getViewLineLength = function (viewLineNumber) {\r\n this._ensureValidState();\r\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\r\n var r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\r\n var lineIndex = r.index;\r\n var remainder = r.remainder;\r\n return this.lines[lineIndex].getViewLineLength(this.model, lineIndex + 1, remainder);\r\n };\r\n SplitLinesCollection.prototype.getViewLineMinColumn = function (viewLineNumber) {\r\n this._ensureValidState();\r\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\r\n var r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\r\n var lineIndex = r.index;\r\n var remainder = r.remainder;\r\n return this.lines[lineIndex].getViewLineMinColumn(this.model, lineIndex + 1, remainder);\r\n };\r\n SplitLinesCollection.prototype.getViewLineMaxColumn = function (viewLineNumber) {\r\n this._ensureValidState();\r\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\r\n var r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\r\n var lineIndex = r.index;\r\n var remainder = r.remainder;\r\n return this.lines[lineIndex].getViewLineMaxColumn(this.model, lineIndex + 1, remainder);\r\n };\r\n SplitLinesCollection.prototype.getViewLineData = function (viewLineNumber) {\r\n this._ensureValidState();\r\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\r\n var r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\r\n var lineIndex = r.index;\r\n var remainder = r.remainder;\r\n return this.lines[lineIndex].getViewLineData(this.model, lineIndex + 1, remainder);\r\n };\r\n SplitLinesCollection.prototype.getViewLinesData = function (viewStartLineNumber, viewEndLineNumber, needed) {\r\n this._ensureValidState();\r\n viewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);\r\n viewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);\r\n var start = this.prefixSumComputer.getIndexOf(viewStartLineNumber - 1);\r\n var viewLineNumber = viewStartLineNumber;\r\n var startModelLineIndex = start.index;\r\n var startRemainder = start.remainder;\r\n var result = [];\r\n for (var modelLineIndex = startModelLineIndex, len = this.model.getLineCount(); modelLineIndex < len; modelLineIndex++) {\r\n var line = this.lines[modelLineIndex];\r\n if (!line.isVisible()) {\r\n continue;\r\n }\r\n var fromViewLineIndex = (modelLineIndex === startModelLineIndex ? startRemainder : 0);\r\n var remainingViewLineCount = line.getViewLineCount() - fromViewLineIndex;\r\n var lastLine = false;\r\n if (viewLineNumber + remainingViewLineCount > viewEndLineNumber) {\r\n lastLine = true;\r\n remainingViewLineCount = viewEndLineNumber - viewLineNumber + 1;\r\n }\r\n var toViewLineIndex = fromViewLineIndex + remainingViewLineCount;\r\n line.getViewLinesData(this.model, modelLineIndex + 1, fromViewLineIndex, toViewLineIndex, viewLineNumber - viewStartLineNumber, needed, result);\r\n viewLineNumber += remainingViewLineCount;\r\n if (lastLine) {\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n SplitLinesCollection.prototype.validateViewPosition = function (viewLineNumber, viewColumn, expectedModelPosition) {\r\n this._ensureValidState();\r\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\r\n var r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\r\n var lineIndex = r.index;\r\n var remainder = r.remainder;\r\n var line = this.lines[lineIndex];\r\n var minColumn = line.getViewLineMinColumn(this.model, lineIndex + 1, remainder);\r\n var maxColumn = line.getViewLineMaxColumn(this.model, lineIndex + 1, remainder);\r\n if (viewColumn < minColumn) {\r\n viewColumn = minColumn;\r\n }\r\n if (viewColumn > maxColumn) {\r\n viewColumn = maxColumn;\r\n }\r\n var computedModelColumn = line.getModelColumnOfViewPosition(remainder, viewColumn);\r\n var computedModelPosition = this.model.validatePosition(new Position(lineIndex + 1, computedModelColumn));\r\n if (computedModelPosition.equals(expectedModelPosition)) {\r\n return new Position(viewLineNumber, viewColumn);\r\n }\r\n return this.convertModelPositionToViewPosition(expectedModelPosition.lineNumber, expectedModelPosition.column);\r\n };\r\n SplitLinesCollection.prototype.convertViewPositionToModelPosition = function (viewLineNumber, viewColumn) {\r\n this._ensureValidState();\r\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\r\n var r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\r\n var lineIndex = r.index;\r\n var remainder = r.remainder;\r\n var inputColumn = this.lines[lineIndex].getModelColumnOfViewPosition(remainder, viewColumn);\r\n // console.log('out -> in ' + viewLineNumber + ',' + viewColumn + ' ===> ' + (lineIndex+1) + ',' + inputColumn);\r\n return this.model.validatePosition(new Position(lineIndex + 1, inputColumn));\r\n };\r\n SplitLinesCollection.prototype.convertModelPositionToViewPosition = function (_modelLineNumber, _modelColumn) {\r\n this._ensureValidState();\r\n var validPosition = this.model.validatePosition(new Position(_modelLineNumber, _modelColumn));\r\n var inputLineNumber = validPosition.lineNumber;\r\n var inputColumn = validPosition.column;\r\n var lineIndex = inputLineNumber - 1, lineIndexChanged = false;\r\n while (lineIndex > 0 && !this.lines[lineIndex].isVisible()) {\r\n lineIndex--;\r\n lineIndexChanged = true;\r\n }\r\n if (lineIndex === 0 && !this.lines[lineIndex].isVisible()) {\r\n // Could not reach a real line\r\n // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + 1 + ',' + 1);\r\n return new Position(1, 1);\r\n }\r\n var deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1));\r\n var r;\r\n if (lineIndexChanged) {\r\n r = this.lines[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1));\r\n }\r\n else {\r\n r = this.lines[inputLineNumber - 1].getViewPositionOfModelPosition(deltaLineNumber, inputColumn);\r\n }\r\n // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + r.lineNumber + ',' + r);\r\n return r;\r\n };\r\n SplitLinesCollection.prototype.convertModelRangeToViewRange = function (modelRange) {\r\n var start = this.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn);\r\n var end = this.convertModelPositionToViewPosition(modelRange.endLineNumber, modelRange.endColumn);\r\n if (modelRange.startLineNumber === modelRange.endLineNumber && start.lineNumber !== end.lineNumber) {\r\n // This is a single line range that ends up taking more lines due to wrapping\r\n if (end.column === this.getViewLineMinColumn(end.lineNumber)) {\r\n // the end column lands on the first column of the next line\r\n return new Range(start.lineNumber, start.column, end.lineNumber - 1, this.getViewLineMaxColumn(end.lineNumber - 1));\r\n }\r\n }\r\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\r\n };\r\n SplitLinesCollection.prototype._getViewLineNumberForModelPosition = function (inputLineNumber, inputColumn) {\r\n var lineIndex = inputLineNumber - 1;\r\n if (this.lines[lineIndex].isVisible()) {\r\n // this model line is visible\r\n var deltaLineNumber_1 = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1));\r\n return this.lines[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber_1, inputColumn);\r\n }\r\n // this model line is not visible\r\n while (lineIndex > 0 && !this.lines[lineIndex].isVisible()) {\r\n lineIndex--;\r\n }\r\n if (lineIndex === 0 && !this.lines[lineIndex].isVisible()) {\r\n // Could not reach a real line\r\n return 1;\r\n }\r\n var deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1));\r\n return this.lines[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1));\r\n };\r\n SplitLinesCollection.prototype.getAllOverviewRulerDecorations = function (ownerId, filterOutValidation, theme) {\r\n var decorations = this.model.getOverviewRulerDecorations(ownerId, filterOutValidation);\r\n var result = new OverviewRulerDecorations();\r\n for (var _i = 0, decorations_1 = decorations; _i < decorations_1.length; _i++) {\r\n var decoration = decorations_1[_i];\r\n var opts = decoration.options.overviewRuler;\r\n var lane = opts ? opts.position : 0;\r\n if (lane === 0) {\r\n continue;\r\n }\r\n var color = opts.getColor(theme);\r\n var viewStartLineNumber = this._getViewLineNumberForModelPosition(decoration.range.startLineNumber, decoration.range.startColumn);\r\n var viewEndLineNumber = this._getViewLineNumberForModelPosition(decoration.range.endLineNumber, decoration.range.endColumn);\r\n result.accept(color, viewStartLineNumber, viewEndLineNumber, lane);\r\n }\r\n return result.result;\r\n };\r\n SplitLinesCollection.prototype.getDecorationsInRange = function (range, ownerId, filterOutValidation) {\r\n var modelStart = this.convertViewPositionToModelPosition(range.startLineNumber, range.startColumn);\r\n var modelEnd = this.convertViewPositionToModelPosition(range.endLineNumber, range.endColumn);\r\n if (modelEnd.lineNumber - modelStart.lineNumber <= range.endLineNumber - range.startLineNumber) {\r\n // most likely there are no hidden lines => fast path\r\n // fetch decorations from column 1 to cover the case of wrapped lines that have whole line decorations at column 1\r\n return this.model.getDecorationsInRange(new Range(modelStart.lineNumber, 1, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation);\r\n }\r\n var result = [];\r\n var modelStartLineIndex = modelStart.lineNumber - 1;\r\n var modelEndLineIndex = modelEnd.lineNumber - 1;\r\n var reqStart = null;\r\n for (var modelLineIndex = modelStartLineIndex; modelLineIndex <= modelEndLineIndex; modelLineIndex++) {\r\n var line = this.lines[modelLineIndex];\r\n if (line.isVisible()) {\r\n // merge into previous request\r\n if (reqStart === null) {\r\n reqStart = new Position(modelLineIndex + 1, modelLineIndex === modelStartLineIndex ? modelStart.column : 1);\r\n }\r\n }\r\n else {\r\n // hit invisible line => flush request\r\n if (reqStart !== null) {\r\n var maxLineColumn = this.model.getLineMaxColumn(modelLineIndex);\r\n result = result.concat(this.model.getDecorationsInRange(new Range(reqStart.lineNumber, reqStart.column, modelLineIndex, maxLineColumn), ownerId, filterOutValidation));\r\n reqStart = null;\r\n }\r\n }\r\n }\r\n if (reqStart !== null) {\r\n result = result.concat(this.model.getDecorationsInRange(new Range(reqStart.lineNumber, reqStart.column, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation));\r\n reqStart = null;\r\n }\r\n result.sort(function (a, b) {\r\n var res = Range.compareRangesUsingStarts(a.range, b.range);\r\n if (res === 0) {\r\n if (a.id < b.id) {\r\n return -1;\r\n }\r\n if (a.id > b.id) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n return res;\r\n });\r\n // Eliminate duplicate decorations that might have intersected our visible ranges multiple times\r\n var finalResult = [], finalResultLen = 0;\r\n var prevDecId = null;\r\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\r\n var dec = result_1[_i];\r\n var decId = dec.id;\r\n if (prevDecId === decId) {\r\n // skip\r\n continue;\r\n }\r\n prevDecId = decId;\r\n finalResult[finalResultLen++] = dec;\r\n }\r\n return finalResult;\r\n };\r\n return SplitLinesCollection;\r\n}());\r\nexport { SplitLinesCollection };\r\nvar VisibleIdentitySplitLine = /** @class */ (function () {\r\n function VisibleIdentitySplitLine() {\r\n }\r\n VisibleIdentitySplitLine.prototype.isVisible = function () {\r\n return true;\r\n };\r\n VisibleIdentitySplitLine.prototype.setVisible = function (isVisible) {\r\n if (isVisible) {\r\n return this;\r\n }\r\n return InvisibleIdentitySplitLine.INSTANCE;\r\n };\r\n VisibleIdentitySplitLine.prototype.getViewLineCount = function () {\r\n return 1;\r\n };\r\n VisibleIdentitySplitLine.prototype.getViewLineContent = function (model, modelLineNumber, _outputLineIndex) {\r\n return model.getLineContent(modelLineNumber);\r\n };\r\n VisibleIdentitySplitLine.prototype.getViewLineLength = function (model, modelLineNumber, _outputLineIndex) {\r\n return model.getLineLength(modelLineNumber);\r\n };\r\n VisibleIdentitySplitLine.prototype.getViewLineMinColumn = function (model, modelLineNumber, _outputLineIndex) {\r\n return model.getLineMinColumn(modelLineNumber);\r\n };\r\n VisibleIdentitySplitLine.prototype.getViewLineMaxColumn = function (model, modelLineNumber, _outputLineIndex) {\r\n return model.getLineMaxColumn(modelLineNumber);\r\n };\r\n VisibleIdentitySplitLine.prototype.getViewLineData = function (model, modelLineNumber, _outputLineIndex) {\r\n var lineTokens = model.getLineTokens(modelLineNumber);\r\n var lineContent = lineTokens.getLineContent();\r\n return new ViewLineData(lineContent, false, 1, lineContent.length + 1, lineTokens.inflate());\r\n };\r\n VisibleIdentitySplitLine.prototype.getViewLinesData = function (model, modelLineNumber, _fromOuputLineIndex, _toOutputLineIndex, globalStartIndex, needed, result) {\r\n if (!needed[globalStartIndex]) {\r\n result[globalStartIndex] = null;\r\n return;\r\n }\r\n result[globalStartIndex] = this.getViewLineData(model, modelLineNumber, 0);\r\n };\r\n VisibleIdentitySplitLine.prototype.getModelColumnOfViewPosition = function (_outputLineIndex, outputColumn) {\r\n return outputColumn;\r\n };\r\n VisibleIdentitySplitLine.prototype.getViewPositionOfModelPosition = function (deltaLineNumber, inputColumn) {\r\n return new Position(deltaLineNumber, inputColumn);\r\n };\r\n VisibleIdentitySplitLine.prototype.getViewLineNumberOfModelPosition = function (deltaLineNumber, _inputColumn) {\r\n return deltaLineNumber;\r\n };\r\n VisibleIdentitySplitLine.INSTANCE = new VisibleIdentitySplitLine();\r\n return VisibleIdentitySplitLine;\r\n}());\r\nvar InvisibleIdentitySplitLine = /** @class */ (function () {\r\n function InvisibleIdentitySplitLine() {\r\n }\r\n InvisibleIdentitySplitLine.prototype.isVisible = function () {\r\n return false;\r\n };\r\n InvisibleIdentitySplitLine.prototype.setVisible = function (isVisible) {\r\n if (!isVisible) {\r\n return this;\r\n }\r\n return VisibleIdentitySplitLine.INSTANCE;\r\n };\r\n InvisibleIdentitySplitLine.prototype.getViewLineCount = function () {\r\n return 0;\r\n };\r\n InvisibleIdentitySplitLine.prototype.getViewLineContent = function (_model, _modelLineNumber, _outputLineIndex) {\r\n throw new Error('Not supported');\r\n };\r\n InvisibleIdentitySplitLine.prototype.getViewLineLength = function (_model, _modelLineNumber, _outputLineIndex) {\r\n throw new Error('Not supported');\r\n };\r\n InvisibleIdentitySplitLine.prototype.getViewLineMinColumn = function (_model, _modelLineNumber, _outputLineIndex) {\r\n throw new Error('Not supported');\r\n };\r\n InvisibleIdentitySplitLine.prototype.getViewLineMaxColumn = function (_model, _modelLineNumber, _outputLineIndex) {\r\n throw new Error('Not supported');\r\n };\r\n InvisibleIdentitySplitLine.prototype.getViewLineData = function (_model, _modelLineNumber, _outputLineIndex) {\r\n throw new Error('Not supported');\r\n };\r\n InvisibleIdentitySplitLine.prototype.getViewLinesData = function (_model, _modelLineNumber, _fromOuputLineIndex, _toOutputLineIndex, _globalStartIndex, _needed, _result) {\r\n throw new Error('Not supported');\r\n };\r\n InvisibleIdentitySplitLine.prototype.getModelColumnOfViewPosition = function (_outputLineIndex, _outputColumn) {\r\n throw new Error('Not supported');\r\n };\r\n InvisibleIdentitySplitLine.prototype.getViewPositionOfModelPosition = function (_deltaLineNumber, _inputColumn) {\r\n throw new Error('Not supported');\r\n };\r\n InvisibleIdentitySplitLine.prototype.getViewLineNumberOfModelPosition = function (_deltaLineNumber, _inputColumn) {\r\n throw new Error('Not supported');\r\n };\r\n InvisibleIdentitySplitLine.INSTANCE = new InvisibleIdentitySplitLine();\r\n return InvisibleIdentitySplitLine;\r\n}());\r\nvar SplitLine = /** @class */ (function () {\r\n function SplitLine(positionMapper, isVisible) {\r\n this.positionMapper = positionMapper;\r\n this.wrappedIndent = this.positionMapper.getWrappedLinesIndent();\r\n this.wrappedIndentLength = this.wrappedIndent.length;\r\n this.outputLineCount = this.positionMapper.getOutputLineCount();\r\n this._isVisible = isVisible;\r\n }\r\n SplitLine.prototype.isVisible = function () {\r\n return this._isVisible;\r\n };\r\n SplitLine.prototype.setVisible = function (isVisible) {\r\n this._isVisible = isVisible;\r\n return this;\r\n };\r\n SplitLine.prototype.getViewLineCount = function () {\r\n if (!this._isVisible) {\r\n return 0;\r\n }\r\n return this.outputLineCount;\r\n };\r\n SplitLine.prototype.getInputStartOffsetOfOutputLineIndex = function (outputLineIndex) {\r\n return this.positionMapper.getInputOffsetOfOutputPosition(outputLineIndex, 0);\r\n };\r\n SplitLine.prototype.getInputEndOffsetOfOutputLineIndex = function (model, modelLineNumber, outputLineIndex) {\r\n if (outputLineIndex + 1 === this.outputLineCount) {\r\n return model.getLineMaxColumn(modelLineNumber) - 1;\r\n }\r\n return this.positionMapper.getInputOffsetOfOutputPosition(outputLineIndex + 1, 0);\r\n };\r\n SplitLine.prototype.getViewLineContent = function (model, modelLineNumber, outputLineIndex) {\r\n if (!this._isVisible) {\r\n throw new Error('Not supported');\r\n }\r\n var startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex);\r\n var endOffset = this.getInputEndOffsetOfOutputLineIndex(model, modelLineNumber, outputLineIndex);\r\n var r = model.getValueInRange({\r\n startLineNumber: modelLineNumber,\r\n startColumn: startOffset + 1,\r\n endLineNumber: modelLineNumber,\r\n endColumn: endOffset + 1\r\n });\r\n if (outputLineIndex > 0) {\r\n r = this.wrappedIndent + r;\r\n }\r\n return r;\r\n };\r\n SplitLine.prototype.getViewLineLength = function (model, modelLineNumber, outputLineIndex) {\r\n if (!this._isVisible) {\r\n throw new Error('Not supported');\r\n }\r\n var startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex);\r\n var endOffset = this.getInputEndOffsetOfOutputLineIndex(model, modelLineNumber, outputLineIndex);\r\n var r = endOffset - startOffset;\r\n if (outputLineIndex > 0) {\r\n r = this.wrappedIndent.length + r;\r\n }\r\n return r;\r\n };\r\n SplitLine.prototype.getViewLineMinColumn = function (_model, _modelLineNumber, outputLineIndex) {\r\n if (!this._isVisible) {\r\n throw new Error('Not supported');\r\n }\r\n if (outputLineIndex > 0) {\r\n return this.wrappedIndentLength + 1;\r\n }\r\n return 1;\r\n };\r\n SplitLine.prototype.getViewLineMaxColumn = function (model, modelLineNumber, outputLineIndex) {\r\n if (!this._isVisible) {\r\n throw new Error('Not supported');\r\n }\r\n return this.getViewLineContent(model, modelLineNumber, outputLineIndex).length + 1;\r\n };\r\n SplitLine.prototype.getViewLineData = function (model, modelLineNumber, outputLineIndex) {\r\n if (!this._isVisible) {\r\n throw new Error('Not supported');\r\n }\r\n var startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex);\r\n var endOffset = this.getInputEndOffsetOfOutputLineIndex(model, modelLineNumber, outputLineIndex);\r\n var lineContent = model.getValueInRange({\r\n startLineNumber: modelLineNumber,\r\n startColumn: startOffset + 1,\r\n endLineNumber: modelLineNumber,\r\n endColumn: endOffset + 1\r\n });\r\n if (outputLineIndex > 0) {\r\n lineContent = this.wrappedIndent + lineContent;\r\n }\r\n var minColumn = (outputLineIndex > 0 ? this.wrappedIndentLength + 1 : 1);\r\n var maxColumn = lineContent.length + 1;\r\n var continuesWithWrappedLine = (outputLineIndex + 1 < this.getViewLineCount());\r\n var deltaStartIndex = 0;\r\n if (outputLineIndex > 0) {\r\n deltaStartIndex = this.wrappedIndentLength;\r\n }\r\n var lineTokens = model.getLineTokens(modelLineNumber);\r\n return new ViewLineData(lineContent, continuesWithWrappedLine, minColumn, maxColumn, lineTokens.sliceAndInflate(startOffset, endOffset, deltaStartIndex));\r\n };\r\n SplitLine.prototype.getViewLinesData = function (model, modelLineNumber, fromOuputLineIndex, toOutputLineIndex, globalStartIndex, needed, result) {\r\n if (!this._isVisible) {\r\n throw new Error('Not supported');\r\n }\r\n for (var outputLineIndex = fromOuputLineIndex; outputLineIndex < toOutputLineIndex; outputLineIndex++) {\r\n var globalIndex = globalStartIndex + outputLineIndex - fromOuputLineIndex;\r\n if (!needed[globalIndex]) {\r\n result[globalIndex] = null;\r\n continue;\r\n }\r\n result[globalIndex] = this.getViewLineData(model, modelLineNumber, outputLineIndex);\r\n }\r\n };\r\n SplitLine.prototype.getModelColumnOfViewPosition = function (outputLineIndex, outputColumn) {\r\n if (!this._isVisible) {\r\n throw new Error('Not supported');\r\n }\r\n var adjustedColumn = outputColumn - 1;\r\n if (outputLineIndex > 0) {\r\n if (adjustedColumn < this.wrappedIndentLength) {\r\n adjustedColumn = 0;\r\n }\r\n else {\r\n adjustedColumn -= this.wrappedIndentLength;\r\n }\r\n }\r\n return this.positionMapper.getInputOffsetOfOutputPosition(outputLineIndex, adjustedColumn) + 1;\r\n };\r\n SplitLine.prototype.getViewPositionOfModelPosition = function (deltaLineNumber, inputColumn) {\r\n if (!this._isVisible) {\r\n throw new Error('Not supported');\r\n }\r\n var r = this.positionMapper.getOutputPositionOfInputOffset(inputColumn - 1);\r\n var outputLineIndex = r.outputLineIndex;\r\n var outputColumn = r.outputOffset + 1;\r\n if (outputLineIndex > 0) {\r\n outputColumn += this.wrappedIndentLength;\r\n }\r\n //\t\tconsole.log('in -> out ' + deltaLineNumber + ',' + inputColumn + ' ===> ' + (deltaLineNumber+outputLineIndex) + ',' + outputColumn);\r\n return new Position(deltaLineNumber + outputLineIndex, outputColumn);\r\n };\r\n SplitLine.prototype.getViewLineNumberOfModelPosition = function (deltaLineNumber, inputColumn) {\r\n if (!this._isVisible) {\r\n throw new Error('Not supported');\r\n }\r\n var r = this.positionMapper.getOutputPositionOfInputOffset(inputColumn - 1);\r\n return (deltaLineNumber + r.outputLineIndex);\r\n };\r\n return SplitLine;\r\n}());\r\nexport { SplitLine };\r\nfunction createSplitLine(linePositionMapperFactory, text, tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent, isVisible) {\r\n var positionMapper = linePositionMapperFactory.createLineMapping(text, tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent);\r\n if (positionMapper === null) {\r\n // No mapping needed\r\n if (isVisible) {\r\n return VisibleIdentitySplitLine.INSTANCE;\r\n }\r\n return InvisibleIdentitySplitLine.INSTANCE;\r\n }\r\n else {\r\n return new SplitLine(positionMapper, isVisible);\r\n }\r\n}\r\nvar IdentityCoordinatesConverter = /** @class */ (function () {\r\n function IdentityCoordinatesConverter(lines) {\r\n this._lines = lines;\r\n }\r\n IdentityCoordinatesConverter.prototype._validPosition = function (pos) {\r\n return this._lines.model.validatePosition(pos);\r\n };\r\n IdentityCoordinatesConverter.prototype._validRange = function (range) {\r\n return this._lines.model.validateRange(range);\r\n };\r\n // View -> Model conversion and related methods\r\n IdentityCoordinatesConverter.prototype.convertViewPositionToModelPosition = function (viewPosition) {\r\n return this._validPosition(viewPosition);\r\n };\r\n IdentityCoordinatesConverter.prototype.convertViewRangeToModelRange = function (viewRange) {\r\n return this._validRange(viewRange);\r\n };\r\n IdentityCoordinatesConverter.prototype.validateViewPosition = function (_viewPosition, expectedModelPosition) {\r\n return this._validPosition(expectedModelPosition);\r\n };\r\n IdentityCoordinatesConverter.prototype.validateViewRange = function (_viewRange, expectedModelRange) {\r\n return this._validRange(expectedModelRange);\r\n };\r\n // Model -> View conversion and related methods\r\n IdentityCoordinatesConverter.prototype.convertModelPositionToViewPosition = function (modelPosition) {\r\n return this._validPosition(modelPosition);\r\n };\r\n IdentityCoordinatesConverter.prototype.convertModelRangeToViewRange = function (modelRange) {\r\n return this._validRange(modelRange);\r\n };\r\n IdentityCoordinatesConverter.prototype.modelPositionIsVisible = function (modelPosition) {\r\n var lineCount = this._lines.model.getLineCount();\r\n if (modelPosition.lineNumber < 1 || modelPosition.lineNumber > lineCount) {\r\n // invalid arguments\r\n return false;\r\n }\r\n return true;\r\n };\r\n return IdentityCoordinatesConverter;\r\n}());\r\nexport { IdentityCoordinatesConverter };\r\nvar IdentityLinesCollection = /** @class */ (function () {\r\n function IdentityLinesCollection(model) {\r\n this.model = model;\r\n }\r\n IdentityLinesCollection.prototype.dispose = function () {\r\n };\r\n IdentityLinesCollection.prototype.createCoordinatesConverter = function () {\r\n return new IdentityCoordinatesConverter(this);\r\n };\r\n IdentityLinesCollection.prototype.getHiddenAreas = function () {\r\n return [];\r\n };\r\n IdentityLinesCollection.prototype.setHiddenAreas = function (_ranges) {\r\n return false;\r\n };\r\n IdentityLinesCollection.prototype.setTabSize = function (_newTabSize) {\r\n return false;\r\n };\r\n IdentityLinesCollection.prototype.setWrappingSettings = function (_wrappingIndent, _wrappingColumn, _columnsForFullWidthChar) {\r\n return false;\r\n };\r\n IdentityLinesCollection.prototype.onModelFlushed = function () {\r\n };\r\n IdentityLinesCollection.prototype.onModelLinesDeleted = function (_versionId, fromLineNumber, toLineNumber) {\r\n return new viewEvents.ViewLinesDeletedEvent(fromLineNumber, toLineNumber);\r\n };\r\n IdentityLinesCollection.prototype.onModelLinesInserted = function (_versionId, fromLineNumber, toLineNumber, _text) {\r\n return new viewEvents.ViewLinesInsertedEvent(fromLineNumber, toLineNumber);\r\n };\r\n IdentityLinesCollection.prototype.onModelLineChanged = function (_versionId, lineNumber, _newText) {\r\n return [false, new viewEvents.ViewLinesChangedEvent(lineNumber, lineNumber), null, null];\r\n };\r\n IdentityLinesCollection.prototype.acceptVersionId = function (_versionId) {\r\n };\r\n IdentityLinesCollection.prototype.getViewLineCount = function () {\r\n return this.model.getLineCount();\r\n };\r\n IdentityLinesCollection.prototype.warmUpLookupCache = function (_viewStartLineNumber, _viewEndLineNumber) {\r\n };\r\n IdentityLinesCollection.prototype.getActiveIndentGuide = function (viewLineNumber, _minLineNumber, _maxLineNumber) {\r\n return {\r\n startLineNumber: viewLineNumber,\r\n endLineNumber: viewLineNumber,\r\n indent: 0\r\n };\r\n };\r\n IdentityLinesCollection.prototype.getViewLinesIndentGuides = function (viewStartLineNumber, viewEndLineNumber) {\r\n var viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;\r\n var result = new Array(viewLineCount);\r\n for (var i = 0; i < viewLineCount; i++) {\r\n result[i] = 0;\r\n }\r\n return result;\r\n };\r\n IdentityLinesCollection.prototype.getViewLineContent = function (viewLineNumber) {\r\n return this.model.getLineContent(viewLineNumber);\r\n };\r\n IdentityLinesCollection.prototype.getViewLineLength = function (viewLineNumber) {\r\n return this.model.getLineLength(viewLineNumber);\r\n };\r\n IdentityLinesCollection.prototype.getViewLineMinColumn = function (viewLineNumber) {\r\n return this.model.getLineMinColumn(viewLineNumber);\r\n };\r\n IdentityLinesCollection.prototype.getViewLineMaxColumn = function (viewLineNumber) {\r\n return this.model.getLineMaxColumn(viewLineNumber);\r\n };\r\n IdentityLinesCollection.prototype.getViewLineData = function (viewLineNumber) {\r\n var lineTokens = this.model.getLineTokens(viewLineNumber);\r\n var lineContent = lineTokens.getLineContent();\r\n return new ViewLineData(lineContent, false, 1, lineContent.length + 1, lineTokens.inflate());\r\n };\r\n IdentityLinesCollection.prototype.getViewLinesData = function (viewStartLineNumber, viewEndLineNumber, needed) {\r\n var lineCount = this.model.getLineCount();\r\n viewStartLineNumber = Math.min(Math.max(1, viewStartLineNumber), lineCount);\r\n viewEndLineNumber = Math.min(Math.max(1, viewEndLineNumber), lineCount);\r\n var result = [];\r\n for (var lineNumber = viewStartLineNumber; lineNumber <= viewEndLineNumber; lineNumber++) {\r\n var idx = lineNumber - viewStartLineNumber;\r\n if (!needed[idx]) {\r\n result[idx] = null;\r\n }\r\n result[idx] = this.getViewLineData(lineNumber);\r\n }\r\n return result;\r\n };\r\n IdentityLinesCollection.prototype.getAllOverviewRulerDecorations = function (ownerId, filterOutValidation, theme) {\r\n var decorations = this.model.getOverviewRulerDecorations(ownerId, filterOutValidation);\r\n var result = new OverviewRulerDecorations();\r\n for (var _i = 0, decorations_2 = decorations; _i < decorations_2.length; _i++) {\r\n var decoration = decorations_2[_i];\r\n var opts = decoration.options.overviewRuler;\r\n var lane = opts ? opts.position : 0;\r\n if (lane === 0) {\r\n continue;\r\n }\r\n var color = opts.getColor(theme);\r\n var viewStartLineNumber = decoration.range.startLineNumber;\r\n var viewEndLineNumber = decoration.range.endLineNumber;\r\n result.accept(color, viewStartLineNumber, viewEndLineNumber, lane);\r\n }\r\n return result.result;\r\n };\r\n IdentityLinesCollection.prototype.getDecorationsInRange = function (range, ownerId, filterOutValidation) {\r\n return this.model.getDecorationsInRange(range, ownerId, filterOutValidation);\r\n };\r\n return IdentityLinesCollection;\r\n}());\r\nexport { IdentityLinesCollection };\r\nvar OverviewRulerDecorations = /** @class */ (function () {\r\n function OverviewRulerDecorations() {\r\n this.result = Object.create(null);\r\n }\r\n OverviewRulerDecorations.prototype.accept = function (color, startLineNumber, endLineNumber, lane) {\r\n var prev = this.result[color];\r\n if (prev) {\r\n var prevLane = prev[prev.length - 3];\r\n var prevEndLineNumber = prev[prev.length - 1];\r\n if (prevLane === lane && prevEndLineNumber + 1 >= startLineNumber) {\r\n // merge into prev\r\n if (endLineNumber > prevEndLineNumber) {\r\n prev[prev.length - 1] = endLineNumber;\r\n }\r\n return;\r\n }\r\n // push\r\n prev.push(lane, startLineNumber, endLineNumber);\r\n }\r\n else {\r\n this.result[color] = [lane, startLineNumber, endLineNumber];\r\n }\r\n };\r\n return OverviewRulerDecorations;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { CharacterClassifier } from '../core/characterClassifier.js';\r\nimport { toUint32Array } from '../../../base/common/uint.js';\r\nimport { PrefixSumComputer } from './prefixSumComputer.js';\r\nimport { OutputPosition } from './splitLinesCollection.js';\r\nvar WrappingCharacterClassifier = /** @class */ (function (_super) {\r\n __extends(WrappingCharacterClassifier, _super);\r\n function WrappingCharacterClassifier(BREAK_BEFORE, BREAK_AFTER, BREAK_OBTRUSIVE) {\r\n var _this = _super.call(this, 0 /* NONE */) || this;\r\n for (var i = 0; i < BREAK_BEFORE.length; i++) {\r\n _this.set(BREAK_BEFORE.charCodeAt(i), 1 /* BREAK_BEFORE */);\r\n }\r\n for (var i = 0; i < BREAK_AFTER.length; i++) {\r\n _this.set(BREAK_AFTER.charCodeAt(i), 2 /* BREAK_AFTER */);\r\n }\r\n for (var i = 0; i < BREAK_OBTRUSIVE.length; i++) {\r\n _this.set(BREAK_OBTRUSIVE.charCodeAt(i), 3 /* BREAK_OBTRUSIVE */);\r\n }\r\n return _this;\r\n }\r\n WrappingCharacterClassifier.prototype.get = function (charCode) {\r\n // Initialize CharacterClass.BREAK_IDEOGRAPHIC for these Unicode ranges:\r\n // 1. CJK Unified Ideographs (0x4E00 -- 0x9FFF)\r\n // 2. CJK Unified Ideographs Extension A (0x3400 -- 0x4DBF)\r\n // 3. Hiragana and Katakana (0x3040 -- 0x30FF)\r\n if ((charCode >= 0x3040 && charCode <= 0x30FF)\r\n || (charCode >= 0x3400 && charCode <= 0x4DBF)\r\n || (charCode >= 0x4E00 && charCode <= 0x9FFF)) {\r\n return 4 /* BREAK_IDEOGRAPHIC */;\r\n }\r\n return _super.prototype.get.call(this, charCode);\r\n };\r\n return WrappingCharacterClassifier;\r\n}(CharacterClassifier));\r\nvar CharacterHardWrappingLineMapperFactory = /** @class */ (function () {\r\n function CharacterHardWrappingLineMapperFactory(breakBeforeChars, breakAfterChars, breakObtrusiveChars) {\r\n this.classifier = new WrappingCharacterClassifier(breakBeforeChars, breakAfterChars, breakObtrusiveChars);\r\n }\r\n // TODO@Alex -> duplicated in lineCommentCommand\r\n CharacterHardWrappingLineMapperFactory.nextVisibleColumn = function (currentVisibleColumn, tabSize, isTab, columnSize) {\r\n currentVisibleColumn = +currentVisibleColumn; //@perf\r\n tabSize = +tabSize; //@perf\r\n columnSize = +columnSize; //@perf\r\n if (isTab) {\r\n return currentVisibleColumn + (tabSize - (currentVisibleColumn % tabSize));\r\n }\r\n return currentVisibleColumn + columnSize;\r\n };\r\n CharacterHardWrappingLineMapperFactory.prototype.createLineMapping = function (lineText, tabSize, breakingColumn, columnsForFullWidthChar, hardWrappingIndent) {\r\n if (breakingColumn === -1) {\r\n return null;\r\n }\r\n tabSize = +tabSize; //@perf\r\n breakingColumn = +breakingColumn; //@perf\r\n columnsForFullWidthChar = +columnsForFullWidthChar; //@perf\r\n hardWrappingIndent = +hardWrappingIndent; //@perf\r\n var wrappedTextIndentVisibleColumn = 0;\r\n var wrappedTextIndent = '';\r\n var firstNonWhitespaceIndex = -1;\r\n if (hardWrappingIndent !== 0 /* None */) {\r\n firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineText);\r\n if (firstNonWhitespaceIndex !== -1) {\r\n // Track existing indent\r\n wrappedTextIndent = lineText.substring(0, firstNonWhitespaceIndex);\r\n for (var i = 0; i < firstNonWhitespaceIndex; i++) {\r\n wrappedTextIndentVisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(wrappedTextIndentVisibleColumn, tabSize, lineText.charCodeAt(i) === 9 /* Tab */, 1);\r\n }\r\n // Increase indent of continuation lines, if desired\r\n var numberOfAdditionalTabs = 0;\r\n if (hardWrappingIndent === 2 /* Indent */) {\r\n numberOfAdditionalTabs = 1;\r\n }\r\n else if (hardWrappingIndent === 3 /* DeepIndent */) {\r\n numberOfAdditionalTabs = 2;\r\n }\r\n for (var i = 0; i < numberOfAdditionalTabs; i++) {\r\n wrappedTextIndent += '\\t';\r\n wrappedTextIndentVisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(wrappedTextIndentVisibleColumn, tabSize, true, 1);\r\n }\r\n // Force sticking to beginning of line if no character would fit except for the indentation\r\n if (wrappedTextIndentVisibleColumn + columnsForFullWidthChar > breakingColumn) {\r\n wrappedTextIndent = '';\r\n wrappedTextIndentVisibleColumn = 0;\r\n }\r\n }\r\n }\r\n var classifier = this.classifier;\r\n var lastBreakingOffset = 0; // Last 0-based offset in the lineText at which a break happened\r\n var breakingLengths = []; // The length of each broken-up line text\r\n var breakingLengthsIndex = 0; // The count of breaks already done\r\n var visibleColumn = 0; // Visible column since the beginning of the current line\r\n var niceBreakOffset = -1; // Last index of a character that indicates a break should happen before it (more desirable)\r\n var niceBreakVisibleColumn = 0; // visible column if a break were to be later introduced before `niceBreakOffset`\r\n var obtrusiveBreakOffset = -1; // Last index of a character that indicates a break should happen before it (less desirable)\r\n var obtrusiveBreakVisibleColumn = 0; // visible column if a break were to be later introduced before `obtrusiveBreakOffset`\r\n var len = lineText.length;\r\n for (var i = 0; i < len; i++) {\r\n // At this point, there is a certainty that the character before `i` fits on the current line,\r\n // but the character at `i` might not fit\r\n var charCode = lineText.charCodeAt(i);\r\n var charCodeIsTab = (charCode === 9 /* Tab */);\r\n var charCodeClass = classifier.get(charCode);\r\n if (strings.isLowSurrogate(charCode) /* && i + 1 < len */) {\r\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\r\n // => advance visibleColumn by 1 and advance to next char code...\r\n visibleColumn = visibleColumn + 1;\r\n continue;\r\n }\r\n if (charCodeClass === 1 /* BREAK_BEFORE */) {\r\n // This is a character that indicates that a break should happen before it\r\n // Since we are certain the character before `i` fits, there's no extra checking needed,\r\n // just mark it as a nice breaking opportunity\r\n niceBreakOffset = i;\r\n niceBreakVisibleColumn = wrappedTextIndentVisibleColumn;\r\n }\r\n // CJK breaking : before break\r\n if (charCodeClass === 4 /* BREAK_IDEOGRAPHIC */ && i > 0) {\r\n var prevCode = lineText.charCodeAt(i - 1);\r\n var prevClass = classifier.get(prevCode);\r\n if (prevClass !== 1 /* BREAK_BEFORE */) { // Kinsoku Shori: Don't break after a leading character, like an open bracket\r\n niceBreakOffset = i;\r\n niceBreakVisibleColumn = wrappedTextIndentVisibleColumn;\r\n }\r\n }\r\n var charColumnSize = 1;\r\n if (strings.isFullWidthCharacter(charCode)) {\r\n charColumnSize = columnsForFullWidthChar;\r\n }\r\n // Advance visibleColumn with character at `i`\r\n visibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(visibleColumn, tabSize, charCodeIsTab, charColumnSize);\r\n if (visibleColumn > breakingColumn && i !== 0) {\r\n // We need to break at least before character at `i`:\r\n // - break before niceBreakLastOffset if it exists (and re-establish a correct visibleColumn by using niceBreakVisibleColumn + charAt(i))\r\n // - otherwise, break before obtrusiveBreakLastOffset if it exists (and re-establish a correct visibleColumn by using obtrusiveBreakVisibleColumn + charAt(i))\r\n // - otherwise, break before i (and re-establish a correct visibleColumn by charAt(i))\r\n var breakBeforeOffset = void 0;\r\n var restoreVisibleColumnFrom = void 0;\r\n if (niceBreakOffset !== -1 && niceBreakVisibleColumn <= breakingColumn) {\r\n // We will break before `niceBreakLastOffset`\r\n breakBeforeOffset = niceBreakOffset;\r\n restoreVisibleColumnFrom = niceBreakVisibleColumn;\r\n }\r\n else if (obtrusiveBreakOffset !== -1 && obtrusiveBreakVisibleColumn <= breakingColumn) {\r\n // We will break before `obtrusiveBreakLastOffset`\r\n breakBeforeOffset = obtrusiveBreakOffset;\r\n restoreVisibleColumnFrom = obtrusiveBreakVisibleColumn;\r\n }\r\n else {\r\n // We will break before `i`\r\n breakBeforeOffset = i;\r\n restoreVisibleColumnFrom = wrappedTextIndentVisibleColumn;\r\n }\r\n // Break before character at `breakBeforeOffset`\r\n breakingLengths[breakingLengthsIndex++] = breakBeforeOffset - lastBreakingOffset;\r\n lastBreakingOffset = breakBeforeOffset;\r\n // Re-establish visibleColumn by taking character at `i` into account\r\n visibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(restoreVisibleColumnFrom, tabSize, charCodeIsTab, charColumnSize);\r\n // Reset markers\r\n niceBreakOffset = -1;\r\n niceBreakVisibleColumn = 0;\r\n obtrusiveBreakOffset = -1;\r\n obtrusiveBreakVisibleColumn = 0;\r\n }\r\n // At this point, there is a certainty that the character at `i` fits on the current line\r\n if (niceBreakOffset !== -1) {\r\n // Advance niceBreakVisibleColumn\r\n niceBreakVisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(niceBreakVisibleColumn, tabSize, charCodeIsTab, charColumnSize);\r\n }\r\n if (obtrusiveBreakOffset !== -1) {\r\n // Advance obtrusiveBreakVisibleColumn\r\n obtrusiveBreakVisibleColumn = CharacterHardWrappingLineMapperFactory.nextVisibleColumn(obtrusiveBreakVisibleColumn, tabSize, charCodeIsTab, charColumnSize);\r\n }\r\n if (charCodeClass === 2 /* BREAK_AFTER */ && (hardWrappingIndent === 0 /* None */ || i >= firstNonWhitespaceIndex)) {\r\n // This is a character that indicates that a break should happen after it\r\n niceBreakOffset = i + 1;\r\n niceBreakVisibleColumn = wrappedTextIndentVisibleColumn;\r\n }\r\n // CJK breaking : after break\r\n if (charCodeClass === 4 /* BREAK_IDEOGRAPHIC */ && i < len - 1) {\r\n var nextCode = lineText.charCodeAt(i + 1);\r\n var nextClass = classifier.get(nextCode);\r\n if (nextClass !== 2 /* BREAK_AFTER */) { // Kinsoku Shori: Don't break before a trailing character, like a period\r\n niceBreakOffset = i + 1;\r\n niceBreakVisibleColumn = wrappedTextIndentVisibleColumn;\r\n }\r\n }\r\n if (charCodeClass === 3 /* BREAK_OBTRUSIVE */) {\r\n // This is an obtrusive character that indicates that a break should happen after it\r\n obtrusiveBreakOffset = i + 1;\r\n obtrusiveBreakVisibleColumn = wrappedTextIndentVisibleColumn;\r\n }\r\n }\r\n if (breakingLengthsIndex === 0) {\r\n return null;\r\n }\r\n // Add last segment\r\n breakingLengths[breakingLengthsIndex++] = len - lastBreakingOffset;\r\n return new CharacterHardWrappingLineMapping(new PrefixSumComputer(toUint32Array(breakingLengths)), wrappedTextIndent);\r\n };\r\n return CharacterHardWrappingLineMapperFactory;\r\n}());\r\nexport { CharacterHardWrappingLineMapperFactory };\r\nvar CharacterHardWrappingLineMapping = /** @class */ (function () {\r\n function CharacterHardWrappingLineMapping(prefixSums, wrappedLinesIndent) {\r\n this._prefixSums = prefixSums;\r\n this._wrappedLinesIndent = wrappedLinesIndent;\r\n }\r\n CharacterHardWrappingLineMapping.prototype.getOutputLineCount = function () {\r\n return this._prefixSums.getCount();\r\n };\r\n CharacterHardWrappingLineMapping.prototype.getWrappedLinesIndent = function () {\r\n return this._wrappedLinesIndent;\r\n };\r\n CharacterHardWrappingLineMapping.prototype.getInputOffsetOfOutputPosition = function (outputLineIndex, outputOffset) {\r\n if (outputLineIndex === 0) {\r\n return outputOffset;\r\n }\r\n else {\r\n return this._prefixSums.getAccumulatedValue(outputLineIndex - 1) + outputOffset;\r\n }\r\n };\r\n CharacterHardWrappingLineMapping.prototype.getOutputPositionOfInputOffset = function (inputOffset) {\r\n var r = this._prefixSums.getIndexOf(inputOffset);\r\n return new OutputPosition(r.index, r.remainder);\r\n };\r\n return CharacterHardWrappingLineMapping;\r\n}());\r\nexport { CharacterHardWrappingLineMapping };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport { InlineDecoration, ViewModelDecoration } from './viewModel.js';\r\nvar ViewModelDecorations = /** @class */ (function () {\r\n function ViewModelDecorations(editorId, model, configuration, linesCollection, coordinatesConverter) {\r\n this.editorId = editorId;\r\n this.model = model;\r\n this.configuration = configuration;\r\n this._linesCollection = linesCollection;\r\n this._coordinatesConverter = coordinatesConverter;\r\n this._decorationsCache = Object.create(null);\r\n this._cachedModelDecorationsResolver = null;\r\n this._cachedModelDecorationsResolverViewRange = null;\r\n }\r\n ViewModelDecorations.prototype._clearCachedModelDecorationsResolver = function () {\r\n this._cachedModelDecorationsResolver = null;\r\n this._cachedModelDecorationsResolverViewRange = null;\r\n };\r\n ViewModelDecorations.prototype.dispose = function () {\r\n this._decorationsCache = Object.create(null);\r\n this._clearCachedModelDecorationsResolver();\r\n };\r\n ViewModelDecorations.prototype.reset = function () {\r\n this._decorationsCache = Object.create(null);\r\n this._clearCachedModelDecorationsResolver();\r\n };\r\n ViewModelDecorations.prototype.onModelDecorationsChanged = function () {\r\n this._decorationsCache = Object.create(null);\r\n this._clearCachedModelDecorationsResolver();\r\n };\r\n ViewModelDecorations.prototype.onLineMappingChanged = function () {\r\n this._decorationsCache = Object.create(null);\r\n this._clearCachedModelDecorationsResolver();\r\n };\r\n ViewModelDecorations.prototype._getOrCreateViewModelDecoration = function (modelDecoration) {\r\n var id = modelDecoration.id;\r\n var r = this._decorationsCache[id];\r\n if (!r) {\r\n var modelRange = modelDecoration.range;\r\n var options = modelDecoration.options;\r\n var viewRange = void 0;\r\n if (options.isWholeLine) {\r\n var start = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.startLineNumber, 1));\r\n var end = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.endLineNumber, this.model.getLineMaxColumn(modelRange.endLineNumber)));\r\n viewRange = new Range(start.lineNumber, start.column, end.lineNumber, end.column);\r\n }\r\n else {\r\n viewRange = this._coordinatesConverter.convertModelRangeToViewRange(modelRange);\r\n }\r\n r = new ViewModelDecoration(viewRange, options);\r\n this._decorationsCache[id] = r;\r\n }\r\n return r;\r\n };\r\n ViewModelDecorations.prototype.getDecorationsViewportData = function (viewRange) {\r\n var cacheIsValid = (this._cachedModelDecorationsResolver !== null);\r\n cacheIsValid = cacheIsValid && (viewRange.equalsRange(this._cachedModelDecorationsResolverViewRange));\r\n if (!cacheIsValid) {\r\n this._cachedModelDecorationsResolver = this._getDecorationsViewportData(viewRange);\r\n this._cachedModelDecorationsResolverViewRange = viewRange;\r\n }\r\n return this._cachedModelDecorationsResolver;\r\n };\r\n ViewModelDecorations.prototype._getDecorationsViewportData = function (viewportRange) {\r\n var modelDecorations = this._linesCollection.getDecorationsInRange(viewportRange, this.editorId, this.configuration.options.get(65 /* readOnly */));\r\n var startLineNumber = viewportRange.startLineNumber;\r\n var endLineNumber = viewportRange.endLineNumber;\r\n var decorationsInViewport = [], decorationsInViewportLen = 0;\r\n var inlineDecorations = [];\r\n for (var j = startLineNumber; j <= endLineNumber; j++) {\r\n inlineDecorations[j - startLineNumber] = [];\r\n }\r\n for (var i = 0, len = modelDecorations.length; i < len; i++) {\r\n var modelDecoration = modelDecorations[i];\r\n var decorationOptions = modelDecoration.options;\r\n var viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\r\n var viewRange = viewModelDecoration.range;\r\n decorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;\r\n if (decorationOptions.inlineClassName) {\r\n var inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? 3 /* RegularAffectingLetterSpacing */ : 0 /* Regular */);\r\n var intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);\r\n var intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);\r\n for (var j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {\r\n inlineDecorations[j - startLineNumber].push(inlineDecoration);\r\n }\r\n }\r\n if (decorationOptions.beforeContentClassName) {\r\n if (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {\r\n var inlineDecoration = new InlineDecoration(new Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn), decorationOptions.beforeContentClassName, 1 /* Before */);\r\n inlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);\r\n }\r\n }\r\n if (decorationOptions.afterContentClassName) {\r\n if (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {\r\n var inlineDecoration = new InlineDecoration(new Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn), decorationOptions.afterContentClassName, 2 /* After */);\r\n inlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);\r\n }\r\n }\r\n }\r\n return {\r\n decorations: decorationsInViewport,\r\n inlineDecorations: inlineDecorations\r\n };\r\n };\r\n return ViewModelDecorations;\r\n}());\r\nexport { ViewModelDecorations };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Color } from '../../../base/common/color.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { EDITOR_FONT_DEFAULTS } from '../config/editorOptions.js';\r\nimport { Position } from '../core/position.js';\r\nimport { Range } from '../core/range.js';\r\nimport { TokenizationRegistry } from '../modes.js';\r\nimport { tokenizeLineToHTML } from '../modes/textToHtmlTokenizer.js';\r\nimport { MinimapTokensColorTracker } from './minimapTokensColorTracker.js';\r\nimport * as viewEvents from '../view/viewEvents.js';\r\nimport { ViewLayout } from '../viewLayout/viewLayout.js';\r\nimport { CharacterHardWrappingLineMapperFactory } from './characterHardWrappingLineMapper.js';\r\nimport { IdentityLinesCollection, SplitLinesCollection } from './splitLinesCollection.js';\r\nimport { MinimapLinesRenderingData, ViewLineRenderingData } from './viewModel.js';\r\nimport { ViewModelDecorations } from './viewModelDecorations.js';\r\nimport { RunOnceScheduler } from '../../../base/common/async.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nvar USE_IDENTITY_LINES_COLLECTION = true;\r\nvar ViewModel = /** @class */ (function (_super) {\r\n __extends(ViewModel, _super);\r\n function ViewModel(editorId, configuration, model, scheduleAtNextAnimationFrame) {\r\n var _this = _super.call(this) || this;\r\n _this.editorId = editorId;\r\n _this.configuration = configuration;\r\n _this.model = model;\r\n _this._tokenizeViewportSoon = _this._register(new RunOnceScheduler(function () { return _this.tokenizeViewport(); }, 50));\r\n _this.hasFocus = false;\r\n _this.viewportStartLine = -1;\r\n _this.viewportStartLineTrackedRange = null;\r\n _this.viewportStartLineDelta = 0;\r\n if (USE_IDENTITY_LINES_COLLECTION && _this.model.isTooLargeForTokenization()) {\r\n _this.lines = new IdentityLinesCollection(_this.model);\r\n }\r\n else {\r\n var options = _this.configuration.options;\r\n var wrappingInfo = options.get(104 /* wrappingInfo */);\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n var wordWrapBreakAfterCharacters = options.get(94 /* wordWrapBreakAfterCharacters */);\r\n var wordWrapBreakBeforeCharacters = options.get(95 /* wordWrapBreakBeforeCharacters */);\r\n var wordWrapBreakObtrusiveCharacters = options.get(96 /* wordWrapBreakObtrusiveCharacters */);\r\n var wrappingIndent = options.get(99 /* wrappingIndent */);\r\n var hardWrappingLineMapperFactory = new CharacterHardWrappingLineMapperFactory(wordWrapBreakBeforeCharacters, wordWrapBreakAfterCharacters, wordWrapBreakObtrusiveCharacters);\r\n _this.lines = new SplitLinesCollection(_this.model, hardWrappingLineMapperFactory, _this.model.getOptions().tabSize, wrappingInfo.wrappingColumn, fontInfo.typicalFullwidthCharacterWidth / fontInfo.typicalHalfwidthCharacterWidth, wrappingIndent);\r\n }\r\n _this.coordinatesConverter = _this.lines.createCoordinatesConverter();\r\n _this.viewLayout = _this._register(new ViewLayout(_this.configuration, _this.getLineCount(), scheduleAtNextAnimationFrame));\r\n _this._register(_this.viewLayout.onDidScroll(function (e) {\r\n if (e.scrollTopChanged) {\r\n _this._tokenizeViewportSoon.schedule();\r\n }\r\n try {\r\n var eventsCollector = _this._beginEmit();\r\n eventsCollector.emit(new viewEvents.ViewScrollChangedEvent(e));\r\n }\r\n finally {\r\n _this._endEmit();\r\n }\r\n }));\r\n _this.decorations = new ViewModelDecorations(_this.editorId, _this.model, _this.configuration, _this.lines, _this.coordinatesConverter);\r\n _this._registerModelEvents();\r\n _this._register(_this.configuration.onDidChange(function (e) {\r\n try {\r\n var eventsCollector = _this._beginEmit();\r\n _this._onConfigurationChanged(eventsCollector, e);\r\n }\r\n finally {\r\n _this._endEmit();\r\n }\r\n }));\r\n _this._register(MinimapTokensColorTracker.getInstance().onDidChange(function () {\r\n try {\r\n var eventsCollector = _this._beginEmit();\r\n eventsCollector.emit(new viewEvents.ViewTokensColorsChangedEvent());\r\n }\r\n finally {\r\n _this._endEmit();\r\n }\r\n }));\r\n return _this;\r\n }\r\n ViewModel.prototype.dispose = function () {\r\n // First remove listeners, as disposing the lines might end up sending\r\n // model decoration changed events ... and we no longer care about them ...\r\n _super.prototype.dispose.call(this);\r\n this.decorations.dispose();\r\n this.lines.dispose();\r\n this.invalidateMinimapColorCache();\r\n this.viewportStartLineTrackedRange = this.model._setTrackedRange(this.viewportStartLineTrackedRange, null, 1 /* NeverGrowsWhenTypingAtEdges */);\r\n };\r\n ViewModel.prototype.tokenizeViewport = function () {\r\n var linesViewportData = this.viewLayout.getLinesViewportData();\r\n var startPosition = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(linesViewportData.startLineNumber, 1));\r\n var endPosition = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(linesViewportData.endLineNumber, 1));\r\n this.model.tokenizeViewport(startPosition.lineNumber, endPosition.lineNumber);\r\n };\r\n ViewModel.prototype.setHasFocus = function (hasFocus) {\r\n this.hasFocus = hasFocus;\r\n };\r\n ViewModel.prototype._onConfigurationChanged = function (eventsCollector, e) {\r\n // We might need to restore the current centered view range, so save it (if available)\r\n var previousViewportStartModelPosition = null;\r\n if (this.viewportStartLine !== -1) {\r\n var previousViewportStartViewPosition = new Position(this.viewportStartLine, this.getLineMinColumn(this.viewportStartLine));\r\n previousViewportStartModelPosition = this.coordinatesConverter.convertViewPositionToModelPosition(previousViewportStartViewPosition);\r\n }\r\n var restorePreviousViewportStart = false;\r\n var options = this.configuration.options;\r\n var wrappingInfo = options.get(104 /* wrappingInfo */);\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n var wrappingIndent = options.get(99 /* wrappingIndent */);\r\n if (this.lines.setWrappingSettings(wrappingIndent, wrappingInfo.wrappingColumn, fontInfo.typicalFullwidthCharacterWidth / fontInfo.typicalHalfwidthCharacterWidth)) {\r\n eventsCollector.emit(new viewEvents.ViewFlushedEvent());\r\n eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());\r\n eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\r\n this.decorations.onLineMappingChanged();\r\n this.viewLayout.onFlushed(this.getLineCount());\r\n if (this.viewLayout.getCurrentScrollTop() !== 0) {\r\n // Never change the scroll position from 0 to something else...\r\n restorePreviousViewportStart = true;\r\n }\r\n }\r\n if (e.hasChanged(65 /* readOnly */)) {\r\n // Must read again all decorations due to readOnly filtering\r\n this.decorations.reset();\r\n eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\r\n }\r\n eventsCollector.emit(new viewEvents.ViewConfigurationChangedEvent(e));\r\n this.viewLayout.onConfigurationChanged(e);\r\n if (restorePreviousViewportStart && previousViewportStartModelPosition) {\r\n var viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(previousViewportStartModelPosition);\r\n var viewPositionTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\r\n this.viewLayout.setScrollPositionNow({ scrollTop: viewPositionTop + this.viewportStartLineDelta });\r\n }\r\n };\r\n ViewModel.prototype._registerModelEvents = function () {\r\n var _this = this;\r\n this._register(this.model.onDidChangeRawContentFast(function (e) {\r\n try {\r\n var eventsCollector = _this._beginEmit();\r\n var hadOtherModelChange = false;\r\n var hadModelLineChangeThatChangedLineMapping = false;\r\n var changes = e.changes;\r\n var versionId = e.versionId;\r\n for (var j = 0, lenJ = changes.length; j < lenJ; j++) {\r\n var change = changes[j];\r\n switch (change.changeType) {\r\n case 1 /* Flush */: {\r\n _this.lines.onModelFlushed();\r\n eventsCollector.emit(new viewEvents.ViewFlushedEvent());\r\n _this.decorations.reset();\r\n _this.viewLayout.onFlushed(_this.getLineCount());\r\n hadOtherModelChange = true;\r\n break;\r\n }\r\n case 3 /* LinesDeleted */: {\r\n var linesDeletedEvent = _this.lines.onModelLinesDeleted(versionId, change.fromLineNumber, change.toLineNumber);\r\n if (linesDeletedEvent !== null) {\r\n eventsCollector.emit(linesDeletedEvent);\r\n _this.viewLayout.onLinesDeleted(linesDeletedEvent.fromLineNumber, linesDeletedEvent.toLineNumber);\r\n }\r\n hadOtherModelChange = true;\r\n break;\r\n }\r\n case 4 /* LinesInserted */: {\r\n var linesInsertedEvent = _this.lines.onModelLinesInserted(versionId, change.fromLineNumber, change.toLineNumber, change.detail);\r\n if (linesInsertedEvent !== null) {\r\n eventsCollector.emit(linesInsertedEvent);\r\n _this.viewLayout.onLinesInserted(linesInsertedEvent.fromLineNumber, linesInsertedEvent.toLineNumber);\r\n }\r\n hadOtherModelChange = true;\r\n break;\r\n }\r\n case 2 /* LineChanged */: {\r\n var _a = _this.lines.onModelLineChanged(versionId, change.lineNumber, change.detail), lineMappingChanged = _a[0], linesChangedEvent = _a[1], linesInsertedEvent = _a[2], linesDeletedEvent = _a[3];\r\n hadModelLineChangeThatChangedLineMapping = lineMappingChanged;\r\n if (linesChangedEvent) {\r\n eventsCollector.emit(linesChangedEvent);\r\n }\r\n if (linesInsertedEvent) {\r\n eventsCollector.emit(linesInsertedEvent);\r\n _this.viewLayout.onLinesInserted(linesInsertedEvent.fromLineNumber, linesInsertedEvent.toLineNumber);\r\n }\r\n if (linesDeletedEvent) {\r\n eventsCollector.emit(linesDeletedEvent);\r\n _this.viewLayout.onLinesDeleted(linesDeletedEvent.fromLineNumber, linesDeletedEvent.toLineNumber);\r\n }\r\n break;\r\n }\r\n case 5 /* EOLChanged */: {\r\n // Nothing to do. The new version will be accepted below\r\n break;\r\n }\r\n }\r\n }\r\n _this.lines.acceptVersionId(versionId);\r\n _this.viewLayout.onHeightMaybeChanged();\r\n if (!hadOtherModelChange && hadModelLineChangeThatChangedLineMapping) {\r\n eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());\r\n eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\r\n _this.decorations.onLineMappingChanged();\r\n }\r\n }\r\n finally {\r\n _this._endEmit();\r\n }\r\n // Update the configuration and reset the centered view line\r\n _this.viewportStartLine = -1;\r\n _this.configuration.setMaxLineNumber(_this.model.getLineCount());\r\n // Recover viewport\r\n if (!_this.hasFocus && _this.model.getAttachedEditorCount() >= 2 && _this.viewportStartLineTrackedRange) {\r\n var modelRange = _this.model._getTrackedRange(_this.viewportStartLineTrackedRange);\r\n if (modelRange) {\r\n var viewPosition = _this.coordinatesConverter.convertModelPositionToViewPosition(modelRange.getStartPosition());\r\n var viewPositionTop = _this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\r\n _this.viewLayout.setScrollPositionNow({ scrollTop: viewPositionTop + _this.viewportStartLineDelta });\r\n }\r\n }\r\n }));\r\n this._register(this.model.onDidChangeTokens(function (e) {\r\n var viewRanges = [];\r\n for (var j = 0, lenJ = e.ranges.length; j < lenJ; j++) {\r\n var modelRange = e.ranges[j];\r\n var viewStartLineNumber = _this.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.fromLineNumber, 1)).lineNumber;\r\n var viewEndLineNumber = _this.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.toLineNumber, _this.model.getLineMaxColumn(modelRange.toLineNumber))).lineNumber;\r\n viewRanges[j] = {\r\n fromLineNumber: viewStartLineNumber,\r\n toLineNumber: viewEndLineNumber\r\n };\r\n }\r\n try {\r\n var eventsCollector = _this._beginEmit();\r\n eventsCollector.emit(new viewEvents.ViewTokensChangedEvent(viewRanges));\r\n }\r\n finally {\r\n _this._endEmit();\r\n }\r\n if (e.tokenizationSupportChanged) {\r\n _this._tokenizeViewportSoon.schedule();\r\n }\r\n }));\r\n this._register(this.model.onDidChangeLanguageConfiguration(function (e) {\r\n try {\r\n var eventsCollector = _this._beginEmit();\r\n eventsCollector.emit(new viewEvents.ViewLanguageConfigurationEvent());\r\n }\r\n finally {\r\n _this._endEmit();\r\n }\r\n }));\r\n this._register(this.model.onDidChangeOptions(function (e) {\r\n // A tab size change causes a line mapping changed event => all view parts will repaint OK, no further event needed here\r\n if (_this.lines.setTabSize(_this.model.getOptions().tabSize)) {\r\n _this.decorations.onLineMappingChanged();\r\n _this.viewLayout.onFlushed(_this.getLineCount());\r\n try {\r\n var eventsCollector = _this._beginEmit();\r\n eventsCollector.emit(new viewEvents.ViewFlushedEvent());\r\n eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());\r\n eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\r\n }\r\n finally {\r\n _this._endEmit();\r\n }\r\n }\r\n }));\r\n this._register(this.model.onDidChangeDecorations(function (e) {\r\n _this.decorations.onModelDecorationsChanged();\r\n try {\r\n var eventsCollector = _this._beginEmit();\r\n eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\r\n }\r\n finally {\r\n _this._endEmit();\r\n }\r\n }));\r\n };\r\n ViewModel.prototype.setHiddenAreas = function (ranges) {\r\n try {\r\n var eventsCollector = this._beginEmit();\r\n var lineMappingChanged = this.lines.setHiddenAreas(ranges);\r\n if (lineMappingChanged) {\r\n eventsCollector.emit(new viewEvents.ViewFlushedEvent());\r\n eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());\r\n eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());\r\n this.decorations.onLineMappingChanged();\r\n this.viewLayout.onFlushed(this.getLineCount());\r\n this.viewLayout.onHeightMaybeChanged();\r\n }\r\n }\r\n finally {\r\n this._endEmit();\r\n }\r\n };\r\n ViewModel.prototype.getVisibleRanges = function () {\r\n var visibleViewRange = this.getCompletelyVisibleViewRange();\r\n var visibleRange = this.coordinatesConverter.convertViewRangeToModelRange(visibleViewRange);\r\n var hiddenAreas = this.lines.getHiddenAreas();\r\n if (hiddenAreas.length === 0) {\r\n return [visibleRange];\r\n }\r\n var result = [], resultLen = 0;\r\n var startLineNumber = visibleRange.startLineNumber;\r\n var startColumn = visibleRange.startColumn;\r\n var endLineNumber = visibleRange.endLineNumber;\r\n var endColumn = visibleRange.endColumn;\r\n for (var i = 0, len = hiddenAreas.length; i < len; i++) {\r\n var hiddenStartLineNumber = hiddenAreas[i].startLineNumber;\r\n var hiddenEndLineNumber = hiddenAreas[i].endLineNumber;\r\n if (hiddenEndLineNumber < startLineNumber) {\r\n continue;\r\n }\r\n if (hiddenStartLineNumber > endLineNumber) {\r\n continue;\r\n }\r\n if (startLineNumber < hiddenStartLineNumber) {\r\n result[resultLen++] = new Range(startLineNumber, startColumn, hiddenStartLineNumber - 1, this.model.getLineMaxColumn(hiddenStartLineNumber - 1));\r\n }\r\n startLineNumber = hiddenEndLineNumber + 1;\r\n startColumn = 1;\r\n }\r\n if (startLineNumber < endLineNumber || (startLineNumber === endLineNumber && startColumn < endColumn)) {\r\n result[resultLen++] = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\r\n }\r\n return result;\r\n };\r\n ViewModel.prototype.getCompletelyVisibleViewRange = function () {\r\n var partialData = this.viewLayout.getLinesViewportData();\r\n var startViewLineNumber = partialData.completelyVisibleStartLineNumber;\r\n var endViewLineNumber = partialData.completelyVisibleEndLineNumber;\r\n return new Range(startViewLineNumber, this.getLineMinColumn(startViewLineNumber), endViewLineNumber, this.getLineMaxColumn(endViewLineNumber));\r\n };\r\n ViewModel.prototype.getCompletelyVisibleViewRangeAtScrollTop = function (scrollTop) {\r\n var partialData = this.viewLayout.getLinesViewportDataAtScrollTop(scrollTop);\r\n var startViewLineNumber = partialData.completelyVisibleStartLineNumber;\r\n var endViewLineNumber = partialData.completelyVisibleEndLineNumber;\r\n return new Range(startViewLineNumber, this.getLineMinColumn(startViewLineNumber), endViewLineNumber, this.getLineMaxColumn(endViewLineNumber));\r\n };\r\n ViewModel.prototype.saveState = function () {\r\n var compatViewState = this.viewLayout.saveState();\r\n var scrollTop = compatViewState.scrollTop;\r\n var firstViewLineNumber = this.viewLayout.getLineNumberAtVerticalOffset(scrollTop);\r\n var firstPosition = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(firstViewLineNumber, this.getLineMinColumn(firstViewLineNumber)));\r\n var firstPositionDeltaTop = this.viewLayout.getVerticalOffsetForLineNumber(firstViewLineNumber) - scrollTop;\r\n return {\r\n scrollLeft: compatViewState.scrollLeft,\r\n firstPosition: firstPosition,\r\n firstPositionDeltaTop: firstPositionDeltaTop\r\n };\r\n };\r\n ViewModel.prototype.reduceRestoreState = function (state) {\r\n if (typeof state.firstPosition === 'undefined') {\r\n // This is a view state serialized by an older version\r\n return this._reduceRestoreStateCompatibility(state);\r\n }\r\n var modelPosition = this.model.validatePosition(state.firstPosition);\r\n var viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\r\n var scrollTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber) - state.firstPositionDeltaTop;\r\n return {\r\n scrollLeft: state.scrollLeft,\r\n scrollTop: scrollTop\r\n };\r\n };\r\n ViewModel.prototype._reduceRestoreStateCompatibility = function (state) {\r\n return {\r\n scrollLeft: state.scrollLeft,\r\n scrollTop: state.scrollTopWithoutViewZones\r\n };\r\n };\r\n ViewModel.prototype.getTabSize = function () {\r\n return this.model.getOptions().tabSize;\r\n };\r\n ViewModel.prototype.getOptions = function () {\r\n return this.model.getOptions();\r\n };\r\n ViewModel.prototype.getLineCount = function () {\r\n return this.lines.getViewLineCount();\r\n };\r\n /**\r\n * Gives a hint that a lot of requests are about to come in for these line numbers.\r\n */\r\n ViewModel.prototype.setViewport = function (startLineNumber, endLineNumber, centeredLineNumber) {\r\n this.lines.warmUpLookupCache(startLineNumber, endLineNumber);\r\n this.viewportStartLine = startLineNumber;\r\n var position = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(startLineNumber, this.getLineMinColumn(startLineNumber)));\r\n this.viewportStartLineTrackedRange = this.model._setTrackedRange(this.viewportStartLineTrackedRange, new Range(position.lineNumber, position.column, position.lineNumber, position.column), 1 /* NeverGrowsWhenTypingAtEdges */);\r\n var viewportStartLineTop = this.viewLayout.getVerticalOffsetForLineNumber(startLineNumber);\r\n var scrollTop = this.viewLayout.getCurrentScrollTop();\r\n this.viewportStartLineDelta = scrollTop - viewportStartLineTop;\r\n };\r\n ViewModel.prototype.getActiveIndentGuide = function (lineNumber, minLineNumber, maxLineNumber) {\r\n return this.lines.getActiveIndentGuide(lineNumber, minLineNumber, maxLineNumber);\r\n };\r\n ViewModel.prototype.getLinesIndentGuides = function (startLineNumber, endLineNumber) {\r\n return this.lines.getViewLinesIndentGuides(startLineNumber, endLineNumber);\r\n };\r\n ViewModel.prototype.getLineContent = function (lineNumber) {\r\n return this.lines.getViewLineContent(lineNumber);\r\n };\r\n ViewModel.prototype.getLineLength = function (lineNumber) {\r\n return this.lines.getViewLineLength(lineNumber);\r\n };\r\n ViewModel.prototype.getLineMinColumn = function (lineNumber) {\r\n return this.lines.getViewLineMinColumn(lineNumber);\r\n };\r\n ViewModel.prototype.getLineMaxColumn = function (lineNumber) {\r\n return this.lines.getViewLineMaxColumn(lineNumber);\r\n };\r\n ViewModel.prototype.getLineFirstNonWhitespaceColumn = function (lineNumber) {\r\n var result = strings.firstNonWhitespaceIndex(this.getLineContent(lineNumber));\r\n if (result === -1) {\r\n return 0;\r\n }\r\n return result + 1;\r\n };\r\n ViewModel.prototype.getLineLastNonWhitespaceColumn = function (lineNumber) {\r\n var result = strings.lastNonWhitespaceIndex(this.getLineContent(lineNumber));\r\n if (result === -1) {\r\n return 0;\r\n }\r\n return result + 2;\r\n };\r\n ViewModel.prototype.getDecorationsInViewport = function (visibleRange) {\r\n return this.decorations.getDecorationsViewportData(visibleRange).decorations;\r\n };\r\n ViewModel.prototype.getViewLineRenderingData = function (visibleRange, lineNumber) {\r\n var mightContainRTL = this.model.mightContainRTL();\r\n var mightContainNonBasicASCII = this.model.mightContainNonBasicASCII();\r\n var tabSize = this.getTabSize();\r\n var lineData = this.lines.getViewLineData(lineNumber);\r\n var allInlineDecorations = this.decorations.getDecorationsViewportData(visibleRange).inlineDecorations;\r\n var inlineDecorations = allInlineDecorations[lineNumber - visibleRange.startLineNumber];\r\n return new ViewLineRenderingData(lineData.minColumn, lineData.maxColumn, lineData.content, lineData.continuesWithWrappedLine, mightContainRTL, mightContainNonBasicASCII, lineData.tokens, inlineDecorations, tabSize);\r\n };\r\n ViewModel.prototype.getViewLineData = function (lineNumber) {\r\n return this.lines.getViewLineData(lineNumber);\r\n };\r\n ViewModel.prototype.getMinimapLinesRenderingData = function (startLineNumber, endLineNumber, needed) {\r\n var result = this.lines.getViewLinesData(startLineNumber, endLineNumber, needed);\r\n return new MinimapLinesRenderingData(this.getTabSize(), result);\r\n };\r\n ViewModel.prototype.getAllOverviewRulerDecorations = function (theme) {\r\n return this.lines.getAllOverviewRulerDecorations(this.editorId, this.configuration.options.get(65 /* readOnly */), theme);\r\n };\r\n ViewModel.prototype.invalidateOverviewRulerColorCache = function () {\r\n var decorations = this.model.getOverviewRulerDecorations();\r\n for (var _i = 0, decorations_1 = decorations; _i < decorations_1.length; _i++) {\r\n var decoration = decorations_1[_i];\r\n var opts = decoration.options.overviewRuler;\r\n if (opts) {\r\n opts.invalidateCachedColor();\r\n }\r\n }\r\n };\r\n ViewModel.prototype.invalidateMinimapColorCache = function () {\r\n var decorations = this.model.getAllDecorations();\r\n for (var _i = 0, decorations_2 = decorations; _i < decorations_2.length; _i++) {\r\n var decoration = decorations_2[_i];\r\n var opts = decoration.options.minimap;\r\n if (opts) {\r\n opts.invalidateCachedColor();\r\n }\r\n }\r\n };\r\n ViewModel.prototype.getValueInRange = function (range, eol) {\r\n var modelRange = this.coordinatesConverter.convertViewRangeToModelRange(range);\r\n return this.model.getValueInRange(modelRange, eol);\r\n };\r\n ViewModel.prototype.getModelLineMaxColumn = function (modelLineNumber) {\r\n return this.model.getLineMaxColumn(modelLineNumber);\r\n };\r\n ViewModel.prototype.validateModelPosition = function (position) {\r\n return this.model.validatePosition(position);\r\n };\r\n ViewModel.prototype.validateModelRange = function (range) {\r\n return this.model.validateRange(range);\r\n };\r\n ViewModel.prototype.deduceModelPositionRelativeToViewPosition = function (viewAnchorPosition, deltaOffset, lineFeedCnt) {\r\n var modelAnchor = this.coordinatesConverter.convertViewPositionToModelPosition(viewAnchorPosition);\r\n if (this.model.getEOL().length === 2) {\r\n // This model uses CRLF, so the delta must take that into account\r\n if (deltaOffset < 0) {\r\n deltaOffset -= lineFeedCnt;\r\n }\r\n else {\r\n deltaOffset += lineFeedCnt;\r\n }\r\n }\r\n var modelAnchorOffset = this.model.getOffsetAt(modelAnchor);\r\n var resultOffset = modelAnchorOffset + deltaOffset;\r\n return this.model.getPositionAt(resultOffset);\r\n };\r\n ViewModel.prototype.getEOL = function () {\r\n return this.model.getEOL();\r\n };\r\n ViewModel.prototype.getPlainTextToCopy = function (ranges, emptySelectionClipboard, forceCRLF) {\r\n var _this = this;\r\n var newLineCharacter = forceCRLF ? '\\r\\n' : this.model.getEOL();\r\n ranges = ranges.slice(0);\r\n ranges.sort(Range.compareRangesUsingStarts);\r\n var hasEmptyRange = false;\r\n var hasNonEmptyRange = false;\r\n for (var _i = 0, ranges_1 = ranges; _i < ranges_1.length; _i++) {\r\n var range = ranges_1[_i];\r\n if (range.isEmpty()) {\r\n hasEmptyRange = true;\r\n }\r\n else {\r\n hasNonEmptyRange = true;\r\n }\r\n }\r\n if (!hasNonEmptyRange) {\r\n // all ranges are empty\r\n if (!emptySelectionClipboard) {\r\n return '';\r\n }\r\n var modelLineNumbers = ranges.map(function (r) {\r\n var viewLineStart = new Position(r.startLineNumber, 1);\r\n return _this.coordinatesConverter.convertViewPositionToModelPosition(viewLineStart).lineNumber;\r\n });\r\n var result_1 = '';\r\n for (var i = 0; i < modelLineNumbers.length; i++) {\r\n if (i > 0 && modelLineNumbers[i - 1] === modelLineNumbers[i]) {\r\n continue;\r\n }\r\n result_1 += this.model.getLineContent(modelLineNumbers[i]) + newLineCharacter;\r\n }\r\n return result_1;\r\n }\r\n if (hasEmptyRange && emptySelectionClipboard) {\r\n // mixed empty selections and non-empty selections\r\n var result_2 = [];\r\n var prevModelLineNumber = 0;\r\n for (var _a = 0, ranges_2 = ranges; _a < ranges_2.length; _a++) {\r\n var range = ranges_2[_a];\r\n var modelLineNumber = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;\r\n if (range.isEmpty()) {\r\n if (modelLineNumber !== prevModelLineNumber) {\r\n result_2.push(this.model.getLineContent(modelLineNumber));\r\n }\r\n }\r\n else {\r\n result_2.push(this.getValueInRange(range, forceCRLF ? 2 /* CRLF */ : 0 /* TextDefined */));\r\n }\r\n prevModelLineNumber = modelLineNumber;\r\n }\r\n return result_2.length === 1 ? result_2[0] : result_2;\r\n }\r\n var result = [];\r\n for (var _b = 0, ranges_3 = ranges; _b < ranges_3.length; _b++) {\r\n var range = ranges_3[_b];\r\n if (!range.isEmpty()) {\r\n result.push(this.getValueInRange(range, forceCRLF ? 2 /* CRLF */ : 0 /* TextDefined */));\r\n }\r\n }\r\n return result.length === 1 ? result[0] : result;\r\n };\r\n ViewModel.prototype.getHTMLToCopy = function (viewRanges, emptySelectionClipboard) {\r\n if (this.model.getLanguageIdentifier().id === 1 /* PlainText */) {\r\n return null;\r\n }\r\n if (viewRanges.length !== 1) {\r\n // no multiple selection support at this time\r\n return null;\r\n }\r\n var range = this.coordinatesConverter.convertViewRangeToModelRange(viewRanges[0]);\r\n if (range.isEmpty()) {\r\n if (!emptySelectionClipboard) {\r\n // nothing to copy\r\n return null;\r\n }\r\n var lineNumber = range.startLineNumber;\r\n range = new Range(lineNumber, this.model.getLineMinColumn(lineNumber), lineNumber, this.model.getLineMaxColumn(lineNumber));\r\n }\r\n var fontInfo = this.configuration.options.get(32 /* fontInfo */);\r\n var colorMap = this._getColorMap();\r\n var fontFamily = fontInfo.fontFamily === EDITOR_FONT_DEFAULTS.fontFamily ? fontInfo.fontFamily : \"'\" + fontInfo.fontFamily + \"', \" + EDITOR_FONT_DEFAULTS.fontFamily;\r\n return (\"
\"\r\n + this._getHTMLToCopy(range, colorMap)\r\n + '
');\r\n };\r\n ViewModel.prototype._getHTMLToCopy = function (modelRange, colorMap) {\r\n var startLineNumber = modelRange.startLineNumber;\r\n var startColumn = modelRange.startColumn;\r\n var endLineNumber = modelRange.endLineNumber;\r\n var endColumn = modelRange.endColumn;\r\n var tabSize = this.getTabSize();\r\n var result = '';\r\n for (var lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\r\n var lineTokens = this.model.getLineTokens(lineNumber);\r\n var lineContent = lineTokens.getLineContent();\r\n var startOffset = (lineNumber === startLineNumber ? startColumn - 1 : 0);\r\n var endOffset = (lineNumber === endLineNumber ? endColumn - 1 : lineContent.length);\r\n if (lineContent === '') {\r\n result += '
';\r\n }\r\n else {\r\n result += tokenizeLineToHTML(lineContent, lineTokens.inflate(), colorMap, startOffset, endOffset, tabSize, platform.isWindows);\r\n }\r\n }\r\n return result;\r\n };\r\n ViewModel.prototype._getColorMap = function () {\r\n var colorMap = TokenizationRegistry.getColorMap();\r\n var result = ['#000000'];\r\n if (colorMap) {\r\n for (var i = 1, len = colorMap.length; i < len; i++) {\r\n result[i] = Color.Format.CSS.formatHex(colorMap[i]);\r\n }\r\n }\r\n return result;\r\n };\r\n return ViewModel;\r\n}(viewEvents.ViewEventEmitter));\r\nexport { ViewModel };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar ServiceCollection = /** @class */ (function () {\r\n function ServiceCollection() {\r\n var entries = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n entries[_i] = arguments[_i];\r\n }\r\n this._entries = new Map();\r\n for (var _a = 0, entries_1 = entries; _a < entries_1.length; _a++) {\r\n var _b = entries_1[_a], id = _b[0], service = _b[1];\r\n this.set(id, service);\r\n }\r\n }\r\n ServiceCollection.prototype.set = function (id, instanceOrDescriptor) {\r\n var result = this._entries.get(id);\r\n this._entries.set(id, instanceOrDescriptor);\r\n return result;\r\n };\r\n ServiceCollection.prototype.has = function (id) {\r\n return this._entries.has(id);\r\n };\r\n ServiceCollection.prototype.get = function (id) {\r\n return this._entries.get(id);\r\n };\r\n return ServiceCollection;\r\n}());\r\nexport { ServiceCollection };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { RawContextKey } from '../../contextkey/common/contextkey.js';\r\nexport var IAccessibilityService = createDecorator('accessibilityService');\r\nexport var CONTEXT_ACCESSIBILITY_MODE_ENABLED = new RawContextKey('accessibilityModeEnabled', false);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport './media/editor.css';\r\nimport * as nls from '../../../nls.js';\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable, dispose } from '../../../base/common/lifecycle.js';\r\nimport { Schemas } from '../../../base/common/network.js';\r\nimport { Configuration } from '../config/configuration.js';\r\nimport { EditorExtensionsRegistry } from '../editorExtensions.js';\r\nimport { ICodeEditorService } from '../services/codeEditorService.js';\r\nimport { View } from '../view/viewImpl.js';\r\nimport { ViewOutgoingEvents } from '../view/viewOutgoingEvents.js';\r\nimport { Cursor } from '../../common/controller/cursor.js';\r\nimport { CursorColumns } from '../../common/controller/cursorCommon.js';\r\nimport { Position } from '../../common/core/position.js';\r\nimport { Range } from '../../common/core/range.js';\r\nimport { Selection } from '../../common/core/selection.js';\r\nimport { InternalEditorAction } from '../../common/editorAction.js';\r\nimport * as editorCommon from '../../common/editorCommon.js';\r\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\r\nimport * as modes from '../../common/modes.js';\r\nimport { editorUnnecessaryCodeBorder, editorUnnecessaryCodeOpacity } from '../../common/view/editorColorRegistry.js';\r\nimport { editorErrorBorder, editorErrorForeground, editorHintBorder, editorHintForeground, editorInfoBorder, editorInfoForeground, editorWarningBorder, editorWarningForeground, editorForeground } from '../../../platform/theme/common/colorRegistry.js';\r\nimport { ViewModel } from '../../common/viewModel/viewModelImpl.js';\r\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\r\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\r\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\r\nimport { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js';\r\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\r\nimport { IThemeService, registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\r\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\r\nimport { withNullAsUndefined } from '../../../base/common/types.js';\r\nvar EDITOR_ID = 0;\r\nvar ModelData = /** @class */ (function () {\r\n function ModelData(model, viewModel, cursor, view, hasRealView, listenersToRemove) {\r\n this.model = model;\r\n this.viewModel = viewModel;\r\n this.cursor = cursor;\r\n this.view = view;\r\n this.hasRealView = hasRealView;\r\n this.listenersToRemove = listenersToRemove;\r\n }\r\n ModelData.prototype.dispose = function () {\r\n dispose(this.listenersToRemove);\r\n this.model.onBeforeDetached();\r\n if (this.hasRealView) {\r\n this.view.dispose();\r\n }\r\n this.cursor.dispose();\r\n this.viewModel.dispose();\r\n };\r\n return ModelData;\r\n}());\r\nvar CodeEditorWidget = /** @class */ (function (_super) {\r\n __extends(CodeEditorWidget, _super);\r\n function CodeEditorWidget(domElement, options, codeEditorWidgetOptions, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService) {\r\n var _this = _super.call(this) || this;\r\n //#region Eventing\r\n _this._onDidDispose = _this._register(new Emitter());\r\n _this.onDidDispose = _this._onDidDispose.event;\r\n _this._onDidChangeModelContent = _this._register(new Emitter());\r\n _this.onDidChangeModelContent = _this._onDidChangeModelContent.event;\r\n _this._onDidChangeModelLanguage = _this._register(new Emitter());\r\n _this.onDidChangeModelLanguage = _this._onDidChangeModelLanguage.event;\r\n _this._onDidChangeModelLanguageConfiguration = _this._register(new Emitter());\r\n _this.onDidChangeModelLanguageConfiguration = _this._onDidChangeModelLanguageConfiguration.event;\r\n _this._onDidChangeModelOptions = _this._register(new Emitter());\r\n _this.onDidChangeModelOptions = _this._onDidChangeModelOptions.event;\r\n _this._onDidChangeModelDecorations = _this._register(new Emitter());\r\n _this.onDidChangeModelDecorations = _this._onDidChangeModelDecorations.event;\r\n _this._onDidChangeConfiguration = _this._register(new Emitter());\r\n _this.onDidChangeConfiguration = _this._onDidChangeConfiguration.event;\r\n _this._onDidChangeModel = _this._register(new Emitter());\r\n _this.onDidChangeModel = _this._onDidChangeModel.event;\r\n _this._onDidChangeCursorPosition = _this._register(new Emitter());\r\n _this.onDidChangeCursorPosition = _this._onDidChangeCursorPosition.event;\r\n _this._onDidChangeCursorSelection = _this._register(new Emitter());\r\n _this.onDidChangeCursorSelection = _this._onDidChangeCursorSelection.event;\r\n _this._onDidAttemptReadOnlyEdit = _this._register(new Emitter());\r\n _this.onDidAttemptReadOnlyEdit = _this._onDidAttemptReadOnlyEdit.event;\r\n _this._onDidLayoutChange = _this._register(new Emitter());\r\n _this.onDidLayoutChange = _this._onDidLayoutChange.event;\r\n _this._editorTextFocus = _this._register(new BooleanEventEmitter());\r\n _this.onDidFocusEditorText = _this._editorTextFocus.onDidChangeToTrue;\r\n _this.onDidBlurEditorText = _this._editorTextFocus.onDidChangeToFalse;\r\n _this._editorWidgetFocus = _this._register(new BooleanEventEmitter());\r\n _this.onDidFocusEditorWidget = _this._editorWidgetFocus.onDidChangeToTrue;\r\n _this.onDidBlurEditorWidget = _this._editorWidgetFocus.onDidChangeToFalse;\r\n _this._onWillType = _this._register(new Emitter());\r\n _this.onWillType = _this._onWillType.event;\r\n _this._onDidType = _this._register(new Emitter());\r\n _this.onDidType = _this._onDidType.event;\r\n _this._onCompositionStart = _this._register(new Emitter());\r\n _this.onCompositionStart = _this._onCompositionStart.event;\r\n _this._onCompositionEnd = _this._register(new Emitter());\r\n _this.onCompositionEnd = _this._onCompositionEnd.event;\r\n _this._onDidPaste = _this._register(new Emitter());\r\n _this.onDidPaste = _this._onDidPaste.event;\r\n _this._onMouseUp = _this._register(new Emitter());\r\n _this.onMouseUp = _this._onMouseUp.event;\r\n _this._onMouseDown = _this._register(new Emitter());\r\n _this.onMouseDown = _this._onMouseDown.event;\r\n _this._onMouseDrag = _this._register(new Emitter());\r\n _this.onMouseDrag = _this._onMouseDrag.event;\r\n _this._onMouseDrop = _this._register(new Emitter());\r\n _this.onMouseDrop = _this._onMouseDrop.event;\r\n _this._onContextMenu = _this._register(new Emitter());\r\n _this.onContextMenu = _this._onContextMenu.event;\r\n _this._onMouseMove = _this._register(new Emitter());\r\n _this.onMouseMove = _this._onMouseMove.event;\r\n _this._onMouseLeave = _this._register(new Emitter());\r\n _this.onMouseLeave = _this._onMouseLeave.event;\r\n _this._onMouseWheel = _this._register(new Emitter());\r\n _this.onMouseWheel = _this._onMouseWheel.event;\r\n _this._onKeyUp = _this._register(new Emitter());\r\n _this.onKeyUp = _this._onKeyUp.event;\r\n _this._onKeyDown = _this._register(new Emitter());\r\n _this.onKeyDown = _this._onKeyDown.event;\r\n _this._onDidScrollChange = _this._register(new Emitter());\r\n _this.onDidScrollChange = _this._onDidScrollChange.event;\r\n _this._onDidChangeViewZones = _this._register(new Emitter());\r\n _this.onDidChangeViewZones = _this._onDidChangeViewZones.event;\r\n _this._domElement = domElement;\r\n _this._id = (++EDITOR_ID);\r\n _this._decorationTypeKeysToIds = {};\r\n _this._decorationTypeSubtypes = {};\r\n _this.isSimpleWidget = codeEditorWidgetOptions.isSimpleWidget || false;\r\n _this._telemetryData = codeEditorWidgetOptions.telemetryData;\r\n options = options || {};\r\n _this._configuration = _this._register(_this._createConfiguration(options, accessibilityService));\r\n _this._register(_this._configuration.onDidChange(function (e) {\r\n _this._onDidChangeConfiguration.fire(e);\r\n var options = _this._configuration.options;\r\n if (e.hasChanged(103 /* layoutInfo */)) {\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n _this._onDidLayoutChange.fire(layoutInfo);\r\n }\r\n }));\r\n _this._contextKeyService = _this._register(contextKeyService.createScoped(_this._domElement));\r\n _this._notificationService = notificationService;\r\n _this._codeEditorService = codeEditorService;\r\n _this._commandService = commandService;\r\n _this._themeService = themeService;\r\n _this._register(new EditorContextKeysManager(_this, _this._contextKeyService));\r\n _this._register(new EditorModeContext(_this, _this._contextKeyService));\r\n _this._instantiationService = instantiationService.createChild(new ServiceCollection([IContextKeyService, _this._contextKeyService]));\r\n _this._modelData = null;\r\n _this._contributions = {};\r\n _this._actions = {};\r\n _this._focusTracker = new CodeEditorWidgetFocusTracker(domElement);\r\n _this._focusTracker.onChange(function () {\r\n _this._editorWidgetFocus.setValue(_this._focusTracker.hasFocus());\r\n });\r\n _this._contentWidgets = {};\r\n _this._overlayWidgets = {};\r\n var contributions;\r\n if (Array.isArray(codeEditorWidgetOptions.contributions)) {\r\n contributions = codeEditorWidgetOptions.contributions;\r\n }\r\n else {\r\n contributions = EditorExtensionsRegistry.getEditorContributions();\r\n }\r\n for (var _i = 0, contributions_1 = contributions; _i < contributions_1.length; _i++) {\r\n var desc = contributions_1[_i];\r\n try {\r\n var contribution = _this._instantiationService.createInstance(desc.ctor, _this);\r\n _this._contributions[desc.id] = contribution;\r\n }\r\n catch (err) {\r\n onUnexpectedError(err);\r\n }\r\n }\r\n EditorExtensionsRegistry.getEditorActions().forEach(function (action) {\r\n var internalAction = new InternalEditorAction(action.id, action.label, action.alias, withNullAsUndefined(action.precondition), function () {\r\n return _this._instantiationService.invokeFunction(function (accessor) {\r\n return Promise.resolve(action.runEditorCommand(accessor, _this, null));\r\n });\r\n }, _this._contextKeyService);\r\n _this._actions[internalAction.id] = internalAction;\r\n });\r\n _this._codeEditorService.addCodeEditor(_this);\r\n return _this;\r\n }\r\n CodeEditorWidget.prototype._createConfiguration = function (options, accessibilityService) {\r\n return new Configuration(this.isSimpleWidget, options, this._domElement, accessibilityService);\r\n };\r\n CodeEditorWidget.prototype.getId = function () {\r\n return this.getEditorType() + ':' + this._id;\r\n };\r\n CodeEditorWidget.prototype.getEditorType = function () {\r\n return editorCommon.EditorType.ICodeEditor;\r\n };\r\n CodeEditorWidget.prototype.dispose = function () {\r\n this._codeEditorService.removeCodeEditor(this);\r\n this._focusTracker.dispose();\r\n var keys = Object.keys(this._contributions);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var contributionId = keys[i];\r\n this._contributions[contributionId].dispose();\r\n }\r\n this._removeDecorationTypes();\r\n this._postDetachModelCleanup(this._detachModel());\r\n this._onDidDispose.fire();\r\n _super.prototype.dispose.call(this);\r\n };\r\n CodeEditorWidget.prototype.invokeWithinContext = function (fn) {\r\n return this._instantiationService.invokeFunction(fn);\r\n };\r\n CodeEditorWidget.prototype.updateOptions = function (newOptions) {\r\n this._configuration.updateOptions(newOptions);\r\n };\r\n CodeEditorWidget.prototype.getOptions = function () {\r\n return this._configuration.options;\r\n };\r\n CodeEditorWidget.prototype.getOption = function (id) {\r\n return this._configuration.options.get(id);\r\n };\r\n CodeEditorWidget.prototype.getRawOptions = function () {\r\n return this._configuration.getRawOptions();\r\n };\r\n CodeEditorWidget.prototype.getValue = function (options) {\r\n if (options === void 0) { options = null; }\r\n if (!this._modelData) {\r\n return '';\r\n }\r\n var preserveBOM = (options && options.preserveBOM) ? true : false;\r\n var eolPreference = 0 /* TextDefined */;\r\n if (options && options.lineEnding && options.lineEnding === '\\n') {\r\n eolPreference = 1 /* LF */;\r\n }\r\n else if (options && options.lineEnding && options.lineEnding === '\\r\\n') {\r\n eolPreference = 2 /* CRLF */;\r\n }\r\n return this._modelData.model.getValue(eolPreference, preserveBOM);\r\n };\r\n CodeEditorWidget.prototype.setValue = function (newValue) {\r\n if (!this._modelData) {\r\n return;\r\n }\r\n this._modelData.model.setValue(newValue);\r\n };\r\n CodeEditorWidget.prototype.getModel = function () {\r\n if (!this._modelData) {\r\n return null;\r\n }\r\n return this._modelData.model;\r\n };\r\n CodeEditorWidget.prototype.setModel = function (_model) {\r\n if (_model === void 0) { _model = null; }\r\n var model = _model;\r\n if (this._modelData === null && model === null) {\r\n // Current model is the new model\r\n return;\r\n }\r\n if (this._modelData && this._modelData.model === model) {\r\n // Current model is the new model\r\n return;\r\n }\r\n var hasTextFocus = this.hasTextFocus();\r\n var detachedModel = this._detachModel();\r\n this._attachModel(model);\r\n if (hasTextFocus && this.hasModel()) {\r\n this.focus();\r\n }\r\n var e = {\r\n oldModelUrl: detachedModel ? detachedModel.uri : null,\r\n newModelUrl: model ? model.uri : null\r\n };\r\n this._removeDecorationTypes();\r\n this._onDidChangeModel.fire(e);\r\n this._postDetachModelCleanup(detachedModel);\r\n };\r\n CodeEditorWidget.prototype._removeDecorationTypes = function () {\r\n this._decorationTypeKeysToIds = {};\r\n if (this._decorationTypeSubtypes) {\r\n for (var decorationType in this._decorationTypeSubtypes) {\r\n var subTypes = this._decorationTypeSubtypes[decorationType];\r\n for (var subType in subTypes) {\r\n this._removeDecorationType(decorationType + '-' + subType);\r\n }\r\n }\r\n this._decorationTypeSubtypes = {};\r\n }\r\n };\r\n CodeEditorWidget.prototype.getVisibleRanges = function () {\r\n if (!this._modelData) {\r\n return [];\r\n }\r\n return this._modelData.viewModel.getVisibleRanges();\r\n };\r\n CodeEditorWidget.prototype.getWhitespaces = function () {\r\n if (!this._modelData) {\r\n return [];\r\n }\r\n return this._modelData.viewModel.viewLayout.getWhitespaces();\r\n };\r\n CodeEditorWidget._getVerticalOffsetForPosition = function (modelData, modelLineNumber, modelColumn) {\r\n var modelPosition = modelData.model.validatePosition({\r\n lineNumber: modelLineNumber,\r\n column: modelColumn\r\n });\r\n var viewPosition = modelData.viewModel.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\r\n return modelData.viewModel.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\r\n };\r\n CodeEditorWidget.prototype.getTopForLineNumber = function (lineNumber) {\r\n if (!this._modelData) {\r\n return -1;\r\n }\r\n return CodeEditorWidget._getVerticalOffsetForPosition(this._modelData, lineNumber, 1);\r\n };\r\n CodeEditorWidget.prototype.getTopForPosition = function (lineNumber, column) {\r\n if (!this._modelData) {\r\n return -1;\r\n }\r\n return CodeEditorWidget._getVerticalOffsetForPosition(this._modelData, lineNumber, column);\r\n };\r\n CodeEditorWidget.prototype.setHiddenAreas = function (ranges) {\r\n if (this._modelData) {\r\n this._modelData.viewModel.setHiddenAreas(ranges.map(function (r) { return Range.lift(r); }));\r\n }\r\n };\r\n CodeEditorWidget.prototype.getVisibleColumnFromPosition = function (rawPosition) {\r\n if (!this._modelData) {\r\n return rawPosition.column;\r\n }\r\n var position = this._modelData.model.validatePosition(rawPosition);\r\n var tabSize = this._modelData.model.getOptions().tabSize;\r\n return CursorColumns.visibleColumnFromColumn(this._modelData.model.getLineContent(position.lineNumber), position.column, tabSize) + 1;\r\n };\r\n CodeEditorWidget.prototype.getPosition = function () {\r\n if (!this._modelData) {\r\n return null;\r\n }\r\n return this._modelData.cursor.getPosition();\r\n };\r\n CodeEditorWidget.prototype.setPosition = function (position) {\r\n if (!this._modelData) {\r\n return;\r\n }\r\n if (!Position.isIPosition(position)) {\r\n throw new Error('Invalid arguments');\r\n }\r\n this._modelData.cursor.setSelections('api', [{\r\n selectionStartLineNumber: position.lineNumber,\r\n selectionStartColumn: position.column,\r\n positionLineNumber: position.lineNumber,\r\n positionColumn: position.column\r\n }]);\r\n };\r\n CodeEditorWidget.prototype._sendRevealRange = function (modelRange, verticalType, revealHorizontal, scrollType) {\r\n if (!this._modelData) {\r\n return;\r\n }\r\n if (!Range.isIRange(modelRange)) {\r\n throw new Error('Invalid arguments');\r\n }\r\n var validatedModelRange = this._modelData.model.validateRange(modelRange);\r\n var viewRange = this._modelData.viewModel.coordinatesConverter.convertModelRangeToViewRange(validatedModelRange);\r\n this._modelData.cursor.emitCursorRevealRange('api', viewRange, verticalType, revealHorizontal, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealLine = function (lineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealLine(lineNumber, 0 /* Simple */, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealLineInCenter = function (lineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealLine(lineNumber, 1 /* Center */, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealLineInCenterIfOutsideViewport = function (lineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealLine(lineNumber, 2 /* CenterIfOutsideViewport */, scrollType);\r\n };\r\n CodeEditorWidget.prototype._revealLine = function (lineNumber, revealType, scrollType) {\r\n if (typeof lineNumber !== 'number') {\r\n throw new Error('Invalid arguments');\r\n }\r\n this._sendRevealRange(new Range(lineNumber, 1, lineNumber, 1), revealType, false, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealPosition = function (position, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealPosition(position, 0 /* Simple */, true, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealPositionInCenter = function (position, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealPosition(position, 1 /* Center */, true, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealPositionInCenterIfOutsideViewport = function (position, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealPosition(position, 2 /* CenterIfOutsideViewport */, true, scrollType);\r\n };\r\n CodeEditorWidget.prototype._revealPosition = function (position, verticalType, revealHorizontal, scrollType) {\r\n if (!Position.isIPosition(position)) {\r\n throw new Error('Invalid arguments');\r\n }\r\n this._sendRevealRange(new Range(position.lineNumber, position.column, position.lineNumber, position.column), verticalType, revealHorizontal, scrollType);\r\n };\r\n CodeEditorWidget.prototype.getSelection = function () {\r\n if (!this._modelData) {\r\n return null;\r\n }\r\n return this._modelData.cursor.getSelection();\r\n };\r\n CodeEditorWidget.prototype.getSelections = function () {\r\n if (!this._modelData) {\r\n return null;\r\n }\r\n return this._modelData.cursor.getSelections();\r\n };\r\n CodeEditorWidget.prototype.setSelection = function (something) {\r\n var isSelection = Selection.isISelection(something);\r\n var isRange = Range.isIRange(something);\r\n if (!isSelection && !isRange) {\r\n throw new Error('Invalid arguments');\r\n }\r\n if (isSelection) {\r\n this._setSelectionImpl(something);\r\n }\r\n else if (isRange) {\r\n // act as if it was an IRange\r\n var selection = {\r\n selectionStartLineNumber: something.startLineNumber,\r\n selectionStartColumn: something.startColumn,\r\n positionLineNumber: something.endLineNumber,\r\n positionColumn: something.endColumn\r\n };\r\n this._setSelectionImpl(selection);\r\n }\r\n };\r\n CodeEditorWidget.prototype._setSelectionImpl = function (sel) {\r\n if (!this._modelData) {\r\n return;\r\n }\r\n var selection = new Selection(sel.selectionStartLineNumber, sel.selectionStartColumn, sel.positionLineNumber, sel.positionColumn);\r\n this._modelData.cursor.setSelections('api', [selection]);\r\n };\r\n CodeEditorWidget.prototype.revealLines = function (startLineNumber, endLineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealLines(startLineNumber, endLineNumber, 0 /* Simple */, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealLinesInCenter = function (startLineNumber, endLineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealLines(startLineNumber, endLineNumber, 1 /* Center */, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealLinesInCenterIfOutsideViewport = function (startLineNumber, endLineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealLines(startLineNumber, endLineNumber, 2 /* CenterIfOutsideViewport */, scrollType);\r\n };\r\n CodeEditorWidget.prototype._revealLines = function (startLineNumber, endLineNumber, verticalType, scrollType) {\r\n if (typeof startLineNumber !== 'number' || typeof endLineNumber !== 'number') {\r\n throw new Error('Invalid arguments');\r\n }\r\n this._sendRevealRange(new Range(startLineNumber, 1, endLineNumber, 1), verticalType, false, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealRange = function (range, scrollType, revealVerticalInCenter, revealHorizontal) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n if (revealVerticalInCenter === void 0) { revealVerticalInCenter = false; }\r\n if (revealHorizontal === void 0) { revealHorizontal = true; }\r\n this._revealRange(range, revealVerticalInCenter ? 1 /* Center */ : 0 /* Simple */, revealHorizontal, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealRangeInCenter = function (range, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealRange(range, 1 /* Center */, true, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealRangeInCenterIfOutsideViewport = function (range, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealRange(range, 2 /* CenterIfOutsideViewport */, true, scrollType);\r\n };\r\n CodeEditorWidget.prototype.revealRangeAtTop = function (range, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this._revealRange(range, 3 /* Top */, true, scrollType);\r\n };\r\n CodeEditorWidget.prototype._revealRange = function (range, verticalType, revealHorizontal, scrollType) {\r\n if (!Range.isIRange(range)) {\r\n throw new Error('Invalid arguments');\r\n }\r\n this._sendRevealRange(Range.lift(range), verticalType, revealHorizontal, scrollType);\r\n };\r\n CodeEditorWidget.prototype.setSelections = function (ranges, source) {\r\n if (source === void 0) { source = 'api'; }\r\n if (!this._modelData) {\r\n return;\r\n }\r\n if (!ranges || ranges.length === 0) {\r\n throw new Error('Invalid arguments');\r\n }\r\n for (var i = 0, len = ranges.length; i < len; i++) {\r\n if (!Selection.isISelection(ranges[i])) {\r\n throw new Error('Invalid arguments');\r\n }\r\n }\r\n this._modelData.cursor.setSelections(source, ranges);\r\n };\r\n CodeEditorWidget.prototype.getScrollWidth = function () {\r\n if (!this._modelData) {\r\n return -1;\r\n }\r\n return this._modelData.viewModel.viewLayout.getScrollWidth();\r\n };\r\n CodeEditorWidget.prototype.getScrollLeft = function () {\r\n if (!this._modelData) {\r\n return -1;\r\n }\r\n return this._modelData.viewModel.viewLayout.getCurrentScrollLeft();\r\n };\r\n CodeEditorWidget.prototype.getScrollHeight = function () {\r\n if (!this._modelData) {\r\n return -1;\r\n }\r\n return this._modelData.viewModel.viewLayout.getScrollHeight();\r\n };\r\n CodeEditorWidget.prototype.getScrollTop = function () {\r\n if (!this._modelData) {\r\n return -1;\r\n }\r\n return this._modelData.viewModel.viewLayout.getCurrentScrollTop();\r\n };\r\n CodeEditorWidget.prototype.setScrollLeft = function (newScrollLeft) {\r\n if (!this._modelData) {\r\n return;\r\n }\r\n if (typeof newScrollLeft !== 'number') {\r\n throw new Error('Invalid arguments');\r\n }\r\n this._modelData.viewModel.viewLayout.setScrollPositionNow({\r\n scrollLeft: newScrollLeft\r\n });\r\n };\r\n CodeEditorWidget.prototype.setScrollTop = function (newScrollTop) {\r\n if (!this._modelData) {\r\n return;\r\n }\r\n if (typeof newScrollTop !== 'number') {\r\n throw new Error('Invalid arguments');\r\n }\r\n this._modelData.viewModel.viewLayout.setScrollPositionNow({\r\n scrollTop: newScrollTop\r\n });\r\n };\r\n CodeEditorWidget.prototype.setScrollPosition = function (position) {\r\n if (!this._modelData) {\r\n return;\r\n }\r\n this._modelData.viewModel.viewLayout.setScrollPositionNow(position);\r\n };\r\n CodeEditorWidget.prototype.saveViewState = function () {\r\n if (!this._modelData) {\r\n return null;\r\n }\r\n var contributionsState = {};\r\n var keys = Object.keys(this._contributions);\r\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\r\n var id = keys_1[_i];\r\n var contribution = this._contributions[id];\r\n if (typeof contribution.saveViewState === 'function') {\r\n contributionsState[id] = contribution.saveViewState();\r\n }\r\n }\r\n var cursorState = this._modelData.cursor.saveState();\r\n var viewState = this._modelData.viewModel.saveState();\r\n return {\r\n cursorState: cursorState,\r\n viewState: viewState,\r\n contributionsState: contributionsState\r\n };\r\n };\r\n CodeEditorWidget.prototype.restoreViewState = function (s) {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return;\r\n }\r\n var codeEditorState = s;\r\n if (codeEditorState && codeEditorState.cursorState && codeEditorState.viewState) {\r\n var cursorState = codeEditorState.cursorState;\r\n if (Array.isArray(cursorState)) {\r\n this._modelData.cursor.restoreState(cursorState);\r\n }\r\n else {\r\n // Backwards compatibility\r\n this._modelData.cursor.restoreState([cursorState]);\r\n }\r\n var contributionsState = codeEditorState.contributionsState || {};\r\n var keys = Object.keys(this._contributions);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var id = keys[i];\r\n var contribution = this._contributions[id];\r\n if (typeof contribution.restoreViewState === 'function') {\r\n contribution.restoreViewState(contributionsState[id]);\r\n }\r\n }\r\n var reducedState = this._modelData.viewModel.reduceRestoreState(codeEditorState.viewState);\r\n this._modelData.view.restoreState(reducedState);\r\n }\r\n };\r\n CodeEditorWidget.prototype.getContribution = function (id) {\r\n return (this._contributions[id] || null);\r\n };\r\n CodeEditorWidget.prototype.getActions = function () {\r\n var result = [];\r\n var keys = Object.keys(this._actions);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var id = keys[i];\r\n result.push(this._actions[id]);\r\n }\r\n return result;\r\n };\r\n CodeEditorWidget.prototype.getSupportedActions = function () {\r\n var result = this.getActions();\r\n result = result.filter(function (action) { return action.isSupported(); });\r\n return result;\r\n };\r\n CodeEditorWidget.prototype.getAction = function (id) {\r\n return this._actions[id] || null;\r\n };\r\n CodeEditorWidget.prototype.trigger = function (source, handlerId, payload) {\r\n payload = payload || {};\r\n // Special case for typing\r\n if (handlerId === editorCommon.Handler.Type) {\r\n if (!this._modelData || typeof payload.text !== 'string' || payload.text.length === 0) {\r\n // nothing to do\r\n return;\r\n }\r\n if (source === 'keyboard') {\r\n this._onWillType.fire(payload.text);\r\n }\r\n this._modelData.cursor.trigger(source, handlerId, payload);\r\n if (source === 'keyboard') {\r\n this._onDidType.fire(payload.text);\r\n }\r\n return;\r\n }\r\n // Special case for pasting\r\n if (handlerId === editorCommon.Handler.Paste) {\r\n if (!this._modelData || typeof payload.text !== 'string' || payload.text.length === 0) {\r\n // nothing to do\r\n return;\r\n }\r\n var startPosition = this._modelData.cursor.getSelection().getStartPosition();\r\n this._modelData.cursor.trigger(source, handlerId, payload);\r\n var endPosition = this._modelData.cursor.getSelection().getStartPosition();\r\n if (source === 'keyboard') {\r\n this._onDidPaste.fire(new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column));\r\n }\r\n return;\r\n }\r\n if (handlerId === editorCommon.Handler.CompositionStart) {\r\n this._onCompositionStart.fire();\r\n }\r\n if (handlerId === editorCommon.Handler.CompositionEnd) {\r\n this._onCompositionEnd.fire();\r\n }\r\n var action = this.getAction(handlerId);\r\n if (action) {\r\n Promise.resolve(action.run()).then(undefined, onUnexpectedError);\r\n return;\r\n }\r\n if (!this._modelData) {\r\n return;\r\n }\r\n if (this._triggerEditorCommand(source, handlerId, payload)) {\r\n return;\r\n }\r\n this._modelData.cursor.trigger(source, handlerId, payload);\r\n };\r\n CodeEditorWidget.prototype._triggerEditorCommand = function (source, handlerId, payload) {\r\n var _this = this;\r\n var command = EditorExtensionsRegistry.getEditorCommand(handlerId);\r\n if (command) {\r\n payload = payload || {};\r\n payload.source = source;\r\n this._instantiationService.invokeFunction(function (accessor) {\r\n Promise.resolve(command.runEditorCommand(accessor, _this, payload)).then(undefined, onUnexpectedError);\r\n });\r\n return true;\r\n }\r\n return false;\r\n };\r\n CodeEditorWidget.prototype._getCursors = function () {\r\n if (!this._modelData) {\r\n return null;\r\n }\r\n return this._modelData.cursor;\r\n };\r\n CodeEditorWidget.prototype.pushUndoStop = function () {\r\n if (!this._modelData) {\r\n return false;\r\n }\r\n if (this._configuration.options.get(65 /* readOnly */)) {\r\n // read only editor => sorry!\r\n return false;\r\n }\r\n this._modelData.model.pushStackElement();\r\n return true;\r\n };\r\n CodeEditorWidget.prototype.executeEdits = function (source, edits, endCursorState) {\r\n if (!this._modelData) {\r\n return false;\r\n }\r\n if (this._configuration.options.get(65 /* readOnly */)) {\r\n // read only editor => sorry!\r\n return false;\r\n }\r\n var cursorStateComputer;\r\n if (!endCursorState) {\r\n cursorStateComputer = function () { return null; };\r\n }\r\n else if (Array.isArray(endCursorState)) {\r\n cursorStateComputer = function () { return endCursorState; };\r\n }\r\n else {\r\n cursorStateComputer = endCursorState;\r\n }\r\n this._modelData.cursor.executeEdits(source, edits, cursorStateComputer);\r\n return true;\r\n };\r\n CodeEditorWidget.prototype.executeCommand = function (source, command) {\r\n if (!this._modelData) {\r\n return;\r\n }\r\n this._modelData.cursor.trigger(source, editorCommon.Handler.ExecuteCommand, command);\r\n };\r\n CodeEditorWidget.prototype.executeCommands = function (source, commands) {\r\n if (!this._modelData) {\r\n return;\r\n }\r\n this._modelData.cursor.trigger(source, editorCommon.Handler.ExecuteCommands, commands);\r\n };\r\n CodeEditorWidget.prototype.changeDecorations = function (callback) {\r\n if (!this._modelData) {\r\n // callback will not be called\r\n return null;\r\n }\r\n return this._modelData.model.changeDecorations(callback, this._id);\r\n };\r\n CodeEditorWidget.prototype.getLineDecorations = function (lineNumber) {\r\n if (!this._modelData) {\r\n return null;\r\n }\r\n return this._modelData.model.getLineDecorations(lineNumber, this._id, this._configuration.options.get(65 /* readOnly */));\r\n };\r\n CodeEditorWidget.prototype.deltaDecorations = function (oldDecorations, newDecorations) {\r\n if (!this._modelData) {\r\n return [];\r\n }\r\n if (oldDecorations.length === 0 && newDecorations.length === 0) {\r\n return oldDecorations;\r\n }\r\n return this._modelData.model.deltaDecorations(oldDecorations, newDecorations, this._id);\r\n };\r\n CodeEditorWidget.prototype.removeDecorations = function (decorationTypeKey) {\r\n // remove decorations for type and sub type\r\n var oldDecorationsIds = this._decorationTypeKeysToIds[decorationTypeKey];\r\n if (oldDecorationsIds) {\r\n this.deltaDecorations(oldDecorationsIds, []);\r\n }\r\n if (this._decorationTypeKeysToIds.hasOwnProperty(decorationTypeKey)) {\r\n delete this._decorationTypeKeysToIds[decorationTypeKey];\r\n }\r\n if (this._decorationTypeSubtypes.hasOwnProperty(decorationTypeKey)) {\r\n delete this._decorationTypeSubtypes[decorationTypeKey];\r\n }\r\n };\r\n CodeEditorWidget.prototype.getLayoutInfo = function () {\r\n var options = this._configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n return layoutInfo;\r\n };\r\n CodeEditorWidget.prototype.createOverviewRuler = function (cssClassName) {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return null;\r\n }\r\n return this._modelData.view.createOverviewRuler(cssClassName);\r\n };\r\n CodeEditorWidget.prototype.getDomNode = function () {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return null;\r\n }\r\n return this._modelData.view.domNode.domNode;\r\n };\r\n CodeEditorWidget.prototype.delegateVerticalScrollbarMouseDown = function (browserEvent) {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return;\r\n }\r\n this._modelData.view.delegateVerticalScrollbarMouseDown(browserEvent);\r\n };\r\n CodeEditorWidget.prototype.layout = function (dimension) {\r\n this._configuration.observeReferenceElement(dimension);\r\n this.render();\r\n };\r\n CodeEditorWidget.prototype.focus = function () {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return;\r\n }\r\n this._modelData.view.focus();\r\n };\r\n CodeEditorWidget.prototype.hasTextFocus = function () {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return false;\r\n }\r\n return this._modelData.view.isFocused();\r\n };\r\n CodeEditorWidget.prototype.hasWidgetFocus = function () {\r\n return this._focusTracker && this._focusTracker.hasFocus();\r\n };\r\n CodeEditorWidget.prototype.addContentWidget = function (widget) {\r\n var widgetData = {\r\n widget: widget,\r\n position: widget.getPosition()\r\n };\r\n if (this._contentWidgets.hasOwnProperty(widget.getId())) {\r\n console.warn('Overwriting a content widget with the same id.');\r\n }\r\n this._contentWidgets[widget.getId()] = widgetData;\r\n if (this._modelData && this._modelData.hasRealView) {\r\n this._modelData.view.addContentWidget(widgetData);\r\n }\r\n };\r\n CodeEditorWidget.prototype.layoutContentWidget = function (widget) {\r\n var widgetId = widget.getId();\r\n if (this._contentWidgets.hasOwnProperty(widgetId)) {\r\n var widgetData = this._contentWidgets[widgetId];\r\n widgetData.position = widget.getPosition();\r\n if (this._modelData && this._modelData.hasRealView) {\r\n this._modelData.view.layoutContentWidget(widgetData);\r\n }\r\n }\r\n };\r\n CodeEditorWidget.prototype.removeContentWidget = function (widget) {\r\n var widgetId = widget.getId();\r\n if (this._contentWidgets.hasOwnProperty(widgetId)) {\r\n var widgetData = this._contentWidgets[widgetId];\r\n delete this._contentWidgets[widgetId];\r\n if (this._modelData && this._modelData.hasRealView) {\r\n this._modelData.view.removeContentWidget(widgetData);\r\n }\r\n }\r\n };\r\n CodeEditorWidget.prototype.addOverlayWidget = function (widget) {\r\n var widgetData = {\r\n widget: widget,\r\n position: widget.getPosition()\r\n };\r\n if (this._overlayWidgets.hasOwnProperty(widget.getId())) {\r\n console.warn('Overwriting an overlay widget with the same id.');\r\n }\r\n this._overlayWidgets[widget.getId()] = widgetData;\r\n if (this._modelData && this._modelData.hasRealView) {\r\n this._modelData.view.addOverlayWidget(widgetData);\r\n }\r\n };\r\n CodeEditorWidget.prototype.layoutOverlayWidget = function (widget) {\r\n var widgetId = widget.getId();\r\n if (this._overlayWidgets.hasOwnProperty(widgetId)) {\r\n var widgetData = this._overlayWidgets[widgetId];\r\n widgetData.position = widget.getPosition();\r\n if (this._modelData && this._modelData.hasRealView) {\r\n this._modelData.view.layoutOverlayWidget(widgetData);\r\n }\r\n }\r\n };\r\n CodeEditorWidget.prototype.removeOverlayWidget = function (widget) {\r\n var widgetId = widget.getId();\r\n if (this._overlayWidgets.hasOwnProperty(widgetId)) {\r\n var widgetData = this._overlayWidgets[widgetId];\r\n delete this._overlayWidgets[widgetId];\r\n if (this._modelData && this._modelData.hasRealView) {\r\n this._modelData.view.removeOverlayWidget(widgetData);\r\n }\r\n }\r\n };\r\n CodeEditorWidget.prototype.changeViewZones = function (callback) {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return;\r\n }\r\n var hasChanges = this._modelData.view.change(callback);\r\n if (hasChanges) {\r\n this._onDidChangeViewZones.fire();\r\n }\r\n };\r\n CodeEditorWidget.prototype.getTargetAtClientPoint = function (clientX, clientY) {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return null;\r\n }\r\n return this._modelData.view.getTargetAtClientPoint(clientX, clientY);\r\n };\r\n CodeEditorWidget.prototype.getScrolledVisiblePosition = function (rawPosition) {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return null;\r\n }\r\n var position = this._modelData.model.validatePosition(rawPosition);\r\n var options = this._configuration.options;\r\n var layoutInfo = options.get(103 /* layoutInfo */);\r\n var top = CodeEditorWidget._getVerticalOffsetForPosition(this._modelData, position.lineNumber, position.column) - this.getScrollTop();\r\n var left = this._modelData.view.getOffsetForColumn(position.lineNumber, position.column) + layoutInfo.glyphMarginWidth + layoutInfo.lineNumbersWidth + layoutInfo.decorationsWidth - this.getScrollLeft();\r\n return {\r\n top: top,\r\n left: left,\r\n height: options.get(47 /* lineHeight */)\r\n };\r\n };\r\n CodeEditorWidget.prototype.getOffsetForColumn = function (lineNumber, column) {\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return -1;\r\n }\r\n return this._modelData.view.getOffsetForColumn(lineNumber, column);\r\n };\r\n CodeEditorWidget.prototype.render = function (forceRedraw) {\r\n if (forceRedraw === void 0) { forceRedraw = false; }\r\n if (!this._modelData || !this._modelData.hasRealView) {\r\n return;\r\n }\r\n this._modelData.view.render(true, forceRedraw);\r\n };\r\n CodeEditorWidget.prototype.applyFontInfo = function (target) {\r\n Configuration.applyFontInfoSlow(target, this._configuration.options.get(32 /* fontInfo */));\r\n };\r\n CodeEditorWidget.prototype._attachModel = function (model) {\r\n var _this = this;\r\n if (!model) {\r\n this._modelData = null;\r\n return;\r\n }\r\n var listenersToRemove = [];\r\n this._domElement.setAttribute('data-mode-id', model.getLanguageIdentifier().language);\r\n this._configuration.setIsDominatedByLongLines(model.isDominatedByLongLines());\r\n this._configuration.setMaxLineNumber(model.getLineCount());\r\n model.onBeforeAttached();\r\n var viewModel = new ViewModel(this._id, this._configuration, model, function (callback) { return dom.scheduleAtNextAnimationFrame(callback); });\r\n listenersToRemove.push(model.onDidChangeDecorations(function (e) { return _this._onDidChangeModelDecorations.fire(e); }));\r\n listenersToRemove.push(model.onDidChangeLanguage(function (e) {\r\n _this._domElement.setAttribute('data-mode-id', model.getLanguageIdentifier().language);\r\n _this._onDidChangeModelLanguage.fire(e);\r\n }));\r\n listenersToRemove.push(model.onDidChangeLanguageConfiguration(function (e) { return _this._onDidChangeModelLanguageConfiguration.fire(e); }));\r\n listenersToRemove.push(model.onDidChangeContent(function (e) { return _this._onDidChangeModelContent.fire(e); }));\r\n listenersToRemove.push(model.onDidChangeOptions(function (e) { return _this._onDidChangeModelOptions.fire(e); }));\r\n // Someone might destroy the model from under the editor, so prevent any exceptions by setting a null model\r\n listenersToRemove.push(model.onWillDispose(function () { return _this.setModel(null); }));\r\n var cursor = new Cursor(this._configuration, model, viewModel);\r\n listenersToRemove.push(cursor.onDidReachMaxCursorCount(function () {\r\n _this._notificationService.warn(nls.localize('cursors.maximum', \"The number of cursors has been limited to {0}.\", Cursor.MAX_CURSOR_COUNT));\r\n }));\r\n listenersToRemove.push(cursor.onDidAttemptReadOnlyEdit(function () {\r\n _this._onDidAttemptReadOnlyEdit.fire(undefined);\r\n }));\r\n listenersToRemove.push(cursor.onDidChange(function (e) {\r\n var positions = [];\r\n for (var i = 0, len = e.selections.length; i < len; i++) {\r\n positions[i] = e.selections[i].getPosition();\r\n }\r\n var e1 = {\r\n position: positions[0],\r\n secondaryPositions: positions.slice(1),\r\n reason: e.reason,\r\n source: e.source\r\n };\r\n _this._onDidChangeCursorPosition.fire(e1);\r\n var e2 = {\r\n selection: e.selections[0],\r\n secondarySelections: e.selections.slice(1),\r\n modelVersionId: e.modelVersionId,\r\n oldSelections: e.oldSelections,\r\n oldModelVersionId: e.oldModelVersionId,\r\n source: e.source,\r\n reason: e.reason\r\n };\r\n _this._onDidChangeCursorSelection.fire(e2);\r\n }));\r\n var _a = this._createView(viewModel, cursor), view = _a[0], hasRealView = _a[1];\r\n if (hasRealView) {\r\n this._domElement.appendChild(view.domNode.domNode);\r\n var keys = Object.keys(this._contentWidgets);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var widgetId = keys[i];\r\n view.addContentWidget(this._contentWidgets[widgetId]);\r\n }\r\n keys = Object.keys(this._overlayWidgets);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var widgetId = keys[i];\r\n view.addOverlayWidget(this._overlayWidgets[widgetId]);\r\n }\r\n view.render(false, true);\r\n view.domNode.domNode.setAttribute('data-uri', model.uri.toString());\r\n }\r\n this._modelData = new ModelData(model, viewModel, cursor, view, hasRealView, listenersToRemove);\r\n };\r\n CodeEditorWidget.prototype._createView = function (viewModel, cursor) {\r\n var _this = this;\r\n var commandDelegate;\r\n if (this.isSimpleWidget) {\r\n commandDelegate = {\r\n executeEditorCommand: function (editorCommand, args) {\r\n editorCommand.runCoreEditorCommand(cursor, args);\r\n },\r\n paste: function (source, text, pasteOnNewLine, multicursorText) {\r\n _this.trigger(source, editorCommon.Handler.Paste, { text: text, pasteOnNewLine: pasteOnNewLine, multicursorText: multicursorText });\r\n },\r\n type: function (source, text) {\r\n _this.trigger(source, editorCommon.Handler.Type, { text: text });\r\n },\r\n replacePreviousChar: function (source, text, replaceCharCnt) {\r\n _this.trigger(source, editorCommon.Handler.ReplacePreviousChar, { text: text, replaceCharCnt: replaceCharCnt });\r\n },\r\n compositionStart: function (source) {\r\n _this.trigger(source, editorCommon.Handler.CompositionStart, undefined);\r\n },\r\n compositionEnd: function (source) {\r\n _this.trigger(source, editorCommon.Handler.CompositionEnd, undefined);\r\n },\r\n cut: function (source) {\r\n _this.trigger(source, editorCommon.Handler.Cut, undefined);\r\n }\r\n };\r\n }\r\n else {\r\n commandDelegate = {\r\n executeEditorCommand: function (editorCommand, args) {\r\n editorCommand.runCoreEditorCommand(cursor, args);\r\n },\r\n paste: function (source, text, pasteOnNewLine, multicursorText) {\r\n _this._commandService.executeCommand(editorCommon.Handler.Paste, {\r\n text: text,\r\n pasteOnNewLine: pasteOnNewLine,\r\n multicursorText: multicursorText\r\n });\r\n },\r\n type: function (source, text) {\r\n _this._commandService.executeCommand(editorCommon.Handler.Type, {\r\n text: text\r\n });\r\n },\r\n replacePreviousChar: function (source, text, replaceCharCnt) {\r\n _this._commandService.executeCommand(editorCommon.Handler.ReplacePreviousChar, {\r\n text: text,\r\n replaceCharCnt: replaceCharCnt\r\n });\r\n },\r\n compositionStart: function (source) {\r\n _this._commandService.executeCommand(editorCommon.Handler.CompositionStart, {});\r\n },\r\n compositionEnd: function (source) {\r\n _this._commandService.executeCommand(editorCommon.Handler.CompositionEnd, {});\r\n },\r\n cut: function (source) {\r\n _this._commandService.executeCommand(editorCommon.Handler.Cut, {});\r\n }\r\n };\r\n }\r\n var viewOutgoingEvents = new ViewOutgoingEvents(viewModel);\r\n viewOutgoingEvents.onDidScroll = function (e) { return _this._onDidScrollChange.fire(e); };\r\n viewOutgoingEvents.onDidGainFocus = function () { return _this._editorTextFocus.setValue(true); };\r\n viewOutgoingEvents.onDidLoseFocus = function () { return _this._editorTextFocus.setValue(false); };\r\n viewOutgoingEvents.onContextMenu = function (e) { return _this._onContextMenu.fire(e); };\r\n viewOutgoingEvents.onMouseDown = function (e) { return _this._onMouseDown.fire(e); };\r\n viewOutgoingEvents.onMouseUp = function (e) { return _this._onMouseUp.fire(e); };\r\n viewOutgoingEvents.onMouseDrag = function (e) { return _this._onMouseDrag.fire(e); };\r\n viewOutgoingEvents.onMouseDrop = function (e) { return _this._onMouseDrop.fire(e); };\r\n viewOutgoingEvents.onKeyUp = function (e) { return _this._onKeyUp.fire(e); };\r\n viewOutgoingEvents.onMouseMove = function (e) { return _this._onMouseMove.fire(e); };\r\n viewOutgoingEvents.onMouseLeave = function (e) { return _this._onMouseLeave.fire(e); };\r\n viewOutgoingEvents.onMouseWheel = function (e) { return _this._onMouseWheel.fire(e); };\r\n viewOutgoingEvents.onKeyDown = function (e) { return _this._onKeyDown.fire(e); };\r\n var view = new View(commandDelegate, this._configuration, this._themeService, viewModel, cursor, viewOutgoingEvents);\r\n return [view, true];\r\n };\r\n CodeEditorWidget.prototype._postDetachModelCleanup = function (detachedModel) {\r\n if (detachedModel) {\r\n detachedModel.removeAllDecorationsWithOwnerId(this._id);\r\n }\r\n };\r\n CodeEditorWidget.prototype._detachModel = function () {\r\n if (!this._modelData) {\r\n return null;\r\n }\r\n var model = this._modelData.model;\r\n var removeDomNode = this._modelData.hasRealView ? this._modelData.view.domNode.domNode : null;\r\n this._modelData.dispose();\r\n this._modelData = null;\r\n this._domElement.removeAttribute('data-mode-id');\r\n if (removeDomNode) {\r\n this._domElement.removeChild(removeDomNode);\r\n }\r\n return model;\r\n };\r\n CodeEditorWidget.prototype._removeDecorationType = function (key) {\r\n this._codeEditorService.removeDecorationType(key);\r\n };\r\n CodeEditorWidget.prototype.hasModel = function () {\r\n return (this._modelData !== null);\r\n };\r\n CodeEditorWidget = __decorate([\r\n __param(3, IInstantiationService),\r\n __param(4, ICodeEditorService),\r\n __param(5, ICommandService),\r\n __param(6, IContextKeyService),\r\n __param(7, IThemeService),\r\n __param(8, INotificationService),\r\n __param(9, IAccessibilityService)\r\n ], CodeEditorWidget);\r\n return CodeEditorWidget;\r\n}(Disposable));\r\nexport { CodeEditorWidget };\r\nvar BooleanEventEmitter = /** @class */ (function (_super) {\r\n __extends(BooleanEventEmitter, _super);\r\n function BooleanEventEmitter() {\r\n var _this = _super.call(this) || this;\r\n _this._onDidChangeToTrue = _this._register(new Emitter());\r\n _this.onDidChangeToTrue = _this._onDidChangeToTrue.event;\r\n _this._onDidChangeToFalse = _this._register(new Emitter());\r\n _this.onDidChangeToFalse = _this._onDidChangeToFalse.event;\r\n _this._value = 0 /* NotSet */;\r\n return _this;\r\n }\r\n BooleanEventEmitter.prototype.setValue = function (_value) {\r\n var value = (_value ? 2 /* True */ : 1 /* False */);\r\n if (this._value === value) {\r\n return;\r\n }\r\n this._value = value;\r\n if (this._value === 2 /* True */) {\r\n this._onDidChangeToTrue.fire();\r\n }\r\n else if (this._value === 1 /* False */) {\r\n this._onDidChangeToFalse.fire();\r\n }\r\n };\r\n return BooleanEventEmitter;\r\n}(Disposable));\r\nexport { BooleanEventEmitter };\r\nvar EditorContextKeysManager = /** @class */ (function (_super) {\r\n __extends(EditorContextKeysManager, _super);\r\n function EditorContextKeysManager(editor, contextKeyService) {\r\n var _this = _super.call(this) || this;\r\n _this._editor = editor;\r\n contextKeyService.createKey('editorId', editor.getId());\r\n _this._editorFocus = EditorContextKeys.focus.bindTo(contextKeyService);\r\n _this._textInputFocus = EditorContextKeys.textInputFocus.bindTo(contextKeyService);\r\n _this._editorTextFocus = EditorContextKeys.editorTextFocus.bindTo(contextKeyService);\r\n _this._editorTabMovesFocus = EditorContextKeys.tabMovesFocus.bindTo(contextKeyService);\r\n _this._editorReadonly = EditorContextKeys.readOnly.bindTo(contextKeyService);\r\n _this._hasMultipleSelections = EditorContextKeys.hasMultipleSelections.bindTo(contextKeyService);\r\n _this._hasNonEmptySelection = EditorContextKeys.hasNonEmptySelection.bindTo(contextKeyService);\r\n _this._canUndo = EditorContextKeys.canUndo.bindTo(contextKeyService);\r\n _this._canRedo = EditorContextKeys.canRedo.bindTo(contextKeyService);\r\n _this._register(_this._editor.onDidChangeConfiguration(function () { return _this._updateFromConfig(); }));\r\n _this._register(_this._editor.onDidChangeCursorSelection(function () { return _this._updateFromSelection(); }));\r\n _this._register(_this._editor.onDidFocusEditorWidget(function () { return _this._updateFromFocus(); }));\r\n _this._register(_this._editor.onDidBlurEditorWidget(function () { return _this._updateFromFocus(); }));\r\n _this._register(_this._editor.onDidFocusEditorText(function () { return _this._updateFromFocus(); }));\r\n _this._register(_this._editor.onDidBlurEditorText(function () { return _this._updateFromFocus(); }));\r\n _this._register(_this._editor.onDidChangeModel(function () { return _this._updateFromModel(); }));\r\n _this._register(_this._editor.onDidChangeConfiguration(function () { return _this._updateFromModel(); }));\r\n _this._updateFromConfig();\r\n _this._updateFromSelection();\r\n _this._updateFromFocus();\r\n _this._updateFromModel();\r\n return _this;\r\n }\r\n EditorContextKeysManager.prototype._updateFromConfig = function () {\r\n var options = this._editor.getOptions();\r\n this._editorTabMovesFocus.set(options.get(102 /* tabFocusMode */));\r\n this._editorReadonly.set(options.get(65 /* readOnly */));\r\n };\r\n EditorContextKeysManager.prototype._updateFromSelection = function () {\r\n var selections = this._editor.getSelections();\r\n if (!selections) {\r\n this._hasMultipleSelections.reset();\r\n this._hasNonEmptySelection.reset();\r\n }\r\n else {\r\n this._hasMultipleSelections.set(selections.length > 1);\r\n this._hasNonEmptySelection.set(selections.some(function (s) { return !s.isEmpty(); }));\r\n }\r\n };\r\n EditorContextKeysManager.prototype._updateFromFocus = function () {\r\n this._editorFocus.set(this._editor.hasWidgetFocus() && !this._editor.isSimpleWidget);\r\n this._editorTextFocus.set(this._editor.hasTextFocus() && !this._editor.isSimpleWidget);\r\n this._textInputFocus.set(this._editor.hasTextFocus());\r\n };\r\n EditorContextKeysManager.prototype._updateFromModel = function () {\r\n var model = this._editor.getModel();\r\n this._canUndo.set(Boolean(model && model.canUndo()));\r\n this._canRedo.set(Boolean(model && model.canRedo()));\r\n };\r\n return EditorContextKeysManager;\r\n}(Disposable));\r\nvar EditorModeContext = /** @class */ (function (_super) {\r\n __extends(EditorModeContext, _super);\r\n function EditorModeContext(_editor, _contextKeyService) {\r\n var _this = _super.call(this) || this;\r\n _this._editor = _editor;\r\n _this._contextKeyService = _contextKeyService;\r\n _this._langId = EditorContextKeys.languageId.bindTo(_contextKeyService);\r\n _this._hasCompletionItemProvider = EditorContextKeys.hasCompletionItemProvider.bindTo(_contextKeyService);\r\n _this._hasCodeActionsProvider = EditorContextKeys.hasCodeActionsProvider.bindTo(_contextKeyService);\r\n _this._hasCodeLensProvider = EditorContextKeys.hasCodeLensProvider.bindTo(_contextKeyService);\r\n _this._hasDefinitionProvider = EditorContextKeys.hasDefinitionProvider.bindTo(_contextKeyService);\r\n _this._hasDeclarationProvider = EditorContextKeys.hasDeclarationProvider.bindTo(_contextKeyService);\r\n _this._hasImplementationProvider = EditorContextKeys.hasImplementationProvider.bindTo(_contextKeyService);\r\n _this._hasTypeDefinitionProvider = EditorContextKeys.hasTypeDefinitionProvider.bindTo(_contextKeyService);\r\n _this._hasHoverProvider = EditorContextKeys.hasHoverProvider.bindTo(_contextKeyService);\r\n _this._hasDocumentHighlightProvider = EditorContextKeys.hasDocumentHighlightProvider.bindTo(_contextKeyService);\r\n _this._hasDocumentSymbolProvider = EditorContextKeys.hasDocumentSymbolProvider.bindTo(_contextKeyService);\r\n _this._hasReferenceProvider = EditorContextKeys.hasReferenceProvider.bindTo(_contextKeyService);\r\n _this._hasRenameProvider = EditorContextKeys.hasRenameProvider.bindTo(_contextKeyService);\r\n _this._hasSignatureHelpProvider = EditorContextKeys.hasSignatureHelpProvider.bindTo(_contextKeyService);\r\n _this._hasDocumentFormattingProvider = EditorContextKeys.hasDocumentFormattingProvider.bindTo(_contextKeyService);\r\n _this._hasDocumentSelectionFormattingProvider = EditorContextKeys.hasDocumentSelectionFormattingProvider.bindTo(_contextKeyService);\r\n _this._hasMultipleDocumentFormattingProvider = EditorContextKeys.hasMultipleDocumentFormattingProvider.bindTo(_contextKeyService);\r\n _this._hasMultipleDocumentSelectionFormattingProvider = EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider.bindTo(_contextKeyService);\r\n _this._isInWalkThrough = EditorContextKeys.isInEmbeddedEditor.bindTo(_contextKeyService);\r\n var update = function () { return _this._update(); };\r\n // update when model/mode changes\r\n _this._register(_editor.onDidChangeModel(update));\r\n _this._register(_editor.onDidChangeModelLanguage(update));\r\n // update when registries change\r\n _this._register(modes.CompletionProviderRegistry.onDidChange(update));\r\n _this._register(modes.CodeActionProviderRegistry.onDidChange(update));\r\n _this._register(modes.CodeLensProviderRegistry.onDidChange(update));\r\n _this._register(modes.DefinitionProviderRegistry.onDidChange(update));\r\n _this._register(modes.DeclarationProviderRegistry.onDidChange(update));\r\n _this._register(modes.ImplementationProviderRegistry.onDidChange(update));\r\n _this._register(modes.TypeDefinitionProviderRegistry.onDidChange(update));\r\n _this._register(modes.HoverProviderRegistry.onDidChange(update));\r\n _this._register(modes.DocumentHighlightProviderRegistry.onDidChange(update));\r\n _this._register(modes.DocumentSymbolProviderRegistry.onDidChange(update));\r\n _this._register(modes.ReferenceProviderRegistry.onDidChange(update));\r\n _this._register(modes.RenameProviderRegistry.onDidChange(update));\r\n _this._register(modes.DocumentFormattingEditProviderRegistry.onDidChange(update));\r\n _this._register(modes.DocumentRangeFormattingEditProviderRegistry.onDidChange(update));\r\n _this._register(modes.SignatureHelpProviderRegistry.onDidChange(update));\r\n update();\r\n return _this;\r\n }\r\n EditorModeContext.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n EditorModeContext.prototype.reset = function () {\r\n var _this = this;\r\n this._contextKeyService.bufferChangeEvents(function () {\r\n _this._langId.reset();\r\n _this._hasCompletionItemProvider.reset();\r\n _this._hasCodeActionsProvider.reset();\r\n _this._hasCodeLensProvider.reset();\r\n _this._hasDefinitionProvider.reset();\r\n _this._hasDeclarationProvider.reset();\r\n _this._hasImplementationProvider.reset();\r\n _this._hasTypeDefinitionProvider.reset();\r\n _this._hasHoverProvider.reset();\r\n _this._hasDocumentHighlightProvider.reset();\r\n _this._hasDocumentSymbolProvider.reset();\r\n _this._hasReferenceProvider.reset();\r\n _this._hasRenameProvider.reset();\r\n _this._hasDocumentFormattingProvider.reset();\r\n _this._hasDocumentSelectionFormattingProvider.reset();\r\n _this._hasSignatureHelpProvider.reset();\r\n _this._isInWalkThrough.reset();\r\n });\r\n };\r\n EditorModeContext.prototype._update = function () {\r\n var _this = this;\r\n var model = this._editor.getModel();\r\n if (!model) {\r\n this.reset();\r\n return;\r\n }\r\n this._contextKeyService.bufferChangeEvents(function () {\r\n _this._langId.set(model.getLanguageIdentifier().language);\r\n _this._hasCompletionItemProvider.set(modes.CompletionProviderRegistry.has(model));\r\n _this._hasCodeActionsProvider.set(modes.CodeActionProviderRegistry.has(model));\r\n _this._hasCodeLensProvider.set(modes.CodeLensProviderRegistry.has(model));\r\n _this._hasDefinitionProvider.set(modes.DefinitionProviderRegistry.has(model));\r\n _this._hasDeclarationProvider.set(modes.DeclarationProviderRegistry.has(model));\r\n _this._hasImplementationProvider.set(modes.ImplementationProviderRegistry.has(model));\r\n _this._hasTypeDefinitionProvider.set(modes.TypeDefinitionProviderRegistry.has(model));\r\n _this._hasHoverProvider.set(modes.HoverProviderRegistry.has(model));\r\n _this._hasDocumentHighlightProvider.set(modes.DocumentHighlightProviderRegistry.has(model));\r\n _this._hasDocumentSymbolProvider.set(modes.DocumentSymbolProviderRegistry.has(model));\r\n _this._hasReferenceProvider.set(modes.ReferenceProviderRegistry.has(model));\r\n _this._hasRenameProvider.set(modes.RenameProviderRegistry.has(model));\r\n _this._hasSignatureHelpProvider.set(modes.SignatureHelpProviderRegistry.has(model));\r\n _this._hasDocumentFormattingProvider.set(modes.DocumentFormattingEditProviderRegistry.has(model) || modes.DocumentRangeFormattingEditProviderRegistry.has(model));\r\n _this._hasDocumentSelectionFormattingProvider.set(modes.DocumentRangeFormattingEditProviderRegistry.has(model));\r\n _this._hasMultipleDocumentFormattingProvider.set(modes.DocumentFormattingEditProviderRegistry.all(model).length + modes.DocumentRangeFormattingEditProviderRegistry.all(model).length > 1);\r\n _this._hasMultipleDocumentSelectionFormattingProvider.set(modes.DocumentRangeFormattingEditProviderRegistry.all(model).length > 1);\r\n _this._isInWalkThrough.set(model.uri.scheme === Schemas.walkThroughSnippet);\r\n });\r\n };\r\n return EditorModeContext;\r\n}(Disposable));\r\nexport { EditorModeContext };\r\nvar CodeEditorWidgetFocusTracker = /** @class */ (function (_super) {\r\n __extends(CodeEditorWidgetFocusTracker, _super);\r\n function CodeEditorWidgetFocusTracker(domElement) {\r\n var _this = _super.call(this) || this;\r\n _this._onChange = _this._register(new Emitter());\r\n _this.onChange = _this._onChange.event;\r\n _this._hasFocus = false;\r\n _this._domFocusTracker = _this._register(dom.trackFocus(domElement));\r\n _this._register(_this._domFocusTracker.onDidFocus(function () {\r\n _this._hasFocus = true;\r\n _this._onChange.fire(undefined);\r\n }));\r\n _this._register(_this._domFocusTracker.onDidBlur(function () {\r\n _this._hasFocus = false;\r\n _this._onChange.fire(undefined);\r\n }));\r\n return _this;\r\n }\r\n CodeEditorWidgetFocusTracker.prototype.hasFocus = function () {\r\n return this._hasFocus;\r\n };\r\n return CodeEditorWidgetFocusTracker;\r\n}(Disposable));\r\nvar squigglyStart = encodeURIComponent(\"\");\r\nfunction getSquigglySVGData(color) {\r\n return squigglyStart + encodeURIComponent(color.toString()) + squigglyEnd;\r\n}\r\nvar dotdotdotStart = encodeURIComponent(\"\");\r\nfunction getDotDotDotSVGData(color) {\r\n return dotdotdotStart + encodeURIComponent(color.toString()) + dotdotdotEnd;\r\n}\r\nregisterThemingParticipant(function (theme, collector) {\r\n var errorBorderColor = theme.getColor(editorErrorBorder);\r\n if (errorBorderColor) {\r\n collector.addRule(\".monaco-editor .\" + \"squiggly-error\" /* EditorErrorDecoration */ + \" { border-bottom: 4px double \" + errorBorderColor + \"; }\");\r\n }\r\n var errorForeground = theme.getColor(editorErrorForeground);\r\n if (errorForeground) {\r\n collector.addRule(\".monaco-editor .\" + \"squiggly-error\" /* EditorErrorDecoration */ + \" { background: url(\\\"data:image/svg+xml,\" + getSquigglySVGData(errorForeground) + \"\\\") repeat-x bottom left; }\");\r\n }\r\n var warningBorderColor = theme.getColor(editorWarningBorder);\r\n if (warningBorderColor) {\r\n collector.addRule(\".monaco-editor .\" + \"squiggly-warning\" /* EditorWarningDecoration */ + \" { border-bottom: 4px double \" + warningBorderColor + \"; }\");\r\n }\r\n var warningForeground = theme.getColor(editorWarningForeground);\r\n if (warningForeground) {\r\n collector.addRule(\".monaco-editor .\" + \"squiggly-warning\" /* EditorWarningDecoration */ + \" { background: url(\\\"data:image/svg+xml,\" + getSquigglySVGData(warningForeground) + \"\\\") repeat-x bottom left; }\");\r\n }\r\n var infoBorderColor = theme.getColor(editorInfoBorder);\r\n if (infoBorderColor) {\r\n collector.addRule(\".monaco-editor .\" + \"squiggly-info\" /* EditorInfoDecoration */ + \" { border-bottom: 4px double \" + infoBorderColor + \"; }\");\r\n }\r\n var infoForeground = theme.getColor(editorInfoForeground);\r\n if (infoForeground) {\r\n collector.addRule(\".monaco-editor .\" + \"squiggly-info\" /* EditorInfoDecoration */ + \" { background: url(\\\"data:image/svg+xml,\" + getSquigglySVGData(infoForeground) + \"\\\") repeat-x bottom left; }\");\r\n }\r\n var hintBorderColor = theme.getColor(editorHintBorder);\r\n if (hintBorderColor) {\r\n collector.addRule(\".monaco-editor .\" + \"squiggly-hint\" /* EditorHintDecoration */ + \" { border-bottom: 2px dotted \" + hintBorderColor + \"; }\");\r\n }\r\n var hintForeground = theme.getColor(editorHintForeground);\r\n if (hintForeground) {\r\n collector.addRule(\".monaco-editor .\" + \"squiggly-hint\" /* EditorHintDecoration */ + \" { background: url(\\\"data:image/svg+xml,\" + getDotDotDotSVGData(hintForeground) + \"\\\") no-repeat bottom left; }\");\r\n }\r\n var unnecessaryForeground = theme.getColor(editorUnnecessaryCodeOpacity);\r\n if (unnecessaryForeground) {\r\n collector.addRule(\".monaco-editor.showUnused .\" + \"squiggly-inline-unnecessary\" /* EditorUnnecessaryInlineDecoration */ + \" { opacity: \" + unnecessaryForeground.rgba.a + \"; }\");\r\n }\r\n var unnecessaryBorder = theme.getColor(editorUnnecessaryCodeBorder);\r\n if (unnecessaryBorder) {\r\n collector.addRule(\".monaco-editor.showUnused .\" + \"squiggly-unnecessary\" /* EditorUnnecessaryDecoration */ + \" { border-bottom: 2px dashed \" + unnecessaryBorder + \"; }\");\r\n }\r\n var deprecatedForeground = theme.getColor(editorForeground) || 'inherit';\r\n collector.addRule(\".monaco-editor .\" + \"squiggly-inline-deprecated\" /* EditorDeprecatedInlineDecoration */ + \" { text-decoration: line-through; text-decoration-color: \" + deprecatedForeground + \"}\");\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport './sash.css';\r\nimport { dispose, Disposable, DisposableStore } from '../../../common/lifecycle.js';\r\nimport { isIPad } from '../../browser.js';\r\nimport { isMacintosh } from '../../../common/platform.js';\r\nimport * as types from '../../../common/types.js';\r\nimport { EventType, Gesture } from '../../touch.js';\r\nimport { StandardMouseEvent } from '../../mouseEvent.js';\r\nimport { Emitter } from '../../../common/event.js';\r\nimport { getElementsByTagName, EventHelper, createStyleSheet, addDisposableListener, append, $, addClass, removeClass, toggleClass } from '../../dom.js';\r\nimport { domEvent } from '../../event.js';\r\nvar DEBUG = false;\r\nvar Sash = /** @class */ (function (_super) {\r\n __extends(Sash, _super);\r\n function Sash(container, layoutProvider, options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this) || this;\r\n _this._state = 3 /* Enabled */;\r\n _this._onDidEnablementChange = _this._register(new Emitter());\r\n _this.onDidEnablementChange = _this._onDidEnablementChange.event;\r\n _this._onDidStart = _this._register(new Emitter());\r\n _this.onDidStart = _this._onDidStart.event;\r\n _this._onDidChange = _this._register(new Emitter());\r\n _this.onDidChange = _this._onDidChange.event;\r\n _this._onDidReset = _this._register(new Emitter());\r\n _this.onDidReset = _this._onDidReset.event;\r\n _this._onDidEnd = _this._register(new Emitter());\r\n _this.onDidEnd = _this._onDidEnd.event;\r\n _this.linkedSash = undefined;\r\n _this.orthogonalStartSashDisposables = _this._register(new DisposableStore());\r\n _this.orthogonalEndSashDisposables = _this._register(new DisposableStore());\r\n _this.el = append(container, $('.monaco-sash'));\r\n if (isMacintosh) {\r\n addClass(_this.el, 'mac');\r\n }\r\n _this._register(domEvent(_this.el, 'mousedown')(_this.onMouseDown, _this));\r\n _this._register(domEvent(_this.el, 'dblclick')(_this.onMouseDoubleClick, _this));\r\n _this._register(Gesture.addTarget(_this.el));\r\n _this._register(domEvent(_this.el, EventType.Start)(_this.onTouchStart, _this));\r\n if (isIPad) {\r\n // see also https://ux.stackexchange.com/questions/39023/what-is-the-optimum-button-size-of-touch-screen-applications\r\n addClass(_this.el, 'touch');\r\n }\r\n _this.setOrientation(options.orientation || 0 /* VERTICAL */);\r\n _this.hidden = false;\r\n _this.layoutProvider = layoutProvider;\r\n _this.orthogonalStartSash = options.orthogonalStartSash;\r\n _this.orthogonalEndSash = options.orthogonalEndSash;\r\n toggleClass(_this.el, 'debug', DEBUG);\r\n return _this;\r\n }\r\n Object.defineProperty(Sash.prototype, \"state\", {\r\n get: function () { return this._state; },\r\n set: function (state) {\r\n if (this._state === state) {\r\n return;\r\n }\r\n toggleClass(this.el, 'disabled', state === 0 /* Disabled */);\r\n toggleClass(this.el, 'minimum', state === 1 /* Minimum */);\r\n toggleClass(this.el, 'maximum', state === 2 /* Maximum */);\r\n this._state = state;\r\n this._onDidEnablementChange.fire(state);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Sash.prototype, \"orthogonalStartSash\", {\r\n get: function () { return this._orthogonalStartSash; },\r\n set: function (sash) {\r\n this.orthogonalStartSashDisposables.clear();\r\n if (sash) {\r\n this.orthogonalStartSashDisposables.add(sash.onDidEnablementChange(this.onOrthogonalStartSashEnablementChange, this));\r\n this.onOrthogonalStartSashEnablementChange(sash.state);\r\n }\r\n else {\r\n this.onOrthogonalStartSashEnablementChange(0 /* Disabled */);\r\n }\r\n this._orthogonalStartSash = sash;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Sash.prototype, \"orthogonalEndSash\", {\r\n get: function () { return this._orthogonalEndSash; },\r\n set: function (sash) {\r\n this.orthogonalEndSashDisposables.clear();\r\n if (sash) {\r\n this.orthogonalEndSashDisposables.add(sash.onDidEnablementChange(this.onOrthogonalEndSashEnablementChange, this));\r\n this.onOrthogonalEndSashEnablementChange(sash.state);\r\n }\r\n else {\r\n this.onOrthogonalEndSashEnablementChange(0 /* Disabled */);\r\n }\r\n this._orthogonalEndSash = sash;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Sash.prototype.setOrientation = function (orientation) {\r\n this.orientation = orientation;\r\n if (this.orientation === 1 /* HORIZONTAL */) {\r\n addClass(this.el, 'horizontal');\r\n removeClass(this.el, 'vertical');\r\n }\r\n else {\r\n removeClass(this.el, 'horizontal');\r\n addClass(this.el, 'vertical');\r\n }\r\n if (this.layoutProvider) {\r\n this.layout();\r\n }\r\n };\r\n Sash.prototype.onMouseDown = function (e) {\r\n var _this = this;\r\n EventHelper.stop(e, false);\r\n var isMultisashResize = false;\r\n if (!e.__orthogonalSashEvent) {\r\n var orthogonalSash = this.getOrthogonalSash(e);\r\n if (orthogonalSash) {\r\n isMultisashResize = true;\r\n e.__orthogonalSashEvent = true;\r\n orthogonalSash.onMouseDown(e);\r\n }\r\n }\r\n if (this.linkedSash && !e.__linkedSashEvent) {\r\n e.__linkedSashEvent = true;\r\n this.linkedSash.onMouseDown(e);\r\n }\r\n if (!this.state) {\r\n return;\r\n }\r\n // Select both iframes and webviews; internally Electron nests an iframe\r\n // in its component, but this isn't queryable.\r\n var iframes = __spreadArrays(getElementsByTagName('iframe'), getElementsByTagName('webview'));\r\n for (var _i = 0, iframes_1 = iframes; _i < iframes_1.length; _i++) {\r\n var iframe = iframes_1[_i];\r\n iframe.style.pointerEvents = 'none'; // disable mouse events on iframes as long as we drag the sash\r\n }\r\n var mouseDownEvent = new StandardMouseEvent(e);\r\n var startX = mouseDownEvent.posx;\r\n var startY = mouseDownEvent.posy;\r\n var altKey = mouseDownEvent.altKey;\r\n var startEvent = { startX: startX, currentX: startX, startY: startY, currentY: startY, altKey: altKey };\r\n addClass(this.el, 'active');\r\n this._onDidStart.fire(startEvent);\r\n // fix https://github.com/Microsoft/vscode/issues/21675\r\n var style = createStyleSheet(this.el);\r\n var updateStyle = function () {\r\n var cursor = '';\r\n if (isMultisashResize) {\r\n cursor = 'all-scroll';\r\n }\r\n else if (_this.orientation === 1 /* HORIZONTAL */) {\r\n if (_this.state === 1 /* Minimum */) {\r\n cursor = 's-resize';\r\n }\r\n else if (_this.state === 2 /* Maximum */) {\r\n cursor = 'n-resize';\r\n }\r\n else {\r\n cursor = isMacintosh ? 'row-resize' : 'ns-resize';\r\n }\r\n }\r\n else {\r\n if (_this.state === 1 /* Minimum */) {\r\n cursor = 'e-resize';\r\n }\r\n else if (_this.state === 2 /* Maximum */) {\r\n cursor = 'w-resize';\r\n }\r\n else {\r\n cursor = isMacintosh ? 'col-resize' : 'ew-resize';\r\n }\r\n }\r\n style.innerHTML = \"* { cursor: \" + cursor + \" !important; }\";\r\n };\r\n var disposables = new DisposableStore();\r\n updateStyle();\r\n if (!isMultisashResize) {\r\n this.onDidEnablementChange(updateStyle, null, disposables);\r\n }\r\n var onMouseMove = function (e) {\r\n EventHelper.stop(e, false);\r\n var mouseMoveEvent = new StandardMouseEvent(e);\r\n var event = { startX: startX, currentX: mouseMoveEvent.posx, startY: startY, currentY: mouseMoveEvent.posy, altKey: altKey };\r\n _this._onDidChange.fire(event);\r\n };\r\n var onMouseUp = function (e) {\r\n EventHelper.stop(e, false);\r\n _this.el.removeChild(style);\r\n removeClass(_this.el, 'active');\r\n _this._onDidEnd.fire();\r\n disposables.dispose();\r\n for (var _i = 0, iframes_2 = iframes; _i < iframes_2.length; _i++) {\r\n var iframe = iframes_2[_i];\r\n iframe.style.pointerEvents = 'auto';\r\n }\r\n };\r\n domEvent(window, 'mousemove')(onMouseMove, null, disposables);\r\n domEvent(window, 'mouseup')(onMouseUp, null, disposables);\r\n };\r\n Sash.prototype.onMouseDoubleClick = function (e) {\r\n var orthogonalSash = this.getOrthogonalSash(e);\r\n if (orthogonalSash) {\r\n orthogonalSash._onDidReset.fire();\r\n }\r\n if (this.linkedSash) {\r\n this.linkedSash._onDidReset.fire();\r\n }\r\n this._onDidReset.fire();\r\n };\r\n Sash.prototype.onTouchStart = function (event) {\r\n var _this = this;\r\n EventHelper.stop(event);\r\n var listeners = [];\r\n var startX = event.pageX;\r\n var startY = event.pageY;\r\n var altKey = event.altKey;\r\n this._onDidStart.fire({\r\n startX: startX,\r\n currentX: startX,\r\n startY: startY,\r\n currentY: startY,\r\n altKey: altKey\r\n });\r\n listeners.push(addDisposableListener(this.el, EventType.Change, function (event) {\r\n if (types.isNumber(event.pageX) && types.isNumber(event.pageY)) {\r\n _this._onDidChange.fire({\r\n startX: startX,\r\n currentX: event.pageX,\r\n startY: startY,\r\n currentY: event.pageY,\r\n altKey: altKey\r\n });\r\n }\r\n }));\r\n listeners.push(addDisposableListener(this.el, EventType.End, function (event) {\r\n _this._onDidEnd.fire();\r\n dispose(listeners);\r\n }));\r\n };\r\n Sash.prototype.layout = function () {\r\n var size = isIPad ? 20 : 4;\r\n if (this.orientation === 0 /* VERTICAL */) {\r\n var verticalProvider = this.layoutProvider;\r\n this.el.style.left = verticalProvider.getVerticalSashLeft(this) - (size / 2) + 'px';\r\n if (verticalProvider.getVerticalSashTop) {\r\n this.el.style.top = verticalProvider.getVerticalSashTop(this) + 'px';\r\n }\r\n if (verticalProvider.getVerticalSashHeight) {\r\n this.el.style.height = verticalProvider.getVerticalSashHeight(this) + 'px';\r\n }\r\n }\r\n else {\r\n var horizontalProvider = this.layoutProvider;\r\n this.el.style.top = horizontalProvider.getHorizontalSashTop(this) - (size / 2) + 'px';\r\n if (horizontalProvider.getHorizontalSashLeft) {\r\n this.el.style.left = horizontalProvider.getHorizontalSashLeft(this) + 'px';\r\n }\r\n if (horizontalProvider.getHorizontalSashWidth) {\r\n this.el.style.width = horizontalProvider.getHorizontalSashWidth(this) + 'px';\r\n }\r\n }\r\n };\r\n Sash.prototype.hide = function () {\r\n this.hidden = true;\r\n this.el.style.display = 'none';\r\n this.el.setAttribute('aria-hidden', 'true');\r\n };\r\n Sash.prototype.onOrthogonalStartSashEnablementChange = function (state) {\r\n toggleClass(this.el, 'orthogonal-start', state !== 0 /* Disabled */);\r\n };\r\n Sash.prototype.onOrthogonalEndSashEnablementChange = function (state) {\r\n toggleClass(this.el, 'orthogonal-end', state !== 0 /* Disabled */);\r\n };\r\n Sash.prototype.getOrthogonalSash = function (e) {\r\n if (this.orientation === 0 /* VERTICAL */) {\r\n if (e.offsetY <= 4) {\r\n return this.orthogonalStartSash;\r\n }\r\n else if (e.offsetY >= this.el.clientHeight - 4) {\r\n return this.orthogonalEndSash;\r\n }\r\n }\r\n else {\r\n if (e.offsetX <= 4) {\r\n return this.orthogonalStartSash;\r\n }\r\n else if (e.offsetX >= this.el.clientWidth - 4) {\r\n return this.orthogonalEndSash;\r\n }\r\n }\r\n return undefined;\r\n };\r\n Sash.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this.el.remove();\r\n };\r\n return Sash;\r\n}(Disposable));\r\nexport { Sash };\r\n","var SyncDescriptor = /** @class */ (function () {\r\n function SyncDescriptor(ctor, staticArguments, supportsDelayedInstantiation) {\r\n if (staticArguments === void 0) { staticArguments = []; }\r\n if (supportsDelayedInstantiation === void 0) { supportsDelayedInstantiation = false; }\r\n this.ctor = ctor;\r\n this.staticArguments = staticArguments;\r\n this.supportsDelayedInstantiation = supportsDelayedInstantiation;\r\n }\r\n return SyncDescriptor;\r\n}());\r\nexport { SyncDescriptor };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { SyncDescriptor } from './descriptors.js';\r\nvar _registry = [];\r\nexport function registerSingleton(id, ctor, supportsDelayedInstantiation) {\r\n _registry.push([id, new SyncDescriptor(ctor, [], supportsDelayedInstantiation)]);\r\n}\r\nexport function getSingletonServiceDescriptors() {\r\n return _registry;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { EditorCommand, registerEditorCommand } from '../editorExtensions.js';\r\nimport { IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\r\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\r\nimport { LinkedList } from '../../../base/common/linkedList.js';\r\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\r\nvar IEditorCancellationTokens = createDecorator('IEditorCancelService');\r\nvar ctxCancellableOperation = new RawContextKey('cancellableOperation', false);\r\nregisterSingleton(IEditorCancellationTokens, /** @class */ (function () {\r\n function class_1() {\r\n this._tokens = new WeakMap();\r\n }\r\n class_1.prototype.add = function (editor, cts) {\r\n var data = this._tokens.get(editor);\r\n if (!data) {\r\n data = editor.invokeWithinContext(function (accessor) {\r\n var key = ctxCancellableOperation.bindTo(accessor.get(IContextKeyService));\r\n var tokens = new LinkedList();\r\n return { key: key, tokens: tokens };\r\n });\r\n this._tokens.set(editor, data);\r\n }\r\n var removeFn;\r\n data.key.set(true);\r\n removeFn = data.tokens.push(cts);\r\n return function () {\r\n // remove w/o cancellation\r\n if (removeFn) {\r\n removeFn();\r\n data.key.set(!data.tokens.isEmpty());\r\n removeFn = undefined;\r\n }\r\n };\r\n };\r\n class_1.prototype.cancel = function (editor) {\r\n var data = this._tokens.get(editor);\r\n if (!data) {\r\n return;\r\n }\r\n // remove with cancellation\r\n var cts = data.tokens.pop();\r\n if (cts) {\r\n cts.cancel();\r\n data.key.set(!data.tokens.isEmpty());\r\n }\r\n };\r\n return class_1;\r\n}()), true);\r\nvar EditorKeybindingCancellationTokenSource = /** @class */ (function (_super) {\r\n __extends(EditorKeybindingCancellationTokenSource, _super);\r\n function EditorKeybindingCancellationTokenSource(editor, parent) {\r\n var _this = _super.call(this, parent) || this;\r\n _this.editor = editor;\r\n _this._unregister = editor.invokeWithinContext(function (accessor) { return accessor.get(IEditorCancellationTokens).add(editor, _this); });\r\n return _this;\r\n }\r\n EditorKeybindingCancellationTokenSource.prototype.dispose = function () {\r\n this._unregister();\r\n _super.prototype.dispose.call(this);\r\n };\r\n return EditorKeybindingCancellationTokenSource;\r\n}(CancellationTokenSource));\r\nexport { EditorKeybindingCancellationTokenSource };\r\nregisterEditorCommand(new /** @class */ (function (_super) {\r\n __extends(class_2, _super);\r\n function class_2() {\r\n return _super.call(this, {\r\n id: 'editor.cancelOperation',\r\n kbOpts: {\r\n weight: 100 /* EditorContrib */,\r\n primary: 9 /* Escape */\r\n },\r\n precondition: ctxCancellableOperation\r\n }) || this;\r\n }\r\n class_2.prototype.runEditorCommand = function (accessor, editor) {\r\n accessor.get(IEditorCancellationTokens).cancel(editor);\r\n };\r\n return class_2;\r\n}(EditorCommand)));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\r\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\r\nimport { EditorKeybindingCancellationTokenSource } from './keybindingCancellation.js';\r\nvar EditorState = /** @class */ (function () {\r\n function EditorState(editor, flags) {\r\n this.flags = flags;\r\n if ((this.flags & 1 /* Value */) !== 0) {\r\n var model = editor.getModel();\r\n this.modelVersionId = model ? strings.format('{0}#{1}', model.uri.toString(), model.getVersionId()) : null;\r\n }\r\n else {\r\n this.modelVersionId = null;\r\n }\r\n if ((this.flags & 4 /* Position */) !== 0) {\r\n this.position = editor.getPosition();\r\n }\r\n else {\r\n this.position = null;\r\n }\r\n if ((this.flags & 2 /* Selection */) !== 0) {\r\n this.selection = editor.getSelection();\r\n }\r\n else {\r\n this.selection = null;\r\n }\r\n if ((this.flags & 8 /* Scroll */) !== 0) {\r\n this.scrollLeft = editor.getScrollLeft();\r\n this.scrollTop = editor.getScrollTop();\r\n }\r\n else {\r\n this.scrollLeft = -1;\r\n this.scrollTop = -1;\r\n }\r\n }\r\n EditorState.prototype._equals = function (other) {\r\n if (!(other instanceof EditorState)) {\r\n return false;\r\n }\r\n var state = other;\r\n if (this.modelVersionId !== state.modelVersionId) {\r\n return false;\r\n }\r\n if (this.scrollLeft !== state.scrollLeft || this.scrollTop !== state.scrollTop) {\r\n return false;\r\n }\r\n if (!this.position && state.position || this.position && !state.position || this.position && state.position && !this.position.equals(state.position)) {\r\n return false;\r\n }\r\n if (!this.selection && state.selection || this.selection && !state.selection || this.selection && state.selection && !this.selection.equalsRange(state.selection)) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n EditorState.prototype.validate = function (editor) {\r\n return this._equals(new EditorState(editor, this.flags));\r\n };\r\n return EditorState;\r\n}());\r\nexport { EditorState };\r\n/**\r\n * A cancellation token source that cancels when the editor changes as expressed\r\n * by the provided flags\r\n */\r\nvar EditorStateCancellationTokenSource = /** @class */ (function (_super) {\r\n __extends(EditorStateCancellationTokenSource, _super);\r\n function EditorStateCancellationTokenSource(editor, flags, parent) {\r\n var _this = _super.call(this, editor, parent) || this;\r\n _this.editor = editor;\r\n _this._listener = new DisposableStore();\r\n if (flags & 4 /* Position */) {\r\n _this._listener.add(editor.onDidChangeCursorPosition(function (_) { return _this.cancel(); }));\r\n }\r\n if (flags & 2 /* Selection */) {\r\n _this._listener.add(editor.onDidChangeCursorSelection(function (_) { return _this.cancel(); }));\r\n }\r\n if (flags & 8 /* Scroll */) {\r\n _this._listener.add(editor.onDidScrollChange(function (_) { return _this.cancel(); }));\r\n }\r\n if (flags & 1 /* Value */) {\r\n _this._listener.add(editor.onDidChangeModel(function (_) { return _this.cancel(); }));\r\n _this._listener.add(editor.onDidChangeModelContent(function (_) { return _this.cancel(); }));\r\n }\r\n return _this;\r\n }\r\n EditorStateCancellationTokenSource.prototype.dispose = function () {\r\n this._listener.dispose();\r\n _super.prototype.dispose.call(this);\r\n };\r\n return EditorStateCancellationTokenSource;\r\n}(EditorKeybindingCancellationTokenSource));\r\nexport { EditorStateCancellationTokenSource };\r\n/**\r\n * A cancellation token source that cancels when the provided model changes\r\n */\r\nvar TextModelCancellationTokenSource = /** @class */ (function (_super) {\r\n __extends(TextModelCancellationTokenSource, _super);\r\n function TextModelCancellationTokenSource(model, parent) {\r\n var _this = _super.call(this, parent) || this;\r\n _this._listener = model.onDidChangeContent(function () { return _this.cancel(); });\r\n return _this;\r\n }\r\n TextModelCancellationTokenSource.prototype.dispose = function () {\r\n this._listener.dispose();\r\n _super.prototype.dispose.call(this);\r\n };\r\n return TextModelCancellationTokenSource;\r\n}(CancellationTokenSource));\r\nexport { TextModelCancellationTokenSource };\r\nvar StableEditorScrollState = /** @class */ (function () {\r\n function StableEditorScrollState(_visiblePosition, _visiblePositionScrollDelta) {\r\n this._visiblePosition = _visiblePosition;\r\n this._visiblePositionScrollDelta = _visiblePositionScrollDelta;\r\n }\r\n StableEditorScrollState.capture = function (editor) {\r\n var visiblePosition = null;\r\n var visiblePositionScrollDelta = 0;\r\n if (editor.getScrollTop() !== 0) {\r\n var visibleRanges = editor.getVisibleRanges();\r\n if (visibleRanges.length > 0) {\r\n visiblePosition = visibleRanges[0].getStartPosition();\r\n var visiblePositionScrollTop = editor.getTopForPosition(visiblePosition.lineNumber, visiblePosition.column);\r\n visiblePositionScrollDelta = editor.getScrollTop() - visiblePositionScrollTop;\r\n }\r\n }\r\n return new StableEditorScrollState(visiblePosition, visiblePositionScrollDelta);\r\n };\r\n StableEditorScrollState.prototype.restore = function (editor) {\r\n if (this._visiblePosition) {\r\n var visiblePositionScrollTop = editor.getTopForPosition(this._visiblePosition.lineNumber, this._visiblePosition.column);\r\n editor.setScrollTop(visiblePositionScrollTop + this._visiblePositionScrollDelta);\r\n }\r\n };\r\n return StableEditorScrollState;\r\n}());\r\nexport { StableEditorScrollState };\r\n","// Common data transfers\r\nexport var DataTransfers = {\r\n /**\r\n * Application specific resource transfer type\r\n */\r\n RESOURCES: 'ResourceURLs',\r\n /**\r\n * Browser specific transfer type to download\r\n */\r\n DOWNLOAD_URL: 'DownloadURL',\r\n /**\r\n * Browser specific transfer type for files\r\n */\r\n FILES: 'Files',\r\n /**\r\n * Typically transfer type for copy/paste transfers.\r\n */\r\n TEXT: 'text/plain'\r\n};\r\nvar DragAndDropData = /** @class */ (function () {\r\n function DragAndDropData(data) {\r\n this.data = data;\r\n }\r\n DragAndDropData.prototype.update = function () {\r\n // noop\r\n };\r\n DragAndDropData.prototype.getData = function () {\r\n return this.data;\r\n };\r\n return DragAndDropData;\r\n}());\r\nexport { DragAndDropData };\r\nexport var StaticDND = {\r\n CurrentDragAndDropData: undefined\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './actionbar.css';\r\nimport * as platform from '../../../common/platform.js';\r\nimport * as nls from '../../../../nls.js';\r\nimport { Disposable, dispose } from '../../../common/lifecycle.js';\r\nimport { Action, ActionRunner } from '../../../common/actions.js';\r\nimport * as DOM from '../../dom.js';\r\nimport * as types from '../../../common/types.js';\r\nimport { EventType, Gesture } from '../../touch.js';\r\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\r\nimport { Emitter } from '../../../common/event.js';\r\nimport { DataTransfers } from '../../dnd.js';\r\nimport { isFirefox } from '../../browser.js';\r\nvar BaseActionViewItem = /** @class */ (function (_super) {\r\n __extends(BaseActionViewItem, _super);\r\n function BaseActionViewItem(context, action, options) {\r\n var _this = _super.call(this) || this;\r\n _this.options = options;\r\n _this._context = context || _this;\r\n _this._action = action;\r\n if (action instanceof Action) {\r\n _this._register(action.onDidChange(function (event) {\r\n if (!_this.element) {\r\n // we have not been rendered yet, so there\r\n // is no point in updating the UI\r\n return;\r\n }\r\n _this.handleActionChangeEvent(event);\r\n }));\r\n }\r\n return _this;\r\n }\r\n BaseActionViewItem.prototype.handleActionChangeEvent = function (event) {\r\n if (event.enabled !== undefined) {\r\n this.updateEnabled();\r\n }\r\n if (event.checked !== undefined) {\r\n this.updateChecked();\r\n }\r\n if (event.class !== undefined) {\r\n this.updateClass();\r\n }\r\n if (event.label !== undefined) {\r\n this.updateLabel();\r\n this.updateTooltip();\r\n }\r\n if (event.tooltip !== undefined) {\r\n this.updateTooltip();\r\n }\r\n };\r\n Object.defineProperty(BaseActionViewItem.prototype, \"actionRunner\", {\r\n get: function () {\r\n if (!this._actionRunner) {\r\n this._actionRunner = this._register(new ActionRunner());\r\n }\r\n return this._actionRunner;\r\n },\r\n set: function (actionRunner) {\r\n this._actionRunner = actionRunner;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n BaseActionViewItem.prototype.getAction = function () {\r\n return this._action;\r\n };\r\n BaseActionViewItem.prototype.isEnabled = function () {\r\n return this._action.enabled;\r\n };\r\n BaseActionViewItem.prototype.setActionContext = function (newContext) {\r\n this._context = newContext;\r\n };\r\n BaseActionViewItem.prototype.render = function (container) {\r\n var _this = this;\r\n var element = this.element = container;\r\n this._register(Gesture.addTarget(container));\r\n var enableDragging = this.options && this.options.draggable;\r\n if (enableDragging) {\r\n container.draggable = true;\r\n if (isFirefox) {\r\n // Firefox: requires to set a text data transfer to get going\r\n this._register(DOM.addDisposableListener(container, DOM.EventType.DRAG_START, function (e) { var _a; return (_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.setData(DataTransfers.TEXT, _this._action.label); }));\r\n }\r\n }\r\n this._register(DOM.addDisposableListener(element, EventType.Tap, function (e) { return _this.onClick(e); }));\r\n this._register(DOM.addDisposableListener(element, DOM.EventType.MOUSE_DOWN, function (e) {\r\n if (!enableDragging) {\r\n DOM.EventHelper.stop(e, true); // do not run when dragging is on because that would disable it\r\n }\r\n if (_this._action.enabled && e.button === 0) {\r\n DOM.addClass(element, 'active');\r\n }\r\n }));\r\n this._register(DOM.addDisposableListener(element, DOM.EventType.CLICK, function (e) {\r\n DOM.EventHelper.stop(e, true);\r\n // See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard\r\n // > Writing to the clipboard\r\n // > You can use the \"cut\" and \"copy\" commands without any special\r\n // permission if you are using them in a short-lived event handler\r\n // for a user action (for example, a click handler).\r\n // => to get the Copy and Paste context menu actions working on Firefox,\r\n // there should be no timeout here\r\n if (_this.options && _this.options.isMenu) {\r\n _this.onClick(e);\r\n }\r\n else {\r\n platform.setImmediate(function () { return _this.onClick(e); });\r\n }\r\n }));\r\n this._register(DOM.addDisposableListener(element, DOM.EventType.DBLCLICK, function (e) {\r\n DOM.EventHelper.stop(e, true);\r\n }));\r\n [DOM.EventType.MOUSE_UP, DOM.EventType.MOUSE_OUT].forEach(function (event) {\r\n _this._register(DOM.addDisposableListener(element, event, function (e) {\r\n DOM.EventHelper.stop(e);\r\n DOM.removeClass(element, 'active');\r\n }));\r\n });\r\n };\r\n BaseActionViewItem.prototype.onClick = function (event) {\r\n DOM.EventHelper.stop(event, true);\r\n var context;\r\n if (types.isUndefinedOrNull(this._context)) {\r\n context = event;\r\n }\r\n else {\r\n context = this._context;\r\n if (types.isObject(context)) {\r\n context.event = event;\r\n }\r\n }\r\n this.actionRunner.run(this._action, context);\r\n };\r\n BaseActionViewItem.prototype.focus = function () {\r\n if (this.element) {\r\n this.element.focus();\r\n DOM.addClass(this.element, 'focused');\r\n }\r\n };\r\n BaseActionViewItem.prototype.blur = function () {\r\n if (this.element) {\r\n this.element.blur();\r\n DOM.removeClass(this.element, 'focused');\r\n }\r\n };\r\n BaseActionViewItem.prototype.updateEnabled = function () {\r\n // implement in subclass\r\n };\r\n BaseActionViewItem.prototype.updateLabel = function () {\r\n // implement in subclass\r\n };\r\n BaseActionViewItem.prototype.updateTooltip = function () {\r\n // implement in subclass\r\n };\r\n BaseActionViewItem.prototype.updateClass = function () {\r\n // implement in subclass\r\n };\r\n BaseActionViewItem.prototype.updateChecked = function () {\r\n // implement in subclass\r\n };\r\n BaseActionViewItem.prototype.dispose = function () {\r\n if (this.element) {\r\n DOM.removeNode(this.element);\r\n this.element = undefined;\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n return BaseActionViewItem;\r\n}(Disposable));\r\nexport { BaseActionViewItem };\r\nvar Separator = /** @class */ (function (_super) {\r\n __extends(Separator, _super);\r\n function Separator(label) {\r\n var _this = _super.call(this, Separator.ID, label, label ? 'separator text' : 'separator') || this;\r\n _this.checked = false;\r\n _this.enabled = false;\r\n return _this;\r\n }\r\n Separator.ID = 'vs.actions.separator';\r\n return Separator;\r\n}(Action));\r\nexport { Separator };\r\nvar ActionViewItem = /** @class */ (function (_super) {\r\n __extends(ActionViewItem, _super);\r\n function ActionViewItem(context, action, options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, context, action, options) || this;\r\n _this.options = options;\r\n _this.options.icon = options.icon !== undefined ? options.icon : false;\r\n _this.options.label = options.label !== undefined ? options.label : true;\r\n _this.cssClass = '';\r\n return _this;\r\n }\r\n ActionViewItem.prototype.render = function (container) {\r\n _super.prototype.render.call(this, container);\r\n if (this.element) {\r\n this.label = DOM.append(this.element, DOM.$('a.action-label'));\r\n }\r\n if (this.label) {\r\n if (this._action.id === Separator.ID) {\r\n this.label.setAttribute('role', 'presentation'); // A separator is a presentation item\r\n }\r\n else {\r\n if (this.options.isMenu) {\r\n this.label.setAttribute('role', 'menuitem');\r\n }\r\n else {\r\n this.label.setAttribute('role', 'button');\r\n }\r\n }\r\n }\r\n if (this.options.label && this.options.keybinding && this.element) {\r\n DOM.append(this.element, DOM.$('span.keybinding')).textContent = this.options.keybinding;\r\n }\r\n this.updateClass();\r\n this.updateLabel();\r\n this.updateTooltip();\r\n this.updateEnabled();\r\n this.updateChecked();\r\n };\r\n ActionViewItem.prototype.focus = function () {\r\n _super.prototype.focus.call(this);\r\n if (this.label) {\r\n this.label.focus();\r\n }\r\n };\r\n ActionViewItem.prototype.updateLabel = function () {\r\n if (this.options.label && this.label) {\r\n this.label.textContent = this.getAction().label;\r\n }\r\n };\r\n ActionViewItem.prototype.updateTooltip = function () {\r\n var title = null;\r\n if (this.getAction().tooltip) {\r\n title = this.getAction().tooltip;\r\n }\r\n else if (!this.options.label && this.getAction().label && this.options.icon) {\r\n title = this.getAction().label;\r\n if (this.options.keybinding) {\r\n title = nls.localize({ key: 'titleLabel', comment: ['action title', 'action keybinding'] }, \"{0} ({1})\", title, this.options.keybinding);\r\n }\r\n }\r\n if (title && this.label) {\r\n this.label.title = title;\r\n }\r\n };\r\n ActionViewItem.prototype.updateClass = function () {\r\n if (this.cssClass && this.label) {\r\n DOM.removeClasses(this.label, this.cssClass);\r\n }\r\n if (this.options.icon) {\r\n this.cssClass = this.getAction().class;\r\n if (this.label) {\r\n DOM.addClass(this.label, 'codicon');\r\n if (this.cssClass) {\r\n DOM.addClasses(this.label, this.cssClass);\r\n }\r\n }\r\n this.updateEnabled();\r\n }\r\n else {\r\n if (this.label) {\r\n DOM.removeClass(this.label, 'codicon');\r\n }\r\n }\r\n };\r\n ActionViewItem.prototype.updateEnabled = function () {\r\n if (this.getAction().enabled) {\r\n if (this.label) {\r\n this.label.removeAttribute('aria-disabled');\r\n DOM.removeClass(this.label, 'disabled');\r\n this.label.tabIndex = 0;\r\n }\r\n if (this.element) {\r\n DOM.removeClass(this.element, 'disabled');\r\n }\r\n }\r\n else {\r\n if (this.label) {\r\n this.label.setAttribute('aria-disabled', 'true');\r\n DOM.addClass(this.label, 'disabled');\r\n DOM.removeTabIndexAndUpdateFocus(this.label);\r\n }\r\n if (this.element) {\r\n DOM.addClass(this.element, 'disabled');\r\n }\r\n }\r\n };\r\n ActionViewItem.prototype.updateChecked = function () {\r\n if (this.label) {\r\n if (this.getAction().checked) {\r\n DOM.addClass(this.label, 'checked');\r\n }\r\n else {\r\n DOM.removeClass(this.label, 'checked');\r\n }\r\n }\r\n };\r\n return ActionViewItem;\r\n}(BaseActionViewItem));\r\nexport { ActionViewItem };\r\nvar defaultOptions = {\r\n orientation: 0 /* HORIZONTAL */,\r\n context: null,\r\n triggerKeys: {\r\n keys: [3 /* Enter */, 10 /* Space */],\r\n keyDown: false\r\n }\r\n};\r\nvar ActionBar = /** @class */ (function (_super) {\r\n __extends(ActionBar, _super);\r\n function ActionBar(container, options) {\r\n if (options === void 0) { options = defaultOptions; }\r\n var _this = _super.call(this) || this;\r\n _this._onDidBlur = _this._register(new Emitter());\r\n _this.onDidBlur = _this._onDidBlur.event;\r\n _this._onDidCancel = _this._register(new Emitter());\r\n _this.onDidCancel = _this._onDidCancel.event;\r\n _this._onDidRun = _this._register(new Emitter());\r\n _this.onDidRun = _this._onDidRun.event;\r\n _this._onDidBeforeRun = _this._register(new Emitter());\r\n _this.onDidBeforeRun = _this._onDidBeforeRun.event;\r\n _this.options = options;\r\n _this._context = options.context;\r\n if (!_this.options.triggerKeys) {\r\n _this.options.triggerKeys = defaultOptions.triggerKeys;\r\n }\r\n if (_this.options.actionRunner) {\r\n _this._actionRunner = _this.options.actionRunner;\r\n }\r\n else {\r\n _this._actionRunner = new ActionRunner();\r\n _this._register(_this._actionRunner);\r\n }\r\n _this._register(_this._actionRunner.onDidRun(function (e) { return _this._onDidRun.fire(e); }));\r\n _this._register(_this._actionRunner.onDidBeforeRun(function (e) { return _this._onDidBeforeRun.fire(e); }));\r\n _this.viewItems = [];\r\n _this.focusedItem = undefined;\r\n _this.domNode = document.createElement('div');\r\n _this.domNode.className = 'monaco-action-bar';\r\n if (options.animated !== false) {\r\n DOM.addClass(_this.domNode, 'animated');\r\n }\r\n var previousKey;\r\n var nextKey;\r\n switch (_this.options.orientation) {\r\n case 0 /* HORIZONTAL */:\r\n previousKey = 15 /* LeftArrow */;\r\n nextKey = 17 /* RightArrow */;\r\n break;\r\n case 1 /* HORIZONTAL_REVERSE */:\r\n previousKey = 17 /* RightArrow */;\r\n nextKey = 15 /* LeftArrow */;\r\n _this.domNode.className += ' reverse';\r\n break;\r\n case 2 /* VERTICAL */:\r\n previousKey = 16 /* UpArrow */;\r\n nextKey = 18 /* DownArrow */;\r\n _this.domNode.className += ' vertical';\r\n break;\r\n case 3 /* VERTICAL_REVERSE */:\r\n previousKey = 18 /* DownArrow */;\r\n nextKey = 16 /* UpArrow */;\r\n _this.domNode.className += ' vertical reverse';\r\n break;\r\n }\r\n _this._register(DOM.addDisposableListener(_this.domNode, DOM.EventType.KEY_DOWN, function (e) {\r\n var event = new StandardKeyboardEvent(e);\r\n var eventHandled = true;\r\n if (event.equals(previousKey)) {\r\n _this.focusPrevious();\r\n }\r\n else if (event.equals(nextKey)) {\r\n _this.focusNext();\r\n }\r\n else if (event.equals(9 /* Escape */)) {\r\n _this.cancel();\r\n }\r\n else if (_this.isTriggerKeyEvent(event)) {\r\n // Staying out of the else branch even if not triggered\r\n if (_this.options.triggerKeys && _this.options.triggerKeys.keyDown) {\r\n _this.doTrigger(event);\r\n }\r\n }\r\n else {\r\n eventHandled = false;\r\n }\r\n if (eventHandled) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }));\r\n _this._register(DOM.addDisposableListener(_this.domNode, DOM.EventType.KEY_UP, function (e) {\r\n var event = new StandardKeyboardEvent(e);\r\n // Run action on Enter/Space\r\n if (_this.isTriggerKeyEvent(event)) {\r\n if (_this.options.triggerKeys && !_this.options.triggerKeys.keyDown) {\r\n _this.doTrigger(event);\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n // Recompute focused item\r\n else if (event.equals(2 /* Tab */) || event.equals(1024 /* Shift */ | 2 /* Tab */)) {\r\n _this.updateFocusedItem();\r\n }\r\n }));\r\n _this.focusTracker = _this._register(DOM.trackFocus(_this.domNode));\r\n _this._register(_this.focusTracker.onDidBlur(function () {\r\n if (document.activeElement === _this.domNode || !DOM.isAncestor(document.activeElement, _this.domNode)) {\r\n _this._onDidBlur.fire();\r\n _this.focusedItem = undefined;\r\n }\r\n }));\r\n _this._register(_this.focusTracker.onDidFocus(function () { return _this.updateFocusedItem(); }));\r\n _this.actionsList = document.createElement('ul');\r\n _this.actionsList.className = 'actions-container';\r\n _this.actionsList.setAttribute('role', 'toolbar');\r\n if (_this.options.ariaLabel) {\r\n _this.actionsList.setAttribute('aria-label', _this.options.ariaLabel);\r\n }\r\n _this.domNode.appendChild(_this.actionsList);\r\n container.appendChild(_this.domNode);\r\n return _this;\r\n }\r\n ActionBar.prototype.isTriggerKeyEvent = function (event) {\r\n var ret = false;\r\n if (this.options.triggerKeys) {\r\n this.options.triggerKeys.keys.forEach(function (keyCode) {\r\n ret = ret || event.equals(keyCode);\r\n });\r\n }\r\n return ret;\r\n };\r\n ActionBar.prototype.updateFocusedItem = function () {\r\n for (var i = 0; i < this.actionsList.children.length; i++) {\r\n var elem = this.actionsList.children[i];\r\n if (DOM.isAncestor(document.activeElement, elem)) {\r\n this.focusedItem = i;\r\n break;\r\n }\r\n }\r\n };\r\n Object.defineProperty(ActionBar.prototype, \"context\", {\r\n get: function () {\r\n return this._context;\r\n },\r\n set: function (context) {\r\n this._context = context;\r\n this.viewItems.forEach(function (i) { return i.setActionContext(context); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ActionBar.prototype.getContainer = function () {\r\n return this.domNode;\r\n };\r\n ActionBar.prototype.push = function (arg, options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n var actions = Array.isArray(arg) ? arg : [arg];\r\n var index = types.isNumber(options.index) ? options.index : null;\r\n actions.forEach(function (action) {\r\n var actionViewItemElement = document.createElement('li');\r\n actionViewItemElement.className = 'action-item';\r\n actionViewItemElement.setAttribute('role', 'presentation');\r\n // Prevent native context menu on actions\r\n _this._register(DOM.addDisposableListener(actionViewItemElement, DOM.EventType.CONTEXT_MENU, function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }));\r\n var item;\r\n if (_this.options.actionViewItemProvider) {\r\n item = _this.options.actionViewItemProvider(action);\r\n }\r\n if (!item) {\r\n item = new ActionViewItem(_this.context, action, options);\r\n }\r\n item.actionRunner = _this._actionRunner;\r\n item.setActionContext(_this.context);\r\n item.render(actionViewItemElement);\r\n if (index === null || index < 0 || index >= _this.actionsList.children.length) {\r\n _this.actionsList.appendChild(actionViewItemElement);\r\n _this.viewItems.push(item);\r\n }\r\n else {\r\n _this.actionsList.insertBefore(actionViewItemElement, _this.actionsList.children[index]);\r\n _this.viewItems.splice(index, 0, item);\r\n index++;\r\n }\r\n });\r\n };\r\n ActionBar.prototype.clear = function () {\r\n this.viewItems = dispose(this.viewItems);\r\n DOM.clearNode(this.actionsList);\r\n };\r\n ActionBar.prototype.isEmpty = function () {\r\n return this.viewItems.length === 0;\r\n };\r\n ActionBar.prototype.focus = function (arg) {\r\n var selectFirst = false;\r\n var index = undefined;\r\n if (arg === undefined) {\r\n selectFirst = true;\r\n }\r\n else if (typeof arg === 'number') {\r\n index = arg;\r\n }\r\n else if (typeof arg === 'boolean') {\r\n selectFirst = arg;\r\n }\r\n if (selectFirst && typeof this.focusedItem === 'undefined') {\r\n // Focus the first enabled item\r\n this.focusedItem = this.viewItems.length - 1;\r\n this.focusNext();\r\n }\r\n else {\r\n if (index !== undefined) {\r\n this.focusedItem = index;\r\n }\r\n this.updateFocus();\r\n }\r\n };\r\n ActionBar.prototype.focusNext = function () {\r\n if (typeof this.focusedItem === 'undefined') {\r\n this.focusedItem = this.viewItems.length - 1;\r\n }\r\n var startIndex = this.focusedItem;\r\n var item;\r\n do {\r\n this.focusedItem = (this.focusedItem + 1) % this.viewItems.length;\r\n item = this.viewItems[this.focusedItem];\r\n } while (this.focusedItem !== startIndex && !item.isEnabled());\r\n if (this.focusedItem === startIndex && !item.isEnabled()) {\r\n this.focusedItem = undefined;\r\n }\r\n this.updateFocus();\r\n };\r\n ActionBar.prototype.focusPrevious = function () {\r\n if (typeof this.focusedItem === 'undefined') {\r\n this.focusedItem = 0;\r\n }\r\n var startIndex = this.focusedItem;\r\n var item;\r\n do {\r\n this.focusedItem = this.focusedItem - 1;\r\n if (this.focusedItem < 0) {\r\n this.focusedItem = this.viewItems.length - 1;\r\n }\r\n item = this.viewItems[this.focusedItem];\r\n } while (this.focusedItem !== startIndex && !item.isEnabled());\r\n if (this.focusedItem === startIndex && !item.isEnabled()) {\r\n this.focusedItem = undefined;\r\n }\r\n this.updateFocus(true);\r\n };\r\n ActionBar.prototype.updateFocus = function (fromRight, preventScroll) {\r\n if (typeof this.focusedItem === 'undefined') {\r\n this.actionsList.focus({ preventScroll: preventScroll });\r\n }\r\n for (var i = 0; i < this.viewItems.length; i++) {\r\n var item = this.viewItems[i];\r\n var actionViewItem = item;\r\n if (i === this.focusedItem) {\r\n if (types.isFunction(actionViewItem.isEnabled)) {\r\n if (actionViewItem.isEnabled() && types.isFunction(actionViewItem.focus)) {\r\n actionViewItem.focus(fromRight);\r\n }\r\n else {\r\n this.actionsList.focus({ preventScroll: preventScroll });\r\n }\r\n }\r\n }\r\n else {\r\n if (types.isFunction(actionViewItem.blur)) {\r\n actionViewItem.blur();\r\n }\r\n }\r\n }\r\n };\r\n ActionBar.prototype.doTrigger = function (event) {\r\n if (typeof this.focusedItem === 'undefined') {\r\n return; //nothing to focus\r\n }\r\n // trigger action\r\n var actionViewItem = this.viewItems[this.focusedItem];\r\n if (actionViewItem instanceof BaseActionViewItem) {\r\n var context = (actionViewItem._context === null || actionViewItem._context === undefined) ? event : actionViewItem._context;\r\n this.run(actionViewItem._action, context);\r\n }\r\n };\r\n ActionBar.prototype.cancel = function () {\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur(); // remove focus from focused action\r\n }\r\n this._onDidCancel.fire();\r\n };\r\n ActionBar.prototype.run = function (action, context) {\r\n return this._actionRunner.run(action, context);\r\n };\r\n ActionBar.prototype.dispose = function () {\r\n dispose(this.viewItems);\r\n this.viewItems = [];\r\n DOM.removeNode(this.getContainer());\r\n _super.prototype.dispose.call(this);\r\n };\r\n return ActionBar;\r\n}(Disposable));\r\nexport { ActionBar };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './media/diffReview.css';\r\nimport * as nls from '../../../nls.js';\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\r\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\r\nimport { DomScrollableElement } from '../../../base/browser/ui/scrollbar/scrollableElement.js';\r\nimport { Action } from '../../../base/common/actions.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { Configuration } from '../config/configuration.js';\r\nimport { EditorAction, registerEditorAction } from '../editorExtensions.js';\r\nimport { ICodeEditorService } from '../services/codeEditorService.js';\r\nimport { EditorFontLigatures } from '../../common/config/editorOptions.js';\r\nimport { LineTokens } from '../../common/core/lineTokens.js';\r\nimport { Position } from '../../common/core/position.js';\r\nimport { editorLineNumbers } from '../../common/view/editorColorRegistry.js';\r\nimport { RenderLineInput, renderViewLine2 as renderViewLine } from '../../common/viewLayout/viewLineRenderer.js';\r\nimport { ViewLineRenderingData } from '../../common/viewModel/viewModel.js';\r\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\r\nimport { scrollbarShadow } from '../../../platform/theme/common/colorRegistry.js';\r\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\r\nvar DIFF_LINES_PADDING = 3;\r\nvar DiffEntry = /** @class */ (function () {\r\n function DiffEntry(originalLineStart, originalLineEnd, modifiedLineStart, modifiedLineEnd) {\r\n this.originalLineStart = originalLineStart;\r\n this.originalLineEnd = originalLineEnd;\r\n this.modifiedLineStart = modifiedLineStart;\r\n this.modifiedLineEnd = modifiedLineEnd;\r\n }\r\n DiffEntry.prototype.getType = function () {\r\n if (this.originalLineStart === 0) {\r\n return 1 /* Insert */;\r\n }\r\n if (this.modifiedLineStart === 0) {\r\n return 2 /* Delete */;\r\n }\r\n return 0 /* Equal */;\r\n };\r\n return DiffEntry;\r\n}());\r\nvar Diff = /** @class */ (function () {\r\n function Diff(entries) {\r\n this.entries = entries;\r\n }\r\n return Diff;\r\n}());\r\nvar DiffReview = /** @class */ (function (_super) {\r\n __extends(DiffReview, _super);\r\n function DiffReview(diffEditor) {\r\n var _this = _super.call(this) || this;\r\n _this._width = 0;\r\n _this._diffEditor = diffEditor;\r\n _this._isVisible = false;\r\n _this.shadow = createFastDomNode(document.createElement('div'));\r\n _this.shadow.setClassName('diff-review-shadow');\r\n _this.actionBarContainer = createFastDomNode(document.createElement('div'));\r\n _this.actionBarContainer.setClassName('diff-review-actions');\r\n _this._actionBar = _this._register(new ActionBar(_this.actionBarContainer.domNode));\r\n _this._actionBar.push(new Action('diffreview.close', nls.localize('label.close', \"Close\"), 'close-diff-review', true, function () {\r\n _this.hide();\r\n return Promise.resolve(null);\r\n }), { label: false, icon: true });\r\n _this.domNode = createFastDomNode(document.createElement('div'));\r\n _this.domNode.setClassName('diff-review monaco-editor-background');\r\n _this._content = createFastDomNode(document.createElement('div'));\r\n _this._content.setClassName('diff-review-content');\r\n _this.scrollbar = _this._register(new DomScrollableElement(_this._content.domNode, {}));\r\n _this.domNode.domNode.appendChild(_this.scrollbar.getDomNode());\r\n _this._register(diffEditor.onDidUpdateDiff(function () {\r\n if (!_this._isVisible) {\r\n return;\r\n }\r\n _this._diffs = _this._compute();\r\n _this._render();\r\n }));\r\n _this._register(diffEditor.getModifiedEditor().onDidChangeCursorPosition(function () {\r\n if (!_this._isVisible) {\r\n return;\r\n }\r\n _this._render();\r\n }));\r\n _this._register(diffEditor.getOriginalEditor().onDidFocusEditorWidget(function () {\r\n if (_this._isVisible) {\r\n _this.hide();\r\n }\r\n }));\r\n _this._register(diffEditor.getModifiedEditor().onDidFocusEditorWidget(function () {\r\n if (_this._isVisible) {\r\n _this.hide();\r\n }\r\n }));\r\n _this._register(dom.addStandardDisposableListener(_this.domNode.domNode, 'click', function (e) {\r\n e.preventDefault();\r\n var row = dom.findParentWithClass(e.target, 'diff-review-row');\r\n if (row) {\r\n _this._goToRow(row);\r\n }\r\n }));\r\n _this._register(dom.addStandardDisposableListener(_this.domNode.domNode, 'keydown', function (e) {\r\n if (e.equals(18 /* DownArrow */)\r\n || e.equals(2048 /* CtrlCmd */ | 18 /* DownArrow */)\r\n || e.equals(512 /* Alt */ | 18 /* DownArrow */)) {\r\n e.preventDefault();\r\n _this._goToRow(_this._getNextRow());\r\n }\r\n if (e.equals(16 /* UpArrow */)\r\n || e.equals(2048 /* CtrlCmd */ | 16 /* UpArrow */)\r\n || e.equals(512 /* Alt */ | 16 /* UpArrow */)) {\r\n e.preventDefault();\r\n _this._goToRow(_this._getPrevRow());\r\n }\r\n if (e.equals(9 /* Escape */)\r\n || e.equals(2048 /* CtrlCmd */ | 9 /* Escape */)\r\n || e.equals(512 /* Alt */ | 9 /* Escape */)\r\n || e.equals(1024 /* Shift */ | 9 /* Escape */)) {\r\n e.preventDefault();\r\n _this.hide();\r\n }\r\n if (e.equals(10 /* Space */)\r\n || e.equals(3 /* Enter */)) {\r\n e.preventDefault();\r\n _this.accept();\r\n }\r\n }));\r\n _this._diffs = [];\r\n _this._currentDiff = null;\r\n return _this;\r\n }\r\n DiffReview.prototype.prev = function () {\r\n var index = 0;\r\n if (!this._isVisible) {\r\n this._diffs = this._compute();\r\n }\r\n if (this._isVisible) {\r\n var currentIndex = -1;\r\n for (var i = 0, len = this._diffs.length; i < len; i++) {\r\n if (this._diffs[i] === this._currentDiff) {\r\n currentIndex = i;\r\n break;\r\n }\r\n }\r\n index = (this._diffs.length + currentIndex - 1);\r\n }\r\n else {\r\n index = this._findDiffIndex(this._diffEditor.getPosition());\r\n }\r\n if (this._diffs.length === 0) {\r\n // Nothing to do\r\n return;\r\n }\r\n index = index % this._diffs.length;\r\n this._diffEditor.setPosition(new Position(this._diffs[index].entries[0].modifiedLineStart, 1));\r\n this._isVisible = true;\r\n this._diffEditor.doLayout();\r\n this._render();\r\n this._goToRow(this._getNextRow());\r\n };\r\n DiffReview.prototype.next = function () {\r\n var index = 0;\r\n if (!this._isVisible) {\r\n this._diffs = this._compute();\r\n }\r\n if (this._isVisible) {\r\n var currentIndex = -1;\r\n for (var i = 0, len = this._diffs.length; i < len; i++) {\r\n if (this._diffs[i] === this._currentDiff) {\r\n currentIndex = i;\r\n break;\r\n }\r\n }\r\n index = (currentIndex + 1);\r\n }\r\n else {\r\n index = this._findDiffIndex(this._diffEditor.getPosition());\r\n }\r\n if (this._diffs.length === 0) {\r\n // Nothing to do\r\n return;\r\n }\r\n index = index % this._diffs.length;\r\n this._diffEditor.setPosition(new Position(this._diffs[index].entries[0].modifiedLineStart, 1));\r\n this._isVisible = true;\r\n this._diffEditor.doLayout();\r\n this._render();\r\n this._goToRow(this._getNextRow());\r\n };\r\n DiffReview.prototype.accept = function () {\r\n var jumpToLineNumber = -1;\r\n var current = this._getCurrentFocusedRow();\r\n if (current) {\r\n var lineNumber = parseInt(current.getAttribute('data-line'), 10);\r\n if (!isNaN(lineNumber)) {\r\n jumpToLineNumber = lineNumber;\r\n }\r\n }\r\n this.hide();\r\n if (jumpToLineNumber !== -1) {\r\n this._diffEditor.setPosition(new Position(jumpToLineNumber, 1));\r\n this._diffEditor.revealPosition(new Position(jumpToLineNumber, 1), 1 /* Immediate */);\r\n }\r\n };\r\n DiffReview.prototype.hide = function () {\r\n this._isVisible = false;\r\n this._diffEditor.focus();\r\n this._diffEditor.doLayout();\r\n this._render();\r\n };\r\n DiffReview.prototype._getPrevRow = function () {\r\n var current = this._getCurrentFocusedRow();\r\n if (!current) {\r\n return this._getFirstRow();\r\n }\r\n if (current.previousElementSibling) {\r\n return current.previousElementSibling;\r\n }\r\n return current;\r\n };\r\n DiffReview.prototype._getNextRow = function () {\r\n var current = this._getCurrentFocusedRow();\r\n if (!current) {\r\n return this._getFirstRow();\r\n }\r\n if (current.nextElementSibling) {\r\n return current.nextElementSibling;\r\n }\r\n return current;\r\n };\r\n DiffReview.prototype._getFirstRow = function () {\r\n return this.domNode.domNode.querySelector('.diff-review-row');\r\n };\r\n DiffReview.prototype._getCurrentFocusedRow = function () {\r\n var result = document.activeElement;\r\n if (result && /diff-review-row/.test(result.className)) {\r\n return result;\r\n }\r\n return null;\r\n };\r\n DiffReview.prototype._goToRow = function (row) {\r\n var prev = this._getCurrentFocusedRow();\r\n row.tabIndex = 0;\r\n row.focus();\r\n if (prev && prev !== row) {\r\n prev.tabIndex = -1;\r\n }\r\n this.scrollbar.scanDomNode();\r\n };\r\n DiffReview.prototype.isVisible = function () {\r\n return this._isVisible;\r\n };\r\n DiffReview.prototype.layout = function (top, width, height) {\r\n this._width = width;\r\n this.shadow.setTop(top - 6);\r\n this.shadow.setWidth(width);\r\n this.shadow.setHeight(this._isVisible ? 6 : 0);\r\n this.domNode.setTop(top);\r\n this.domNode.setWidth(width);\r\n this.domNode.setHeight(height);\r\n this._content.setHeight(height);\r\n this._content.setWidth(width);\r\n if (this._isVisible) {\r\n this.actionBarContainer.setAttribute('aria-hidden', 'false');\r\n this.actionBarContainer.setDisplay('block');\r\n }\r\n else {\r\n this.actionBarContainer.setAttribute('aria-hidden', 'true');\r\n this.actionBarContainer.setDisplay('none');\r\n }\r\n };\r\n DiffReview.prototype._compute = function () {\r\n var lineChanges = this._diffEditor.getLineChanges();\r\n if (!lineChanges || lineChanges.length === 0) {\r\n return [];\r\n }\r\n var originalModel = this._diffEditor.getOriginalEditor().getModel();\r\n var modifiedModel = this._diffEditor.getModifiedEditor().getModel();\r\n if (!originalModel || !modifiedModel) {\r\n return [];\r\n }\r\n return DiffReview._mergeAdjacent(lineChanges, originalModel.getLineCount(), modifiedModel.getLineCount());\r\n };\r\n DiffReview._mergeAdjacent = function (lineChanges, originalLineCount, modifiedLineCount) {\r\n if (!lineChanges || lineChanges.length === 0) {\r\n return [];\r\n }\r\n var diffs = [], diffsLength = 0;\r\n for (var i = 0, len = lineChanges.length; i < len; i++) {\r\n var lineChange = lineChanges[i];\r\n var originalStart = lineChange.originalStartLineNumber;\r\n var originalEnd = lineChange.originalEndLineNumber;\r\n var modifiedStart = lineChange.modifiedStartLineNumber;\r\n var modifiedEnd = lineChange.modifiedEndLineNumber;\r\n var r_1 = [], rLength_1 = 0;\r\n // Emit before anchors\r\n {\r\n var originalEqualAbove = (originalEnd === 0 ? originalStart : originalStart - 1);\r\n var modifiedEqualAbove = (modifiedEnd === 0 ? modifiedStart : modifiedStart - 1);\r\n // Make sure we don't step into the previous diff\r\n var minOriginal = 1;\r\n var minModified = 1;\r\n if (i > 0) {\r\n var prevLineChange = lineChanges[i - 1];\r\n if (prevLineChange.originalEndLineNumber === 0) {\r\n minOriginal = prevLineChange.originalStartLineNumber + 1;\r\n }\r\n else {\r\n minOriginal = prevLineChange.originalEndLineNumber + 1;\r\n }\r\n if (prevLineChange.modifiedEndLineNumber === 0) {\r\n minModified = prevLineChange.modifiedStartLineNumber + 1;\r\n }\r\n else {\r\n minModified = prevLineChange.modifiedEndLineNumber + 1;\r\n }\r\n }\r\n var fromOriginal = originalEqualAbove - DIFF_LINES_PADDING + 1;\r\n var fromModified = modifiedEqualAbove - DIFF_LINES_PADDING + 1;\r\n if (fromOriginal < minOriginal) {\r\n var delta = minOriginal - fromOriginal;\r\n fromOriginal = fromOriginal + delta;\r\n fromModified = fromModified + delta;\r\n }\r\n if (fromModified < minModified) {\r\n var delta = minModified - fromModified;\r\n fromOriginal = fromOriginal + delta;\r\n fromModified = fromModified + delta;\r\n }\r\n r_1[rLength_1++] = new DiffEntry(fromOriginal, originalEqualAbove, fromModified, modifiedEqualAbove);\r\n }\r\n // Emit deleted lines\r\n {\r\n if (originalEnd !== 0) {\r\n r_1[rLength_1++] = new DiffEntry(originalStart, originalEnd, 0, 0);\r\n }\r\n }\r\n // Emit inserted lines\r\n {\r\n if (modifiedEnd !== 0) {\r\n r_1[rLength_1++] = new DiffEntry(0, 0, modifiedStart, modifiedEnd);\r\n }\r\n }\r\n // Emit after anchors\r\n {\r\n var originalEqualBelow = (originalEnd === 0 ? originalStart + 1 : originalEnd + 1);\r\n var modifiedEqualBelow = (modifiedEnd === 0 ? modifiedStart + 1 : modifiedEnd + 1);\r\n // Make sure we don't step into the next diff\r\n var maxOriginal = originalLineCount;\r\n var maxModified = modifiedLineCount;\r\n if (i + 1 < len) {\r\n var nextLineChange = lineChanges[i + 1];\r\n if (nextLineChange.originalEndLineNumber === 0) {\r\n maxOriginal = nextLineChange.originalStartLineNumber;\r\n }\r\n else {\r\n maxOriginal = nextLineChange.originalStartLineNumber - 1;\r\n }\r\n if (nextLineChange.modifiedEndLineNumber === 0) {\r\n maxModified = nextLineChange.modifiedStartLineNumber;\r\n }\r\n else {\r\n maxModified = nextLineChange.modifiedStartLineNumber - 1;\r\n }\r\n }\r\n var toOriginal = originalEqualBelow + DIFF_LINES_PADDING - 1;\r\n var toModified = modifiedEqualBelow + DIFF_LINES_PADDING - 1;\r\n if (toOriginal > maxOriginal) {\r\n var delta = maxOriginal - toOriginal;\r\n toOriginal = toOriginal + delta;\r\n toModified = toModified + delta;\r\n }\r\n if (toModified > maxModified) {\r\n var delta = maxModified - toModified;\r\n toOriginal = toOriginal + delta;\r\n toModified = toModified + delta;\r\n }\r\n r_1[rLength_1++] = new DiffEntry(originalEqualBelow, toOriginal, modifiedEqualBelow, toModified);\r\n }\r\n diffs[diffsLength++] = new Diff(r_1);\r\n }\r\n // Merge adjacent diffs\r\n var curr = diffs[0].entries;\r\n var r = [], rLength = 0;\r\n for (var i = 1, len = diffs.length; i < len; i++) {\r\n var thisDiff = diffs[i].entries;\r\n var currLast = curr[curr.length - 1];\r\n var thisFirst = thisDiff[0];\r\n if (currLast.getType() === 0 /* Equal */\r\n && thisFirst.getType() === 0 /* Equal */\r\n && thisFirst.originalLineStart <= currLast.originalLineEnd) {\r\n // We are dealing with equal lines that overlap\r\n curr[curr.length - 1] = new DiffEntry(currLast.originalLineStart, thisFirst.originalLineEnd, currLast.modifiedLineStart, thisFirst.modifiedLineEnd);\r\n curr = curr.concat(thisDiff.slice(1));\r\n continue;\r\n }\r\n r[rLength++] = new Diff(curr);\r\n curr = thisDiff;\r\n }\r\n r[rLength++] = new Diff(curr);\r\n return r;\r\n };\r\n DiffReview.prototype._findDiffIndex = function (pos) {\r\n var lineNumber = pos.lineNumber;\r\n for (var i = 0, len = this._diffs.length; i < len; i++) {\r\n var diff = this._diffs[i].entries;\r\n var lastModifiedLine = diff[diff.length - 1].modifiedLineEnd;\r\n if (lineNumber <= lastModifiedLine) {\r\n return i;\r\n }\r\n }\r\n return 0;\r\n };\r\n DiffReview.prototype._render = function () {\r\n var originalOptions = this._diffEditor.getOriginalEditor().getOptions();\r\n var modifiedOptions = this._diffEditor.getModifiedEditor().getOptions();\r\n var originalModel = this._diffEditor.getOriginalEditor().getModel();\r\n var modifiedModel = this._diffEditor.getModifiedEditor().getModel();\r\n var originalModelOpts = originalModel.getOptions();\r\n var modifiedModelOpts = modifiedModel.getOptions();\r\n if (!this._isVisible || !originalModel || !modifiedModel) {\r\n dom.clearNode(this._content.domNode);\r\n this._currentDiff = null;\r\n this.scrollbar.scanDomNode();\r\n return;\r\n }\r\n var diffIndex = this._findDiffIndex(this._diffEditor.getPosition());\r\n if (this._diffs[diffIndex] === this._currentDiff) {\r\n return;\r\n }\r\n this._currentDiff = this._diffs[diffIndex];\r\n var diffs = this._diffs[diffIndex].entries;\r\n var container = document.createElement('div');\r\n container.className = 'diff-review-table';\r\n container.setAttribute('role', 'list');\r\n Configuration.applyFontInfoSlow(container, modifiedOptions.get(32 /* fontInfo */));\r\n var minOriginalLine = 0;\r\n var maxOriginalLine = 0;\r\n var minModifiedLine = 0;\r\n var maxModifiedLine = 0;\r\n for (var i = 0, len = diffs.length; i < len; i++) {\r\n var diffEntry = diffs[i];\r\n var originalLineStart = diffEntry.originalLineStart;\r\n var originalLineEnd = diffEntry.originalLineEnd;\r\n var modifiedLineStart = diffEntry.modifiedLineStart;\r\n var modifiedLineEnd = diffEntry.modifiedLineEnd;\r\n if (originalLineStart !== 0 && ((minOriginalLine === 0 || originalLineStart < minOriginalLine))) {\r\n minOriginalLine = originalLineStart;\r\n }\r\n if (originalLineEnd !== 0 && ((maxOriginalLine === 0 || originalLineEnd > maxOriginalLine))) {\r\n maxOriginalLine = originalLineEnd;\r\n }\r\n if (modifiedLineStart !== 0 && ((minModifiedLine === 0 || modifiedLineStart < minModifiedLine))) {\r\n minModifiedLine = modifiedLineStart;\r\n }\r\n if (modifiedLineEnd !== 0 && ((maxModifiedLine === 0 || modifiedLineEnd > maxModifiedLine))) {\r\n maxModifiedLine = modifiedLineEnd;\r\n }\r\n }\r\n var header = document.createElement('div');\r\n header.className = 'diff-review-row';\r\n var cell = document.createElement('div');\r\n cell.className = 'diff-review-cell diff-review-summary';\r\n var originalChangedLinesCnt = maxOriginalLine - minOriginalLine + 1;\r\n var modifiedChangedLinesCnt = maxModifiedLine - minModifiedLine + 1;\r\n cell.appendChild(document.createTextNode(diffIndex + 1 + \"/\" + this._diffs.length + \": @@ -\" + minOriginalLine + \",\" + originalChangedLinesCnt + \" +\" + minModifiedLine + \",\" + modifiedChangedLinesCnt + \" @@\"));\r\n header.setAttribute('data-line', String(minModifiedLine));\r\n var getAriaLines = function (lines) {\r\n if (lines === 0) {\r\n return nls.localize('no_lines', \"no lines\");\r\n }\r\n else if (lines === 1) {\r\n return nls.localize('one_line', \"1 line\");\r\n }\r\n else {\r\n return nls.localize('more_lines', \"{0} lines\", lines);\r\n }\r\n };\r\n var originalChangedLinesCntAria = getAriaLines(originalChangedLinesCnt);\r\n var modifiedChangedLinesCntAria = getAriaLines(modifiedChangedLinesCnt);\r\n header.setAttribute('aria-label', nls.localize({\r\n key: 'header',\r\n comment: [\r\n 'This is the ARIA label for a git diff header.',\r\n 'A git diff header looks like this: @@ -154,12 +159,39 @@.',\r\n 'That encodes that at original line 154 (which is now line 159), 12 lines were removed/changed with 39 lines.',\r\n 'Variables 0 and 1 refer to the diff index out of total number of diffs.',\r\n 'Variables 2 and 4 will be numbers (a line number).',\r\n 'Variables 3 and 5 will be \"no lines\", \"1 line\" or \"X lines\", localized separately.'\r\n ]\r\n }, \"Difference {0} of {1}: original {2}, {3}, modified {4}, {5}\", (diffIndex + 1), this._diffs.length, minOriginalLine, originalChangedLinesCntAria, minModifiedLine, modifiedChangedLinesCntAria));\r\n header.appendChild(cell);\r\n // @@ -504,7 +517,7 @@\r\n header.setAttribute('role', 'listitem');\r\n container.appendChild(header);\r\n var modLine = minModifiedLine;\r\n for (var i = 0, len = diffs.length; i < len; i++) {\r\n var diffEntry = diffs[i];\r\n DiffReview._renderSection(container, diffEntry, modLine, this._width, originalOptions, originalModel, originalModelOpts, modifiedOptions, modifiedModel, modifiedModelOpts);\r\n if (diffEntry.modifiedLineStart !== 0) {\r\n modLine = diffEntry.modifiedLineEnd;\r\n }\r\n }\r\n dom.clearNode(this._content.domNode);\r\n this._content.domNode.appendChild(container);\r\n this.scrollbar.scanDomNode();\r\n };\r\n DiffReview._renderSection = function (dest, diffEntry, modLine, width, originalOptions, originalModel, originalModelOpts, modifiedOptions, modifiedModel, modifiedModelOpts) {\r\n var type = diffEntry.getType();\r\n var rowClassName = 'diff-review-row';\r\n var lineNumbersExtraClassName = '';\r\n var spacerClassName = 'diff-review-spacer';\r\n switch (type) {\r\n case 1 /* Insert */:\r\n rowClassName = 'diff-review-row line-insert';\r\n lineNumbersExtraClassName = ' char-insert';\r\n spacerClassName = 'diff-review-spacer insert-sign';\r\n break;\r\n case 2 /* Delete */:\r\n rowClassName = 'diff-review-row line-delete';\r\n lineNumbersExtraClassName = ' char-delete';\r\n spacerClassName = 'diff-review-spacer delete-sign';\r\n break;\r\n }\r\n var originalLineStart = diffEntry.originalLineStart;\r\n var originalLineEnd = diffEntry.originalLineEnd;\r\n var modifiedLineStart = diffEntry.modifiedLineStart;\r\n var modifiedLineEnd = diffEntry.modifiedLineEnd;\r\n var cnt = Math.max(modifiedLineEnd - modifiedLineStart, originalLineEnd - originalLineStart);\r\n var originalLayoutInfo = originalOptions.get(103 /* layoutInfo */);\r\n var originalLineNumbersWidth = originalLayoutInfo.glyphMarginWidth + originalLayoutInfo.lineNumbersWidth;\r\n var modifiedLayoutInfo = modifiedOptions.get(103 /* layoutInfo */);\r\n var modifiedLineNumbersWidth = 10 + modifiedLayoutInfo.glyphMarginWidth + modifiedLayoutInfo.lineNumbersWidth;\r\n for (var i = 0; i <= cnt; i++) {\r\n var originalLine = (originalLineStart === 0 ? 0 : originalLineStart + i);\r\n var modifiedLine = (modifiedLineStart === 0 ? 0 : modifiedLineStart + i);\r\n var row = document.createElement('div');\r\n row.style.minWidth = width + 'px';\r\n row.className = rowClassName;\r\n row.setAttribute('role', 'listitem');\r\n if (modifiedLine !== 0) {\r\n modLine = modifiedLine;\r\n }\r\n row.setAttribute('data-line', String(modLine));\r\n var cell = document.createElement('div');\r\n cell.className = 'diff-review-cell';\r\n row.appendChild(cell);\r\n var originalLineNumber = document.createElement('span');\r\n originalLineNumber.style.width = (originalLineNumbersWidth + 'px');\r\n originalLineNumber.style.minWidth = (originalLineNumbersWidth + 'px');\r\n originalLineNumber.className = 'diff-review-line-number' + lineNumbersExtraClassName;\r\n if (originalLine !== 0) {\r\n originalLineNumber.appendChild(document.createTextNode(String(originalLine)));\r\n }\r\n else {\r\n originalLineNumber.innerHTML = ' ';\r\n }\r\n cell.appendChild(originalLineNumber);\r\n var modifiedLineNumber = document.createElement('span');\r\n modifiedLineNumber.style.width = (modifiedLineNumbersWidth + 'px');\r\n modifiedLineNumber.style.minWidth = (modifiedLineNumbersWidth + 'px');\r\n modifiedLineNumber.style.paddingRight = '10px';\r\n modifiedLineNumber.className = 'diff-review-line-number' + lineNumbersExtraClassName;\r\n if (modifiedLine !== 0) {\r\n modifiedLineNumber.appendChild(document.createTextNode(String(modifiedLine)));\r\n }\r\n else {\r\n modifiedLineNumber.innerHTML = ' ';\r\n }\r\n cell.appendChild(modifiedLineNumber);\r\n var spacer = document.createElement('span');\r\n spacer.className = spacerClassName;\r\n spacer.innerHTML = '  ';\r\n cell.appendChild(spacer);\r\n var lineContent = void 0;\r\n if (modifiedLine !== 0) {\r\n cell.insertAdjacentHTML('beforeend', this._renderLine(modifiedModel, modifiedOptions, modifiedModelOpts.tabSize, modifiedLine));\r\n lineContent = modifiedModel.getLineContent(modifiedLine);\r\n }\r\n else {\r\n cell.insertAdjacentHTML('beforeend', this._renderLine(originalModel, originalOptions, originalModelOpts.tabSize, originalLine));\r\n lineContent = originalModel.getLineContent(originalLine);\r\n }\r\n if (lineContent.length === 0) {\r\n lineContent = nls.localize('blankLine', \"blank\");\r\n }\r\n var ariaLabel = '';\r\n switch (type) {\r\n case 0 /* Equal */:\r\n ariaLabel = nls.localize('equalLine', \"original {0}, modified {1}: {2}\", originalLine, modifiedLine, lineContent);\r\n break;\r\n case 1 /* Insert */:\r\n ariaLabel = nls.localize('insertLine', \"+ modified {0}: {1}\", modifiedLine, lineContent);\r\n break;\r\n case 2 /* Delete */:\r\n ariaLabel = nls.localize('deleteLine', \"- original {0}: {1}\", originalLine, lineContent);\r\n break;\r\n }\r\n row.setAttribute('aria-label', ariaLabel);\r\n dest.appendChild(row);\r\n }\r\n };\r\n DiffReview._renderLine = function (model, options, tabSize, lineNumber) {\r\n var lineContent = model.getLineContent(lineNumber);\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n var defaultMetadata = ((0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\r\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\r\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\r\n var tokens = new Uint32Array(2);\r\n tokens[0] = lineContent.length;\r\n tokens[1] = defaultMetadata;\r\n var lineTokens = new LineTokens(tokens, lineContent);\r\n var isBasicASCII = ViewLineRenderingData.isBasicASCII(lineContent, model.mightContainNonBasicASCII());\r\n var containsRTL = ViewLineRenderingData.containsRTL(lineContent, isBasicASCII, model.mightContainRTL());\r\n var r = renderViewLine(new RenderLineInput((fontInfo.isMonospace && !options.get(22 /* disableMonospaceOptimizations */)), fontInfo.canUseHalfwidthRightwardsArrow, lineContent, false, isBasicASCII, containsRTL, 0, lineTokens, [], tabSize, fontInfo.spaceWidth, options.get(84 /* stopRenderingLineAfter */), options.get(70 /* renderWhitespace */), options.get(66 /* renderControlCharacters */), options.get(33 /* fontLigatures */) !== EditorFontLigatures.OFF, null));\r\n return r.html;\r\n };\r\n return DiffReview;\r\n}(Disposable));\r\nexport { DiffReview };\r\n// theming\r\nregisterThemingParticipant(function (theme, collector) {\r\n var lineNumbers = theme.getColor(editorLineNumbers);\r\n if (lineNumbers) {\r\n collector.addRule(\".monaco-diff-editor .diff-review-line-number { color: \" + lineNumbers + \"; }\");\r\n }\r\n var shadow = theme.getColor(scrollbarShadow);\r\n if (shadow) {\r\n collector.addRule(\".monaco-diff-editor .diff-review-shadow { box-shadow: \" + shadow + \" 0 -6px 6px -6px inset; }\");\r\n }\r\n});\r\nvar DiffReviewNext = /** @class */ (function (_super) {\r\n __extends(DiffReviewNext, _super);\r\n function DiffReviewNext() {\r\n return _super.call(this, {\r\n id: 'editor.action.diffReview.next',\r\n label: nls.localize('editor.action.diffReview.next', \"Go to Next Difference\"),\r\n alias: 'Go to Next Difference',\r\n precondition: ContextKeyExpr.has('isInDiffEditor'),\r\n kbOpts: {\r\n kbExpr: null,\r\n primary: 65 /* F7 */,\r\n weight: 100 /* EditorContrib */\r\n }\r\n }) || this;\r\n }\r\n DiffReviewNext.prototype.run = function (accessor, editor) {\r\n var diffEditor = findFocusedDiffEditor(accessor);\r\n if (diffEditor) {\r\n diffEditor.diffReviewNext();\r\n }\r\n };\r\n return DiffReviewNext;\r\n}(EditorAction));\r\nvar DiffReviewPrev = /** @class */ (function (_super) {\r\n __extends(DiffReviewPrev, _super);\r\n function DiffReviewPrev() {\r\n return _super.call(this, {\r\n id: 'editor.action.diffReview.prev',\r\n label: nls.localize('editor.action.diffReview.prev', \"Go to Previous Difference\"),\r\n alias: 'Go to Previous Difference',\r\n precondition: ContextKeyExpr.has('isInDiffEditor'),\r\n kbOpts: {\r\n kbExpr: null,\r\n primary: 1024 /* Shift */ | 65 /* F7 */,\r\n weight: 100 /* EditorContrib */\r\n }\r\n }) || this;\r\n }\r\n DiffReviewPrev.prototype.run = function (accessor, editor) {\r\n var diffEditor = findFocusedDiffEditor(accessor);\r\n if (diffEditor) {\r\n diffEditor.diffReviewPrev();\r\n }\r\n };\r\n return DiffReviewPrev;\r\n}(EditorAction));\r\nfunction findFocusedDiffEditor(accessor) {\r\n var codeEditorService = accessor.get(ICodeEditorService);\r\n var diffEditors = codeEditorService.listDiffEditors();\r\n for (var i = 0, len = diffEditors.length; i < len; i++) {\r\n var diffEditor = diffEditors[i];\r\n if (diffEditor.hasWidgetFocus()) {\r\n return diffEditor;\r\n }\r\n }\r\n return null;\r\n}\r\nregisterEditorAction(DiffReviewNext);\r\nregisterEditorAction(DiffReviewPrev);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nexport var IContextViewService = createDecorator('contextViewService');\r\nexport var IContextMenuService = createDecorator('contextMenuService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport * as nls from '../../../nls.js';\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { Action } from '../../../base/common/actions.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { Range } from '../../common/core/range.js';\r\nvar InlineDiffMargin = /** @class */ (function (_super) {\r\n __extends(InlineDiffMargin, _super);\r\n function InlineDiffMargin(_viewZoneId, _marginDomNode, editor, diff, _contextMenuService, _clipboardService) {\r\n var _this = _super.call(this) || this;\r\n _this._viewZoneId = _viewZoneId;\r\n _this._marginDomNode = _marginDomNode;\r\n _this.editor = editor;\r\n _this.diff = diff;\r\n _this._contextMenuService = _contextMenuService;\r\n _this._clipboardService = _clipboardService;\r\n _this._visibility = false;\r\n // make sure the diff margin shows above overlay.\r\n _this._marginDomNode.style.zIndex = '10';\r\n _this._diffActions = document.createElement('div');\r\n _this._diffActions.className = 'lightbulb-glyph';\r\n _this._diffActions.style.position = 'absolute';\r\n var lineHeight = editor.getOption(47 /* lineHeight */);\r\n var lineFeed = editor.getModel().getEOL();\r\n _this._diffActions.style.right = '0px';\r\n _this._diffActions.style.visibility = 'hidden';\r\n _this._diffActions.style.height = lineHeight + \"px\";\r\n _this._diffActions.style.lineHeight = lineHeight + \"px\";\r\n _this._marginDomNode.appendChild(_this._diffActions);\r\n var actions = [];\r\n // default action\r\n actions.push(new Action('diff.clipboard.copyDeletedContent', diff.originalEndLineNumber > diff.modifiedStartLineNumber\r\n ? nls.localize('diff.clipboard.copyDeletedLinesContent.label', \"Copy deleted lines\")\r\n : nls.localize('diff.clipboard.copyDeletedLinesContent.single.label', \"Copy deleted line\"), undefined, true, function () { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this._clipboardService.writeText(diff.originalContent.join(lineFeed) + lineFeed)];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); }));\r\n var currentLineNumberOffset = 0;\r\n var copyLineAction = undefined;\r\n if (diff.originalEndLineNumber > diff.modifiedStartLineNumber) {\r\n copyLineAction = new Action('diff.clipboard.copyDeletedLineContent', nls.localize('diff.clipboard.copyDeletedLineContent.label', \"Copy deleted line ({0})\", diff.originalStartLineNumber), undefined, true, function () { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this._clipboardService.writeText(diff.originalContent[currentLineNumberOffset])];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); });\r\n actions.push(copyLineAction);\r\n }\r\n var readOnly = editor.getOption(65 /* readOnly */);\r\n if (!readOnly) {\r\n actions.push(new Action('diff.inline.revertChange', nls.localize('diff.inline.revertChange.label', \"Revert this change\"), undefined, true, function () { return __awaiter(_this, void 0, void 0, function () {\r\n var column, column;\r\n return __generator(this, function (_a) {\r\n if (diff.modifiedEndLineNumber === 0) {\r\n column = editor.getModel().getLineMaxColumn(diff.modifiedStartLineNumber);\r\n editor.executeEdits('diffEditor', [\r\n {\r\n range: new Range(diff.modifiedStartLineNumber, column, diff.modifiedStartLineNumber, column),\r\n text: lineFeed + diff.originalContent.join(lineFeed)\r\n }\r\n ]);\r\n }\r\n else {\r\n column = editor.getModel().getLineMaxColumn(diff.modifiedEndLineNumber);\r\n editor.executeEdits('diffEditor', [\r\n {\r\n range: new Range(diff.modifiedStartLineNumber, 1, diff.modifiedEndLineNumber, column),\r\n text: diff.originalContent.join(lineFeed)\r\n }\r\n ]);\r\n }\r\n return [2 /*return*/];\r\n });\r\n }); }));\r\n }\r\n var showContextMenu = function (x, y) {\r\n _this._contextMenuService.showContextMenu({\r\n getAnchor: function () {\r\n return {\r\n x: x,\r\n y: y\r\n };\r\n },\r\n getActions: function () {\r\n if (copyLineAction) {\r\n copyLineAction.label = nls.localize('diff.clipboard.copyDeletedLineContent.label', \"Copy deleted line ({0})\", diff.originalStartLineNumber + currentLineNumberOffset);\r\n }\r\n return actions;\r\n },\r\n autoSelectFirstItem: true\r\n });\r\n };\r\n _this._register(dom.addStandardDisposableListener(_this._diffActions, 'mousedown', function (e) {\r\n var _a = dom.getDomNodePagePosition(_this._diffActions), top = _a.top, height = _a.height;\r\n var pad = Math.floor(lineHeight / 3);\r\n e.preventDefault();\r\n showContextMenu(e.posx, top + height + pad);\r\n }));\r\n _this._register(editor.onMouseMove(function (e) {\r\n if (e.target.type === 8 /* CONTENT_VIEW_ZONE */ || e.target.type === 5 /* GUTTER_VIEW_ZONE */) {\r\n var viewZoneId = e.target.detail.viewZoneId;\r\n if (viewZoneId === _this._viewZoneId) {\r\n _this.visibility = true;\r\n currentLineNumberOffset = _this._updateLightBulbPosition(_this._marginDomNode, e.event.browserEvent.y, lineHeight);\r\n }\r\n else {\r\n _this.visibility = false;\r\n }\r\n }\r\n else {\r\n _this.visibility = false;\r\n }\r\n }));\r\n _this._register(editor.onMouseDown(function (e) {\r\n if (!e.event.rightButton) {\r\n return;\r\n }\r\n if (e.target.type === 8 /* CONTENT_VIEW_ZONE */ || e.target.type === 5 /* GUTTER_VIEW_ZONE */) {\r\n var viewZoneId = e.target.detail.viewZoneId;\r\n if (viewZoneId === _this._viewZoneId) {\r\n e.event.preventDefault();\r\n currentLineNumberOffset = _this._updateLightBulbPosition(_this._marginDomNode, e.event.browserEvent.y, lineHeight);\r\n showContextMenu(e.event.posx, e.event.posy + lineHeight);\r\n }\r\n }\r\n }));\r\n return _this;\r\n }\r\n Object.defineProperty(InlineDiffMargin.prototype, \"visibility\", {\r\n get: function () {\r\n return this._visibility;\r\n },\r\n set: function (_visibility) {\r\n if (this._visibility !== _visibility) {\r\n this._visibility = _visibility;\r\n if (_visibility) {\r\n this._diffActions.style.visibility = 'visible';\r\n }\r\n else {\r\n this._diffActions.style.visibility = 'hidden';\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n InlineDiffMargin.prototype._updateLightBulbPosition = function (marginDomNode, y, lineHeight) {\r\n var top = dom.getDomNodePagePosition(marginDomNode).top;\r\n var offset = y - top;\r\n var lineNumberOffset = Math.floor(offset / lineHeight);\r\n var newTop = lineNumberOffset * lineHeight;\r\n this._diffActions.style.top = newTop + \"px\";\r\n return lineNumberOffset;\r\n };\r\n return InlineDiffMargin;\r\n}(Disposable));\r\nexport { InlineDiffMargin };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nexport var IEditorProgressService = createDecorator('editorProgressService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport './media/diffEditor.css';\r\nimport * as nls from '../../../nls.js';\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\r\nimport { Sash } from '../../../base/browser/ui/sash/sash.js';\r\nimport { RunOnceScheduler, IntervalTimer } from '../../../base/common/async.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport * as objects from '../../../base/common/objects.js';\r\nimport { Configuration } from '../config/configuration.js';\r\nimport { StableEditorScrollState } from '../core/editorState.js';\r\nimport { ICodeEditorService } from '../services/codeEditorService.js';\r\nimport { CodeEditorWidget } from './codeEditorWidget.js';\r\nimport { DiffReview } from './diffReview.js';\r\nimport { EditorOptions, EditorFontLigatures } from '../../common/config/editorOptions.js';\r\nimport { Range } from '../../common/core/range.js';\r\nimport { createStringBuilder } from '../../common/core/stringBuilder.js';\r\nimport * as editorCommon from '../../common/editorCommon.js';\r\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\r\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\r\nimport { OverviewRulerZone } from '../../common/view/overviewZoneManager.js';\r\nimport { LineDecoration } from '../../common/viewLayout/lineDecorations.js';\r\nimport { RenderLineInput, renderViewLine } from '../../common/viewLayout/viewLineRenderer.js';\r\nimport { InlineDecoration, ViewLineRenderingData } from '../../common/viewModel/viewModel.js';\r\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\r\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\r\nimport { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js';\r\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\r\nimport { defaultInsertColor, defaultRemoveColor, diffBorder, diffInserted, diffInsertedOutline, diffRemoved, diffRemovedOutline, scrollbarShadow } from '../../../platform/theme/common/colorRegistry.js';\r\nimport { IThemeService, getThemeTypeSelector, registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\r\nimport { IContextMenuService } from '../../../platform/contextview/browser/contextView.js';\r\nimport { InlineDiffMargin } from './inlineDiffMargin.js';\r\nimport { EditorExtensionsRegistry } from '../editorExtensions.js';\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\r\nvar VisualEditorState = /** @class */ (function () {\r\n function VisualEditorState(_contextMenuService, _clipboardService) {\r\n this._contextMenuService = _contextMenuService;\r\n this._clipboardService = _clipboardService;\r\n this._zones = [];\r\n this.inlineDiffMargins = [];\r\n this._zonesMap = {};\r\n this._decorations = [];\r\n }\r\n VisualEditorState.prototype.getForeignViewZones = function (allViewZones) {\r\n var _this = this;\r\n return allViewZones.filter(function (z) { return !_this._zonesMap[String(z.id)]; });\r\n };\r\n VisualEditorState.prototype.clean = function (editor) {\r\n var _this = this;\r\n // (1) View zones\r\n if (this._zones.length > 0) {\r\n editor.changeViewZones(function (viewChangeAccessor) {\r\n for (var i = 0, length_1 = _this._zones.length; i < length_1; i++) {\r\n viewChangeAccessor.removeZone(_this._zones[i]);\r\n }\r\n });\r\n }\r\n this._zones = [];\r\n this._zonesMap = {};\r\n // (2) Model decorations\r\n this._decorations = editor.deltaDecorations(this._decorations, []);\r\n };\r\n VisualEditorState.prototype.apply = function (editor, overviewRuler, newDecorations, restoreScrollState) {\r\n var _this = this;\r\n var scrollState = restoreScrollState ? StableEditorScrollState.capture(editor) : null;\r\n // view zones\r\n editor.changeViewZones(function (viewChangeAccessor) {\r\n for (var i = 0, length_2 = _this._zones.length; i < length_2; i++) {\r\n viewChangeAccessor.removeZone(_this._zones[i]);\r\n }\r\n for (var i = 0, length_3 = _this.inlineDiffMargins.length; i < length_3; i++) {\r\n _this.inlineDiffMargins[i].dispose();\r\n }\r\n _this._zones = [];\r\n _this._zonesMap = {};\r\n _this.inlineDiffMargins = [];\r\n for (var i = 0, length_4 = newDecorations.zones.length; i < length_4; i++) {\r\n var viewZone = newDecorations.zones[i];\r\n viewZone.suppressMouseDown = true;\r\n var zoneId = viewChangeAccessor.addZone(viewZone);\r\n _this._zones.push(zoneId);\r\n _this._zonesMap[String(zoneId)] = true;\r\n if (newDecorations.zones[i].diff && viewZone.marginDomNode && _this._clipboardService) {\r\n viewZone.suppressMouseDown = false;\r\n _this.inlineDiffMargins.push(new InlineDiffMargin(zoneId, viewZone.marginDomNode, editor, newDecorations.zones[i].diff, _this._contextMenuService, _this._clipboardService));\r\n }\r\n }\r\n });\r\n if (scrollState) {\r\n scrollState.restore(editor);\r\n }\r\n // decorations\r\n this._decorations = editor.deltaDecorations(this._decorations, newDecorations.decorations);\r\n // overview ruler\r\n if (overviewRuler) {\r\n overviewRuler.setZones(newDecorations.overviewZones);\r\n }\r\n };\r\n return VisualEditorState;\r\n}());\r\nvar DIFF_EDITOR_ID = 0;\r\nvar DiffEditorWidget = /** @class */ (function (_super) {\r\n __extends(DiffEditorWidget, _super);\r\n function DiffEditorWidget(domElement, options, clipboardService, editorWorkerService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, _editorProgressService) {\r\n var _this = _super.call(this) || this;\r\n _this._editorProgressService = _editorProgressService;\r\n _this._onDidDispose = _this._register(new Emitter());\r\n _this.onDidDispose = _this._onDidDispose.event;\r\n _this._onDidUpdateDiff = _this._register(new Emitter());\r\n _this.onDidUpdateDiff = _this._onDidUpdateDiff.event;\r\n _this._lastOriginalWarning = null;\r\n _this._lastModifiedWarning = null;\r\n _this._editorWorkerService = editorWorkerService;\r\n _this._codeEditorService = codeEditorService;\r\n _this._contextKeyService = _this._register(contextKeyService.createScoped(domElement));\r\n _this._contextKeyService.createKey('isInDiffEditor', true);\r\n _this._themeService = themeService;\r\n _this._notificationService = notificationService;\r\n _this.id = (++DIFF_EDITOR_ID);\r\n _this._state = 0 /* Idle */;\r\n _this._updatingDiffProgress = null;\r\n _this._domElement = domElement;\r\n options = options || {};\r\n // renderSideBySide\r\n _this._renderSideBySide = true;\r\n if (typeof options.renderSideBySide !== 'undefined') {\r\n _this._renderSideBySide = options.renderSideBySide;\r\n }\r\n // maxComputationTime\r\n _this._maxComputationTime = 5000;\r\n if (typeof options.maxComputationTime !== 'undefined') {\r\n _this._maxComputationTime = options.maxComputationTime;\r\n }\r\n // ignoreTrimWhitespace\r\n _this._ignoreTrimWhitespace = true;\r\n if (typeof options.ignoreTrimWhitespace !== 'undefined') {\r\n _this._ignoreTrimWhitespace = options.ignoreTrimWhitespace;\r\n }\r\n // renderIndicators\r\n _this._renderIndicators = true;\r\n if (typeof options.renderIndicators !== 'undefined') {\r\n _this._renderIndicators = options.renderIndicators;\r\n }\r\n _this._originalIsEditable = false;\r\n if (typeof options.originalEditable !== 'undefined') {\r\n _this._originalIsEditable = Boolean(options.originalEditable);\r\n }\r\n _this._updateDecorationsRunner = _this._register(new RunOnceScheduler(function () { return _this._updateDecorations(); }, 0));\r\n _this._containerDomElement = document.createElement('div');\r\n _this._containerDomElement.className = DiffEditorWidget._getClassName(_this._themeService.getTheme(), _this._renderSideBySide);\r\n _this._containerDomElement.style.position = 'relative';\r\n _this._containerDomElement.style.height = '100%';\r\n _this._domElement.appendChild(_this._containerDomElement);\r\n _this._overviewViewportDomElement = createFastDomNode(document.createElement('div'));\r\n _this._overviewViewportDomElement.setClassName('diffViewport');\r\n _this._overviewViewportDomElement.setPosition('absolute');\r\n _this._overviewDomElement = document.createElement('div');\r\n _this._overviewDomElement.className = 'diffOverview';\r\n _this._overviewDomElement.style.position = 'absolute';\r\n _this._overviewDomElement.appendChild(_this._overviewViewportDomElement.domNode);\r\n _this._register(dom.addStandardDisposableListener(_this._overviewDomElement, 'mousedown', function (e) {\r\n _this.modifiedEditor.delegateVerticalScrollbarMouseDown(e);\r\n }));\r\n _this._containerDomElement.appendChild(_this._overviewDomElement);\r\n // Create left side\r\n _this._originalDomNode = document.createElement('div');\r\n _this._originalDomNode.className = 'editor original';\r\n _this._originalDomNode.style.position = 'absolute';\r\n _this._originalDomNode.style.height = '100%';\r\n _this._containerDomElement.appendChild(_this._originalDomNode);\r\n // Create right side\r\n _this._modifiedDomNode = document.createElement('div');\r\n _this._modifiedDomNode.className = 'editor modified';\r\n _this._modifiedDomNode.style.position = 'absolute';\r\n _this._modifiedDomNode.style.height = '100%';\r\n _this._containerDomElement.appendChild(_this._modifiedDomNode);\r\n _this._beginUpdateDecorationsTimeout = -1;\r\n _this._currentlyChangingViewZones = false;\r\n _this._diffComputationToken = 0;\r\n _this._originalEditorState = new VisualEditorState(contextMenuService, clipboardService);\r\n _this._modifiedEditorState = new VisualEditorState(contextMenuService, clipboardService);\r\n _this._isVisible = true;\r\n _this._isHandlingScrollEvent = false;\r\n _this._width = 0;\r\n _this._height = 0;\r\n _this._reviewHeight = 0;\r\n _this._diffComputationResult = null;\r\n var leftContextKeyService = _this._contextKeyService.createScoped();\r\n leftContextKeyService.createKey('isInDiffLeftEditor', true);\r\n var leftServices = new ServiceCollection();\r\n leftServices.set(IContextKeyService, leftContextKeyService);\r\n var leftScopedInstantiationService = instantiationService.createChild(leftServices);\r\n var rightContextKeyService = _this._contextKeyService.createScoped();\r\n rightContextKeyService.createKey('isInDiffRightEditor', true);\r\n var rightServices = new ServiceCollection();\r\n rightServices.set(IContextKeyService, rightContextKeyService);\r\n var rightScopedInstantiationService = instantiationService.createChild(rightServices);\r\n _this.originalEditor = _this._createLeftHandSideEditor(options, leftScopedInstantiationService);\r\n _this.modifiedEditor = _this._createRightHandSideEditor(options, rightScopedInstantiationService);\r\n _this._originalOverviewRuler = null;\r\n _this._modifiedOverviewRuler = null;\r\n _this._reviewPane = new DiffReview(_this);\r\n _this._containerDomElement.appendChild(_this._reviewPane.domNode.domNode);\r\n _this._containerDomElement.appendChild(_this._reviewPane.shadow.domNode);\r\n _this._containerDomElement.appendChild(_this._reviewPane.actionBarContainer.domNode);\r\n if (options.automaticLayout) {\r\n _this._measureDomElementToken = new IntervalTimer();\r\n _this._measureDomElementToken.cancelAndSet(function () { return _this._measureDomElement(false); }, 100);\r\n }\r\n else {\r\n _this._measureDomElementToken = null;\r\n }\r\n // enableSplitViewResizing\r\n _this._enableSplitViewResizing = true;\r\n if (typeof options.enableSplitViewResizing !== 'undefined') {\r\n _this._enableSplitViewResizing = options.enableSplitViewResizing;\r\n }\r\n if (_this._renderSideBySide) {\r\n _this._setStrategy(new DiffEditorWidgetSideBySide(_this._createDataSource(), _this._enableSplitViewResizing));\r\n }\r\n else {\r\n _this._setStrategy(new DiffEditorWidgetInline(_this._createDataSource(), _this._enableSplitViewResizing));\r\n }\r\n _this._register(themeService.onThemeChange(function (t) {\r\n if (_this._strategy && _this._strategy.applyColors(t)) {\r\n _this._updateDecorationsRunner.schedule();\r\n }\r\n _this._containerDomElement.className = DiffEditorWidget._getClassName(_this._themeService.getTheme(), _this._renderSideBySide);\r\n }));\r\n var contributions = EditorExtensionsRegistry.getDiffEditorContributions();\r\n for (var _i = 0, contributions_1 = contributions; _i < contributions_1.length; _i++) {\r\n var desc = contributions_1[_i];\r\n try {\r\n _this._register(instantiationService.createInstance(desc.ctor, _this));\r\n }\r\n catch (err) {\r\n onUnexpectedError(err);\r\n }\r\n }\r\n _this._codeEditorService.addDiffEditor(_this);\r\n return _this;\r\n }\r\n DiffEditorWidget.prototype._setState = function (newState) {\r\n if (this._state === newState) {\r\n return;\r\n }\r\n this._state = newState;\r\n if (this._updatingDiffProgress) {\r\n this._updatingDiffProgress.done();\r\n this._updatingDiffProgress = null;\r\n }\r\n if (this._state === 1 /* ComputingDiff */) {\r\n this._updatingDiffProgress = this._editorProgressService.show(true, 1000);\r\n }\r\n };\r\n DiffEditorWidget.prototype.hasWidgetFocus = function () {\r\n return dom.isAncestor(document.activeElement, this._domElement);\r\n };\r\n DiffEditorWidget.prototype.diffReviewNext = function () {\r\n this._reviewPane.next();\r\n };\r\n DiffEditorWidget.prototype.diffReviewPrev = function () {\r\n this._reviewPane.prev();\r\n };\r\n DiffEditorWidget._getClassName = function (theme, renderSideBySide) {\r\n var result = 'monaco-diff-editor monaco-editor-background ';\r\n if (renderSideBySide) {\r\n result += 'side-by-side ';\r\n }\r\n result += getThemeTypeSelector(theme.type);\r\n return result;\r\n };\r\n DiffEditorWidget.prototype._recreateOverviewRulers = function () {\r\n if (this._originalOverviewRuler) {\r\n this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode());\r\n this._originalOverviewRuler.dispose();\r\n }\r\n if (this.originalEditor.hasModel()) {\r\n this._originalOverviewRuler = this.originalEditor.createOverviewRuler('original diffOverviewRuler');\r\n this._overviewDomElement.appendChild(this._originalOverviewRuler.getDomNode());\r\n }\r\n if (this._modifiedOverviewRuler) {\r\n this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode());\r\n this._modifiedOverviewRuler.dispose();\r\n }\r\n if (this.modifiedEditor.hasModel()) {\r\n this._modifiedOverviewRuler = this.modifiedEditor.createOverviewRuler('modified diffOverviewRuler');\r\n this._overviewDomElement.appendChild(this._modifiedOverviewRuler.getDomNode());\r\n }\r\n this._layoutOverviewRulers();\r\n };\r\n DiffEditorWidget.prototype._createLeftHandSideEditor = function (options, instantiationService) {\r\n var _this = this;\r\n var editor = this._createInnerEditor(instantiationService, this._originalDomNode, this._adjustOptionsForLeftHandSide(options, this._originalIsEditable));\r\n this._register(editor.onDidScrollChange(function (e) {\r\n if (_this._isHandlingScrollEvent) {\r\n return;\r\n }\r\n if (!e.scrollTopChanged && !e.scrollLeftChanged && !e.scrollHeightChanged) {\r\n return;\r\n }\r\n _this._isHandlingScrollEvent = true;\r\n _this.modifiedEditor.setScrollPosition({\r\n scrollLeft: e.scrollLeft,\r\n scrollTop: e.scrollTop\r\n });\r\n _this._isHandlingScrollEvent = false;\r\n _this._layoutOverviewViewport();\r\n }));\r\n this._register(editor.onDidChangeViewZones(function () {\r\n _this._onViewZonesChanged();\r\n }));\r\n this._register(editor.onDidChangeModelContent(function () {\r\n if (_this._isVisible) {\r\n _this._beginUpdateDecorationsSoon();\r\n }\r\n }));\r\n return editor;\r\n };\r\n DiffEditorWidget.prototype._createRightHandSideEditor = function (options, instantiationService) {\r\n var _this = this;\r\n var editor = this._createInnerEditor(instantiationService, this._modifiedDomNode, this._adjustOptionsForRightHandSide(options));\r\n this._register(editor.onDidScrollChange(function (e) {\r\n if (_this._isHandlingScrollEvent) {\r\n return;\r\n }\r\n if (!e.scrollTopChanged && !e.scrollLeftChanged && !e.scrollHeightChanged) {\r\n return;\r\n }\r\n _this._isHandlingScrollEvent = true;\r\n _this.originalEditor.setScrollPosition({\r\n scrollLeft: e.scrollLeft,\r\n scrollTop: e.scrollTop\r\n });\r\n _this._isHandlingScrollEvent = false;\r\n _this._layoutOverviewViewport();\r\n }));\r\n this._register(editor.onDidChangeViewZones(function () {\r\n _this._onViewZonesChanged();\r\n }));\r\n this._register(editor.onDidChangeConfiguration(function (e) {\r\n if (e.hasChanged(32 /* fontInfo */) && editor.getModel()) {\r\n _this._onViewZonesChanged();\r\n }\r\n }));\r\n this._register(editor.onDidChangeModelContent(function () {\r\n if (_this._isVisible) {\r\n _this._beginUpdateDecorationsSoon();\r\n }\r\n }));\r\n this._register(editor.onDidChangeModelOptions(function (e) {\r\n if (e.tabSize) {\r\n _this._updateDecorationsRunner.schedule();\r\n }\r\n }));\r\n return editor;\r\n };\r\n DiffEditorWidget.prototype._createInnerEditor = function (instantiationService, container, options) {\r\n return instantiationService.createInstance(CodeEditorWidget, container, options, {});\r\n };\r\n DiffEditorWidget.prototype.dispose = function () {\r\n this._codeEditorService.removeDiffEditor(this);\r\n if (this._beginUpdateDecorationsTimeout !== -1) {\r\n window.clearTimeout(this._beginUpdateDecorationsTimeout);\r\n this._beginUpdateDecorationsTimeout = -1;\r\n }\r\n if (this._measureDomElementToken) {\r\n this._measureDomElementToken.dispose();\r\n }\r\n this._cleanViewZonesAndDecorations();\r\n if (this._originalOverviewRuler) {\r\n this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode());\r\n this._originalOverviewRuler.dispose();\r\n }\r\n if (this._modifiedOverviewRuler) {\r\n this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode());\r\n this._modifiedOverviewRuler.dispose();\r\n }\r\n this._overviewDomElement.removeChild(this._overviewViewportDomElement.domNode);\r\n this._containerDomElement.removeChild(this._overviewDomElement);\r\n this._containerDomElement.removeChild(this._originalDomNode);\r\n this.originalEditor.dispose();\r\n this._containerDomElement.removeChild(this._modifiedDomNode);\r\n this.modifiedEditor.dispose();\r\n this._strategy.dispose();\r\n this._containerDomElement.removeChild(this._reviewPane.domNode.domNode);\r\n this._containerDomElement.removeChild(this._reviewPane.shadow.domNode);\r\n this._containerDomElement.removeChild(this._reviewPane.actionBarContainer.domNode);\r\n this._reviewPane.dispose();\r\n this._domElement.removeChild(this._containerDomElement);\r\n this._onDidDispose.fire();\r\n _super.prototype.dispose.call(this);\r\n };\r\n //------------ begin IDiffEditor methods\r\n DiffEditorWidget.prototype.getId = function () {\r\n return this.getEditorType() + ':' + this.id;\r\n };\r\n DiffEditorWidget.prototype.getEditorType = function () {\r\n return editorCommon.EditorType.IDiffEditor;\r\n };\r\n DiffEditorWidget.prototype.getLineChanges = function () {\r\n if (!this._diffComputationResult) {\r\n return null;\r\n }\r\n return this._diffComputationResult.changes;\r\n };\r\n DiffEditorWidget.prototype.getOriginalEditor = function () {\r\n return this.originalEditor;\r\n };\r\n DiffEditorWidget.prototype.getModifiedEditor = function () {\r\n return this.modifiedEditor;\r\n };\r\n DiffEditorWidget.prototype.updateOptions = function (newOptions) {\r\n // Handle side by side\r\n var renderSideBySideChanged = false;\r\n if (typeof newOptions.renderSideBySide !== 'undefined') {\r\n if (this._renderSideBySide !== newOptions.renderSideBySide) {\r\n this._renderSideBySide = newOptions.renderSideBySide;\r\n renderSideBySideChanged = true;\r\n }\r\n }\r\n if (typeof newOptions.maxComputationTime !== 'undefined') {\r\n this._maxComputationTime = newOptions.maxComputationTime;\r\n if (this._isVisible) {\r\n this._beginUpdateDecorationsSoon();\r\n }\r\n }\r\n var beginUpdateDecorations = false;\r\n if (typeof newOptions.ignoreTrimWhitespace !== 'undefined') {\r\n if (this._ignoreTrimWhitespace !== newOptions.ignoreTrimWhitespace) {\r\n this._ignoreTrimWhitespace = newOptions.ignoreTrimWhitespace;\r\n // Begin comparing\r\n beginUpdateDecorations = true;\r\n }\r\n }\r\n if (typeof newOptions.renderIndicators !== 'undefined') {\r\n if (this._renderIndicators !== newOptions.renderIndicators) {\r\n this._renderIndicators = newOptions.renderIndicators;\r\n beginUpdateDecorations = true;\r\n }\r\n }\r\n if (beginUpdateDecorations) {\r\n this._beginUpdateDecorations();\r\n }\r\n if (typeof newOptions.originalEditable !== 'undefined') {\r\n this._originalIsEditable = Boolean(newOptions.originalEditable);\r\n }\r\n this.modifiedEditor.updateOptions(this._adjustOptionsForRightHandSide(newOptions));\r\n this.originalEditor.updateOptions(this._adjustOptionsForLeftHandSide(newOptions, this._originalIsEditable));\r\n // enableSplitViewResizing\r\n if (typeof newOptions.enableSplitViewResizing !== 'undefined') {\r\n this._enableSplitViewResizing = newOptions.enableSplitViewResizing;\r\n }\r\n this._strategy.setEnableSplitViewResizing(this._enableSplitViewResizing);\r\n // renderSideBySide\r\n if (renderSideBySideChanged) {\r\n if (this._renderSideBySide) {\r\n this._setStrategy(new DiffEditorWidgetSideBySide(this._createDataSource(), this._enableSplitViewResizing));\r\n }\r\n else {\r\n this._setStrategy(new DiffEditorWidgetInline(this._createDataSource(), this._enableSplitViewResizing));\r\n }\r\n // Update class name\r\n this._containerDomElement.className = DiffEditorWidget._getClassName(this._themeService.getTheme(), this._renderSideBySide);\r\n }\r\n };\r\n DiffEditorWidget.prototype.getModel = function () {\r\n return {\r\n original: this.originalEditor.getModel(),\r\n modified: this.modifiedEditor.getModel()\r\n };\r\n };\r\n DiffEditorWidget.prototype.setModel = function (model) {\r\n // Guard us against partial null model\r\n if (model && (!model.original || !model.modified)) {\r\n throw new Error(!model.original ? 'DiffEditorWidget.setModel: Original model is null' : 'DiffEditorWidget.setModel: Modified model is null');\r\n }\r\n // Remove all view zones & decorations\r\n this._cleanViewZonesAndDecorations();\r\n // Update code editor models\r\n this.originalEditor.setModel(model ? model.original : null);\r\n this.modifiedEditor.setModel(model ? model.modified : null);\r\n this._updateDecorationsRunner.cancel();\r\n // this.originalEditor.onDidChangeModelOptions\r\n if (model) {\r\n this.originalEditor.setScrollTop(0);\r\n this.modifiedEditor.setScrollTop(0);\r\n }\r\n // Disable any diff computations that will come in\r\n this._diffComputationResult = null;\r\n this._diffComputationToken++;\r\n this._setState(0 /* Idle */);\r\n if (model) {\r\n this._recreateOverviewRulers();\r\n // Begin comparing\r\n this._beginUpdateDecorations();\r\n }\r\n this._layoutOverviewViewport();\r\n };\r\n DiffEditorWidget.prototype.getDomNode = function () {\r\n return this._domElement;\r\n };\r\n DiffEditorWidget.prototype.getVisibleColumnFromPosition = function (position) {\r\n return this.modifiedEditor.getVisibleColumnFromPosition(position);\r\n };\r\n DiffEditorWidget.prototype.getPosition = function () {\r\n return this.modifiedEditor.getPosition();\r\n };\r\n DiffEditorWidget.prototype.setPosition = function (position) {\r\n this.modifiedEditor.setPosition(position);\r\n };\r\n DiffEditorWidget.prototype.revealLine = function (lineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealLine(lineNumber, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealLineInCenter = function (lineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealLineInCenter(lineNumber, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealLineInCenterIfOutsideViewport = function (lineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealLineInCenterIfOutsideViewport(lineNumber, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealPosition = function (position, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealPosition(position, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealPositionInCenter = function (position, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealPositionInCenter(position, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealPositionInCenterIfOutsideViewport = function (position, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealPositionInCenterIfOutsideViewport(position, scrollType);\r\n };\r\n DiffEditorWidget.prototype.getSelection = function () {\r\n return this.modifiedEditor.getSelection();\r\n };\r\n DiffEditorWidget.prototype.getSelections = function () {\r\n return this.modifiedEditor.getSelections();\r\n };\r\n DiffEditorWidget.prototype.setSelection = function (something) {\r\n this.modifiedEditor.setSelection(something);\r\n };\r\n DiffEditorWidget.prototype.setSelections = function (ranges) {\r\n this.modifiedEditor.setSelections(ranges);\r\n };\r\n DiffEditorWidget.prototype.revealLines = function (startLineNumber, endLineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealLines(startLineNumber, endLineNumber, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealLinesInCenter = function (startLineNumber, endLineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealLinesInCenter(startLineNumber, endLineNumber, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealLinesInCenterIfOutsideViewport = function (startLineNumber, endLineNumber, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealLinesInCenterIfOutsideViewport(startLineNumber, endLineNumber, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealRange = function (range, scrollType, revealVerticalInCenter, revealHorizontal) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n if (revealVerticalInCenter === void 0) { revealVerticalInCenter = false; }\r\n if (revealHorizontal === void 0) { revealHorizontal = true; }\r\n this.modifiedEditor.revealRange(range, scrollType, revealVerticalInCenter, revealHorizontal);\r\n };\r\n DiffEditorWidget.prototype.revealRangeInCenter = function (range, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealRangeInCenter(range, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealRangeInCenterIfOutsideViewport = function (range, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealRangeInCenterIfOutsideViewport(range, scrollType);\r\n };\r\n DiffEditorWidget.prototype.revealRangeAtTop = function (range, scrollType) {\r\n if (scrollType === void 0) { scrollType = 0 /* Smooth */; }\r\n this.modifiedEditor.revealRangeAtTop(range, scrollType);\r\n };\r\n DiffEditorWidget.prototype.getSupportedActions = function () {\r\n return this.modifiedEditor.getSupportedActions();\r\n };\r\n DiffEditorWidget.prototype.saveViewState = function () {\r\n var originalViewState = this.originalEditor.saveViewState();\r\n var modifiedViewState = this.modifiedEditor.saveViewState();\r\n return {\r\n original: originalViewState,\r\n modified: modifiedViewState\r\n };\r\n };\r\n DiffEditorWidget.prototype.restoreViewState = function (s) {\r\n if (s.original && s.modified) {\r\n var diffEditorState = s;\r\n this.originalEditor.restoreViewState(diffEditorState.original);\r\n this.modifiedEditor.restoreViewState(diffEditorState.modified);\r\n }\r\n };\r\n DiffEditorWidget.prototype.layout = function (dimension) {\r\n this._measureDomElement(false, dimension);\r\n };\r\n DiffEditorWidget.prototype.focus = function () {\r\n this.modifiedEditor.focus();\r\n };\r\n DiffEditorWidget.prototype.hasTextFocus = function () {\r\n return this.originalEditor.hasTextFocus() || this.modifiedEditor.hasTextFocus();\r\n };\r\n DiffEditorWidget.prototype.trigger = function (source, handlerId, payload) {\r\n this.modifiedEditor.trigger(source, handlerId, payload);\r\n };\r\n DiffEditorWidget.prototype.changeDecorations = function (callback) {\r\n return this.modifiedEditor.changeDecorations(callback);\r\n };\r\n //------------ end IDiffEditor methods\r\n //------------ begin layouting methods\r\n DiffEditorWidget.prototype._measureDomElement = function (forceDoLayoutCall, dimensions) {\r\n dimensions = dimensions || {\r\n width: this._containerDomElement.clientWidth,\r\n height: this._containerDomElement.clientHeight\r\n };\r\n if (dimensions.width <= 0) {\r\n this._width = 0;\r\n this._height = 0;\r\n this._reviewHeight = 0;\r\n return;\r\n }\r\n if (!forceDoLayoutCall && dimensions.width === this._width && dimensions.height === this._height) {\r\n // Nothing has changed\r\n return;\r\n }\r\n this._width = dimensions.width;\r\n this._height = dimensions.height;\r\n this._reviewHeight = this._reviewPane.isVisible() ? this._height : 0;\r\n this._doLayout();\r\n };\r\n DiffEditorWidget.prototype._layoutOverviewRulers = function () {\r\n if (!this._originalOverviewRuler || !this._modifiedOverviewRuler) {\r\n return;\r\n }\r\n var freeSpace = DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH - 2 * DiffEditorWidget.ONE_OVERVIEW_WIDTH;\r\n var layoutInfo = this.modifiedEditor.getLayoutInfo();\r\n if (layoutInfo) {\r\n this._originalOverviewRuler.setLayout({\r\n top: 0,\r\n width: DiffEditorWidget.ONE_OVERVIEW_WIDTH,\r\n right: freeSpace + DiffEditorWidget.ONE_OVERVIEW_WIDTH,\r\n height: (this._height - this._reviewHeight)\r\n });\r\n this._modifiedOverviewRuler.setLayout({\r\n top: 0,\r\n right: 0,\r\n width: DiffEditorWidget.ONE_OVERVIEW_WIDTH,\r\n height: (this._height - this._reviewHeight)\r\n });\r\n }\r\n };\r\n //------------ end layouting methods\r\n DiffEditorWidget.prototype._onViewZonesChanged = function () {\r\n if (this._currentlyChangingViewZones) {\r\n return;\r\n }\r\n this._updateDecorationsRunner.schedule();\r\n };\r\n DiffEditorWidget.prototype._beginUpdateDecorationsSoon = function () {\r\n var _this = this;\r\n // Clear previous timeout if necessary\r\n if (this._beginUpdateDecorationsTimeout !== -1) {\r\n window.clearTimeout(this._beginUpdateDecorationsTimeout);\r\n this._beginUpdateDecorationsTimeout = -1;\r\n }\r\n this._beginUpdateDecorationsTimeout = window.setTimeout(function () { return _this._beginUpdateDecorations(); }, DiffEditorWidget.UPDATE_DIFF_DECORATIONS_DELAY);\r\n };\r\n DiffEditorWidget._equals = function (a, b) {\r\n if (!a && !b) {\r\n return true;\r\n }\r\n if (!a || !b) {\r\n return false;\r\n }\r\n return (a.toString() === b.toString());\r\n };\r\n DiffEditorWidget.prototype._beginUpdateDecorations = function () {\r\n var _this = this;\r\n this._beginUpdateDecorationsTimeout = -1;\r\n var currentOriginalModel = this.originalEditor.getModel();\r\n var currentModifiedModel = this.modifiedEditor.getModel();\r\n if (!currentOriginalModel || !currentModifiedModel) {\r\n return;\r\n }\r\n // Prevent old diff requests to come if a new request has been initiated\r\n // The best method would be to call cancel on the Promise, but this is not\r\n // yet supported, so using tokens for now.\r\n this._diffComputationToken++;\r\n var currentToken = this._diffComputationToken;\r\n this._setState(1 /* ComputingDiff */);\r\n if (!this._editorWorkerService.canComputeDiff(currentOriginalModel.uri, currentModifiedModel.uri)) {\r\n if (!DiffEditorWidget._equals(currentOriginalModel.uri, this._lastOriginalWarning)\r\n || !DiffEditorWidget._equals(currentModifiedModel.uri, this._lastModifiedWarning)) {\r\n this._lastOriginalWarning = currentOriginalModel.uri;\r\n this._lastModifiedWarning = currentModifiedModel.uri;\r\n this._notificationService.warn(nls.localize(\"diff.tooLarge\", \"Cannot compare files because one file is too large.\"));\r\n }\r\n return;\r\n }\r\n this._editorWorkerService.computeDiff(currentOriginalModel.uri, currentModifiedModel.uri, this._ignoreTrimWhitespace, this._maxComputationTime).then(function (result) {\r\n if (currentToken === _this._diffComputationToken\r\n && currentOriginalModel === _this.originalEditor.getModel()\r\n && currentModifiedModel === _this.modifiedEditor.getModel()) {\r\n _this._setState(2 /* DiffComputed */);\r\n _this._diffComputationResult = result;\r\n _this._updateDecorationsRunner.schedule();\r\n _this._onDidUpdateDiff.fire();\r\n }\r\n }, function (error) {\r\n if (currentToken === _this._diffComputationToken\r\n && currentOriginalModel === _this.originalEditor.getModel()\r\n && currentModifiedModel === _this.modifiedEditor.getModel()) {\r\n _this._setState(2 /* DiffComputed */);\r\n _this._diffComputationResult = null;\r\n _this._updateDecorationsRunner.schedule();\r\n }\r\n });\r\n };\r\n DiffEditorWidget.prototype._cleanViewZonesAndDecorations = function () {\r\n this._originalEditorState.clean(this.originalEditor);\r\n this._modifiedEditorState.clean(this.modifiedEditor);\r\n };\r\n DiffEditorWidget.prototype._updateDecorations = function () {\r\n if (!this.originalEditor.getModel() || !this.modifiedEditor.getModel() || !this._originalOverviewRuler || !this._modifiedOverviewRuler) {\r\n return;\r\n }\r\n var lineChanges = (this._diffComputationResult ? this._diffComputationResult.changes : []);\r\n var foreignOriginal = this._originalEditorState.getForeignViewZones(this.originalEditor.getWhitespaces());\r\n var foreignModified = this._modifiedEditorState.getForeignViewZones(this.modifiedEditor.getWhitespaces());\r\n var diffDecorations = this._strategy.getEditorsDiffDecorations(lineChanges, this._ignoreTrimWhitespace, this._renderIndicators, foreignOriginal, foreignModified, this.originalEditor, this.modifiedEditor);\r\n try {\r\n this._currentlyChangingViewZones = true;\r\n this._originalEditorState.apply(this.originalEditor, this._originalOverviewRuler, diffDecorations.original, false);\r\n this._modifiedEditorState.apply(this.modifiedEditor, this._modifiedOverviewRuler, diffDecorations.modified, true);\r\n }\r\n finally {\r\n this._currentlyChangingViewZones = false;\r\n }\r\n };\r\n DiffEditorWidget.prototype._adjustOptionsForSubEditor = function (options) {\r\n var clonedOptions = objects.deepClone(options || {});\r\n clonedOptions.inDiffEditor = true;\r\n clonedOptions.wordWrap = 'off';\r\n clonedOptions.wordWrapMinified = false;\r\n clonedOptions.automaticLayout = false;\r\n clonedOptions.scrollbar = clonedOptions.scrollbar || {};\r\n clonedOptions.scrollbar.vertical = 'visible';\r\n clonedOptions.folding = false;\r\n clonedOptions.codeLens = false;\r\n clonedOptions.fixedOverflowWidgets = true;\r\n // clonedOptions.lineDecorationsWidth = '2ch';\r\n if (!clonedOptions.minimap) {\r\n clonedOptions.minimap = {};\r\n }\r\n clonedOptions.minimap.enabled = false;\r\n return clonedOptions;\r\n };\r\n DiffEditorWidget.prototype._adjustOptionsForLeftHandSide = function (options, isEditable) {\r\n var result = this._adjustOptionsForSubEditor(options);\r\n result.readOnly = !isEditable;\r\n result.extraEditorClassName = 'original-in-monaco-diff-editor';\r\n return result;\r\n };\r\n DiffEditorWidget.prototype._adjustOptionsForRightHandSide = function (options) {\r\n var result = this._adjustOptionsForSubEditor(options);\r\n result.revealHorizontalRightPadding = EditorOptions.revealHorizontalRightPadding.defaultValue + DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH;\r\n result.scrollbar.verticalHasArrows = false;\r\n result.extraEditorClassName = 'modified-in-monaco-diff-editor';\r\n return result;\r\n };\r\n DiffEditorWidget.prototype.doLayout = function () {\r\n this._measureDomElement(true);\r\n };\r\n DiffEditorWidget.prototype._doLayout = function () {\r\n var splitPoint = this._strategy.layout();\r\n this._originalDomNode.style.width = splitPoint + 'px';\r\n this._originalDomNode.style.left = '0px';\r\n this._modifiedDomNode.style.width = (this._width - splitPoint) + 'px';\r\n this._modifiedDomNode.style.left = splitPoint + 'px';\r\n this._overviewDomElement.style.top = '0px';\r\n this._overviewDomElement.style.height = (this._height - this._reviewHeight) + 'px';\r\n this._overviewDomElement.style.width = DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH + 'px';\r\n this._overviewDomElement.style.left = (this._width - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH) + 'px';\r\n this._overviewViewportDomElement.setWidth(DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH);\r\n this._overviewViewportDomElement.setHeight(30);\r\n this.originalEditor.layout({ width: splitPoint, height: (this._height - this._reviewHeight) });\r\n this.modifiedEditor.layout({ width: this._width - splitPoint - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH, height: (this._height - this._reviewHeight) });\r\n if (this._originalOverviewRuler || this._modifiedOverviewRuler) {\r\n this._layoutOverviewRulers();\r\n }\r\n this._reviewPane.layout(this._height - this._reviewHeight, this._width, this._reviewHeight);\r\n this._layoutOverviewViewport();\r\n };\r\n DiffEditorWidget.prototype._layoutOverviewViewport = function () {\r\n var layout = this._computeOverviewViewport();\r\n if (!layout) {\r\n this._overviewViewportDomElement.setTop(0);\r\n this._overviewViewportDomElement.setHeight(0);\r\n }\r\n else {\r\n this._overviewViewportDomElement.setTop(layout.top);\r\n this._overviewViewportDomElement.setHeight(layout.height);\r\n }\r\n };\r\n DiffEditorWidget.prototype._computeOverviewViewport = function () {\r\n var layoutInfo = this.modifiedEditor.getLayoutInfo();\r\n if (!layoutInfo) {\r\n return null;\r\n }\r\n var scrollTop = this.modifiedEditor.getScrollTop();\r\n var scrollHeight = this.modifiedEditor.getScrollHeight();\r\n var computedAvailableSize = Math.max(0, layoutInfo.contentHeight);\r\n var computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * 0);\r\n var computedRatio = scrollHeight > 0 ? (computedRepresentableSize / scrollHeight) : 0;\r\n var computedSliderSize = Math.max(0, Math.floor(layoutInfo.contentHeight * computedRatio));\r\n var computedSliderPosition = Math.floor(scrollTop * computedRatio);\r\n return {\r\n height: computedSliderSize,\r\n top: computedSliderPosition\r\n };\r\n };\r\n DiffEditorWidget.prototype._createDataSource = function () {\r\n var _this = this;\r\n return {\r\n getWidth: function () {\r\n return _this._width;\r\n },\r\n getHeight: function () {\r\n return (_this._height - _this._reviewHeight);\r\n },\r\n getContainerDomNode: function () {\r\n return _this._containerDomElement;\r\n },\r\n relayoutEditors: function () {\r\n _this._doLayout();\r\n },\r\n getOriginalEditor: function () {\r\n return _this.originalEditor;\r\n },\r\n getModifiedEditor: function () {\r\n return _this.modifiedEditor;\r\n }\r\n };\r\n };\r\n DiffEditorWidget.prototype._setStrategy = function (newStrategy) {\r\n if (this._strategy) {\r\n this._strategy.dispose();\r\n }\r\n this._strategy = newStrategy;\r\n newStrategy.applyColors(this._themeService.getTheme());\r\n if (this._diffComputationResult) {\r\n this._updateDecorations();\r\n }\r\n // Just do a layout, the strategy might need it\r\n this._measureDomElement(true);\r\n };\r\n DiffEditorWidget.prototype._getLineChangeAtOrBeforeLineNumber = function (lineNumber, startLineNumberExtractor) {\r\n var lineChanges = (this._diffComputationResult ? this._diffComputationResult.changes : []);\r\n if (lineChanges.length === 0 || lineNumber < startLineNumberExtractor(lineChanges[0])) {\r\n // There are no changes or `lineNumber` is before the first change\r\n return null;\r\n }\r\n var min = 0, max = lineChanges.length - 1;\r\n while (min < max) {\r\n var mid = Math.floor((min + max) / 2);\r\n var midStart = startLineNumberExtractor(lineChanges[mid]);\r\n var midEnd = (mid + 1 <= max ? startLineNumberExtractor(lineChanges[mid + 1]) : 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\r\n if (lineNumber < midStart) {\r\n max = mid - 1;\r\n }\r\n else if (lineNumber >= midEnd) {\r\n min = mid + 1;\r\n }\r\n else {\r\n // HIT!\r\n min = mid;\r\n max = mid;\r\n }\r\n }\r\n return lineChanges[min];\r\n };\r\n DiffEditorWidget.prototype._getEquivalentLineForOriginalLineNumber = function (lineNumber) {\r\n var lineChange = this._getLineChangeAtOrBeforeLineNumber(lineNumber, function (lineChange) { return lineChange.originalStartLineNumber; });\r\n if (!lineChange) {\r\n return lineNumber;\r\n }\r\n var originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0);\r\n var modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0);\r\n var lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0);\r\n var lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0);\r\n var delta = lineNumber - originalEquivalentLineNumber;\r\n if (delta <= lineChangeOriginalLength) {\r\n return modifiedEquivalentLineNumber + Math.min(delta, lineChangeModifiedLength);\r\n }\r\n return modifiedEquivalentLineNumber + lineChangeModifiedLength - lineChangeOriginalLength + delta;\r\n };\r\n DiffEditorWidget.prototype._getEquivalentLineForModifiedLineNumber = function (lineNumber) {\r\n var lineChange = this._getLineChangeAtOrBeforeLineNumber(lineNumber, function (lineChange) { return lineChange.modifiedStartLineNumber; });\r\n if (!lineChange) {\r\n return lineNumber;\r\n }\r\n var originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0);\r\n var modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0);\r\n var lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0);\r\n var lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0);\r\n var delta = lineNumber - modifiedEquivalentLineNumber;\r\n if (delta <= lineChangeModifiedLength) {\r\n return originalEquivalentLineNumber + Math.min(delta, lineChangeOriginalLength);\r\n }\r\n return originalEquivalentLineNumber + lineChangeOriginalLength - lineChangeModifiedLength + delta;\r\n };\r\n DiffEditorWidget.prototype.getDiffLineInformationForOriginal = function (lineNumber) {\r\n if (!this._diffComputationResult) {\r\n // Cannot answer that which I don't know\r\n return null;\r\n }\r\n return {\r\n equivalentLineNumber: this._getEquivalentLineForOriginalLineNumber(lineNumber)\r\n };\r\n };\r\n DiffEditorWidget.prototype.getDiffLineInformationForModified = function (lineNumber) {\r\n if (!this._diffComputationResult) {\r\n // Cannot answer that which I don't know\r\n return null;\r\n }\r\n return {\r\n equivalentLineNumber: this._getEquivalentLineForModifiedLineNumber(lineNumber)\r\n };\r\n };\r\n DiffEditorWidget.ONE_OVERVIEW_WIDTH = 15;\r\n DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH = 30;\r\n DiffEditorWidget.UPDATE_DIFF_DECORATIONS_DELAY = 200; // ms\r\n DiffEditorWidget = __decorate([\r\n __param(3, IEditorWorkerService),\r\n __param(4, IContextKeyService),\r\n __param(5, IInstantiationService),\r\n __param(6, ICodeEditorService),\r\n __param(7, IThemeService),\r\n __param(8, INotificationService),\r\n __param(9, IContextMenuService),\r\n __param(10, IEditorProgressService)\r\n ], DiffEditorWidget);\r\n return DiffEditorWidget;\r\n}(Disposable));\r\nexport { DiffEditorWidget };\r\nvar DiffEditorWidgetStyle = /** @class */ (function (_super) {\r\n __extends(DiffEditorWidgetStyle, _super);\r\n function DiffEditorWidgetStyle(dataSource) {\r\n var _this = _super.call(this) || this;\r\n _this._dataSource = dataSource;\r\n _this._insertColor = null;\r\n _this._removeColor = null;\r\n return _this;\r\n }\r\n DiffEditorWidgetStyle.prototype.applyColors = function (theme) {\r\n var newInsertColor = (theme.getColor(diffInserted) || defaultInsertColor).transparent(2);\r\n var newRemoveColor = (theme.getColor(diffRemoved) || defaultRemoveColor).transparent(2);\r\n var hasChanges = !newInsertColor.equals(this._insertColor) || !newRemoveColor.equals(this._removeColor);\r\n this._insertColor = newInsertColor;\r\n this._removeColor = newRemoveColor;\r\n return hasChanges;\r\n };\r\n DiffEditorWidgetStyle.prototype.getEditorsDiffDecorations = function (lineChanges, ignoreTrimWhitespace, renderIndicators, originalWhitespaces, modifiedWhitespaces, originalEditor, modifiedEditor) {\r\n // Get view zones\r\n modifiedWhitespaces = modifiedWhitespaces.sort(function (a, b) {\r\n return a.afterLineNumber - b.afterLineNumber;\r\n });\r\n originalWhitespaces = originalWhitespaces.sort(function (a, b) {\r\n return a.afterLineNumber - b.afterLineNumber;\r\n });\r\n var zones = this._getViewZones(lineChanges, originalWhitespaces, modifiedWhitespaces, originalEditor, modifiedEditor, renderIndicators);\r\n // Get decorations & overview ruler zones\r\n var originalDecorations = this._getOriginalEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators, originalEditor, modifiedEditor);\r\n var modifiedDecorations = this._getModifiedEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators, originalEditor, modifiedEditor);\r\n return {\r\n original: {\r\n decorations: originalDecorations.decorations,\r\n overviewZones: originalDecorations.overviewZones,\r\n zones: zones.original\r\n },\r\n modified: {\r\n decorations: modifiedDecorations.decorations,\r\n overviewZones: modifiedDecorations.overviewZones,\r\n zones: zones.modified\r\n }\r\n };\r\n };\r\n return DiffEditorWidgetStyle;\r\n}(Disposable));\r\nvar ForeignViewZonesIterator = /** @class */ (function () {\r\n function ForeignViewZonesIterator(source) {\r\n this._source = source;\r\n this._index = -1;\r\n this.current = null;\r\n this.advance();\r\n }\r\n ForeignViewZonesIterator.prototype.advance = function () {\r\n this._index++;\r\n if (this._index < this._source.length) {\r\n this.current = this._source[this._index];\r\n }\r\n else {\r\n this.current = null;\r\n }\r\n };\r\n return ForeignViewZonesIterator;\r\n}());\r\nvar ViewZonesComputer = /** @class */ (function () {\r\n function ViewZonesComputer(lineChanges, originalForeignVZ, originalLineHeight, modifiedForeignVZ, modifiedLineHeight) {\r\n this.lineChanges = lineChanges;\r\n this.originalForeignVZ = originalForeignVZ;\r\n this.originalLineHeight = originalLineHeight;\r\n this.modifiedForeignVZ = modifiedForeignVZ;\r\n this.modifiedLineHeight = modifiedLineHeight;\r\n }\r\n ViewZonesComputer.prototype.getViewZones = function () {\r\n var result = {\r\n original: [],\r\n modified: []\r\n };\r\n var lineChangeModifiedLength = 0;\r\n var lineChangeOriginalLength = 0;\r\n var originalEquivalentLineNumber = 0;\r\n var modifiedEquivalentLineNumber = 0;\r\n var originalEndEquivalentLineNumber = 0;\r\n var modifiedEndEquivalentLineNumber = 0;\r\n var sortMyViewZones = function (a, b) {\r\n return a.afterLineNumber - b.afterLineNumber;\r\n };\r\n var addAndCombineIfPossible = function (destination, item) {\r\n if (item.domNode === null && destination.length > 0) {\r\n var lastItem = destination[destination.length - 1];\r\n if (lastItem.afterLineNumber === item.afterLineNumber && lastItem.domNode === null) {\r\n lastItem.heightInLines += item.heightInLines;\r\n return;\r\n }\r\n }\r\n destination.push(item);\r\n };\r\n var modifiedForeignVZ = new ForeignViewZonesIterator(this.modifiedForeignVZ);\r\n var originalForeignVZ = new ForeignViewZonesIterator(this.originalForeignVZ);\r\n // In order to include foreign view zones after the last line change, the for loop will iterate once more after the end of the `lineChanges` array\r\n for (var i = 0, length_5 = this.lineChanges.length; i <= length_5; i++) {\r\n var lineChange = (i < length_5 ? this.lineChanges[i] : null);\r\n if (lineChange !== null) {\r\n originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0);\r\n modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0);\r\n lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0);\r\n lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0);\r\n originalEndEquivalentLineNumber = Math.max(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber);\r\n modifiedEndEquivalentLineNumber = Math.max(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber);\r\n }\r\n else {\r\n // Increase to very large value to get the producing tests of foreign view zones running\r\n originalEquivalentLineNumber += 10000000 + lineChangeOriginalLength;\r\n modifiedEquivalentLineNumber += 10000000 + lineChangeModifiedLength;\r\n originalEndEquivalentLineNumber = originalEquivalentLineNumber;\r\n modifiedEndEquivalentLineNumber = modifiedEquivalentLineNumber;\r\n }\r\n // Each step produces view zones, and after producing them, we try to cancel them out, to avoid empty-empty view zone cases\r\n var stepOriginal = [];\r\n var stepModified = [];\r\n // ---------------------------- PRODUCE VIEW ZONES\r\n // [PRODUCE] View zone(s) in original-side due to foreign view zone(s) in modified-side\r\n while (modifiedForeignVZ.current && modifiedForeignVZ.current.afterLineNumber <= modifiedEndEquivalentLineNumber) {\r\n var viewZoneLineNumber = void 0;\r\n if (modifiedForeignVZ.current.afterLineNumber <= modifiedEquivalentLineNumber) {\r\n viewZoneLineNumber = originalEquivalentLineNumber - modifiedEquivalentLineNumber + modifiedForeignVZ.current.afterLineNumber;\r\n }\r\n else {\r\n viewZoneLineNumber = originalEndEquivalentLineNumber;\r\n }\r\n var marginDomNode = null;\r\n if (lineChange && lineChange.modifiedStartLineNumber <= modifiedForeignVZ.current.afterLineNumber && modifiedForeignVZ.current.afterLineNumber <= lineChange.modifiedEndLineNumber) {\r\n marginDomNode = this._createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion();\r\n }\r\n stepOriginal.push({\r\n afterLineNumber: viewZoneLineNumber,\r\n heightInLines: modifiedForeignVZ.current.height / this.modifiedLineHeight,\r\n domNode: null,\r\n marginDomNode: marginDomNode\r\n });\r\n modifiedForeignVZ.advance();\r\n }\r\n // [PRODUCE] View zone(s) in modified-side due to foreign view zone(s) in original-side\r\n while (originalForeignVZ.current && originalForeignVZ.current.afterLineNumber <= originalEndEquivalentLineNumber) {\r\n var viewZoneLineNumber = void 0;\r\n if (originalForeignVZ.current.afterLineNumber <= originalEquivalentLineNumber) {\r\n viewZoneLineNumber = modifiedEquivalentLineNumber - originalEquivalentLineNumber + originalForeignVZ.current.afterLineNumber;\r\n }\r\n else {\r\n viewZoneLineNumber = modifiedEndEquivalentLineNumber;\r\n }\r\n stepModified.push({\r\n afterLineNumber: viewZoneLineNumber,\r\n heightInLines: originalForeignVZ.current.height / this.originalLineHeight,\r\n domNode: null\r\n });\r\n originalForeignVZ.advance();\r\n }\r\n if (lineChange !== null && isChangeOrInsert(lineChange)) {\r\n var r = this._produceOriginalFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength);\r\n if (r) {\r\n stepOriginal.push(r);\r\n }\r\n }\r\n if (lineChange !== null && isChangeOrDelete(lineChange)) {\r\n var r = this._produceModifiedFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength);\r\n if (r) {\r\n stepModified.push(r);\r\n }\r\n }\r\n // ---------------------------- END PRODUCE VIEW ZONES\r\n // ---------------------------- EMIT MINIMAL VIEW ZONES\r\n // [CANCEL & EMIT] Try to cancel view zones out\r\n var stepOriginalIndex = 0;\r\n var stepModifiedIndex = 0;\r\n stepOriginal = stepOriginal.sort(sortMyViewZones);\r\n stepModified = stepModified.sort(sortMyViewZones);\r\n while (stepOriginalIndex < stepOriginal.length && stepModifiedIndex < stepModified.length) {\r\n var original = stepOriginal[stepOriginalIndex];\r\n var modified = stepModified[stepModifiedIndex];\r\n var originalDelta = original.afterLineNumber - originalEquivalentLineNumber;\r\n var modifiedDelta = modified.afterLineNumber - modifiedEquivalentLineNumber;\r\n if (originalDelta < modifiedDelta) {\r\n addAndCombineIfPossible(result.original, original);\r\n stepOriginalIndex++;\r\n }\r\n else if (modifiedDelta < originalDelta) {\r\n addAndCombineIfPossible(result.modified, modified);\r\n stepModifiedIndex++;\r\n }\r\n else if (original.shouldNotShrink) {\r\n addAndCombineIfPossible(result.original, original);\r\n stepOriginalIndex++;\r\n }\r\n else if (modified.shouldNotShrink) {\r\n addAndCombineIfPossible(result.modified, modified);\r\n stepModifiedIndex++;\r\n }\r\n else {\r\n if (original.heightInLines >= modified.heightInLines) {\r\n // modified view zone gets removed\r\n original.heightInLines -= modified.heightInLines;\r\n stepModifiedIndex++;\r\n }\r\n else {\r\n // original view zone gets removed\r\n modified.heightInLines -= original.heightInLines;\r\n stepOriginalIndex++;\r\n }\r\n }\r\n }\r\n // [EMIT] Remaining original view zones\r\n while (stepOriginalIndex < stepOriginal.length) {\r\n addAndCombineIfPossible(result.original, stepOriginal[stepOriginalIndex]);\r\n stepOriginalIndex++;\r\n }\r\n // [EMIT] Remaining modified view zones\r\n while (stepModifiedIndex < stepModified.length) {\r\n addAndCombineIfPossible(result.modified, stepModified[stepModifiedIndex]);\r\n stepModifiedIndex++;\r\n }\r\n // ---------------------------- END EMIT MINIMAL VIEW ZONES\r\n }\r\n return {\r\n original: ViewZonesComputer._ensureDomNodes(result.original),\r\n modified: ViewZonesComputer._ensureDomNodes(result.modified),\r\n };\r\n };\r\n ViewZonesComputer._ensureDomNodes = function (zones) {\r\n return zones.map(function (z) {\r\n if (!z.domNode) {\r\n z.domNode = createFakeLinesDiv();\r\n }\r\n return z;\r\n });\r\n };\r\n return ViewZonesComputer;\r\n}());\r\nfunction createDecoration(startLineNumber, startColumn, endLineNumber, endColumn, options) {\r\n return {\r\n range: new Range(startLineNumber, startColumn, endLineNumber, endColumn),\r\n options: options\r\n };\r\n}\r\nvar DECORATIONS = {\r\n charDelete: ModelDecorationOptions.register({\r\n className: 'char-delete'\r\n }),\r\n charDeleteWholeLine: ModelDecorationOptions.register({\r\n className: 'char-delete',\r\n isWholeLine: true\r\n }),\r\n charInsert: ModelDecorationOptions.register({\r\n className: 'char-insert'\r\n }),\r\n charInsertWholeLine: ModelDecorationOptions.register({\r\n className: 'char-insert',\r\n isWholeLine: true\r\n }),\r\n lineInsert: ModelDecorationOptions.register({\r\n className: 'line-insert',\r\n marginClassName: 'line-insert',\r\n isWholeLine: true\r\n }),\r\n lineInsertWithSign: ModelDecorationOptions.register({\r\n className: 'line-insert',\r\n linesDecorationsClassName: 'insert-sign',\r\n marginClassName: 'line-insert',\r\n isWholeLine: true\r\n }),\r\n lineDelete: ModelDecorationOptions.register({\r\n className: 'line-delete',\r\n marginClassName: 'line-delete',\r\n isWholeLine: true\r\n }),\r\n lineDeleteWithSign: ModelDecorationOptions.register({\r\n className: 'line-delete',\r\n linesDecorationsClassName: 'delete-sign',\r\n marginClassName: 'line-delete',\r\n isWholeLine: true\r\n }),\r\n lineDeleteMargin: ModelDecorationOptions.register({\r\n marginClassName: 'line-delete',\r\n })\r\n};\r\nvar DiffEditorWidgetSideBySide = /** @class */ (function (_super) {\r\n __extends(DiffEditorWidgetSideBySide, _super);\r\n function DiffEditorWidgetSideBySide(dataSource, enableSplitViewResizing) {\r\n var _this = _super.call(this, dataSource) || this;\r\n _this._disableSash = (enableSplitViewResizing === false);\r\n _this._sashRatio = null;\r\n _this._sashPosition = null;\r\n _this._startSashPosition = null;\r\n _this._sash = _this._register(new Sash(_this._dataSource.getContainerDomNode(), _this));\r\n if (_this._disableSash) {\r\n _this._sash.state = 0 /* Disabled */;\r\n }\r\n _this._sash.onDidStart(function () { return _this.onSashDragStart(); });\r\n _this._sash.onDidChange(function (e) { return _this.onSashDrag(e); });\r\n _this._sash.onDidEnd(function () { return _this.onSashDragEnd(); });\r\n _this._sash.onDidReset(function () { return _this.onSashReset(); });\r\n return _this;\r\n }\r\n DiffEditorWidgetSideBySide.prototype.setEnableSplitViewResizing = function (enableSplitViewResizing) {\r\n var newDisableSash = (enableSplitViewResizing === false);\r\n if (this._disableSash !== newDisableSash) {\r\n this._disableSash = newDisableSash;\r\n this._sash.state = this._disableSash ? 0 /* Disabled */ : 3 /* Enabled */;\r\n }\r\n };\r\n DiffEditorWidgetSideBySide.prototype.layout = function (sashRatio) {\r\n if (sashRatio === void 0) { sashRatio = this._sashRatio; }\r\n var w = this._dataSource.getWidth();\r\n var contentWidth = w - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH;\r\n var sashPosition = Math.floor((sashRatio || 0.5) * contentWidth);\r\n var midPoint = Math.floor(0.5 * contentWidth);\r\n sashPosition = this._disableSash ? midPoint : sashPosition || midPoint;\r\n if (contentWidth > DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH * 2) {\r\n if (sashPosition < DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH) {\r\n sashPosition = DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH;\r\n }\r\n if (sashPosition > contentWidth - DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH) {\r\n sashPosition = contentWidth - DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH;\r\n }\r\n }\r\n else {\r\n sashPosition = midPoint;\r\n }\r\n if (this._sashPosition !== sashPosition) {\r\n this._sashPosition = sashPosition;\r\n this._sash.layout();\r\n }\r\n return this._sashPosition;\r\n };\r\n DiffEditorWidgetSideBySide.prototype.onSashDragStart = function () {\r\n this._startSashPosition = this._sashPosition;\r\n };\r\n DiffEditorWidgetSideBySide.prototype.onSashDrag = function (e) {\r\n var w = this._dataSource.getWidth();\r\n var contentWidth = w - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH;\r\n var sashPosition = this.layout((this._startSashPosition + (e.currentX - e.startX)) / contentWidth);\r\n this._sashRatio = sashPosition / contentWidth;\r\n this._dataSource.relayoutEditors();\r\n };\r\n DiffEditorWidgetSideBySide.prototype.onSashDragEnd = function () {\r\n this._sash.layout();\r\n };\r\n DiffEditorWidgetSideBySide.prototype.onSashReset = function () {\r\n this._sashRatio = 0.5;\r\n this._dataSource.relayoutEditors();\r\n this._sash.layout();\r\n };\r\n DiffEditorWidgetSideBySide.prototype.getVerticalSashTop = function (sash) {\r\n return 0;\r\n };\r\n DiffEditorWidgetSideBySide.prototype.getVerticalSashLeft = function (sash) {\r\n return this._sashPosition;\r\n };\r\n DiffEditorWidgetSideBySide.prototype.getVerticalSashHeight = function (sash) {\r\n return this._dataSource.getHeight();\r\n };\r\n DiffEditorWidgetSideBySide.prototype._getViewZones = function (lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor) {\r\n var c = new SideBySideViewZonesComputer(lineChanges, originalForeignVZ, originalEditor.getOption(47 /* lineHeight */), modifiedForeignVZ, modifiedEditor.getOption(47 /* lineHeight */));\r\n return c.getViewZones();\r\n };\r\n DiffEditorWidgetSideBySide.prototype._getOriginalEditorDecorations = function (lineChanges, ignoreTrimWhitespace, renderIndicators, originalEditor, modifiedEditor) {\r\n var overviewZoneColor = String(this._removeColor);\r\n var result = {\r\n decorations: [],\r\n overviewZones: []\r\n };\r\n var originalModel = originalEditor.getModel();\r\n for (var i = 0, length_6 = lineChanges.length; i < length_6; i++) {\r\n var lineChange = lineChanges[i];\r\n if (isChangeOrDelete(lineChange)) {\r\n result.decorations.push({\r\n range: new Range(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */),\r\n options: (renderIndicators ? DECORATIONS.lineDeleteWithSign : DECORATIONS.lineDelete)\r\n });\r\n if (!isChangeOrInsert(lineChange) || !lineChange.charChanges) {\r\n result.decorations.push(createDecoration(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, DECORATIONS.charDeleteWholeLine));\r\n }\r\n result.overviewZones.push(new OverviewRulerZone(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber, overviewZoneColor));\r\n if (lineChange.charChanges) {\r\n for (var j = 0, lengthJ = lineChange.charChanges.length; j < lengthJ; j++) {\r\n var charChange = lineChange.charChanges[j];\r\n if (isChangeOrDelete(charChange)) {\r\n if (ignoreTrimWhitespace) {\r\n for (var lineNumber = charChange.originalStartLineNumber; lineNumber <= charChange.originalEndLineNumber; lineNumber++) {\r\n var startColumn = void 0;\r\n var endColumn = void 0;\r\n if (lineNumber === charChange.originalStartLineNumber) {\r\n startColumn = charChange.originalStartColumn;\r\n }\r\n else {\r\n startColumn = originalModel.getLineFirstNonWhitespaceColumn(lineNumber);\r\n }\r\n if (lineNumber === charChange.originalEndLineNumber) {\r\n endColumn = charChange.originalEndColumn;\r\n }\r\n else {\r\n endColumn = originalModel.getLineLastNonWhitespaceColumn(lineNumber);\r\n }\r\n result.decorations.push(createDecoration(lineNumber, startColumn, lineNumber, endColumn, DECORATIONS.charDelete));\r\n }\r\n }\r\n else {\r\n result.decorations.push(createDecoration(charChange.originalStartLineNumber, charChange.originalStartColumn, charChange.originalEndLineNumber, charChange.originalEndColumn, DECORATIONS.charDelete));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n DiffEditorWidgetSideBySide.prototype._getModifiedEditorDecorations = function (lineChanges, ignoreTrimWhitespace, renderIndicators, originalEditor, modifiedEditor) {\r\n var overviewZoneColor = String(this._insertColor);\r\n var result = {\r\n decorations: [],\r\n overviewZones: []\r\n };\r\n var modifiedModel = modifiedEditor.getModel();\r\n for (var i = 0, length_7 = lineChanges.length; i < length_7; i++) {\r\n var lineChange = lineChanges[i];\r\n if (isChangeOrInsert(lineChange)) {\r\n result.decorations.push({\r\n range: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */),\r\n options: (renderIndicators ? DECORATIONS.lineInsertWithSign : DECORATIONS.lineInsert)\r\n });\r\n if (!isChangeOrDelete(lineChange) || !lineChange.charChanges) {\r\n result.decorations.push(createDecoration(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, DECORATIONS.charInsertWholeLine));\r\n }\r\n result.overviewZones.push(new OverviewRulerZone(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber, overviewZoneColor));\r\n if (lineChange.charChanges) {\r\n for (var j = 0, lengthJ = lineChange.charChanges.length; j < lengthJ; j++) {\r\n var charChange = lineChange.charChanges[j];\r\n if (isChangeOrInsert(charChange)) {\r\n if (ignoreTrimWhitespace) {\r\n for (var lineNumber = charChange.modifiedStartLineNumber; lineNumber <= charChange.modifiedEndLineNumber; lineNumber++) {\r\n var startColumn = void 0;\r\n var endColumn = void 0;\r\n if (lineNumber === charChange.modifiedStartLineNumber) {\r\n startColumn = charChange.modifiedStartColumn;\r\n }\r\n else {\r\n startColumn = modifiedModel.getLineFirstNonWhitespaceColumn(lineNumber);\r\n }\r\n if (lineNumber === charChange.modifiedEndLineNumber) {\r\n endColumn = charChange.modifiedEndColumn;\r\n }\r\n else {\r\n endColumn = modifiedModel.getLineLastNonWhitespaceColumn(lineNumber);\r\n }\r\n result.decorations.push(createDecoration(lineNumber, startColumn, lineNumber, endColumn, DECORATIONS.charInsert));\r\n }\r\n }\r\n else {\r\n result.decorations.push(createDecoration(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn, DECORATIONS.charInsert));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH = 100;\r\n return DiffEditorWidgetSideBySide;\r\n}(DiffEditorWidgetStyle));\r\nvar SideBySideViewZonesComputer = /** @class */ (function (_super) {\r\n __extends(SideBySideViewZonesComputer, _super);\r\n function SideBySideViewZonesComputer(lineChanges, originalForeignVZ, originalLineHeight, modifiedForeignVZ, modifiedLineHeight) {\r\n return _super.call(this, lineChanges, originalForeignVZ, originalLineHeight, modifiedForeignVZ, modifiedLineHeight) || this;\r\n }\r\n SideBySideViewZonesComputer.prototype._createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion = function () {\r\n return null;\r\n };\r\n SideBySideViewZonesComputer.prototype._produceOriginalFromDiff = function (lineChange, lineChangeOriginalLength, lineChangeModifiedLength) {\r\n if (lineChangeModifiedLength > lineChangeOriginalLength) {\r\n return {\r\n afterLineNumber: Math.max(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber),\r\n heightInLines: (lineChangeModifiedLength - lineChangeOriginalLength),\r\n domNode: null\r\n };\r\n }\r\n return null;\r\n };\r\n SideBySideViewZonesComputer.prototype._produceModifiedFromDiff = function (lineChange, lineChangeOriginalLength, lineChangeModifiedLength) {\r\n if (lineChangeOriginalLength > lineChangeModifiedLength) {\r\n return {\r\n afterLineNumber: Math.max(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber),\r\n heightInLines: (lineChangeOriginalLength - lineChangeModifiedLength),\r\n domNode: null\r\n };\r\n }\r\n return null;\r\n };\r\n return SideBySideViewZonesComputer;\r\n}(ViewZonesComputer));\r\nvar DiffEditorWidgetInline = /** @class */ (function (_super) {\r\n __extends(DiffEditorWidgetInline, _super);\r\n function DiffEditorWidgetInline(dataSource, enableSplitViewResizing) {\r\n var _this = _super.call(this, dataSource) || this;\r\n _this.decorationsLeft = dataSource.getOriginalEditor().getLayoutInfo().decorationsLeft;\r\n _this._register(dataSource.getOriginalEditor().onDidLayoutChange(function (layoutInfo) {\r\n if (_this.decorationsLeft !== layoutInfo.decorationsLeft) {\r\n _this.decorationsLeft = layoutInfo.decorationsLeft;\r\n dataSource.relayoutEditors();\r\n }\r\n }));\r\n return _this;\r\n }\r\n DiffEditorWidgetInline.prototype.setEnableSplitViewResizing = function (enableSplitViewResizing) {\r\n // Nothing to do..\r\n };\r\n DiffEditorWidgetInline.prototype._getViewZones = function (lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor, renderIndicators) {\r\n var computer = new InlineViewZonesComputer(lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor, renderIndicators);\r\n return computer.getViewZones();\r\n };\r\n DiffEditorWidgetInline.prototype._getOriginalEditorDecorations = function (lineChanges, ignoreTrimWhitespace, renderIndicators, originalEditor, modifiedEditor) {\r\n var overviewZoneColor = String(this._removeColor);\r\n var result = {\r\n decorations: [],\r\n overviewZones: []\r\n };\r\n for (var i = 0, length_8 = lineChanges.length; i < length_8; i++) {\r\n var lineChange = lineChanges[i];\r\n // Add overview zones in the overview ruler\r\n if (isChangeOrDelete(lineChange)) {\r\n result.decorations.push({\r\n range: new Range(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */),\r\n options: DECORATIONS.lineDeleteMargin\r\n });\r\n result.overviewZones.push(new OverviewRulerZone(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber, overviewZoneColor));\r\n }\r\n }\r\n return result;\r\n };\r\n DiffEditorWidgetInline.prototype._getModifiedEditorDecorations = function (lineChanges, ignoreTrimWhitespace, renderIndicators, originalEditor, modifiedEditor) {\r\n var overviewZoneColor = String(this._insertColor);\r\n var result = {\r\n decorations: [],\r\n overviewZones: []\r\n };\r\n var modifiedModel = modifiedEditor.getModel();\r\n for (var i = 0, length_9 = lineChanges.length; i < length_9; i++) {\r\n var lineChange = lineChanges[i];\r\n // Add decorations & overview zones\r\n if (isChangeOrInsert(lineChange)) {\r\n result.decorations.push({\r\n range: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */),\r\n options: (renderIndicators ? DECORATIONS.lineInsertWithSign : DECORATIONS.lineInsert)\r\n });\r\n result.overviewZones.push(new OverviewRulerZone(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber, overviewZoneColor));\r\n if (lineChange.charChanges) {\r\n for (var j = 0, lengthJ = lineChange.charChanges.length; j < lengthJ; j++) {\r\n var charChange = lineChange.charChanges[j];\r\n if (isChangeOrInsert(charChange)) {\r\n if (ignoreTrimWhitespace) {\r\n for (var lineNumber = charChange.modifiedStartLineNumber; lineNumber <= charChange.modifiedEndLineNumber; lineNumber++) {\r\n var startColumn = void 0;\r\n var endColumn = void 0;\r\n if (lineNumber === charChange.modifiedStartLineNumber) {\r\n startColumn = charChange.modifiedStartColumn;\r\n }\r\n else {\r\n startColumn = modifiedModel.getLineFirstNonWhitespaceColumn(lineNumber);\r\n }\r\n if (lineNumber === charChange.modifiedEndLineNumber) {\r\n endColumn = charChange.modifiedEndColumn;\r\n }\r\n else {\r\n endColumn = modifiedModel.getLineLastNonWhitespaceColumn(lineNumber);\r\n }\r\n result.decorations.push(createDecoration(lineNumber, startColumn, lineNumber, endColumn, DECORATIONS.charInsert));\r\n }\r\n }\r\n else {\r\n result.decorations.push(createDecoration(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn, DECORATIONS.charInsert));\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n result.decorations.push(createDecoration(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, DECORATIONS.charInsertWholeLine));\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n DiffEditorWidgetInline.prototype.layout = function () {\r\n // An editor should not be smaller than 5px\r\n return Math.max(5, this.decorationsLeft);\r\n };\r\n return DiffEditorWidgetInline;\r\n}(DiffEditorWidgetStyle));\r\nvar InlineViewZonesComputer = /** @class */ (function (_super) {\r\n __extends(InlineViewZonesComputer, _super);\r\n function InlineViewZonesComputer(lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor, renderIndicators) {\r\n var _this = _super.call(this, lineChanges, originalForeignVZ, originalEditor.getOption(47 /* lineHeight */), modifiedForeignVZ, modifiedEditor.getOption(47 /* lineHeight */)) || this;\r\n _this.originalModel = originalEditor.getModel();\r\n _this.modifiedEditorOptions = modifiedEditor.getOptions();\r\n _this.modifiedEditorTabSize = modifiedEditor.getModel().getOptions().tabSize;\r\n _this.renderIndicators = renderIndicators;\r\n return _this;\r\n }\r\n InlineViewZonesComputer.prototype._createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion = function () {\r\n var result = document.createElement('div');\r\n result.className = 'inline-added-margin-view-zone';\r\n return result;\r\n };\r\n InlineViewZonesComputer.prototype._produceOriginalFromDiff = function (lineChange, lineChangeOriginalLength, lineChangeModifiedLength) {\r\n var marginDomNode = document.createElement('div');\r\n marginDomNode.className = 'inline-added-margin-view-zone';\r\n return {\r\n afterLineNumber: Math.max(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber),\r\n heightInLines: lineChangeModifiedLength,\r\n domNode: document.createElement('div'),\r\n marginDomNode: marginDomNode\r\n };\r\n };\r\n InlineViewZonesComputer.prototype._produceModifiedFromDiff = function (lineChange, lineChangeOriginalLength, lineChangeModifiedLength) {\r\n var decorations = [];\r\n if (lineChange.charChanges) {\r\n for (var j = 0, lengthJ = lineChange.charChanges.length; j < lengthJ; j++) {\r\n var charChange = lineChange.charChanges[j];\r\n if (isChangeOrDelete(charChange)) {\r\n decorations.push(new InlineDecoration(new Range(charChange.originalStartLineNumber, charChange.originalStartColumn, charChange.originalEndLineNumber, charChange.originalEndColumn), 'char-delete', 0 /* Regular */));\r\n }\r\n }\r\n }\r\n var sb = createStringBuilder(10000);\r\n var marginHTML = [];\r\n var layoutInfo = this.modifiedEditorOptions.get(103 /* layoutInfo */);\r\n var fontInfo = this.modifiedEditorOptions.get(32 /* fontInfo */);\r\n var lineDecorationsWidth = layoutInfo.decorationsWidth;\r\n var lineHeight = this.modifiedEditorOptions.get(47 /* lineHeight */);\r\n var typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\r\n var maxCharsPerLine = 0;\r\n var originalContent = [];\r\n for (var lineNumber = lineChange.originalStartLineNumber; lineNumber <= lineChange.originalEndLineNumber; lineNumber++) {\r\n maxCharsPerLine = Math.max(maxCharsPerLine, this._renderOriginalLine(lineNumber - lineChange.originalStartLineNumber, this.originalModel, this.modifiedEditorOptions, this.modifiedEditorTabSize, lineNumber, decorations, sb));\r\n originalContent.push(this.originalModel.getLineContent(lineNumber));\r\n if (this.renderIndicators) {\r\n var index = lineNumber - lineChange.originalStartLineNumber;\r\n marginHTML = marginHTML.concat([\r\n \"
\"\r\n ]);\r\n }\r\n }\r\n maxCharsPerLine += this.modifiedEditorOptions.get(75 /* scrollBeyondLastColumn */);\r\n var domNode = document.createElement('div');\r\n domNode.className = 'view-lines line-delete';\r\n domNode.innerHTML = sb.build();\r\n Configuration.applyFontInfoSlow(domNode, fontInfo);\r\n var marginDomNode = document.createElement('div');\r\n marginDomNode.className = 'inline-deleted-margin-view-zone';\r\n marginDomNode.innerHTML = marginHTML.join('');\r\n Configuration.applyFontInfoSlow(marginDomNode, fontInfo);\r\n return {\r\n shouldNotShrink: true,\r\n afterLineNumber: (lineChange.modifiedEndLineNumber === 0 ? lineChange.modifiedStartLineNumber : lineChange.modifiedStartLineNumber - 1),\r\n heightInLines: lineChangeOriginalLength,\r\n minWidthInPx: (maxCharsPerLine * typicalHalfwidthCharacterWidth),\r\n domNode: domNode,\r\n marginDomNode: marginDomNode,\r\n diff: {\r\n originalStartLineNumber: lineChange.originalStartLineNumber,\r\n originalEndLineNumber: lineChange.originalEndLineNumber,\r\n modifiedStartLineNumber: lineChange.modifiedStartLineNumber,\r\n modifiedEndLineNumber: lineChange.modifiedEndLineNumber,\r\n originalContent: originalContent\r\n }\r\n };\r\n };\r\n InlineViewZonesComputer.prototype._renderOriginalLine = function (count, originalModel, options, tabSize, lineNumber, decorations, sb) {\r\n var lineTokens = originalModel.getLineTokens(lineNumber);\r\n var lineContent = lineTokens.getLineContent();\r\n var fontInfo = options.get(32 /* fontInfo */);\r\n var actualDecorations = LineDecoration.filter(decorations, lineNumber, 1, lineContent.length + 1);\r\n sb.appendASCIIString('
');\r\n var isBasicASCII = ViewLineRenderingData.isBasicASCII(lineContent, originalModel.mightContainNonBasicASCII());\r\n var containsRTL = ViewLineRenderingData.containsRTL(lineContent, isBasicASCII, originalModel.mightContainRTL());\r\n var output = renderViewLine(new RenderLineInput((fontInfo.isMonospace && !options.get(22 /* disableMonospaceOptimizations */)), fontInfo.canUseHalfwidthRightwardsArrow, lineContent, false, isBasicASCII, containsRTL, 0, lineTokens, actualDecorations, tabSize, fontInfo.spaceWidth, options.get(84 /* stopRenderingLineAfter */), options.get(70 /* renderWhitespace */), options.get(66 /* renderControlCharacters */), options.get(33 /* fontLigatures */) !== EditorFontLigatures.OFF, null // Send no selections, original line cannot be selected\r\n ), sb);\r\n sb.appendASCIIString('
');\r\n var absoluteOffsets = output.characterMapping.getAbsoluteOffsets();\r\n return absoluteOffsets.length > 0 ? absoluteOffsets[absoluteOffsets.length - 1] : 0;\r\n };\r\n return InlineViewZonesComputer;\r\n}(ViewZonesComputer));\r\nfunction isChangeOrInsert(lineChange) {\r\n return lineChange.modifiedEndLineNumber > 0;\r\n}\r\nfunction isChangeOrDelete(lineChange) {\r\n return lineChange.originalEndLineNumber > 0;\r\n}\r\nfunction createFakeLinesDiv() {\r\n var r = document.createElement('div');\r\n r.className = 'diagonal-fill';\r\n return r;\r\n}\r\nregisterThemingParticipant(function (theme, collector) {\r\n var added = theme.getColor(diffInserted);\r\n if (added) {\r\n collector.addRule(\".monaco-editor .line-insert, .monaco-editor .char-insert { background-color: \" + added + \"; }\");\r\n collector.addRule(\".monaco-diff-editor .line-insert, .monaco-diff-editor .char-insert { background-color: \" + added + \"; }\");\r\n collector.addRule(\".monaco-editor .inline-added-margin-view-zone { background-color: \" + added + \"; }\");\r\n }\r\n var removed = theme.getColor(diffRemoved);\r\n if (removed) {\r\n collector.addRule(\".monaco-editor .line-delete, .monaco-editor .char-delete { background-color: \" + removed + \"; }\");\r\n collector.addRule(\".monaco-diff-editor .line-delete, .monaco-diff-editor .char-delete { background-color: \" + removed + \"; }\");\r\n collector.addRule(\".monaco-editor .inline-deleted-margin-view-zone { background-color: \" + removed + \"; }\");\r\n }\r\n var addedOutline = theme.getColor(diffInsertedOutline);\r\n if (addedOutline) {\r\n collector.addRule(\".monaco-editor .line-insert, .monaco-editor .char-insert { border: 1px \" + (theme.type === 'hc' ? 'dashed' : 'solid') + \" \" + addedOutline + \"; }\");\r\n }\r\n var removedOutline = theme.getColor(diffRemovedOutline);\r\n if (removedOutline) {\r\n collector.addRule(\".monaco-editor .line-delete, .monaco-editor .char-delete { border: 1px \" + (theme.type === 'hc' ? 'dashed' : 'solid') + \" \" + removedOutline + \"; }\");\r\n }\r\n var shadow = theme.getColor(scrollbarShadow);\r\n if (shadow) {\r\n collector.addRule(\".monaco-diff-editor.side-by-side .editor.modified { box-shadow: -6px 0 5px -5px \" + shadow + \"; }\");\r\n }\r\n var border = theme.getColor(diffBorder);\r\n if (border) {\r\n collector.addRule(\".monaco-diff-editor.side-by-side .editor.modified { border-left: 1px solid \" + border + \"; }\");\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nexport var IStandaloneThemeService = createDecorator('themeService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nexport var IKeybindingService = createDecorator('keybindingService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nexport var IClipboardService = createDecorator('clipboardService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport * as browser from '../../../base/browser/browser.js';\r\nimport * as aria from '../../../base/browser/ui/aria/aria.js';\r\nimport { Disposable, toDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\r\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\r\nimport { CodeEditorWidget } from '../../browser/widget/codeEditorWidget.js';\r\nimport { DiffEditorWidget } from '../../browser/widget/diffEditorWidget.js';\r\nimport { InternalEditorAction } from '../../common/editorAction.js';\r\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\r\nimport { StandaloneKeybindingService, applyConfigurationValues } from './simpleServices.js';\r\nimport { IStandaloneThemeService } from '../common/standaloneThemeService.js';\r\nimport { MenuRegistry } from '../../../platform/actions/common/actions.js';\r\nimport { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';\r\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\r\nimport { ContextKeyExpr, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\r\nimport { IContextViewService, IContextMenuService } from '../../../platform/contextview/browser/contextView.js';\r\nimport { IInstantiationService, optional } from '../../../platform/instantiation/common/instantiation.js';\r\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\r\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\r\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\r\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\r\nimport { StandaloneCodeEditorNLS } from '../../common/standaloneStrings.js';\r\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\r\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\r\nvar LAST_GENERATED_COMMAND_ID = 0;\r\nvar ariaDomNodeCreated = false;\r\nfunction createAriaDomNode() {\r\n if (ariaDomNodeCreated) {\r\n return;\r\n }\r\n ariaDomNodeCreated = true;\r\n aria.setARIAContainer(document.body);\r\n}\r\n/**\r\n * A code editor to be used both by the standalone editor and the standalone diff editor.\r\n */\r\nvar StandaloneCodeEditor = /** @class */ (function (_super) {\r\n __extends(StandaloneCodeEditor, _super);\r\n function StandaloneCodeEditor(domElement, options, instantiationService, codeEditorService, commandService, contextKeyService, keybindingService, themeService, notificationService, accessibilityService) {\r\n var _this = this;\r\n options = options || {};\r\n options.ariaLabel = options.ariaLabel || StandaloneCodeEditorNLS.editorViewAccessibleLabel;\r\n options.ariaLabel = options.ariaLabel + ';' + (browser.isIE\r\n ? StandaloneCodeEditorNLS.accessibilityHelpMessageIE\r\n : StandaloneCodeEditorNLS.accessibilityHelpMessage);\r\n _this = _super.call(this, domElement, options, {}, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService) || this;\r\n if (keybindingService instanceof StandaloneKeybindingService) {\r\n _this._standaloneKeybindingService = keybindingService;\r\n }\r\n else {\r\n _this._standaloneKeybindingService = null;\r\n }\r\n // Create the ARIA dom node as soon as the first editor is instantiated\r\n createAriaDomNode();\r\n return _this;\r\n }\r\n StandaloneCodeEditor.prototype.addCommand = function (keybinding, handler, context) {\r\n if (!this._standaloneKeybindingService) {\r\n console.warn('Cannot add command because the editor is configured with an unrecognized KeybindingService');\r\n return null;\r\n }\r\n var commandId = 'DYNAMIC_' + (++LAST_GENERATED_COMMAND_ID);\r\n var whenExpression = ContextKeyExpr.deserialize(context);\r\n this._standaloneKeybindingService.addDynamicKeybinding(commandId, keybinding, handler, whenExpression);\r\n return commandId;\r\n };\r\n StandaloneCodeEditor.prototype.createContextKey = function (key, defaultValue) {\r\n return this._contextKeyService.createKey(key, defaultValue);\r\n };\r\n StandaloneCodeEditor.prototype.addAction = function (_descriptor) {\r\n var _this = this;\r\n if ((typeof _descriptor.id !== 'string') || (typeof _descriptor.label !== 'string') || (typeof _descriptor.run !== 'function')) {\r\n throw new Error('Invalid action descriptor, `id`, `label` and `run` are required properties!');\r\n }\r\n if (!this._standaloneKeybindingService) {\r\n console.warn('Cannot add keybinding because the editor is configured with an unrecognized KeybindingService');\r\n return Disposable.None;\r\n }\r\n // Read descriptor options\r\n var id = _descriptor.id;\r\n var label = _descriptor.label;\r\n var precondition = ContextKeyExpr.and(ContextKeyExpr.equals('editorId', this.getId()), ContextKeyExpr.deserialize(_descriptor.precondition));\r\n var keybindings = _descriptor.keybindings;\r\n var keybindingsWhen = ContextKeyExpr.and(precondition, ContextKeyExpr.deserialize(_descriptor.keybindingContext));\r\n var contextMenuGroupId = _descriptor.contextMenuGroupId || null;\r\n var contextMenuOrder = _descriptor.contextMenuOrder || 0;\r\n var run = function () {\r\n return Promise.resolve(_descriptor.run(_this));\r\n };\r\n var toDispose = new DisposableStore();\r\n // Generate a unique id to allow the same descriptor.id across multiple editor instances\r\n var uniqueId = this.getId() + ':' + id;\r\n // Register the command\r\n toDispose.add(CommandsRegistry.registerCommand(uniqueId, run));\r\n // Register the context menu item\r\n if (contextMenuGroupId) {\r\n var menuItem = {\r\n command: {\r\n id: uniqueId,\r\n title: label\r\n },\r\n when: precondition,\r\n group: contextMenuGroupId,\r\n order: contextMenuOrder\r\n };\r\n toDispose.add(MenuRegistry.appendMenuItem(7 /* EditorContext */, menuItem));\r\n }\r\n // Register the keybindings\r\n if (Array.isArray(keybindings)) {\r\n for (var _i = 0, keybindings_1 = keybindings; _i < keybindings_1.length; _i++) {\r\n var kb = keybindings_1[_i];\r\n toDispose.add(this._standaloneKeybindingService.addDynamicKeybinding(uniqueId, kb, run, keybindingsWhen));\r\n }\r\n }\r\n // Finally, register an internal editor action\r\n var internalAction = new InternalEditorAction(uniqueId, label, label, precondition, run, this._contextKeyService);\r\n // Store it under the original id, such that trigger with the original id will work\r\n this._actions[id] = internalAction;\r\n toDispose.add(toDisposable(function () {\r\n delete _this._actions[id];\r\n }));\r\n return toDispose;\r\n };\r\n StandaloneCodeEditor = __decorate([\r\n __param(2, IInstantiationService),\r\n __param(3, ICodeEditorService),\r\n __param(4, ICommandService),\r\n __param(5, IContextKeyService),\r\n __param(6, IKeybindingService),\r\n __param(7, IThemeService),\r\n __param(8, INotificationService),\r\n __param(9, IAccessibilityService)\r\n ], StandaloneCodeEditor);\r\n return StandaloneCodeEditor;\r\n}(CodeEditorWidget));\r\nexport { StandaloneCodeEditor };\r\nvar StandaloneEditor = /** @class */ (function (_super) {\r\n __extends(StandaloneEditor, _super);\r\n function StandaloneEditor(domElement, options, toDispose, instantiationService, codeEditorService, commandService, contextKeyService, keybindingService, contextViewService, themeService, notificationService, configurationService, accessibilityService) {\r\n var _this = this;\r\n applyConfigurationValues(configurationService, options, false);\r\n options = options || {};\r\n if (typeof options.theme === 'string') {\r\n themeService.setTheme(options.theme);\r\n }\r\n var _model = options.model;\r\n delete options.model;\r\n _this = _super.call(this, domElement, options, instantiationService, codeEditorService, commandService, contextKeyService, keybindingService, themeService, notificationService, accessibilityService) || this;\r\n _this._contextViewService = contextViewService;\r\n _this._configurationService = configurationService;\r\n _this._register(toDispose);\r\n var model;\r\n if (typeof _model === 'undefined') {\r\n model = self.monaco.editor.createModel(options.value || '', options.language || 'text/plain');\r\n _this._ownsModel = true;\r\n }\r\n else {\r\n model = _model;\r\n _this._ownsModel = false;\r\n }\r\n _this._attachModel(model);\r\n if (model) {\r\n var e = {\r\n oldModelUrl: null,\r\n newModelUrl: model.uri\r\n };\r\n _this._onDidChangeModel.fire(e);\r\n }\r\n return _this;\r\n }\r\n StandaloneEditor.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n StandaloneEditor.prototype.updateOptions = function (newOptions) {\r\n applyConfigurationValues(this._configurationService, newOptions, false);\r\n _super.prototype.updateOptions.call(this, newOptions);\r\n };\r\n StandaloneEditor.prototype._attachModel = function (model) {\r\n _super.prototype._attachModel.call(this, model);\r\n if (this._modelData) {\r\n this._contextViewService.setContainer(this._modelData.view.domNode.domNode);\r\n }\r\n };\r\n StandaloneEditor.prototype._postDetachModelCleanup = function (detachedModel) {\r\n _super.prototype._postDetachModelCleanup.call(this, detachedModel);\r\n if (detachedModel && this._ownsModel) {\r\n detachedModel.dispose();\r\n this._ownsModel = false;\r\n }\r\n };\r\n StandaloneEditor = __decorate([\r\n __param(3, IInstantiationService),\r\n __param(4, ICodeEditorService),\r\n __param(5, ICommandService),\r\n __param(6, IContextKeyService),\r\n __param(7, IKeybindingService),\r\n __param(8, IContextViewService),\r\n __param(9, IStandaloneThemeService),\r\n __param(10, INotificationService),\r\n __param(11, IConfigurationService),\r\n __param(12, IAccessibilityService)\r\n ], StandaloneEditor);\r\n return StandaloneEditor;\r\n}(StandaloneCodeEditor));\r\nexport { StandaloneEditor };\r\nvar StandaloneDiffEditor = /** @class */ (function (_super) {\r\n __extends(StandaloneDiffEditor, _super);\r\n function StandaloneDiffEditor(domElement, options, toDispose, instantiationService, contextKeyService, keybindingService, contextViewService, editorWorkerService, codeEditorService, themeService, notificationService, configurationService, contextMenuService, editorProgressService, clipboardService) {\r\n var _this = this;\r\n applyConfigurationValues(configurationService, options, true);\r\n options = options || {};\r\n if (typeof options.theme === 'string') {\r\n options.theme = themeService.setTheme(options.theme);\r\n }\r\n _this = _super.call(this, domElement, options, clipboardService, editorWorkerService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, editorProgressService) || this;\r\n _this._contextViewService = contextViewService;\r\n _this._configurationService = configurationService;\r\n _this._register(toDispose);\r\n _this._contextViewService.setContainer(_this._containerDomElement);\r\n return _this;\r\n }\r\n StandaloneDiffEditor.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n };\r\n StandaloneDiffEditor.prototype.updateOptions = function (newOptions) {\r\n applyConfigurationValues(this._configurationService, newOptions, true);\r\n _super.prototype.updateOptions.call(this, newOptions);\r\n };\r\n StandaloneDiffEditor.prototype._createInnerEditor = function (instantiationService, container, options) {\r\n return instantiationService.createInstance(StandaloneCodeEditor, container, options);\r\n };\r\n StandaloneDiffEditor.prototype.getOriginalEditor = function () {\r\n return _super.prototype.getOriginalEditor.call(this);\r\n };\r\n StandaloneDiffEditor.prototype.getModifiedEditor = function () {\r\n return _super.prototype.getModifiedEditor.call(this);\r\n };\r\n StandaloneDiffEditor.prototype.addCommand = function (keybinding, handler, context) {\r\n return this.getModifiedEditor().addCommand(keybinding, handler, context);\r\n };\r\n StandaloneDiffEditor.prototype.createContextKey = function (key, defaultValue) {\r\n return this.getModifiedEditor().createContextKey(key, defaultValue);\r\n };\r\n StandaloneDiffEditor.prototype.addAction = function (descriptor) {\r\n return this.getModifiedEditor().addAction(descriptor);\r\n };\r\n StandaloneDiffEditor = __decorate([\r\n __param(3, IInstantiationService),\r\n __param(4, IContextKeyService),\r\n __param(5, IKeybindingService),\r\n __param(6, IContextViewService),\r\n __param(7, IEditorWorkerService),\r\n __param(8, ICodeEditorService),\r\n __param(9, IStandaloneThemeService),\r\n __param(10, INotificationService),\r\n __param(11, IConfigurationService),\r\n __param(12, IContextMenuService),\r\n __param(13, IEditorProgressService),\r\n __param(14, optional(IClipboardService))\r\n ], StandaloneDiffEditor);\r\n return StandaloneDiffEditor;\r\n}(DiffEditorWidget));\r\nexport { StandaloneDiffEditor };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nexport var IBulkEditService = createDecorator('IWorkspaceEditService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nexport var IModeService = createDecorator('modeService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar FrankensteinMode = /** @class */ (function () {\r\n function FrankensteinMode(languageIdentifier) {\r\n this._languageIdentifier = languageIdentifier;\r\n }\r\n FrankensteinMode.prototype.getId = function () {\r\n return this._languageIdentifier.language;\r\n };\r\n return FrankensteinMode;\r\n}());\r\nexport { FrankensteinMode };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { basename, posix } from './path.js';\r\nimport { endsWith, startsWithUTF8BOM } from './strings.js';\r\nimport { match } from './glob.js';\r\nimport { Schemas } from './network.js';\r\nimport { DataUri } from './resources.js';\r\nexport var MIME_TEXT = 'text/plain';\r\nexport var MIME_UNKNOWN = 'application/unknown';\r\nvar registeredAssociations = [];\r\nvar nonUserRegisteredAssociations = [];\r\nvar userRegisteredAssociations = [];\r\n/**\r\n * Associate a text mime to the registry.\r\n */\r\nexport function registerTextMime(association, warnOnOverwrite) {\r\n if (warnOnOverwrite === void 0) { warnOnOverwrite = false; }\r\n // Register\r\n var associationItem = toTextMimeAssociationItem(association);\r\n registeredAssociations.push(associationItem);\r\n if (!associationItem.userConfigured) {\r\n nonUserRegisteredAssociations.push(associationItem);\r\n }\r\n else {\r\n userRegisteredAssociations.push(associationItem);\r\n }\r\n // Check for conflicts unless this is a user configured association\r\n if (warnOnOverwrite && !associationItem.userConfigured) {\r\n registeredAssociations.forEach(function (a) {\r\n if (a.mime === associationItem.mime || a.userConfigured) {\r\n return; // same mime or userConfigured is ok\r\n }\r\n if (associationItem.extension && a.extension === associationItem.extension) {\r\n console.warn(\"Overwriting extension <<\" + associationItem.extension + \">> to now point to mime <<\" + associationItem.mime + \">>\");\r\n }\r\n if (associationItem.filename && a.filename === associationItem.filename) {\r\n console.warn(\"Overwriting filename <<\" + associationItem.filename + \">> to now point to mime <<\" + associationItem.mime + \">>\");\r\n }\r\n if (associationItem.filepattern && a.filepattern === associationItem.filepattern) {\r\n console.warn(\"Overwriting filepattern <<\" + associationItem.filepattern + \">> to now point to mime <<\" + associationItem.mime + \">>\");\r\n }\r\n if (associationItem.firstline && a.firstline === associationItem.firstline) {\r\n console.warn(\"Overwriting firstline <<\" + associationItem.firstline + \">> to now point to mime <<\" + associationItem.mime + \">>\");\r\n }\r\n });\r\n }\r\n}\r\nfunction toTextMimeAssociationItem(association) {\r\n return {\r\n id: association.id,\r\n mime: association.mime,\r\n filename: association.filename,\r\n extension: association.extension,\r\n filepattern: association.filepattern,\r\n firstline: association.firstline,\r\n userConfigured: association.userConfigured,\r\n filenameLowercase: association.filename ? association.filename.toLowerCase() : undefined,\r\n extensionLowercase: association.extension ? association.extension.toLowerCase() : undefined,\r\n filepatternLowercase: association.filepattern ? association.filepattern.toLowerCase() : undefined,\r\n filepatternOnPath: association.filepattern ? association.filepattern.indexOf(posix.sep) >= 0 : false\r\n };\r\n}\r\n/**\r\n * Given a file, return the best matching mime type for it\r\n */\r\nexport function guessMimeTypes(resource, firstLine) {\r\n var path;\r\n if (resource) {\r\n switch (resource.scheme) {\r\n case Schemas.file:\r\n path = resource.fsPath;\r\n break;\r\n case Schemas.data:\r\n var metadata = DataUri.parseMetaData(resource);\r\n path = metadata.get(DataUri.META_DATA_LABEL);\r\n break;\r\n default:\r\n path = resource.path;\r\n }\r\n }\r\n if (!path) {\r\n return [MIME_UNKNOWN];\r\n }\r\n path = path.toLowerCase();\r\n var filename = basename(path);\r\n // 1.) User configured mappings have highest priority\r\n var configuredMime = guessMimeTypeByPath(path, filename, userRegisteredAssociations);\r\n if (configuredMime) {\r\n return [configuredMime, MIME_TEXT];\r\n }\r\n // 2.) Registered mappings have middle priority\r\n var registeredMime = guessMimeTypeByPath(path, filename, nonUserRegisteredAssociations);\r\n if (registeredMime) {\r\n return [registeredMime, MIME_TEXT];\r\n }\r\n // 3.) Firstline has lowest priority\r\n if (firstLine) {\r\n var firstlineMime = guessMimeTypeByFirstline(firstLine);\r\n if (firstlineMime) {\r\n return [firstlineMime, MIME_TEXT];\r\n }\r\n }\r\n return [MIME_UNKNOWN];\r\n}\r\nfunction guessMimeTypeByPath(path, filename, associations) {\r\n var filenameMatch = null;\r\n var patternMatch = null;\r\n var extensionMatch = null;\r\n // We want to prioritize associations based on the order they are registered so that the last registered\r\n // association wins over all other. This is for https://github.com/Microsoft/vscode/issues/20074\r\n for (var i = associations.length - 1; i >= 0; i--) {\r\n var association = associations[i];\r\n // First exact name match\r\n if (filename === association.filenameLowercase) {\r\n filenameMatch = association;\r\n break; // take it!\r\n }\r\n // Longest pattern match\r\n if (association.filepattern) {\r\n if (!patternMatch || association.filepattern.length > patternMatch.filepattern.length) {\r\n var target = association.filepatternOnPath ? path : filename; // match on full path if pattern contains path separator\r\n if (match(association.filepatternLowercase, target)) {\r\n patternMatch = association;\r\n }\r\n }\r\n }\r\n // Longest extension match\r\n if (association.extension) {\r\n if (!extensionMatch || association.extension.length > extensionMatch.extension.length) {\r\n if (endsWith(filename, association.extensionLowercase)) {\r\n extensionMatch = association;\r\n }\r\n }\r\n }\r\n }\r\n // 1.) Exact name match has second highest prio\r\n if (filenameMatch) {\r\n return filenameMatch.mime;\r\n }\r\n // 2.) Match on pattern\r\n if (patternMatch) {\r\n return patternMatch.mime;\r\n }\r\n // 3.) Match on extension comes next\r\n if (extensionMatch) {\r\n return extensionMatch.mime;\r\n }\r\n return null;\r\n}\r\nfunction guessMimeTypeByFirstline(firstLine) {\r\n if (startsWithUTF8BOM(firstLine)) {\r\n firstLine = firstLine.substr(1);\r\n }\r\n if (firstLine.length > 0) {\r\n // We want to prioritize associations based on the order they are registered so that the last registered\r\n // association wins over all other. This is for https://github.com/Microsoft/vscode/issues/20074\r\n for (var i = registeredAssociations.length - 1; i >= 0; i--) {\r\n var association = registeredAssociations[i];\r\n if (!association.firstline) {\r\n continue;\r\n }\r\n var matches = firstLine.match(association.firstline);\r\n if (matches && matches.length > 0) {\r\n return association.mime;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as nls from '../../../nls.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { LanguageIdentifier } from '../modes.js';\r\nimport { LanguageConfigurationRegistry } from './languageConfigurationRegistry.js';\r\nimport { Registry } from '../../../platform/registry/common/platform.js';\r\n// Define extension point ids\r\nexport var Extensions = {\r\n ModesRegistry: 'editor.modesRegistry'\r\n};\r\nvar EditorModesRegistry = /** @class */ (function () {\r\n function EditorModesRegistry() {\r\n this._onDidChangeLanguages = new Emitter();\r\n this.onDidChangeLanguages = this._onDidChangeLanguages.event;\r\n this._languages = [];\r\n this._dynamicLanguages = [];\r\n }\r\n // --- languages\r\n EditorModesRegistry.prototype.registerLanguage = function (def) {\r\n this._languages.push(def);\r\n this._onDidChangeLanguages.fire(undefined);\r\n };\r\n EditorModesRegistry.prototype.getLanguages = function () {\r\n return [].concat(this._languages).concat(this._dynamicLanguages);\r\n };\r\n return EditorModesRegistry;\r\n}());\r\nexport { EditorModesRegistry };\r\nexport var ModesRegistry = new EditorModesRegistry();\r\nRegistry.add(Extensions.ModesRegistry, ModesRegistry);\r\nexport var PLAINTEXT_MODE_ID = 'plaintext';\r\nexport var PLAINTEXT_LANGUAGE_IDENTIFIER = new LanguageIdentifier(PLAINTEXT_MODE_ID, 1 /* PlainText */);\r\nModesRegistry.registerLanguage({\r\n id: PLAINTEXT_MODE_ID,\r\n extensions: ['.txt', '.gitignore'],\r\n aliases: [nls.localize('plainText.alias', \"Plain Text\"), 'text'],\r\n mimetypes: ['text/plain']\r\n});\r\nLanguageConfigurationRegistry.register(PLAINTEXT_LANGUAGE_IDENTIFIER, {\r\n brackets: [\r\n ['(', ')'],\r\n ['[', ']'],\r\n ['{', '}'],\r\n ],\r\n surroundingPairs: [\r\n { open: '{', close: '}' },\r\n { open: '[', close: ']' },\r\n { open: '(', close: ')' },\r\n { open: '<', close: '>' },\r\n { open: '\\\"', close: '\\\"' },\r\n { open: '\\'', close: '\\'' },\r\n { open: '`', close: '`' },\r\n ],\r\n folding: {\r\n offSide: true\r\n }\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { onUnexpectedError } from '../../../base/common/errors.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport * as mime from '../../../base/common/mime.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { LanguageIdentifier } from '../modes.js';\r\nimport { ModesRegistry } from '../modes/modesRegistry.js';\r\nimport { NULL_LANGUAGE_IDENTIFIER, NULL_MODE_ID } from '../modes/nullMode.js';\r\nimport { Extensions } from '../../../platform/configuration/common/configurationRegistry.js';\r\nimport { Registry } from '../../../platform/registry/common/platform.js';\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\nvar LanguagesRegistry = /** @class */ (function (_super) {\r\n __extends(LanguagesRegistry, _super);\r\n function LanguagesRegistry(useModesRegistry, warnOnOverwrite) {\r\n if (useModesRegistry === void 0) { useModesRegistry = true; }\r\n if (warnOnOverwrite === void 0) { warnOnOverwrite = false; }\r\n var _this = _super.call(this) || this;\r\n _this._onDidChange = _this._register(new Emitter());\r\n _this.onDidChange = _this._onDidChange.event;\r\n _this._warnOnOverwrite = warnOnOverwrite;\r\n _this._nextLanguageId2 = 1;\r\n _this._languageIdToLanguage = [];\r\n _this._languageToLanguageId = Object.create(null);\r\n _this._languages = {};\r\n _this._mimeTypesMap = {};\r\n _this._nameMap = {};\r\n _this._lowercaseNameMap = {};\r\n if (useModesRegistry) {\r\n _this._initializeFromRegistry();\r\n _this._register(ModesRegistry.onDidChangeLanguages(function (m) { return _this._initializeFromRegistry(); }));\r\n }\r\n return _this;\r\n }\r\n LanguagesRegistry.prototype._initializeFromRegistry = function () {\r\n this._languages = {};\r\n this._mimeTypesMap = {};\r\n this._nameMap = {};\r\n this._lowercaseNameMap = {};\r\n var desc = ModesRegistry.getLanguages();\r\n this._registerLanguages(desc);\r\n };\r\n LanguagesRegistry.prototype._registerLanguages = function (desc) {\r\n var _this = this;\r\n for (var _i = 0, desc_1 = desc; _i < desc_1.length; _i++) {\r\n var d = desc_1[_i];\r\n this._registerLanguage(d);\r\n }\r\n // Rebuild fast path maps\r\n this._mimeTypesMap = {};\r\n this._nameMap = {};\r\n this._lowercaseNameMap = {};\r\n Object.keys(this._languages).forEach(function (langId) {\r\n var language = _this._languages[langId];\r\n if (language.name) {\r\n _this._nameMap[language.name] = language.identifier;\r\n }\r\n language.aliases.forEach(function (alias) {\r\n _this._lowercaseNameMap[alias.toLowerCase()] = language.identifier;\r\n });\r\n language.mimetypes.forEach(function (mimetype) {\r\n _this._mimeTypesMap[mimetype] = language.identifier;\r\n });\r\n });\r\n Registry.as(Extensions.Configuration).registerOverrideIdentifiers(ModesRegistry.getLanguages().map(function (language) { return language.id; }));\r\n this._onDidChange.fire();\r\n };\r\n LanguagesRegistry.prototype._getLanguageId = function (language) {\r\n if (this._languageToLanguageId[language]) {\r\n return this._languageToLanguageId[language];\r\n }\r\n var languageId = this._nextLanguageId2++;\r\n this._languageIdToLanguage[languageId] = language;\r\n this._languageToLanguageId[language] = languageId;\r\n return languageId;\r\n };\r\n LanguagesRegistry.prototype._registerLanguage = function (lang) {\r\n var langId = lang.id;\r\n var resolvedLanguage;\r\n if (hasOwnProperty.call(this._languages, langId)) {\r\n resolvedLanguage = this._languages[langId];\r\n }\r\n else {\r\n var languageId = this._getLanguageId(langId);\r\n resolvedLanguage = {\r\n identifier: new LanguageIdentifier(langId, languageId),\r\n name: null,\r\n mimetypes: [],\r\n aliases: [],\r\n extensions: [],\r\n filenames: [],\r\n configurationFiles: []\r\n };\r\n this._languages[langId] = resolvedLanguage;\r\n }\r\n this._mergeLanguage(resolvedLanguage, lang);\r\n };\r\n LanguagesRegistry.prototype._mergeLanguage = function (resolvedLanguage, lang) {\r\n var _a;\r\n var langId = lang.id;\r\n var primaryMime = null;\r\n if (Array.isArray(lang.mimetypes) && lang.mimetypes.length > 0) {\r\n (_a = resolvedLanguage.mimetypes).push.apply(_a, lang.mimetypes);\r\n primaryMime = lang.mimetypes[0];\r\n }\r\n if (!primaryMime) {\r\n primaryMime = \"text/x-\" + langId;\r\n resolvedLanguage.mimetypes.push(primaryMime);\r\n }\r\n if (Array.isArray(lang.extensions)) {\r\n for (var _i = 0, _b = lang.extensions; _i < _b.length; _i++) {\r\n var extension = _b[_i];\r\n mime.registerTextMime({ id: langId, mime: primaryMime, extension: extension }, this._warnOnOverwrite);\r\n resolvedLanguage.extensions.push(extension);\r\n }\r\n }\r\n if (Array.isArray(lang.filenames)) {\r\n for (var _c = 0, _d = lang.filenames; _c < _d.length; _c++) {\r\n var filename = _d[_c];\r\n mime.registerTextMime({ id: langId, mime: primaryMime, filename: filename }, this._warnOnOverwrite);\r\n resolvedLanguage.filenames.push(filename);\r\n }\r\n }\r\n if (Array.isArray(lang.filenamePatterns)) {\r\n for (var _e = 0, _f = lang.filenamePatterns; _e < _f.length; _e++) {\r\n var filenamePattern = _f[_e];\r\n mime.registerTextMime({ id: langId, mime: primaryMime, filepattern: filenamePattern }, this._warnOnOverwrite);\r\n }\r\n }\r\n if (typeof lang.firstLine === 'string' && lang.firstLine.length > 0) {\r\n var firstLineRegexStr = lang.firstLine;\r\n if (firstLineRegexStr.charAt(0) !== '^') {\r\n firstLineRegexStr = '^' + firstLineRegexStr;\r\n }\r\n try {\r\n var firstLineRegex = new RegExp(firstLineRegexStr);\r\n if (!strings.regExpLeadsToEndlessLoop(firstLineRegex)) {\r\n mime.registerTextMime({ id: langId, mime: primaryMime, firstline: firstLineRegex }, this._warnOnOverwrite);\r\n }\r\n }\r\n catch (err) {\r\n // Most likely, the regex was bad\r\n onUnexpectedError(err);\r\n }\r\n }\r\n resolvedLanguage.aliases.push(langId);\r\n var langAliases = null;\r\n if (typeof lang.aliases !== 'undefined' && Array.isArray(lang.aliases)) {\r\n if (lang.aliases.length === 0) {\r\n // signal that this language should not get a name\r\n langAliases = [null];\r\n }\r\n else {\r\n langAliases = lang.aliases;\r\n }\r\n }\r\n if (langAliases !== null) {\r\n for (var _g = 0, langAliases_1 = langAliases; _g < langAliases_1.length; _g++) {\r\n var langAlias = langAliases_1[_g];\r\n if (!langAlias || langAlias.length === 0) {\r\n continue;\r\n }\r\n resolvedLanguage.aliases.push(langAlias);\r\n }\r\n }\r\n var containsAliases = (langAliases !== null && langAliases.length > 0);\r\n if (containsAliases && langAliases[0] === null) {\r\n // signal that this language should not get a name\r\n }\r\n else {\r\n var bestName = (containsAliases ? langAliases[0] : null) || langId;\r\n if (containsAliases || !resolvedLanguage.name) {\r\n resolvedLanguage.name = bestName;\r\n }\r\n }\r\n if (lang.configuration) {\r\n resolvedLanguage.configurationFiles.push(lang.configuration);\r\n }\r\n };\r\n LanguagesRegistry.prototype.isRegisteredMode = function (mimetypeOrModeId) {\r\n // Is this a known mime type ?\r\n if (hasOwnProperty.call(this._mimeTypesMap, mimetypeOrModeId)) {\r\n return true;\r\n }\r\n // Is this a known mode id ?\r\n return hasOwnProperty.call(this._languages, mimetypeOrModeId);\r\n };\r\n LanguagesRegistry.prototype.getModeIdForLanguageNameLowercase = function (languageNameLower) {\r\n if (!hasOwnProperty.call(this._lowercaseNameMap, languageNameLower)) {\r\n return null;\r\n }\r\n return this._lowercaseNameMap[languageNameLower].language;\r\n };\r\n LanguagesRegistry.prototype.extractModeIds = function (commaSeparatedMimetypesOrCommaSeparatedIds) {\r\n var _this = this;\r\n if (!commaSeparatedMimetypesOrCommaSeparatedIds) {\r\n return [];\r\n }\r\n return (commaSeparatedMimetypesOrCommaSeparatedIds.\r\n split(',').\r\n map(function (mimeTypeOrId) { return mimeTypeOrId.trim(); }).\r\n map(function (mimeTypeOrId) {\r\n if (hasOwnProperty.call(_this._mimeTypesMap, mimeTypeOrId)) {\r\n return _this._mimeTypesMap[mimeTypeOrId].language;\r\n }\r\n return mimeTypeOrId;\r\n }).\r\n filter(function (modeId) {\r\n return hasOwnProperty.call(_this._languages, modeId);\r\n }));\r\n };\r\n LanguagesRegistry.prototype.getLanguageIdentifier = function (_modeId) {\r\n if (_modeId === NULL_MODE_ID || _modeId === 0 /* Null */) {\r\n return NULL_LANGUAGE_IDENTIFIER;\r\n }\r\n var modeId;\r\n if (typeof _modeId === 'string') {\r\n modeId = _modeId;\r\n }\r\n else {\r\n modeId = this._languageIdToLanguage[_modeId];\r\n if (!modeId) {\r\n return null;\r\n }\r\n }\r\n if (!hasOwnProperty.call(this._languages, modeId)) {\r\n return null;\r\n }\r\n return this._languages[modeId].identifier;\r\n };\r\n LanguagesRegistry.prototype.getModeIdsFromFilepathOrFirstLine = function (resource, firstLine) {\r\n if (!resource && !firstLine) {\r\n return [];\r\n }\r\n var mimeTypes = mime.guessMimeTypes(resource, firstLine);\r\n return this.extractModeIds(mimeTypes.join(','));\r\n };\r\n return LanguagesRegistry;\r\n}(Disposable));\r\nexport { LanguagesRegistry };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { FrankensteinMode } from '../modes/abstractMode.js';\r\nimport { NULL_LANGUAGE_IDENTIFIER } from '../modes/nullMode.js';\r\nimport { LanguagesRegistry } from './languagesRegistry.js';\r\nimport { firstOrDefault } from '../../../base/common/arrays.js';\r\nvar LanguageSelection = /** @class */ (function (_super) {\r\n __extends(LanguageSelection, _super);\r\n function LanguageSelection(onLanguagesMaybeChanged, selector) {\r\n var _this = _super.call(this) || this;\r\n _this._onDidChange = _this._register(new Emitter());\r\n _this.onDidChange = _this._onDidChange.event;\r\n _this._selector = selector;\r\n _this.languageIdentifier = _this._selector();\r\n _this._register(onLanguagesMaybeChanged(function () { return _this._evaluate(); }));\r\n return _this;\r\n }\r\n LanguageSelection.prototype._evaluate = function () {\r\n var languageIdentifier = this._selector();\r\n if (languageIdentifier.id === this.languageIdentifier.id) {\r\n // no change\r\n return;\r\n }\r\n this.languageIdentifier = languageIdentifier;\r\n this._onDidChange.fire(this.languageIdentifier);\r\n };\r\n return LanguageSelection;\r\n}(Disposable));\r\nvar ModeServiceImpl = /** @class */ (function () {\r\n function ModeServiceImpl(warnOnOverwrite) {\r\n var _this = this;\r\n if (warnOnOverwrite === void 0) { warnOnOverwrite = false; }\r\n this._onDidCreateMode = new Emitter();\r\n this.onDidCreateMode = this._onDidCreateMode.event;\r\n this._onLanguagesMaybeChanged = new Emitter();\r\n this.onLanguagesMaybeChanged = this._onLanguagesMaybeChanged.event;\r\n this._instantiatedModes = {};\r\n this._registry = new LanguagesRegistry(true, warnOnOverwrite);\r\n this._registry.onDidChange(function () { return _this._onLanguagesMaybeChanged.fire(); });\r\n }\r\n ModeServiceImpl.prototype.isRegisteredMode = function (mimetypeOrModeId) {\r\n return this._registry.isRegisteredMode(mimetypeOrModeId);\r\n };\r\n ModeServiceImpl.prototype.getModeIdForLanguageName = function (alias) {\r\n return this._registry.getModeIdForLanguageNameLowercase(alias);\r\n };\r\n ModeServiceImpl.prototype.getModeIdByFilepathOrFirstLine = function (resource, firstLine) {\r\n var modeIds = this._registry.getModeIdsFromFilepathOrFirstLine(resource, firstLine);\r\n return firstOrDefault(modeIds, null);\r\n };\r\n ModeServiceImpl.prototype.getModeId = function (commaSeparatedMimetypesOrCommaSeparatedIds) {\r\n var modeIds = this._registry.extractModeIds(commaSeparatedMimetypesOrCommaSeparatedIds);\r\n return firstOrDefault(modeIds, null);\r\n };\r\n ModeServiceImpl.prototype.getLanguageIdentifier = function (modeId) {\r\n return this._registry.getLanguageIdentifier(modeId);\r\n };\r\n // --- instantiation\r\n ModeServiceImpl.prototype.create = function (commaSeparatedMimetypesOrCommaSeparatedIds) {\r\n var _this = this;\r\n return new LanguageSelection(this.onLanguagesMaybeChanged, function () {\r\n var modeId = _this.getModeId(commaSeparatedMimetypesOrCommaSeparatedIds);\r\n return _this._createModeAndGetLanguageIdentifier(modeId);\r\n });\r\n };\r\n ModeServiceImpl.prototype.createByFilepathOrFirstLine = function (resource, firstLine) {\r\n var _this = this;\r\n return new LanguageSelection(this.onLanguagesMaybeChanged, function () {\r\n var modeId = _this.getModeIdByFilepathOrFirstLine(resource, firstLine);\r\n return _this._createModeAndGetLanguageIdentifier(modeId);\r\n });\r\n };\r\n ModeServiceImpl.prototype._createModeAndGetLanguageIdentifier = function (modeId) {\r\n // Fall back to plain text if no mode was found\r\n var languageIdentifier = this.getLanguageIdentifier(modeId || 'plaintext') || NULL_LANGUAGE_IDENTIFIER;\r\n this._getOrCreateMode(languageIdentifier.language);\r\n return languageIdentifier;\r\n };\r\n ModeServiceImpl.prototype.triggerMode = function (commaSeparatedMimetypesOrCommaSeparatedIds) {\r\n var modeId = this.getModeId(commaSeparatedMimetypesOrCommaSeparatedIds);\r\n // Fall back to plain text if no mode was found\r\n this._getOrCreateMode(modeId || 'plaintext');\r\n };\r\n ModeServiceImpl.prototype._getOrCreateMode = function (modeId) {\r\n if (!this._instantiatedModes.hasOwnProperty(modeId)) {\r\n var languageIdentifier = this.getLanguageIdentifier(modeId) || NULL_LANGUAGE_IDENTIFIER;\r\n this._instantiatedModes[modeId] = new FrankensteinMode(languageIdentifier);\r\n this._onDidCreateMode.fire(this._instantiatedModes[modeId]);\r\n }\r\n return this._instantiatedModes[modeId];\r\n };\r\n return ModeServiceImpl;\r\n}());\r\nexport { ModeServiceImpl };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\r\nimport * as platform from '../../../base/common/platform.js';\r\nimport * as errors from '../../../base/common/errors.js';\r\nimport { EDITOR_MODEL_DEFAULTS } from '../config/editorOptions.js';\r\nimport { TextModel } from '../model/textModel.js';\r\nimport { SemanticTokensProviderRegistry } from '../modes.js';\r\nimport { PLAINTEXT_LANGUAGE_IDENTIFIER } from '../modes/modesRegistry.js';\r\nimport { ITextResourcePropertiesService } from './resourceConfiguration.js';\r\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\r\nimport { RunOnceScheduler } from '../../../base/common/async.js';\r\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\r\nimport { SparseEncodedTokens, MultilineTokens2 } from '../model/tokensStore.js';\r\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\r\nfunction MODEL_ID(resource) {\r\n return resource.toString();\r\n}\r\nvar ModelData = /** @class */ (function () {\r\n function ModelData(model, onWillDispose, onDidChangeLanguage) {\r\n this._modelEventListeners = new DisposableStore();\r\n this.model = model;\r\n this._languageSelection = null;\r\n this._languageSelectionListener = null;\r\n this._modelEventListeners.add(model.onWillDispose(function () { return onWillDispose(model); }));\r\n this._modelEventListeners.add(model.onDidChangeLanguage(function (e) { return onDidChangeLanguage(model, e); }));\r\n }\r\n ModelData.prototype._disposeLanguageSelection = function () {\r\n if (this._languageSelectionListener) {\r\n this._languageSelectionListener.dispose();\r\n this._languageSelectionListener = null;\r\n }\r\n if (this._languageSelection) {\r\n this._languageSelection.dispose();\r\n this._languageSelection = null;\r\n }\r\n };\r\n ModelData.prototype.dispose = function () {\r\n this._modelEventListeners.dispose();\r\n this._disposeLanguageSelection();\r\n };\r\n ModelData.prototype.setLanguage = function (languageSelection) {\r\n var _this = this;\r\n this._disposeLanguageSelection();\r\n this._languageSelection = languageSelection;\r\n this._languageSelectionListener = this._languageSelection.onDidChange(function () { return _this.model.setMode(languageSelection.languageIdentifier); });\r\n this.model.setMode(languageSelection.languageIdentifier);\r\n };\r\n return ModelData;\r\n}());\r\nvar DEFAULT_EOL = (platform.isLinux || platform.isMacintosh) ? 1 /* LF */ : 2 /* CRLF */;\r\nvar ModelServiceImpl = /** @class */ (function (_super) {\r\n __extends(ModelServiceImpl, _super);\r\n function ModelServiceImpl(configurationService, resourcePropertiesService, themeService) {\r\n var _this = _super.call(this) || this;\r\n _this._onModelAdded = _this._register(new Emitter());\r\n _this.onModelAdded = _this._onModelAdded.event;\r\n _this._onModelRemoved = _this._register(new Emitter());\r\n _this.onModelRemoved = _this._onModelRemoved.event;\r\n _this._onModelModeChanged = _this._register(new Emitter());\r\n _this.onModelModeChanged = _this._onModelModeChanged.event;\r\n _this._configurationService = configurationService;\r\n _this._resourcePropertiesService = resourcePropertiesService;\r\n _this._models = {};\r\n _this._modelCreationOptionsByLanguageAndResource = Object.create(null);\r\n _this._configurationServiceSubscription = _this._configurationService.onDidChangeConfiguration(function (e) { return _this._updateModelOptions(); });\r\n _this._updateModelOptions();\r\n _this._register(new SemanticColoringFeature(_this, themeService));\r\n return _this;\r\n }\r\n ModelServiceImpl._readModelOptions = function (config, isForSimpleWidget) {\r\n var tabSize = EDITOR_MODEL_DEFAULTS.tabSize;\r\n if (config.editor && typeof config.editor.tabSize !== 'undefined') {\r\n var parsedTabSize = parseInt(config.editor.tabSize, 10);\r\n if (!isNaN(parsedTabSize)) {\r\n tabSize = parsedTabSize;\r\n }\r\n if (tabSize < 1) {\r\n tabSize = 1;\r\n }\r\n }\r\n var indentSize = tabSize;\r\n if (config.editor && typeof config.editor.indentSize !== 'undefined' && config.editor.indentSize !== 'tabSize') {\r\n var parsedIndentSize = parseInt(config.editor.indentSize, 10);\r\n if (!isNaN(parsedIndentSize)) {\r\n indentSize = parsedIndentSize;\r\n }\r\n if (indentSize < 1) {\r\n indentSize = 1;\r\n }\r\n }\r\n var insertSpaces = EDITOR_MODEL_DEFAULTS.insertSpaces;\r\n if (config.editor && typeof config.editor.insertSpaces !== 'undefined') {\r\n insertSpaces = (config.editor.insertSpaces === 'false' ? false : Boolean(config.editor.insertSpaces));\r\n }\r\n var newDefaultEOL = DEFAULT_EOL;\r\n var eol = config.eol;\r\n if (eol === '\\r\\n') {\r\n newDefaultEOL = 2 /* CRLF */;\r\n }\r\n else if (eol === '\\n') {\r\n newDefaultEOL = 1 /* LF */;\r\n }\r\n var trimAutoWhitespace = EDITOR_MODEL_DEFAULTS.trimAutoWhitespace;\r\n if (config.editor && typeof config.editor.trimAutoWhitespace !== 'undefined') {\r\n trimAutoWhitespace = (config.editor.trimAutoWhitespace === 'false' ? false : Boolean(config.editor.trimAutoWhitespace));\r\n }\r\n var detectIndentation = EDITOR_MODEL_DEFAULTS.detectIndentation;\r\n if (config.editor && typeof config.editor.detectIndentation !== 'undefined') {\r\n detectIndentation = (config.editor.detectIndentation === 'false' ? false : Boolean(config.editor.detectIndentation));\r\n }\r\n var largeFileOptimizations = EDITOR_MODEL_DEFAULTS.largeFileOptimizations;\r\n if (config.editor && typeof config.editor.largeFileOptimizations !== 'undefined') {\r\n largeFileOptimizations = (config.editor.largeFileOptimizations === 'false' ? false : Boolean(config.editor.largeFileOptimizations));\r\n }\r\n return {\r\n isForSimpleWidget: isForSimpleWidget,\r\n tabSize: tabSize,\r\n indentSize: indentSize,\r\n insertSpaces: insertSpaces,\r\n detectIndentation: detectIndentation,\r\n defaultEOL: newDefaultEOL,\r\n trimAutoWhitespace: trimAutoWhitespace,\r\n largeFileOptimizations: largeFileOptimizations\r\n };\r\n };\r\n ModelServiceImpl.prototype.getCreationOptions = function (language, resource, isForSimpleWidget) {\r\n var creationOptions = this._modelCreationOptionsByLanguageAndResource[language + resource];\r\n if (!creationOptions) {\r\n var editor = this._configurationService.getValue('editor', { overrideIdentifier: language, resource: resource });\r\n var eol = this._resourcePropertiesService.getEOL(resource, language);\r\n creationOptions = ModelServiceImpl._readModelOptions({ editor: editor, eol: eol }, isForSimpleWidget);\r\n this._modelCreationOptionsByLanguageAndResource[language + resource] = creationOptions;\r\n }\r\n return creationOptions;\r\n };\r\n ModelServiceImpl.prototype._updateModelOptions = function () {\r\n var oldOptionsByLanguageAndResource = this._modelCreationOptionsByLanguageAndResource;\r\n this._modelCreationOptionsByLanguageAndResource = Object.create(null);\r\n // Update options on all models\r\n var keys = Object.keys(this._models);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var modelId = keys[i];\r\n var modelData = this._models[modelId];\r\n var language = modelData.model.getLanguageIdentifier().language;\r\n var uri = modelData.model.uri;\r\n var oldOptions = oldOptionsByLanguageAndResource[language + uri];\r\n var newOptions = this.getCreationOptions(language, uri, modelData.model.isForSimpleWidget);\r\n ModelServiceImpl._setModelOptionsForModel(modelData.model, newOptions, oldOptions);\r\n }\r\n };\r\n ModelServiceImpl._setModelOptionsForModel = function (model, newOptions, currentOptions) {\r\n if (currentOptions && currentOptions.defaultEOL !== newOptions.defaultEOL && model.getLineCount() === 1) {\r\n model.setEOL(newOptions.defaultEOL === 1 /* LF */ ? 0 /* LF */ : 1 /* CRLF */);\r\n }\r\n if (currentOptions\r\n && (currentOptions.detectIndentation === newOptions.detectIndentation)\r\n && (currentOptions.insertSpaces === newOptions.insertSpaces)\r\n && (currentOptions.tabSize === newOptions.tabSize)\r\n && (currentOptions.indentSize === newOptions.indentSize)\r\n && (currentOptions.trimAutoWhitespace === newOptions.trimAutoWhitespace)) {\r\n // Same indent opts, no need to touch the model\r\n return;\r\n }\r\n if (newOptions.detectIndentation) {\r\n model.detectIndentation(newOptions.insertSpaces, newOptions.tabSize);\r\n model.updateOptions({\r\n trimAutoWhitespace: newOptions.trimAutoWhitespace\r\n });\r\n }\r\n else {\r\n model.updateOptions({\r\n insertSpaces: newOptions.insertSpaces,\r\n tabSize: newOptions.tabSize,\r\n indentSize: newOptions.indentSize,\r\n trimAutoWhitespace: newOptions.trimAutoWhitespace\r\n });\r\n }\r\n };\r\n ModelServiceImpl.prototype.dispose = function () {\r\n this._configurationServiceSubscription.dispose();\r\n _super.prototype.dispose.call(this);\r\n };\r\n // --- begin IModelService\r\n ModelServiceImpl.prototype._createModelData = function (value, languageIdentifier, resource, isForSimpleWidget) {\r\n var _this = this;\r\n // create & save the model\r\n var options = this.getCreationOptions(languageIdentifier.language, resource, isForSimpleWidget);\r\n var model = new TextModel(value, options, languageIdentifier, resource);\r\n var modelId = MODEL_ID(model.uri);\r\n if (this._models[modelId]) {\r\n // There already exists a model with this id => this is a programmer error\r\n throw new Error('ModelService: Cannot add model because it already exists!');\r\n }\r\n var modelData = new ModelData(model, function (model) { return _this._onWillDispose(model); }, function (model, e) { return _this._onDidChangeLanguage(model, e); });\r\n this._models[modelId] = modelData;\r\n return modelData;\r\n };\r\n ModelServiceImpl.prototype.createModel = function (value, languageSelection, resource, isForSimpleWidget) {\r\n if (isForSimpleWidget === void 0) { isForSimpleWidget = false; }\r\n var modelData;\r\n if (languageSelection) {\r\n modelData = this._createModelData(value, languageSelection.languageIdentifier, resource, isForSimpleWidget);\r\n this.setMode(modelData.model, languageSelection);\r\n }\r\n else {\r\n modelData = this._createModelData(value, PLAINTEXT_LANGUAGE_IDENTIFIER, resource, isForSimpleWidget);\r\n }\r\n this._onModelAdded.fire(modelData.model);\r\n return modelData.model;\r\n };\r\n ModelServiceImpl.prototype.setMode = function (model, languageSelection) {\r\n if (!languageSelection) {\r\n return;\r\n }\r\n var modelData = this._models[MODEL_ID(model.uri)];\r\n if (!modelData) {\r\n return;\r\n }\r\n modelData.setLanguage(languageSelection);\r\n };\r\n ModelServiceImpl.prototype.getModels = function () {\r\n var ret = [];\r\n var keys = Object.keys(this._models);\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var modelId = keys[i];\r\n ret.push(this._models[modelId].model);\r\n }\r\n return ret;\r\n };\r\n ModelServiceImpl.prototype.getModel = function (resource) {\r\n var modelId = MODEL_ID(resource);\r\n var modelData = this._models[modelId];\r\n if (!modelData) {\r\n return null;\r\n }\r\n return modelData.model;\r\n };\r\n // --- end IModelService\r\n ModelServiceImpl.prototype._onWillDispose = function (model) {\r\n var modelId = MODEL_ID(model.uri);\r\n var modelData = this._models[modelId];\r\n delete this._models[modelId];\r\n modelData.dispose();\r\n // clean up cache\r\n delete this._modelCreationOptionsByLanguageAndResource[model.getLanguageIdentifier().language + model.uri];\r\n this._onModelRemoved.fire(model);\r\n };\r\n ModelServiceImpl.prototype._onDidChangeLanguage = function (model, e) {\r\n var oldModeId = e.oldLanguage;\r\n var newModeId = model.getLanguageIdentifier().language;\r\n var oldOptions = this.getCreationOptions(oldModeId, model.uri, model.isForSimpleWidget);\r\n var newOptions = this.getCreationOptions(newModeId, model.uri, model.isForSimpleWidget);\r\n ModelServiceImpl._setModelOptionsForModel(model, newOptions, oldOptions);\r\n this._onModelModeChanged.fire({ model: model, oldModeId: oldModeId });\r\n };\r\n ModelServiceImpl = __decorate([\r\n __param(0, IConfigurationService),\r\n __param(1, ITextResourcePropertiesService),\r\n __param(2, IThemeService)\r\n ], ModelServiceImpl);\r\n return ModelServiceImpl;\r\n}(Disposable));\r\nexport { ModelServiceImpl };\r\nvar SemanticColoringFeature = /** @class */ (function (_super) {\r\n __extends(SemanticColoringFeature, _super);\r\n function SemanticColoringFeature(modelService, themeService) {\r\n var _this = _super.call(this) || this;\r\n _this._watchers = Object.create(null);\r\n _this._semanticStyling = _this._register(new SemanticStyling(themeService));\r\n _this._register(modelService.onModelAdded(function (model) {\r\n _this._watchers[model.uri.toString()] = new ModelSemanticColoring(model, themeService, _this._semanticStyling);\r\n }));\r\n _this._register(modelService.onModelRemoved(function (model) {\r\n _this._watchers[model.uri.toString()].dispose();\r\n delete _this._watchers[model.uri.toString()];\r\n }));\r\n return _this;\r\n }\r\n return SemanticColoringFeature;\r\n}(Disposable));\r\nvar SemanticStyling = /** @class */ (function (_super) {\r\n __extends(SemanticStyling, _super);\r\n function SemanticStyling(_themeService) {\r\n var _this = _super.call(this) || this;\r\n _this._themeService = _themeService;\r\n _this._caches = new WeakMap();\r\n if (_this._themeService) {\r\n // workaround for tests which use undefined... :/\r\n _this._register(_this._themeService.onThemeChange(function () {\r\n _this._caches = new WeakMap();\r\n }));\r\n }\r\n return _this;\r\n }\r\n SemanticStyling.prototype.get = function (provider) {\r\n if (!this._caches.has(provider)) {\r\n this._caches.set(provider, new SemanticColoringProviderStyling(provider.getLegend(), this._themeService));\r\n }\r\n return this._caches.get(provider);\r\n };\r\n return SemanticStyling;\r\n}(Disposable));\r\nvar HashTableEntry = /** @class */ (function () {\r\n function HashTableEntry(tokenTypeIndex, tokenModifierSet, metadata) {\r\n this.tokenTypeIndex = tokenTypeIndex;\r\n this.tokenModifierSet = tokenModifierSet;\r\n this.metadata = metadata;\r\n this.next = null;\r\n }\r\n return HashTableEntry;\r\n}());\r\nvar HashTable = /** @class */ (function () {\r\n function HashTable() {\r\n this._elementsCount = 0;\r\n this._currentLengthIndex = 0;\r\n this._currentLength = HashTable._SIZES[this._currentLengthIndex];\r\n this._growCount = Math.round(this._currentLengthIndex + 1 < HashTable._SIZES.length ? 2 / 3 * this._currentLength : 0);\r\n this._elements = [];\r\n HashTable._nullOutEntries(this._elements, this._currentLength);\r\n }\r\n HashTable._nullOutEntries = function (entries, length) {\r\n for (var i = 0; i < length; i++) {\r\n entries[i] = null;\r\n }\r\n };\r\n HashTable.prototype._hashFunc = function (tokenTypeIndex, tokenModifierSet) {\r\n return ((((tokenTypeIndex << 5) - tokenTypeIndex) + tokenModifierSet) | 0) % this._currentLength; // tokenTypeIndex * 31 + tokenModifierSet, keep as int32\r\n };\r\n HashTable.prototype.get = function (tokenTypeIndex, tokenModifierSet) {\r\n var hash = this._hashFunc(tokenTypeIndex, tokenModifierSet);\r\n var p = this._elements[hash];\r\n while (p) {\r\n if (p.tokenTypeIndex === tokenTypeIndex && p.tokenModifierSet === tokenModifierSet) {\r\n return p;\r\n }\r\n p = p.next;\r\n }\r\n return null;\r\n };\r\n HashTable.prototype.add = function (tokenTypeIndex, tokenModifierSet, metadata) {\r\n this._elementsCount++;\r\n if (this._growCount !== 0 && this._elementsCount >= this._growCount) {\r\n // expand!\r\n var oldElements = this._elements;\r\n this._currentLengthIndex++;\r\n this._currentLength = HashTable._SIZES[this._currentLengthIndex];\r\n this._growCount = Math.round(this._currentLengthIndex + 1 < HashTable._SIZES.length ? 2 / 3 * this._currentLength : 0);\r\n this._elements = [];\r\n HashTable._nullOutEntries(this._elements, this._currentLength);\r\n for (var _i = 0, oldElements_1 = oldElements; _i < oldElements_1.length; _i++) {\r\n var first = oldElements_1[_i];\r\n var p = first;\r\n while (p) {\r\n var oldNext = p.next;\r\n p.next = null;\r\n this._add(p);\r\n p = oldNext;\r\n }\r\n }\r\n }\r\n this._add(new HashTableEntry(tokenTypeIndex, tokenModifierSet, metadata));\r\n };\r\n HashTable.prototype._add = function (element) {\r\n var hash = this._hashFunc(element.tokenTypeIndex, element.tokenModifierSet);\r\n element.next = this._elements[hash];\r\n this._elements[hash] = element;\r\n };\r\n HashTable._SIZES = [3, 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381, 32749, 65521, 131071, 262139, 524287, 1048573, 2097143];\r\n return HashTable;\r\n}());\r\nvar SemanticColoringProviderStyling = /** @class */ (function () {\r\n function SemanticColoringProviderStyling(_legend, _themeService) {\r\n this._legend = _legend;\r\n this._themeService = _themeService;\r\n this._hashTable = new HashTable();\r\n }\r\n SemanticColoringProviderStyling.prototype.getMetadata = function (tokenTypeIndex, tokenModifierSet) {\r\n var entry = this._hashTable.get(tokenTypeIndex, tokenModifierSet);\r\n if (entry) {\r\n return entry.metadata;\r\n }\r\n var tokenType = this._legend.tokenTypes[tokenTypeIndex];\r\n var tokenModifiers = [];\r\n for (var modifierIndex = 0; tokenModifierSet !== 0 && modifierIndex < this._legend.tokenModifiers.length; modifierIndex++) {\r\n if (tokenModifierSet & 1) {\r\n tokenModifiers.push(this._legend.tokenModifiers[modifierIndex]);\r\n }\r\n tokenModifierSet = tokenModifierSet >> 1;\r\n }\r\n var metadata = this._themeService.getTheme().getTokenStyleMetadata(tokenType, tokenModifiers);\r\n if (typeof metadata === 'undefined') {\r\n metadata = 2147483647 /* NO_STYLING */;\r\n }\r\n this._hashTable.add(tokenTypeIndex, tokenModifierSet, metadata);\r\n return metadata;\r\n };\r\n return SemanticColoringProviderStyling;\r\n}());\r\nvar SemanticTokensResponse = /** @class */ (function () {\r\n function SemanticTokensResponse(_provider, resultId, data) {\r\n this._provider = _provider;\r\n this.resultId = resultId;\r\n this.data = data;\r\n }\r\n SemanticTokensResponse.prototype.dispose = function () {\r\n this._provider.releaseSemanticTokens(this.resultId);\r\n };\r\n return SemanticTokensResponse;\r\n}());\r\nvar ModelSemanticColoring = /** @class */ (function (_super) {\r\n __extends(ModelSemanticColoring, _super);\r\n function ModelSemanticColoring(model, themeService, stylingProvider) {\r\n var _this = _super.call(this) || this;\r\n _this._isDisposed = false;\r\n _this._model = model;\r\n _this._semanticStyling = stylingProvider;\r\n _this._fetchSemanticTokens = _this._register(new RunOnceScheduler(function () { return _this._fetchSemanticTokensNow(); }, 300));\r\n _this._currentResponse = null;\r\n _this._currentRequestCancellationTokenSource = null;\r\n _this._register(_this._model.onDidChangeContent(function (e) {\r\n if (!_this._fetchSemanticTokens.isScheduled()) {\r\n _this._fetchSemanticTokens.schedule();\r\n }\r\n }));\r\n _this._register(SemanticTokensProviderRegistry.onDidChange(function (e) { return _this._fetchSemanticTokens.schedule(); }));\r\n if (themeService) {\r\n // workaround for tests which use undefined... :/\r\n _this._register(themeService.onThemeChange(function (_) {\r\n // clear out existing tokens\r\n _this._setSemanticTokens(null, null, null, []);\r\n _this._fetchSemanticTokens.schedule();\r\n }));\r\n }\r\n _this._fetchSemanticTokens.schedule(0);\r\n return _this;\r\n }\r\n ModelSemanticColoring.prototype.dispose = function () {\r\n this._isDisposed = true;\r\n if (this._currentResponse) {\r\n this._currentResponse.dispose();\r\n this._currentResponse = null;\r\n }\r\n if (this._currentRequestCancellationTokenSource) {\r\n this._currentRequestCancellationTokenSource.cancel();\r\n this._currentRequestCancellationTokenSource = null;\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n ModelSemanticColoring.prototype._fetchSemanticTokensNow = function () {\r\n var _this = this;\r\n if (this._currentRequestCancellationTokenSource) {\r\n // there is already a request running, let it finish...\r\n return;\r\n }\r\n var provider = this._getSemanticColoringProvider();\r\n if (!provider) {\r\n return;\r\n }\r\n this._currentRequestCancellationTokenSource = new CancellationTokenSource();\r\n var pendingChanges = [];\r\n var contentChangeListener = this._model.onDidChangeContent(function (e) {\r\n pendingChanges.push(e);\r\n });\r\n var styling = this._semanticStyling.get(provider);\r\n var lastResultId = this._currentResponse ? this._currentResponse.resultId || null : null;\r\n var request = Promise.resolve(provider.provideSemanticTokens(this._model, lastResultId, null, this._currentRequestCancellationTokenSource.token));\r\n request.then(function (res) {\r\n _this._currentRequestCancellationTokenSource = null;\r\n contentChangeListener.dispose();\r\n _this._setSemanticTokens(provider, res || null, styling, pendingChanges);\r\n }, function (err) {\r\n errors.onUnexpectedError(err);\r\n _this._currentRequestCancellationTokenSource = null;\r\n contentChangeListener.dispose();\r\n _this._setSemanticTokens(provider, null, styling, pendingChanges);\r\n });\r\n };\r\n ModelSemanticColoring._isSemanticTokens = function (v) {\r\n return v && !!(v.data);\r\n };\r\n ModelSemanticColoring._isSemanticTokensEdits = function (v) {\r\n return v && Array.isArray(v.edits);\r\n };\r\n ModelSemanticColoring._copy = function (src, srcOffset, dest, destOffset, length) {\r\n for (var i = 0; i < length; i++) {\r\n dest[destOffset + i] = src[srcOffset + i];\r\n }\r\n };\r\n ModelSemanticColoring.prototype._setSemanticTokens = function (provider, tokens, styling, pendingChanges) {\r\n var currentResponse = this._currentResponse;\r\n if (this._currentResponse) {\r\n this._currentResponse.dispose();\r\n this._currentResponse = null;\r\n }\r\n if (this._isDisposed) {\r\n // disposed!\r\n if (provider && tokens) {\r\n provider.releaseSemanticTokens(tokens.resultId);\r\n }\r\n return;\r\n }\r\n if (!provider || !tokens || !styling) {\r\n this._model.setSemanticTokens(null);\r\n return;\r\n }\r\n if (ModelSemanticColoring._isSemanticTokensEdits(tokens)) {\r\n if (!currentResponse) {\r\n // not possible!\r\n this._model.setSemanticTokens(null);\r\n return;\r\n }\r\n if (tokens.edits.length === 0) {\r\n // nothing to do!\r\n tokens = {\r\n resultId: tokens.resultId,\r\n data: currentResponse.data\r\n };\r\n }\r\n else {\r\n var deltaLength = 0;\r\n for (var _i = 0, _a = tokens.edits; _i < _a.length; _i++) {\r\n var edit = _a[_i];\r\n deltaLength += (edit.data ? edit.data.length : 0) - edit.deleteCount;\r\n }\r\n var srcData = currentResponse.data;\r\n var destData = new Uint32Array(srcData.length + deltaLength);\r\n var srcLastStart = srcData.length;\r\n var destLastStart = destData.length;\r\n for (var i = tokens.edits.length - 1; i >= 0; i--) {\r\n var edit = tokens.edits[i];\r\n var copyCount = srcLastStart - (edit.start + edit.deleteCount);\r\n if (copyCount > 0) {\r\n ModelSemanticColoring._copy(srcData, srcLastStart - copyCount, destData, destLastStart - copyCount, copyCount);\r\n destLastStart -= copyCount;\r\n }\r\n if (edit.data) {\r\n ModelSemanticColoring._copy(edit.data, 0, destData, destLastStart - edit.data.length, edit.data.length);\r\n destLastStart -= edit.data.length;\r\n }\r\n srcLastStart = edit.start;\r\n }\r\n if (srcLastStart > 0) {\r\n ModelSemanticColoring._copy(srcData, 0, destData, 0, srcLastStart);\r\n }\r\n tokens = {\r\n resultId: tokens.resultId,\r\n data: destData\r\n };\r\n }\r\n }\r\n if (ModelSemanticColoring._isSemanticTokens(tokens)) {\r\n this._currentResponse = new SemanticTokensResponse(provider, tokens.resultId, tokens.data);\r\n var srcData = tokens.data;\r\n var tokenCount = (tokens.data.length / 5) | 0;\r\n var tokensPerArea = Math.max(Math.ceil(tokenCount / 1024 /* DesiredMaxAreas */), 400 /* DesiredTokensPerArea */);\r\n var result = [];\r\n var tokenIndex = 0;\r\n var lastLineNumber = 1;\r\n var lastStartCharacter = 0;\r\n while (tokenIndex < tokenCount) {\r\n var tokenStartIndex = tokenIndex;\r\n var tokenEndIndex = Math.min(tokenStartIndex + tokensPerArea, tokenCount);\r\n // Keep tokens on the same line in the same area...\r\n if (tokenEndIndex < tokenCount) {\r\n var smallTokenEndIndex = tokenEndIndex;\r\n while (smallTokenEndIndex - 1 > tokenStartIndex && srcData[5 * smallTokenEndIndex] === 0) {\r\n smallTokenEndIndex--;\r\n }\r\n if (smallTokenEndIndex - 1 === tokenStartIndex) {\r\n // there are so many tokens on this line that our area would be empty, we must now go right\r\n var bigTokenEndIndex = tokenEndIndex;\r\n while (bigTokenEndIndex + 1 < tokenCount && srcData[5 * bigTokenEndIndex] === 0) {\r\n bigTokenEndIndex++;\r\n }\r\n tokenEndIndex = bigTokenEndIndex;\r\n }\r\n else {\r\n tokenEndIndex = smallTokenEndIndex;\r\n }\r\n }\r\n var destData = new Uint32Array((tokenEndIndex - tokenStartIndex) * 4);\r\n var destOffset = 0;\r\n var areaLine = 0;\r\n while (tokenIndex < tokenEndIndex) {\r\n var srcOffset = 5 * tokenIndex;\r\n var deltaLine = srcData[srcOffset];\r\n var deltaCharacter = srcData[srcOffset + 1];\r\n var lineNumber = lastLineNumber + deltaLine;\r\n var startCharacter = (deltaLine === 0 ? lastStartCharacter + deltaCharacter : deltaCharacter);\r\n var length_1 = srcData[srcOffset + 2];\r\n var tokenTypeIndex = srcData[srcOffset + 3];\r\n var tokenModifierSet = srcData[srcOffset + 4];\r\n var metadata = styling.getMetadata(tokenTypeIndex, tokenModifierSet);\r\n if (metadata !== 2147483647 /* NO_STYLING */) {\r\n if (areaLine === 0) {\r\n areaLine = lineNumber;\r\n }\r\n destData[destOffset] = lineNumber - areaLine;\r\n destData[destOffset + 1] = startCharacter;\r\n destData[destOffset + 2] = startCharacter + length_1;\r\n destData[destOffset + 3] = metadata;\r\n destOffset += 4;\r\n }\r\n lastLineNumber = lineNumber;\r\n lastStartCharacter = startCharacter;\r\n tokenIndex++;\r\n }\r\n if (destOffset !== destData.length) {\r\n destData = destData.subarray(0, destOffset);\r\n }\r\n var tokens_1 = new MultilineTokens2(areaLine, new SparseEncodedTokens(destData));\r\n result.push(tokens_1);\r\n }\r\n // Adjust incoming semantic tokens\r\n if (pendingChanges.length > 0) {\r\n // More changes occurred while the request was running\r\n // We need to:\r\n // 1. Adjust incoming semantic tokens\r\n // 2. Request them again\r\n for (var _b = 0, pendingChanges_1 = pendingChanges; _b < pendingChanges_1.length; _b++) {\r\n var change = pendingChanges_1[_b];\r\n for (var _c = 0, result_1 = result; _c < result_1.length; _c++) {\r\n var area = result_1[_c];\r\n for (var _d = 0, _e = change.changes; _d < _e.length; _d++) {\r\n var singleChange = _e[_d];\r\n area.applyEdit(singleChange.range, singleChange.text);\r\n }\r\n }\r\n }\r\n if (!this._fetchSemanticTokens.isScheduled()) {\r\n this._fetchSemanticTokens.schedule();\r\n }\r\n }\r\n this._model.setSemanticTokens(result);\r\n return;\r\n }\r\n this._model.setSemanticTokens(null);\r\n };\r\n ModelSemanticColoring.prototype._getSemanticColoringProvider = function () {\r\n var result = SemanticTokensProviderRegistry.ordered(this._model);\r\n return (result.length > 0 ? result[0] : null);\r\n };\r\n return ModelSemanticColoring;\r\n}(Disposable));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nvar AbstractCodeEditorService = /** @class */ (function (_super) {\r\n __extends(AbstractCodeEditorService, _super);\r\n function AbstractCodeEditorService() {\r\n var _this = _super.call(this) || this;\r\n _this._onCodeEditorAdd = _this._register(new Emitter());\r\n _this.onCodeEditorAdd = _this._onCodeEditorAdd.event;\r\n _this._onCodeEditorRemove = _this._register(new Emitter());\r\n _this.onCodeEditorRemove = _this._onCodeEditorRemove.event;\r\n _this._onDiffEditorAdd = _this._register(new Emitter());\r\n _this._onDiffEditorRemove = _this._register(new Emitter());\r\n _this._codeEditors = Object.create(null);\r\n _this._diffEditors = Object.create(null);\r\n return _this;\r\n }\r\n AbstractCodeEditorService.prototype.addCodeEditor = function (editor) {\r\n this._codeEditors[editor.getId()] = editor;\r\n this._onCodeEditorAdd.fire(editor);\r\n };\r\n AbstractCodeEditorService.prototype.removeCodeEditor = function (editor) {\r\n if (delete this._codeEditors[editor.getId()]) {\r\n this._onCodeEditorRemove.fire(editor);\r\n }\r\n };\r\n AbstractCodeEditorService.prototype.listCodeEditors = function () {\r\n var _this = this;\r\n return Object.keys(this._codeEditors).map(function (id) { return _this._codeEditors[id]; });\r\n };\r\n AbstractCodeEditorService.prototype.addDiffEditor = function (editor) {\r\n this._diffEditors[editor.getId()] = editor;\r\n this._onDiffEditorAdd.fire(editor);\r\n };\r\n AbstractCodeEditorService.prototype.removeDiffEditor = function (editor) {\r\n if (delete this._diffEditors[editor.getId()]) {\r\n this._onDiffEditorRemove.fire(editor);\r\n }\r\n };\r\n AbstractCodeEditorService.prototype.listDiffEditors = function () {\r\n var _this = this;\r\n return Object.keys(this._diffEditors).map(function (id) { return _this._diffEditors[id]; });\r\n };\r\n AbstractCodeEditorService.prototype.getFocusedCodeEditor = function () {\r\n var editorWithWidgetFocus = null;\r\n var editors = this.listCodeEditors();\r\n for (var _i = 0, editors_1 = editors; _i < editors_1.length; _i++) {\r\n var editor = editors_1[_i];\r\n if (editor.hasTextFocus()) {\r\n // bingo!\r\n return editor;\r\n }\r\n if (editor.hasWidgetFocus()) {\r\n editorWithWidgetFocus = editor;\r\n }\r\n }\r\n return editorWithWidgetFocus;\r\n };\r\n return AbstractCodeEditorService;\r\n}(Disposable));\r\nexport { AbstractCodeEditorService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\r\nimport * as strings from '../../../base/common/strings.js';\r\nimport { URI } from '../../../base/common/uri.js';\r\nimport { AbstractCodeEditorService } from './abstractCodeEditorService.js';\r\nimport { isThemeColor } from '../../common/editorCommon.js';\r\nimport { OverviewRulerLane } from '../../common/model.js';\r\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\r\nvar CodeEditorServiceImpl = /** @class */ (function (_super) {\r\n __extends(CodeEditorServiceImpl, _super);\r\n function CodeEditorServiceImpl(themeService, styleSheet) {\r\n if (styleSheet === void 0) { styleSheet = dom.createStyleSheet(); }\r\n var _this = _super.call(this) || this;\r\n _this._decorationOptionProviders = new Map();\r\n _this._styleSheet = styleSheet;\r\n _this._themeService = themeService;\r\n return _this;\r\n }\r\n CodeEditorServiceImpl.prototype.registerDecorationType = function (key, options, parentTypeKey) {\r\n var provider = this._decorationOptionProviders.get(key);\r\n if (!provider) {\r\n var providerArgs = {\r\n styleSheet: this._styleSheet,\r\n key: key,\r\n parentTypeKey: parentTypeKey,\r\n options: options || Object.create(null)\r\n };\r\n if (!parentTypeKey) {\r\n provider = new DecorationTypeOptionsProvider(this._themeService, providerArgs);\r\n }\r\n else {\r\n provider = new DecorationSubTypeOptionsProvider(this._themeService, providerArgs);\r\n }\r\n this._decorationOptionProviders.set(key, provider);\r\n }\r\n provider.refCount++;\r\n };\r\n CodeEditorServiceImpl.prototype.removeDecorationType = function (key) {\r\n var provider = this._decorationOptionProviders.get(key);\r\n if (provider) {\r\n provider.refCount--;\r\n if (provider.refCount <= 0) {\r\n this._decorationOptionProviders.delete(key);\r\n provider.dispose();\r\n this.listCodeEditors().forEach(function (ed) { return ed.removeDecorations(key); });\r\n }\r\n }\r\n };\r\n CodeEditorServiceImpl.prototype.resolveDecorationOptions = function (decorationTypeKey, writable) {\r\n var provider = this._decorationOptionProviders.get(decorationTypeKey);\r\n if (!provider) {\r\n throw new Error('Unknown decoration type key: ' + decorationTypeKey);\r\n }\r\n return provider.getOptions(this, writable);\r\n };\r\n CodeEditorServiceImpl = __decorate([\r\n __param(0, IThemeService)\r\n ], CodeEditorServiceImpl);\r\n return CodeEditorServiceImpl;\r\n}(AbstractCodeEditorService));\r\nexport { CodeEditorServiceImpl };\r\nvar DecorationSubTypeOptionsProvider = /** @class */ (function () {\r\n function DecorationSubTypeOptionsProvider(themeService, providerArgs) {\r\n this._parentTypeKey = providerArgs.parentTypeKey;\r\n this.refCount = 0;\r\n this._beforeContentRules = new DecorationCSSRules(3 /* BeforeContentClassName */, providerArgs, themeService);\r\n this._afterContentRules = new DecorationCSSRules(4 /* AfterContentClassName */, providerArgs, themeService);\r\n }\r\n DecorationSubTypeOptionsProvider.prototype.getOptions = function (codeEditorService, writable) {\r\n var options = codeEditorService.resolveDecorationOptions(this._parentTypeKey, true);\r\n if (this._beforeContentRules) {\r\n options.beforeContentClassName = this._beforeContentRules.className;\r\n }\r\n if (this._afterContentRules) {\r\n options.afterContentClassName = this._afterContentRules.className;\r\n }\r\n return options;\r\n };\r\n DecorationSubTypeOptionsProvider.prototype.dispose = function () {\r\n if (this._beforeContentRules) {\r\n this._beforeContentRules.dispose();\r\n this._beforeContentRules = null;\r\n }\r\n if (this._afterContentRules) {\r\n this._afterContentRules.dispose();\r\n this._afterContentRules = null;\r\n }\r\n };\r\n return DecorationSubTypeOptionsProvider;\r\n}());\r\nvar DecorationTypeOptionsProvider = /** @class */ (function () {\r\n function DecorationTypeOptionsProvider(themeService, providerArgs) {\r\n var _this = this;\r\n this._disposables = new DisposableStore();\r\n this.refCount = 0;\r\n var createCSSRules = function (type) {\r\n var rules = new DecorationCSSRules(type, providerArgs, themeService);\r\n _this._disposables.add(rules);\r\n if (rules.hasContent) {\r\n return rules.className;\r\n }\r\n return undefined;\r\n };\r\n var createInlineCSSRules = function (type) {\r\n var rules = new DecorationCSSRules(type, providerArgs, themeService);\r\n _this._disposables.add(rules);\r\n if (rules.hasContent) {\r\n return { className: rules.className, hasLetterSpacing: rules.hasLetterSpacing };\r\n }\r\n return null;\r\n };\r\n this.className = createCSSRules(0 /* ClassName */);\r\n var inlineData = createInlineCSSRules(1 /* InlineClassName */);\r\n if (inlineData) {\r\n this.inlineClassName = inlineData.className;\r\n this.inlineClassNameAffectsLetterSpacing = inlineData.hasLetterSpacing;\r\n }\r\n this.beforeContentClassName = createCSSRules(3 /* BeforeContentClassName */);\r\n this.afterContentClassName = createCSSRules(4 /* AfterContentClassName */);\r\n this.glyphMarginClassName = createCSSRules(2 /* GlyphMarginClassName */);\r\n var options = providerArgs.options;\r\n this.isWholeLine = Boolean(options.isWholeLine);\r\n this.stickiness = options.rangeBehavior;\r\n var lightOverviewRulerColor = options.light && options.light.overviewRulerColor || options.overviewRulerColor;\r\n var darkOverviewRulerColor = options.dark && options.dark.overviewRulerColor || options.overviewRulerColor;\r\n if (typeof lightOverviewRulerColor !== 'undefined'\r\n || typeof darkOverviewRulerColor !== 'undefined') {\r\n this.overviewRuler = {\r\n color: lightOverviewRulerColor || darkOverviewRulerColor,\r\n darkColor: darkOverviewRulerColor || lightOverviewRulerColor,\r\n position: options.overviewRulerLane || OverviewRulerLane.Center\r\n };\r\n }\r\n }\r\n DecorationTypeOptionsProvider.prototype.getOptions = function (codeEditorService, writable) {\r\n if (!writable) {\r\n return this;\r\n }\r\n return {\r\n inlineClassName: this.inlineClassName,\r\n beforeContentClassName: this.beforeContentClassName,\r\n afterContentClassName: this.afterContentClassName,\r\n className: this.className,\r\n glyphMarginClassName: this.glyphMarginClassName,\r\n isWholeLine: this.isWholeLine,\r\n overviewRuler: this.overviewRuler,\r\n stickiness: this.stickiness\r\n };\r\n };\r\n DecorationTypeOptionsProvider.prototype.dispose = function () {\r\n this._disposables.dispose();\r\n };\r\n return DecorationTypeOptionsProvider;\r\n}());\r\nvar _CSS_MAP = {\r\n color: 'color:{0} !important;',\r\n opacity: 'opacity:{0};',\r\n backgroundColor: 'background-color:{0};',\r\n outline: 'outline:{0};',\r\n outlineColor: 'outline-color:{0};',\r\n outlineStyle: 'outline-style:{0};',\r\n outlineWidth: 'outline-width:{0};',\r\n border: 'border:{0};',\r\n borderColor: 'border-color:{0};',\r\n borderRadius: 'border-radius:{0};',\r\n borderSpacing: 'border-spacing:{0};',\r\n borderStyle: 'border-style:{0};',\r\n borderWidth: 'border-width:{0};',\r\n fontStyle: 'font-style:{0};',\r\n fontWeight: 'font-weight:{0};',\r\n textDecoration: 'text-decoration:{0};',\r\n cursor: 'cursor:{0};',\r\n letterSpacing: 'letter-spacing:{0};',\r\n gutterIconPath: 'background:{0} center center no-repeat;',\r\n gutterIconSize: 'background-size:{0};',\r\n contentText: 'content:\\'{0}\\';',\r\n contentIconPath: 'content:{0};',\r\n margin: 'margin:{0};',\r\n width: 'width:{0};',\r\n height: 'height:{0};'\r\n};\r\nvar DecorationCSSRules = /** @class */ (function () {\r\n function DecorationCSSRules(ruleType, providerArgs, themeService) {\r\n var _this = this;\r\n this._theme = themeService.getTheme();\r\n this._ruleType = ruleType;\r\n this._providerArgs = providerArgs;\r\n this._usesThemeColors = false;\r\n this._hasContent = false;\r\n this._hasLetterSpacing = false;\r\n var className = CSSNameHelper.getClassName(this._providerArgs.key, ruleType);\r\n if (this._providerArgs.parentTypeKey) {\r\n className = className + ' ' + CSSNameHelper.getClassName(this._providerArgs.parentTypeKey, ruleType);\r\n }\r\n this._className = className;\r\n this._unThemedSelector = CSSNameHelper.getSelector(this._providerArgs.key, this._providerArgs.parentTypeKey, ruleType);\r\n this._buildCSS();\r\n if (this._usesThemeColors) {\r\n this._themeListener = themeService.onThemeChange(function (theme) {\r\n _this._theme = themeService.getTheme();\r\n _this._removeCSS();\r\n _this._buildCSS();\r\n });\r\n }\r\n else {\r\n this._themeListener = null;\r\n }\r\n }\r\n DecorationCSSRules.prototype.dispose = function () {\r\n if (this._hasContent) {\r\n this._removeCSS();\r\n this._hasContent = false;\r\n }\r\n if (this._themeListener) {\r\n this._themeListener.dispose();\r\n this._themeListener = null;\r\n }\r\n };\r\n Object.defineProperty(DecorationCSSRules.prototype, \"hasContent\", {\r\n get: function () {\r\n return this._hasContent;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DecorationCSSRules.prototype, \"hasLetterSpacing\", {\r\n get: function () {\r\n return this._hasLetterSpacing;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DecorationCSSRules.prototype, \"className\", {\r\n get: function () {\r\n return this._className;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DecorationCSSRules.prototype._buildCSS = function () {\r\n var options = this._providerArgs.options;\r\n var unthemedCSS, lightCSS, darkCSS;\r\n switch (this._ruleType) {\r\n case 0 /* ClassName */:\r\n unthemedCSS = this.getCSSTextForModelDecorationClassName(options);\r\n lightCSS = this.getCSSTextForModelDecorationClassName(options.light);\r\n darkCSS = this.getCSSTextForModelDecorationClassName(options.dark);\r\n break;\r\n case 1 /* InlineClassName */:\r\n unthemedCSS = this.getCSSTextForModelDecorationInlineClassName(options);\r\n lightCSS = this.getCSSTextForModelDecorationInlineClassName(options.light);\r\n darkCSS = this.getCSSTextForModelDecorationInlineClassName(options.dark);\r\n break;\r\n case 2 /* GlyphMarginClassName */:\r\n unthemedCSS = this.getCSSTextForModelDecorationGlyphMarginClassName(options);\r\n lightCSS = this.getCSSTextForModelDecorationGlyphMarginClassName(options.light);\r\n darkCSS = this.getCSSTextForModelDecorationGlyphMarginClassName(options.dark);\r\n break;\r\n case 3 /* BeforeContentClassName */:\r\n unthemedCSS = this.getCSSTextForModelDecorationContentClassName(options.before);\r\n lightCSS = this.getCSSTextForModelDecorationContentClassName(options.light && options.light.before);\r\n darkCSS = this.getCSSTextForModelDecorationContentClassName(options.dark && options.dark.before);\r\n break;\r\n case 4 /* AfterContentClassName */:\r\n unthemedCSS = this.getCSSTextForModelDecorationContentClassName(options.after);\r\n lightCSS = this.getCSSTextForModelDecorationContentClassName(options.light && options.light.after);\r\n darkCSS = this.getCSSTextForModelDecorationContentClassName(options.dark && options.dark.after);\r\n break;\r\n default:\r\n throw new Error('Unknown rule type: ' + this._ruleType);\r\n }\r\n var sheet = this._providerArgs.styleSheet.sheet;\r\n var hasContent = false;\r\n if (unthemedCSS.length > 0) {\r\n sheet.insertRule(this._unThemedSelector + \" {\" + unthemedCSS + \"}\", 0);\r\n hasContent = true;\r\n }\r\n if (lightCSS.length > 0) {\r\n sheet.insertRule(\".vs\" + this._unThemedSelector + \" {\" + lightCSS + \"}\", 0);\r\n hasContent = true;\r\n }\r\n if (darkCSS.length > 0) {\r\n sheet.insertRule(\".vs-dark\" + this._unThemedSelector + \", .hc-black\" + this._unThemedSelector + \" {\" + darkCSS + \"}\", 0);\r\n hasContent = true;\r\n }\r\n this._hasContent = hasContent;\r\n };\r\n DecorationCSSRules.prototype._removeCSS = function () {\r\n dom.removeCSSRulesContainingSelector(this._unThemedSelector, this._providerArgs.styleSheet);\r\n };\r\n /**\r\n * Build the CSS for decorations styled via `className`.\r\n */\r\n DecorationCSSRules.prototype.getCSSTextForModelDecorationClassName = function (opts) {\r\n if (!opts) {\r\n return '';\r\n }\r\n var cssTextArr = [];\r\n this.collectCSSText(opts, ['backgroundColor'], cssTextArr);\r\n this.collectCSSText(opts, ['outline', 'outlineColor', 'outlineStyle', 'outlineWidth'], cssTextArr);\r\n this.collectBorderSettingsCSSText(opts, cssTextArr);\r\n return cssTextArr.join('');\r\n };\r\n /**\r\n * Build the CSS for decorations styled via `inlineClassName`.\r\n */\r\n DecorationCSSRules.prototype.getCSSTextForModelDecorationInlineClassName = function (opts) {\r\n if (!opts) {\r\n return '';\r\n }\r\n var cssTextArr = [];\r\n this.collectCSSText(opts, ['fontStyle', 'fontWeight', 'textDecoration', 'cursor', 'color', 'opacity', 'letterSpacing'], cssTextArr);\r\n if (opts.letterSpacing) {\r\n this._hasLetterSpacing = true;\r\n }\r\n return cssTextArr.join('');\r\n };\r\n /**\r\n * Build the CSS for decorations styled before or after content.\r\n */\r\n DecorationCSSRules.prototype.getCSSTextForModelDecorationContentClassName = function (opts) {\r\n if (!opts) {\r\n return '';\r\n }\r\n var cssTextArr = [];\r\n if (typeof opts !== 'undefined') {\r\n this.collectBorderSettingsCSSText(opts, cssTextArr);\r\n if (typeof opts.contentIconPath !== 'undefined') {\r\n cssTextArr.push(strings.format(_CSS_MAP.contentIconPath, dom.asCSSUrl(URI.revive(opts.contentIconPath))));\r\n }\r\n if (typeof opts.contentText === 'string') {\r\n var truncated = opts.contentText.match(/^.*$/m)[0]; // only take first line\r\n var escaped = truncated.replace(/['\\\\]/g, '\\\\$&');\r\n cssTextArr.push(strings.format(_CSS_MAP.contentText, escaped));\r\n }\r\n this.collectCSSText(opts, ['fontStyle', 'fontWeight', 'textDecoration', 'color', 'opacity', 'backgroundColor', 'margin'], cssTextArr);\r\n if (this.collectCSSText(opts, ['width', 'height'], cssTextArr)) {\r\n cssTextArr.push('display:inline-block;');\r\n }\r\n }\r\n return cssTextArr.join('');\r\n };\r\n /**\r\n * Build the CSS for decorations styled via `glpyhMarginClassName`.\r\n */\r\n DecorationCSSRules.prototype.getCSSTextForModelDecorationGlyphMarginClassName = function (opts) {\r\n if (!opts) {\r\n return '';\r\n }\r\n var cssTextArr = [];\r\n if (typeof opts.gutterIconPath !== 'undefined') {\r\n cssTextArr.push(strings.format(_CSS_MAP.gutterIconPath, dom.asCSSUrl(URI.revive(opts.gutterIconPath))));\r\n if (typeof opts.gutterIconSize !== 'undefined') {\r\n cssTextArr.push(strings.format(_CSS_MAP.gutterIconSize, opts.gutterIconSize));\r\n }\r\n }\r\n return cssTextArr.join('');\r\n };\r\n DecorationCSSRules.prototype.collectBorderSettingsCSSText = function (opts, cssTextArr) {\r\n if (this.collectCSSText(opts, ['border', 'borderColor', 'borderRadius', 'borderSpacing', 'borderStyle', 'borderWidth'], cssTextArr)) {\r\n cssTextArr.push(strings.format('box-sizing: border-box;'));\r\n return true;\r\n }\r\n return false;\r\n };\r\n DecorationCSSRules.prototype.collectCSSText = function (opts, properties, cssTextArr) {\r\n var lenBefore = cssTextArr.length;\r\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\r\n var property = properties_1[_i];\r\n var value = this.resolveValue(opts[property]);\r\n if (typeof value === 'string') {\r\n cssTextArr.push(strings.format(_CSS_MAP[property], value));\r\n }\r\n }\r\n return cssTextArr.length !== lenBefore;\r\n };\r\n DecorationCSSRules.prototype.resolveValue = function (value) {\r\n if (isThemeColor(value)) {\r\n this._usesThemeColors = true;\r\n var color = this._theme.getColor(value.id);\r\n if (color) {\r\n return color.toString();\r\n }\r\n return 'transparent';\r\n }\r\n return value;\r\n };\r\n return DecorationCSSRules;\r\n}());\r\nvar CSSNameHelper = /** @class */ (function () {\r\n function CSSNameHelper() {\r\n }\r\n CSSNameHelper.getClassName = function (key, type) {\r\n return 'ced-' + key + '-' + type;\r\n };\r\n CSSNameHelper.getSelector = function (key, parentKey, ruleType) {\r\n var selector = '.monaco-editor .' + this.getClassName(key, ruleType);\r\n if (parentKey) {\r\n selector = selector + '.' + this.getClassName(parentKey, ruleType);\r\n }\r\n if (ruleType === 3 /* BeforeContentClassName */) {\r\n selector += '::before';\r\n }\r\n else if (ruleType === 4 /* AfterContentClassName */) {\r\n selector += '::after';\r\n }\r\n return selector;\r\n };\r\n return CSSNameHelper;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { windowOpenNoOpener } from '../../../base/browser/dom.js';\r\nimport { Schemas } from '../../../base/common/network.js';\r\nimport { CodeEditorServiceImpl } from '../../browser/services/codeEditorServiceImpl.js';\r\nvar StandaloneCodeEditorServiceImpl = /** @class */ (function (_super) {\r\n __extends(StandaloneCodeEditorServiceImpl, _super);\r\n function StandaloneCodeEditorServiceImpl() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n StandaloneCodeEditorServiceImpl.prototype.getActiveCodeEditor = function () {\r\n return null; // not supported in the standalone case\r\n };\r\n StandaloneCodeEditorServiceImpl.prototype.openCodeEditor = function (input, source, sideBySide) {\r\n if (!source) {\r\n return Promise.resolve(null);\r\n }\r\n return Promise.resolve(this.doOpenEditor(source, input));\r\n };\r\n StandaloneCodeEditorServiceImpl.prototype.doOpenEditor = function (editor, input) {\r\n var model = this.findModel(editor, input.resource);\r\n if (!model) {\r\n if (input.resource) {\r\n var schema = input.resource.scheme;\r\n if (schema === Schemas.http || schema === Schemas.https) {\r\n // This is a fully qualified http or https URL\r\n windowOpenNoOpener(input.resource.toString());\r\n return editor;\r\n }\r\n }\r\n return null;\r\n }\r\n var selection = (input.options ? input.options.selection : null);\r\n if (selection) {\r\n if (typeof selection.endLineNumber === 'number' && typeof selection.endColumn === 'number') {\r\n editor.setSelection(selection);\r\n editor.revealRangeInCenter(selection, 1 /* Immediate */);\r\n }\r\n else {\r\n var pos = {\r\n lineNumber: selection.startLineNumber,\r\n column: selection.startColumn\r\n };\r\n editor.setPosition(pos);\r\n editor.revealPositionInCenter(pos, 1 /* Immediate */);\r\n }\r\n }\r\n return editor;\r\n };\r\n StandaloneCodeEditorServiceImpl.prototype.findModel = function (editor, resource) {\r\n var model = editor.getModel();\r\n if (model && model.uri.toString() !== resource.toString()) {\r\n return null;\r\n }\r\n return model;\r\n };\r\n return StandaloneCodeEditorServiceImpl;\r\n}(CodeEditorServiceImpl));\r\nexport { StandaloneCodeEditorServiceImpl };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Color } from '../../../../base/common/color.js';\r\nvar ParsedTokenThemeRule = /** @class */ (function () {\r\n function ParsedTokenThemeRule(token, index, fontStyle, foreground, background) {\r\n this.token = token;\r\n this.index = index;\r\n this.fontStyle = fontStyle;\r\n this.foreground = foreground;\r\n this.background = background;\r\n }\r\n return ParsedTokenThemeRule;\r\n}());\r\nexport { ParsedTokenThemeRule };\r\n/**\r\n * Parse a raw theme into rules.\r\n */\r\nexport function parseTokenTheme(source) {\r\n if (!source || !Array.isArray(source)) {\r\n return [];\r\n }\r\n var result = [], resultLen = 0;\r\n for (var i = 0, len = source.length; i < len; i++) {\r\n var entry = source[i];\r\n var fontStyle = -1 /* NotSet */;\r\n if (typeof entry.fontStyle === 'string') {\r\n fontStyle = 0 /* None */;\r\n var segments = entry.fontStyle.split(' ');\r\n for (var j = 0, lenJ = segments.length; j < lenJ; j++) {\r\n var segment = segments[j];\r\n switch (segment) {\r\n case 'italic':\r\n fontStyle = fontStyle | 1 /* Italic */;\r\n break;\r\n case 'bold':\r\n fontStyle = fontStyle | 2 /* Bold */;\r\n break;\r\n case 'underline':\r\n fontStyle = fontStyle | 4 /* Underline */;\r\n break;\r\n }\r\n }\r\n }\r\n var foreground = null;\r\n if (typeof entry.foreground === 'string') {\r\n foreground = entry.foreground;\r\n }\r\n var background = null;\r\n if (typeof entry.background === 'string') {\r\n background = entry.background;\r\n }\r\n result[resultLen++] = new ParsedTokenThemeRule(entry.token || '', i, fontStyle, foreground, background);\r\n }\r\n return result;\r\n}\r\n/**\r\n * Resolve rules (i.e. inheritance).\r\n */\r\nfunction resolveParsedTokenThemeRules(parsedThemeRules, customTokenColors) {\r\n // Sort rules lexicographically, and then by index if necessary\r\n parsedThemeRules.sort(function (a, b) {\r\n var r = strcmp(a.token, b.token);\r\n if (r !== 0) {\r\n return r;\r\n }\r\n return a.index - b.index;\r\n });\r\n // Determine defaults\r\n var defaultFontStyle = 0 /* None */;\r\n var defaultForeground = '000000';\r\n var defaultBackground = 'ffffff';\r\n while (parsedThemeRules.length >= 1 && parsedThemeRules[0].token === '') {\r\n var incomingDefaults = parsedThemeRules.shift();\r\n if (incomingDefaults.fontStyle !== -1 /* NotSet */) {\r\n defaultFontStyle = incomingDefaults.fontStyle;\r\n }\r\n if (incomingDefaults.foreground !== null) {\r\n defaultForeground = incomingDefaults.foreground;\r\n }\r\n if (incomingDefaults.background !== null) {\r\n defaultBackground = incomingDefaults.background;\r\n }\r\n }\r\n var colorMap = new ColorMap();\r\n // start with token colors from custom token themes\r\n for (var _i = 0, customTokenColors_1 = customTokenColors; _i < customTokenColors_1.length; _i++) {\r\n var color = customTokenColors_1[_i];\r\n colorMap.getId(color);\r\n }\r\n var foregroundColorId = colorMap.getId(defaultForeground);\r\n var backgroundColorId = colorMap.getId(defaultBackground);\r\n var defaults = new ThemeTrieElementRule(defaultFontStyle, foregroundColorId, backgroundColorId);\r\n var root = new ThemeTrieElement(defaults);\r\n for (var i = 0, len = parsedThemeRules.length; i < len; i++) {\r\n var rule = parsedThemeRules[i];\r\n root.insert(rule.token, rule.fontStyle, colorMap.getId(rule.foreground), colorMap.getId(rule.background));\r\n }\r\n return new TokenTheme(colorMap, root);\r\n}\r\nvar colorRegExp = /^#?([0-9A-Fa-f]{6})([0-9A-Fa-f]{2})?$/;\r\nvar ColorMap = /** @class */ (function () {\r\n function ColorMap() {\r\n this._lastColorId = 0;\r\n this._id2color = [];\r\n this._color2id = new Map();\r\n }\r\n ColorMap.prototype.getId = function (color) {\r\n if (color === null) {\r\n return 0;\r\n }\r\n var match = color.match(colorRegExp);\r\n if (!match) {\r\n throw new Error('Illegal value for token color: ' + color);\r\n }\r\n color = match[1].toUpperCase();\r\n var value = this._color2id.get(color);\r\n if (value) {\r\n return value;\r\n }\r\n value = ++this._lastColorId;\r\n this._color2id.set(color, value);\r\n this._id2color[value] = Color.fromHex('#' + color);\r\n return value;\r\n };\r\n ColorMap.prototype.getColorMap = function () {\r\n return this._id2color.slice(0);\r\n };\r\n return ColorMap;\r\n}());\r\nexport { ColorMap };\r\nvar TokenTheme = /** @class */ (function () {\r\n function TokenTheme(colorMap, root) {\r\n this._colorMap = colorMap;\r\n this._root = root;\r\n this._cache = new Map();\r\n }\r\n TokenTheme.createFromRawTokenTheme = function (source, customTokenColors) {\r\n return this.createFromParsedTokenTheme(parseTokenTheme(source), customTokenColors);\r\n };\r\n TokenTheme.createFromParsedTokenTheme = function (source, customTokenColors) {\r\n return resolveParsedTokenThemeRules(source, customTokenColors);\r\n };\r\n TokenTheme.prototype.getColorMap = function () {\r\n return this._colorMap.getColorMap();\r\n };\r\n TokenTheme.prototype._match = function (token) {\r\n return this._root.match(token);\r\n };\r\n TokenTheme.prototype.match = function (languageId, token) {\r\n // The cache contains the metadata without the language bits set.\r\n var result = this._cache.get(token);\r\n if (typeof result === 'undefined') {\r\n var rule = this._match(token);\r\n var standardToken = toStandardTokenType(token);\r\n result = (rule.metadata\r\n | (standardToken << 8 /* TOKEN_TYPE_OFFSET */)) >>> 0;\r\n this._cache.set(token, result);\r\n }\r\n return (result\r\n | (languageId << 0 /* LANGUAGEID_OFFSET */)) >>> 0;\r\n };\r\n return TokenTheme;\r\n}());\r\nexport { TokenTheme };\r\nvar STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex|regexp)\\b/;\r\nexport function toStandardTokenType(tokenType) {\r\n var m = tokenType.match(STANDARD_TOKEN_TYPE_REGEXP);\r\n if (!m) {\r\n return 0 /* Other */;\r\n }\r\n switch (m[1]) {\r\n case 'comment':\r\n return 1 /* Comment */;\r\n case 'string':\r\n return 2 /* String */;\r\n case 'regex':\r\n return 4 /* RegEx */;\r\n case 'regexp':\r\n return 4 /* RegEx */;\r\n }\r\n throw new Error('Unexpected match for standard token type!');\r\n}\r\nexport function strcmp(a, b) {\r\n if (a < b) {\r\n return -1;\r\n }\r\n if (a > b) {\r\n return 1;\r\n }\r\n return 0;\r\n}\r\nvar ThemeTrieElementRule = /** @class */ (function () {\r\n function ThemeTrieElementRule(fontStyle, foreground, background) {\r\n this._fontStyle = fontStyle;\r\n this._foreground = foreground;\r\n this._background = background;\r\n this.metadata = ((this._fontStyle << 11 /* FONT_STYLE_OFFSET */)\r\n | (this._foreground << 14 /* FOREGROUND_OFFSET */)\r\n | (this._background << 23 /* BACKGROUND_OFFSET */)) >>> 0;\r\n }\r\n ThemeTrieElementRule.prototype.clone = function () {\r\n return new ThemeTrieElementRule(this._fontStyle, this._foreground, this._background);\r\n };\r\n ThemeTrieElementRule.prototype.acceptOverwrite = function (fontStyle, foreground, background) {\r\n if (fontStyle !== -1 /* NotSet */) {\r\n this._fontStyle = fontStyle;\r\n }\r\n if (foreground !== 0 /* None */) {\r\n this._foreground = foreground;\r\n }\r\n if (background !== 0 /* None */) {\r\n this._background = background;\r\n }\r\n this.metadata = ((this._fontStyle << 11 /* FONT_STYLE_OFFSET */)\r\n | (this._foreground << 14 /* FOREGROUND_OFFSET */)\r\n | (this._background << 23 /* BACKGROUND_OFFSET */)) >>> 0;\r\n };\r\n return ThemeTrieElementRule;\r\n}());\r\nexport { ThemeTrieElementRule };\r\nvar ThemeTrieElement = /** @class */ (function () {\r\n function ThemeTrieElement(mainRule) {\r\n this._mainRule = mainRule;\r\n this._children = new Map();\r\n }\r\n ThemeTrieElement.prototype.match = function (token) {\r\n if (token === '') {\r\n return this._mainRule;\r\n }\r\n var dotIndex = token.indexOf('.');\r\n var head;\r\n var tail;\r\n if (dotIndex === -1) {\r\n head = token;\r\n tail = '';\r\n }\r\n else {\r\n head = token.substring(0, dotIndex);\r\n tail = token.substring(dotIndex + 1);\r\n }\r\n var child = this._children.get(head);\r\n if (typeof child !== 'undefined') {\r\n return child.match(tail);\r\n }\r\n return this._mainRule;\r\n };\r\n ThemeTrieElement.prototype.insert = function (token, fontStyle, foreground, background) {\r\n if (token === '') {\r\n // Merge into the main rule\r\n this._mainRule.acceptOverwrite(fontStyle, foreground, background);\r\n return;\r\n }\r\n var dotIndex = token.indexOf('.');\r\n var head;\r\n var tail;\r\n if (dotIndex === -1) {\r\n head = token;\r\n tail = '';\r\n }\r\n else {\r\n head = token.substring(0, dotIndex);\r\n tail = token.substring(dotIndex + 1);\r\n }\r\n var child = this._children.get(head);\r\n if (typeof child === 'undefined') {\r\n child = new ThemeTrieElement(this._mainRule.clone());\r\n this._children.set(head, child);\r\n }\r\n child.insert(tail, fontStyle, foreground, background);\r\n };\r\n return ThemeTrieElement;\r\n}());\r\nexport { ThemeTrieElement };\r\nexport function generateTokensCSSForColorMap(colorMap) {\r\n var rules = [];\r\n for (var i = 1, len = colorMap.length; i < len; i++) {\r\n var color = colorMap[i];\r\n rules[i] = \".mtk\" + i + \" { color: \" + color + \"; }\";\r\n }\r\n rules.push('.mtki { font-style: italic; }');\r\n rules.push('.mtkb { font-weight: bold; }');\r\n rules.push('.mtku { text-decoration: underline; text-underline-position: under; }');\r\n return rules.join('\\n');\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar _a, _b, _c;\r\nimport { editorActiveIndentGuides, editorIndentGuides } from '../../common/view/editorColorRegistry.js';\r\nimport { editorBackground, editorForeground, editorInactiveSelection, editorSelectionHighlight } from '../../../platform/theme/common/colorRegistry.js';\r\n/* -------------------------------- Begin vs theme -------------------------------- */\r\nexport var vs = {\r\n base: 'vs',\r\n inherit: false,\r\n rules: [\r\n { token: '', foreground: '000000', background: 'fffffe' },\r\n { token: 'invalid', foreground: 'cd3131' },\r\n { token: 'emphasis', fontStyle: 'italic' },\r\n { token: 'strong', fontStyle: 'bold' },\r\n { token: 'variable', foreground: '001188' },\r\n { token: 'variable.predefined', foreground: '4864AA' },\r\n { token: 'constant', foreground: 'dd0000' },\r\n { token: 'comment', foreground: '008000' },\r\n { token: 'number', foreground: '09885A' },\r\n { token: 'number.hex', foreground: '3030c0' },\r\n { token: 'regexp', foreground: '800000' },\r\n { token: 'annotation', foreground: '808080' },\r\n { token: 'type', foreground: '008080' },\r\n { token: 'delimiter', foreground: '000000' },\r\n { token: 'delimiter.html', foreground: '383838' },\r\n { token: 'delimiter.xml', foreground: '0000FF' },\r\n { token: 'tag', foreground: '800000' },\r\n { token: 'tag.id.pug', foreground: '4F76AC' },\r\n { token: 'tag.class.pug', foreground: '4F76AC' },\r\n { token: 'meta.scss', foreground: '800000' },\r\n { token: 'metatag', foreground: 'e00000' },\r\n { token: 'metatag.content.html', foreground: 'FF0000' },\r\n { token: 'metatag.html', foreground: '808080' },\r\n { token: 'metatag.xml', foreground: '808080' },\r\n { token: 'metatag.php', fontStyle: 'bold' },\r\n { token: 'key', foreground: '863B00' },\r\n { token: 'string.key.json', foreground: 'A31515' },\r\n { token: 'string.value.json', foreground: '0451A5' },\r\n { token: 'attribute.name', foreground: 'FF0000' },\r\n { token: 'attribute.value', foreground: '0451A5' },\r\n { token: 'attribute.value.number', foreground: '09885A' },\r\n { token: 'attribute.value.unit', foreground: '09885A' },\r\n { token: 'attribute.value.html', foreground: '0000FF' },\r\n { token: 'attribute.value.xml', foreground: '0000FF' },\r\n { token: 'string', foreground: 'A31515' },\r\n { token: 'string.html', foreground: '0000FF' },\r\n { token: 'string.sql', foreground: 'FF0000' },\r\n { token: 'string.yaml', foreground: '0451A5' },\r\n { token: 'keyword', foreground: '0000FF' },\r\n { token: 'keyword.json', foreground: '0451A5' },\r\n { token: 'keyword.flow', foreground: 'AF00DB' },\r\n { token: 'keyword.flow.scss', foreground: '0000FF' },\r\n { token: 'operator.scss', foreground: '666666' },\r\n { token: 'operator.sql', foreground: '778899' },\r\n { token: 'operator.swift', foreground: '666666' },\r\n { token: 'predefined.sql', foreground: 'FF00FF' },\r\n ],\r\n colors: (_a = {},\r\n _a[editorBackground] = '#FFFFFE',\r\n _a[editorForeground] = '#000000',\r\n _a[editorInactiveSelection] = '#E5EBF1',\r\n _a[editorIndentGuides] = '#D3D3D3',\r\n _a[editorActiveIndentGuides] = '#939393',\r\n _a[editorSelectionHighlight] = '#ADD6FF4D',\r\n _a)\r\n};\r\n/* -------------------------------- End vs theme -------------------------------- */\r\n/* -------------------------------- Begin vs-dark theme -------------------------------- */\r\nexport var vs_dark = {\r\n base: 'vs-dark',\r\n inherit: false,\r\n rules: [\r\n { token: '', foreground: 'D4D4D4', background: '1E1E1E' },\r\n { token: 'invalid', foreground: 'f44747' },\r\n { token: 'emphasis', fontStyle: 'italic' },\r\n { token: 'strong', fontStyle: 'bold' },\r\n { token: 'variable', foreground: '74B0DF' },\r\n { token: 'variable.predefined', foreground: '4864AA' },\r\n { token: 'variable.parameter', foreground: '9CDCFE' },\r\n { token: 'constant', foreground: '569CD6' },\r\n { token: 'comment', foreground: '608B4E' },\r\n { token: 'number', foreground: 'B5CEA8' },\r\n { token: 'number.hex', foreground: '5BB498' },\r\n { token: 'regexp', foreground: 'B46695' },\r\n { token: 'annotation', foreground: 'cc6666' },\r\n { token: 'type', foreground: '3DC9B0' },\r\n { token: 'delimiter', foreground: 'DCDCDC' },\r\n { token: 'delimiter.html', foreground: '808080' },\r\n { token: 'delimiter.xml', foreground: '808080' },\r\n { token: 'tag', foreground: '569CD6' },\r\n { token: 'tag.id.pug', foreground: '4F76AC' },\r\n { token: 'tag.class.pug', foreground: '4F76AC' },\r\n { token: 'meta.scss', foreground: 'A79873' },\r\n { token: 'meta.tag', foreground: 'CE9178' },\r\n { token: 'metatag', foreground: 'DD6A6F' },\r\n { token: 'metatag.content.html', foreground: '9CDCFE' },\r\n { token: 'metatag.html', foreground: '569CD6' },\r\n { token: 'metatag.xml', foreground: '569CD6' },\r\n { token: 'metatag.php', fontStyle: 'bold' },\r\n { token: 'key', foreground: '9CDCFE' },\r\n { token: 'string.key.json', foreground: '9CDCFE' },\r\n { token: 'string.value.json', foreground: 'CE9178' },\r\n { token: 'attribute.name', foreground: '9CDCFE' },\r\n { token: 'attribute.value', foreground: 'CE9178' },\r\n { token: 'attribute.value.number.css', foreground: 'B5CEA8' },\r\n { token: 'attribute.value.unit.css', foreground: 'B5CEA8' },\r\n { token: 'attribute.value.hex.css', foreground: 'D4D4D4' },\r\n { token: 'string', foreground: 'CE9178' },\r\n { token: 'string.sql', foreground: 'FF0000' },\r\n { token: 'keyword', foreground: '569CD6' },\r\n { token: 'keyword.flow', foreground: 'C586C0' },\r\n { token: 'keyword.json', foreground: 'CE9178' },\r\n { token: 'keyword.flow.scss', foreground: '569CD6' },\r\n { token: 'operator.scss', foreground: '909090' },\r\n { token: 'operator.sql', foreground: '778899' },\r\n { token: 'operator.swift', foreground: '909090' },\r\n { token: 'predefined.sql', foreground: 'FF00FF' },\r\n ],\r\n colors: (_b = {},\r\n _b[editorBackground] = '#1E1E1E',\r\n _b[editorForeground] = '#D4D4D4',\r\n _b[editorInactiveSelection] = '#3A3D41',\r\n _b[editorIndentGuides] = '#404040',\r\n _b[editorActiveIndentGuides] = '#707070',\r\n _b[editorSelectionHighlight] = '#ADD6FF26',\r\n _b)\r\n};\r\n/* -------------------------------- End vs-dark theme -------------------------------- */\r\n/* -------------------------------- Begin hc-black theme -------------------------------- */\r\nexport var hc_black = {\r\n base: 'hc-black',\r\n inherit: false,\r\n rules: [\r\n { token: '', foreground: 'FFFFFF', background: '000000' },\r\n { token: 'invalid', foreground: 'f44747' },\r\n { token: 'emphasis', fontStyle: 'italic' },\r\n { token: 'strong', fontStyle: 'bold' },\r\n { token: 'variable', foreground: '1AEBFF' },\r\n { token: 'variable.parameter', foreground: '9CDCFE' },\r\n { token: 'constant', foreground: '569CD6' },\r\n { token: 'comment', foreground: '608B4E' },\r\n { token: 'number', foreground: 'FFFFFF' },\r\n { token: 'regexp', foreground: 'C0C0C0' },\r\n { token: 'annotation', foreground: '569CD6' },\r\n { token: 'type', foreground: '3DC9B0' },\r\n { token: 'delimiter', foreground: 'FFFF00' },\r\n { token: 'delimiter.html', foreground: 'FFFF00' },\r\n { token: 'tag', foreground: '569CD6' },\r\n { token: 'tag.id.pug', foreground: '4F76AC' },\r\n { token: 'tag.class.pug', foreground: '4F76AC' },\r\n { token: 'meta', foreground: 'D4D4D4' },\r\n { token: 'meta.tag', foreground: 'CE9178' },\r\n { token: 'metatag', foreground: '569CD6' },\r\n { token: 'metatag.content.html', foreground: '1AEBFF' },\r\n { token: 'metatag.html', foreground: '569CD6' },\r\n { token: 'metatag.xml', foreground: '569CD6' },\r\n { token: 'metatag.php', fontStyle: 'bold' },\r\n { token: 'key', foreground: '9CDCFE' },\r\n { token: 'string.key', foreground: '9CDCFE' },\r\n { token: 'string.value', foreground: 'CE9178' },\r\n { token: 'attribute.name', foreground: '569CD6' },\r\n { token: 'attribute.value', foreground: '3FF23F' },\r\n { token: 'string', foreground: 'CE9178' },\r\n { token: 'string.sql', foreground: 'FF0000' },\r\n { token: 'keyword', foreground: '569CD6' },\r\n { token: 'keyword.flow', foreground: 'C586C0' },\r\n { token: 'operator.sql', foreground: '778899' },\r\n { token: 'operator.swift', foreground: '909090' },\r\n { token: 'predefined.sql', foreground: 'FF00FF' },\r\n ],\r\n colors: (_c = {},\r\n _c[editorBackground] = '#000000',\r\n _c[editorForeground] = '#FFFFFF',\r\n _c[editorIndentGuides] = '#FFFFFF',\r\n _c[editorActiveIndentGuides] = '#FFFFFF',\r\n _c)\r\n};\r\n/* -------------------------------- End hc-black theme -------------------------------- */\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as dom from '../../../base/browser/dom.js';\r\nimport { Color } from '../../../base/common/color.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { TokenizationRegistry } from '../../common/modes.js';\r\nimport { TokenTheme, generateTokensCSSForColorMap } from '../../common/modes/supports/tokenization.js';\r\nimport { hc_black, vs, vs_dark } from '../common/themes.js';\r\nimport { Registry } from '../../../platform/registry/common/platform.js';\r\nimport { Extensions } from '../../../platform/theme/common/colorRegistry.js';\r\nimport { Extensions as ThemingExtensions } from '../../../platform/theme/common/themeService.js';\r\nvar VS_THEME_NAME = 'vs';\r\nvar VS_DARK_THEME_NAME = 'vs-dark';\r\nvar HC_BLACK_THEME_NAME = 'hc-black';\r\nvar colorRegistry = Registry.as(Extensions.ColorContribution);\r\nvar themingRegistry = Registry.as(ThemingExtensions.ThemingContribution);\r\nvar StandaloneTheme = /** @class */ (function () {\r\n function StandaloneTheme(name, standaloneThemeData) {\r\n this.themeData = standaloneThemeData;\r\n var base = standaloneThemeData.base;\r\n if (name.length > 0) {\r\n this.id = base + ' ' + name;\r\n this.themeName = name;\r\n }\r\n else {\r\n this.id = base;\r\n this.themeName = base;\r\n }\r\n this.colors = null;\r\n this.defaultColors = Object.create(null);\r\n this._tokenTheme = null;\r\n }\r\n Object.defineProperty(StandaloneTheme.prototype, \"base\", {\r\n get: function () {\r\n return this.themeData.base;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n StandaloneTheme.prototype.notifyBaseUpdated = function () {\r\n if (this.themeData.inherit) {\r\n this.colors = null;\r\n this._tokenTheme = null;\r\n }\r\n };\r\n StandaloneTheme.prototype.getColors = function () {\r\n if (!this.colors) {\r\n var colors = new Map();\r\n for (var id in this.themeData.colors) {\r\n colors.set(id, Color.fromHex(this.themeData.colors[id]));\r\n }\r\n if (this.themeData.inherit) {\r\n var baseData = getBuiltinRules(this.themeData.base);\r\n for (var id in baseData.colors) {\r\n if (!colors.has(id)) {\r\n colors.set(id, Color.fromHex(baseData.colors[id]));\r\n }\r\n }\r\n }\r\n this.colors = colors;\r\n }\r\n return this.colors;\r\n };\r\n StandaloneTheme.prototype.getColor = function (colorId, useDefault) {\r\n var color = this.getColors().get(colorId);\r\n if (color) {\r\n return color;\r\n }\r\n if (useDefault !== false) {\r\n return this.getDefault(colorId);\r\n }\r\n return undefined;\r\n };\r\n StandaloneTheme.prototype.getDefault = function (colorId) {\r\n var color = this.defaultColors[colorId];\r\n if (color) {\r\n return color;\r\n }\r\n color = colorRegistry.resolveDefaultColor(colorId, this);\r\n this.defaultColors[colorId] = color;\r\n return color;\r\n };\r\n StandaloneTheme.prototype.defines = function (colorId) {\r\n return Object.prototype.hasOwnProperty.call(this.getColors(), colorId);\r\n };\r\n Object.defineProperty(StandaloneTheme.prototype, \"type\", {\r\n get: function () {\r\n switch (this.base) {\r\n case VS_THEME_NAME: return 'light';\r\n case HC_BLACK_THEME_NAME: return 'hc';\r\n default: return 'dark';\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(StandaloneTheme.prototype, \"tokenTheme\", {\r\n get: function () {\r\n if (!this._tokenTheme) {\r\n var rules = [];\r\n var encodedTokensColors = [];\r\n if (this.themeData.inherit) {\r\n var baseData = getBuiltinRules(this.themeData.base);\r\n rules = baseData.rules;\r\n if (baseData.encodedTokensColors) {\r\n encodedTokensColors = baseData.encodedTokensColors;\r\n }\r\n }\r\n rules = rules.concat(this.themeData.rules);\r\n if (this.themeData.encodedTokensColors) {\r\n encodedTokensColors = this.themeData.encodedTokensColors;\r\n }\r\n this._tokenTheme = TokenTheme.createFromRawTokenTheme(rules, encodedTokensColors);\r\n }\r\n return this._tokenTheme;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n StandaloneTheme.prototype.getTokenStyleMetadata = function (type, modifiers) {\r\n return undefined;\r\n };\r\n return StandaloneTheme;\r\n}());\r\nfunction isBuiltinTheme(themeName) {\r\n return (themeName === VS_THEME_NAME\r\n || themeName === VS_DARK_THEME_NAME\r\n || themeName === HC_BLACK_THEME_NAME);\r\n}\r\nfunction getBuiltinRules(builtinTheme) {\r\n switch (builtinTheme) {\r\n case VS_THEME_NAME:\r\n return vs;\r\n case VS_DARK_THEME_NAME:\r\n return vs_dark;\r\n case HC_BLACK_THEME_NAME:\r\n return hc_black;\r\n }\r\n}\r\nfunction newBuiltInTheme(builtinTheme) {\r\n var themeData = getBuiltinRules(builtinTheme);\r\n return new StandaloneTheme(builtinTheme, themeData);\r\n}\r\nvar StandaloneThemeServiceImpl = /** @class */ (function () {\r\n function StandaloneThemeServiceImpl() {\r\n this.environment = Object.create(null);\r\n this._onThemeChange = new Emitter();\r\n this._onIconThemeChange = new Emitter();\r\n this._knownThemes = new Map();\r\n this._knownThemes.set(VS_THEME_NAME, newBuiltInTheme(VS_THEME_NAME));\r\n this._knownThemes.set(VS_DARK_THEME_NAME, newBuiltInTheme(VS_DARK_THEME_NAME));\r\n this._knownThemes.set(HC_BLACK_THEME_NAME, newBuiltInTheme(HC_BLACK_THEME_NAME));\r\n this._styleElement = dom.createStyleSheet();\r\n this._styleElement.className = 'monaco-colors';\r\n this.setTheme(VS_THEME_NAME);\r\n }\r\n Object.defineProperty(StandaloneThemeServiceImpl.prototype, \"onThemeChange\", {\r\n get: function () {\r\n return this._onThemeChange.event;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n StandaloneThemeServiceImpl.prototype.defineTheme = function (themeName, themeData) {\r\n if (!/^[a-z0-9\\-]+$/i.test(themeName)) {\r\n throw new Error('Illegal theme name!');\r\n }\r\n if (!isBuiltinTheme(themeData.base) && !isBuiltinTheme(themeName)) {\r\n throw new Error('Illegal theme base!');\r\n }\r\n // set or replace theme\r\n this._knownThemes.set(themeName, new StandaloneTheme(themeName, themeData));\r\n if (isBuiltinTheme(themeName)) {\r\n this._knownThemes.forEach(function (theme) {\r\n if (theme.base === themeName) {\r\n theme.notifyBaseUpdated();\r\n }\r\n });\r\n }\r\n if (this._theme && this._theme.themeName === themeName) {\r\n this.setTheme(themeName); // refresh theme\r\n }\r\n };\r\n StandaloneThemeServiceImpl.prototype.getTheme = function () {\r\n return this._theme;\r\n };\r\n StandaloneThemeServiceImpl.prototype.setTheme = function (themeName) {\r\n var _this = this;\r\n var theme;\r\n if (this._knownThemes.has(themeName)) {\r\n theme = this._knownThemes.get(themeName);\r\n }\r\n else {\r\n theme = this._knownThemes.get(VS_THEME_NAME);\r\n }\r\n if (this._theme === theme) {\r\n // Nothing to do\r\n return theme.id;\r\n }\r\n this._theme = theme;\r\n var cssRules = [];\r\n var hasRule = {};\r\n var ruleCollector = {\r\n addRule: function (rule) {\r\n if (!hasRule[rule]) {\r\n cssRules.push(rule);\r\n hasRule[rule] = true;\r\n }\r\n }\r\n };\r\n themingRegistry.getThemingParticipants().forEach(function (p) { return p(theme, ruleCollector, _this.environment); });\r\n var tokenTheme = theme.tokenTheme;\r\n var colorMap = tokenTheme.getColorMap();\r\n ruleCollector.addRule(generateTokensCSSForColorMap(colorMap));\r\n this._styleElement.innerHTML = cssRules.join('\\n');\r\n TokenizationRegistry.setColorMap(colorMap);\r\n this._onThemeChange.fire(theme);\r\n return theme.id;\r\n };\r\n StandaloneThemeServiceImpl.prototype.getIconTheme = function () {\r\n return {\r\n hasFileIcons: false,\r\n hasFolderIcons: false,\r\n hidesExplorerArrows: false\r\n };\r\n };\r\n return StandaloneThemeServiceImpl;\r\n}());\r\nexport { StandaloneThemeServiceImpl };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport { Event, PauseableEmitter } from '../../../base/common/event.js';\r\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\r\nimport { keys } from '../../../base/common/map.js';\r\nimport { CommandsRegistry } from '../../commands/common/commands.js';\r\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\r\nimport { IContextKeyService, SET_CONTEXT_COMMAND_ID } from '../common/contextkey.js';\r\nimport { KeybindingResolver } from '../../keybinding/common/keybindingResolver.js';\r\nvar KEYBINDING_CONTEXT_ATTR = 'data-keybinding-context';\r\nvar Context = /** @class */ (function () {\r\n function Context(id, parent) {\r\n this._id = id;\r\n this._parent = parent;\r\n this._value = Object.create(null);\r\n this._value['_contextId'] = id;\r\n }\r\n Context.prototype.setValue = function (key, value) {\r\n // console.log('SET ' + key + ' = ' + value + ' ON ' + this._id);\r\n if (this._value[key] !== value) {\r\n this._value[key] = value;\r\n return true;\r\n }\r\n return false;\r\n };\r\n Context.prototype.removeValue = function (key) {\r\n // console.log('REMOVE ' + key + ' FROM ' + this._id);\r\n if (key in this._value) {\r\n delete this._value[key];\r\n return true;\r\n }\r\n return false;\r\n };\r\n Context.prototype.getValue = function (key) {\r\n var ret = this._value[key];\r\n if (typeof ret === 'undefined' && this._parent) {\r\n return this._parent.getValue(key);\r\n }\r\n return ret;\r\n };\r\n return Context;\r\n}());\r\nexport { Context };\r\nvar NullContext = /** @class */ (function (_super) {\r\n __extends(NullContext, _super);\r\n function NullContext() {\r\n return _super.call(this, -1, null) || this;\r\n }\r\n NullContext.prototype.setValue = function (key, value) {\r\n return false;\r\n };\r\n NullContext.prototype.removeValue = function (key) {\r\n return false;\r\n };\r\n NullContext.prototype.getValue = function (key) {\r\n return undefined;\r\n };\r\n NullContext.INSTANCE = new NullContext();\r\n return NullContext;\r\n}(Context));\r\nvar ConfigAwareContextValuesContainer = /** @class */ (function (_super) {\r\n __extends(ConfigAwareContextValuesContainer, _super);\r\n function ConfigAwareContextValuesContainer(id, _configurationService, emitter) {\r\n var _this = _super.call(this, id, null) || this;\r\n _this._configurationService = _configurationService;\r\n _this._values = new Map();\r\n _this._listener = _this._configurationService.onDidChangeConfiguration(function (event) {\r\n if (event.source === 6 /* DEFAULT */) {\r\n // new setting, reset everything\r\n var allKeys = keys(_this._values);\r\n _this._values.clear();\r\n emitter.fire(new ArrayContextKeyChangeEvent(allKeys));\r\n }\r\n else {\r\n var changedKeys = [];\r\n for (var _i = 0, _a = event.affectedKeys; _i < _a.length; _i++) {\r\n var configKey = _a[_i];\r\n var contextKey = \"config.\" + configKey;\r\n if (_this._values.has(contextKey)) {\r\n _this._values.delete(contextKey);\r\n changedKeys.push(contextKey);\r\n }\r\n }\r\n emitter.fire(new ArrayContextKeyChangeEvent(changedKeys));\r\n }\r\n });\r\n return _this;\r\n }\r\n ConfigAwareContextValuesContainer.prototype.dispose = function () {\r\n this._listener.dispose();\r\n };\r\n ConfigAwareContextValuesContainer.prototype.getValue = function (key) {\r\n if (key.indexOf(ConfigAwareContextValuesContainer._keyPrefix) !== 0) {\r\n return _super.prototype.getValue.call(this, key);\r\n }\r\n if (this._values.has(key)) {\r\n return this._values.get(key);\r\n }\r\n var configKey = key.substr(ConfigAwareContextValuesContainer._keyPrefix.length);\r\n var configValue = this._configurationService.getValue(configKey);\r\n var value = undefined;\r\n switch (typeof configValue) {\r\n case 'number':\r\n case 'boolean':\r\n case 'string':\r\n value = configValue;\r\n break;\r\n }\r\n this._values.set(key, value);\r\n return value;\r\n };\r\n ConfigAwareContextValuesContainer.prototype.setValue = function (key, value) {\r\n return _super.prototype.setValue.call(this, key, value);\r\n };\r\n ConfigAwareContextValuesContainer.prototype.removeValue = function (key) {\r\n return _super.prototype.removeValue.call(this, key);\r\n };\r\n ConfigAwareContextValuesContainer._keyPrefix = 'config.';\r\n return ConfigAwareContextValuesContainer;\r\n}(Context));\r\nvar ContextKey = /** @class */ (function () {\r\n function ContextKey(service, key, defaultValue) {\r\n this._service = service;\r\n this._key = key;\r\n this._defaultValue = defaultValue;\r\n this.reset();\r\n }\r\n ContextKey.prototype.set = function (value) {\r\n this._service.setContext(this._key, value);\r\n };\r\n ContextKey.prototype.reset = function () {\r\n if (typeof this._defaultValue === 'undefined') {\r\n this._service.removeContext(this._key);\r\n }\r\n else {\r\n this._service.setContext(this._key, this._defaultValue);\r\n }\r\n };\r\n ContextKey.prototype.get = function () {\r\n return this._service.getContextKeyValue(this._key);\r\n };\r\n return ContextKey;\r\n}());\r\nvar SimpleContextKeyChangeEvent = /** @class */ (function () {\r\n function SimpleContextKeyChangeEvent(key) {\r\n this.key = key;\r\n }\r\n SimpleContextKeyChangeEvent.prototype.affectsSome = function (keys) {\r\n return keys.has(this.key);\r\n };\r\n return SimpleContextKeyChangeEvent;\r\n}());\r\nvar ArrayContextKeyChangeEvent = /** @class */ (function () {\r\n function ArrayContextKeyChangeEvent(keys) {\r\n this.keys = keys;\r\n }\r\n ArrayContextKeyChangeEvent.prototype.affectsSome = function (keys) {\r\n for (var _i = 0, _a = this.keys; _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n if (keys.has(key)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n return ArrayContextKeyChangeEvent;\r\n}());\r\nvar CompositeContextKeyChangeEvent = /** @class */ (function () {\r\n function CompositeContextKeyChangeEvent(events) {\r\n this.events = events;\r\n }\r\n CompositeContextKeyChangeEvent.prototype.affectsSome = function (keys) {\r\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\r\n var e = _a[_i];\r\n if (e.affectsSome(keys)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n return CompositeContextKeyChangeEvent;\r\n}());\r\nvar AbstractContextKeyService = /** @class */ (function () {\r\n function AbstractContextKeyService(myContextId) {\r\n this._onDidChangeContext = new PauseableEmitter({ merge: function (input) { return new CompositeContextKeyChangeEvent(input); } });\r\n this._isDisposed = false;\r\n this._myContextId = myContextId;\r\n }\r\n AbstractContextKeyService.prototype.createKey = function (key, defaultValue) {\r\n if (this._isDisposed) {\r\n throw new Error(\"AbstractContextKeyService has been disposed\");\r\n }\r\n return new ContextKey(this, key, defaultValue);\r\n };\r\n Object.defineProperty(AbstractContextKeyService.prototype, \"onDidChangeContext\", {\r\n get: function () {\r\n return this._onDidChangeContext.event;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AbstractContextKeyService.prototype.bufferChangeEvents = function (callback) {\r\n this._onDidChangeContext.pause();\r\n try {\r\n callback();\r\n }\r\n finally {\r\n this._onDidChangeContext.resume();\r\n }\r\n };\r\n AbstractContextKeyService.prototype.createScoped = function (domNode) {\r\n if (this._isDisposed) {\r\n throw new Error(\"AbstractContextKeyService has been disposed\");\r\n }\r\n return new ScopedContextKeyService(this, domNode);\r\n };\r\n AbstractContextKeyService.prototype.contextMatchesRules = function (rules) {\r\n if (this._isDisposed) {\r\n throw new Error(\"AbstractContextKeyService has been disposed\");\r\n }\r\n var context = this.getContextValuesContainer(this._myContextId);\r\n var result = KeybindingResolver.contextMatchesRules(context, rules);\r\n // console.group(rules.serialize() + ' -> ' + result);\r\n // rules.keys().forEach(key => { console.log(key, ctx[key]); });\r\n // console.groupEnd();\r\n return result;\r\n };\r\n AbstractContextKeyService.prototype.getContextKeyValue = function (key) {\r\n if (this._isDisposed) {\r\n return undefined;\r\n }\r\n return this.getContextValuesContainer(this._myContextId).getValue(key);\r\n };\r\n AbstractContextKeyService.prototype.setContext = function (key, value) {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n var myContext = this.getContextValuesContainer(this._myContextId);\r\n if (!myContext) {\r\n return;\r\n }\r\n if (myContext.setValue(key, value)) {\r\n this._onDidChangeContext.fire(new SimpleContextKeyChangeEvent(key));\r\n }\r\n };\r\n AbstractContextKeyService.prototype.removeContext = function (key) {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n if (this.getContextValuesContainer(this._myContextId).removeValue(key)) {\r\n this._onDidChangeContext.fire(new SimpleContextKeyChangeEvent(key));\r\n }\r\n };\r\n AbstractContextKeyService.prototype.getContext = function (target) {\r\n if (this._isDisposed) {\r\n return NullContext.INSTANCE;\r\n }\r\n return this.getContextValuesContainer(findContextAttr(target));\r\n };\r\n return AbstractContextKeyService;\r\n}());\r\nexport { AbstractContextKeyService };\r\nvar ContextKeyService = /** @class */ (function (_super) {\r\n __extends(ContextKeyService, _super);\r\n function ContextKeyService(configurationService) {\r\n var _this = _super.call(this, 0) || this;\r\n _this._contexts = new Map();\r\n _this._toDispose = new DisposableStore();\r\n _this._lastContextId = 0;\r\n var myContext = new ConfigAwareContextValuesContainer(_this._myContextId, configurationService, _this._onDidChangeContext);\r\n _this._contexts.set(_this._myContextId, myContext);\r\n _this._toDispose.add(myContext);\r\n return _this;\r\n // Uncomment this to see the contexts continuously logged\r\n // let lastLoggedValue: string | null = null;\r\n // setInterval(() => {\r\n // \tlet values = Object.keys(this._contexts).map((key) => this._contexts[key]);\r\n // \tlet logValue = values.map(v => JSON.stringify(v._value, null, '\\t')).join('\\n');\r\n // \tif (lastLoggedValue !== logValue) {\r\n // \t\tlastLoggedValue = logValue;\r\n // \t\tconsole.log(lastLoggedValue);\r\n // \t}\r\n // }, 2000);\r\n }\r\n ContextKeyService.prototype.dispose = function () {\r\n this._isDisposed = true;\r\n this._toDispose.dispose();\r\n };\r\n ContextKeyService.prototype.getContextValuesContainer = function (contextId) {\r\n if (this._isDisposed) {\r\n return NullContext.INSTANCE;\r\n }\r\n return this._contexts.get(contextId) || NullContext.INSTANCE;\r\n };\r\n ContextKeyService.prototype.createChildContext = function (parentContextId) {\r\n if (parentContextId === void 0) { parentContextId = this._myContextId; }\r\n if (this._isDisposed) {\r\n throw new Error(\"ContextKeyService has been disposed\");\r\n }\r\n var id = (++this._lastContextId);\r\n this._contexts.set(id, new Context(id, this.getContextValuesContainer(parentContextId)));\r\n return id;\r\n };\r\n ContextKeyService.prototype.disposeContext = function (contextId) {\r\n if (!this._isDisposed) {\r\n this._contexts.delete(contextId);\r\n }\r\n };\r\n ContextKeyService = __decorate([\r\n __param(0, IConfigurationService)\r\n ], ContextKeyService);\r\n return ContextKeyService;\r\n}(AbstractContextKeyService));\r\nexport { ContextKeyService };\r\nvar ScopedContextKeyService = /** @class */ (function (_super) {\r\n __extends(ScopedContextKeyService, _super);\r\n function ScopedContextKeyService(parent, domNode) {\r\n var _this = _super.call(this, parent.createChildContext()) || this;\r\n _this._parent = parent;\r\n if (domNode) {\r\n _this._domNode = domNode;\r\n _this._domNode.setAttribute(KEYBINDING_CONTEXT_ATTR, String(_this._myContextId));\r\n }\r\n return _this;\r\n }\r\n ScopedContextKeyService.prototype.dispose = function () {\r\n this._isDisposed = true;\r\n this._parent.disposeContext(this._myContextId);\r\n if (this._domNode) {\r\n this._domNode.removeAttribute(KEYBINDING_CONTEXT_ATTR);\r\n this._domNode = undefined;\r\n }\r\n };\r\n Object.defineProperty(ScopedContextKeyService.prototype, \"onDidChangeContext\", {\r\n get: function () {\r\n return Event.any(this._parent.onDidChangeContext, this._onDidChangeContext.event);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ScopedContextKeyService.prototype.getContextValuesContainer = function (contextId) {\r\n if (this._isDisposed) {\r\n return NullContext.INSTANCE;\r\n }\r\n return this._parent.getContextValuesContainer(contextId);\r\n };\r\n ScopedContextKeyService.prototype.createChildContext = function (parentContextId) {\r\n if (parentContextId === void 0) { parentContextId = this._myContextId; }\r\n if (this._isDisposed) {\r\n throw new Error(\"ScopedContextKeyService has been disposed\");\r\n }\r\n return this._parent.createChildContext(parentContextId);\r\n };\r\n ScopedContextKeyService.prototype.disposeContext = function (contextId) {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n this._parent.disposeContext(contextId);\r\n };\r\n return ScopedContextKeyService;\r\n}(AbstractContextKeyService));\r\nfunction findContextAttr(domNode) {\r\n while (domNode) {\r\n if (domNode.hasAttribute(KEYBINDING_CONTEXT_ATTR)) {\r\n var attr = domNode.getAttribute(KEYBINDING_CONTEXT_ATTR);\r\n if (attr) {\r\n return parseInt(attr, 10);\r\n }\r\n return NaN;\r\n }\r\n domNode = domNode.parentElement;\r\n }\r\n return 0;\r\n}\r\nCommandsRegistry.registerCommand(SET_CONTEXT_COMMAND_ID, function (accessor, contextKey, contextValue) {\r\n accessor.get(IContextKeyService).createKey(String(contextKey), contextValue);\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport './menu.css';\r\nimport * as nls from '../../../../nls.js';\r\nimport * as strings from '../../../common/strings.js';\r\nimport { Action } from '../../../common/actions.js';\r\nimport { ActionBar, Separator, ActionViewItem, BaseActionViewItem } from '../actionbar/actionbar.js';\r\nimport { addClass, EventType, EventHelper, removeTabIndexAndUpdateFocus, isAncestor, hasClass, addDisposableListener, removeClass, append, $, addClasses, removeClasses } from '../../dom.js';\r\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\r\nimport { RunOnceScheduler } from '../../../common/async.js';\r\nimport { DisposableStore } from '../../../common/lifecycle.js';\r\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\r\nimport { isLinux, isMacintosh } from '../../../common/platform.js';\r\nexport var MENU_MNEMONIC_REGEX = /\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/;\r\nexport var MENU_ESCAPED_MNEMONIC_REGEX = /(&)?(&)([^\\s&])/g;\r\nexport var Direction;\r\n(function (Direction) {\r\n Direction[Direction[\"Right\"] = 0] = \"Right\";\r\n Direction[Direction[\"Left\"] = 1] = \"Left\";\r\n})(Direction || (Direction = {}));\r\nvar SubmenuAction = /** @class */ (function (_super) {\r\n __extends(SubmenuAction, _super);\r\n function SubmenuAction(label, entries, cssClass) {\r\n var _this = _super.call(this, !!cssClass ? cssClass : 'submenu', label, '', true) || this;\r\n _this.entries = entries;\r\n return _this;\r\n }\r\n return SubmenuAction;\r\n}(Action));\r\nexport { SubmenuAction };\r\nvar Menu = /** @class */ (function (_super) {\r\n __extends(Menu, _super);\r\n function Menu(container, actions, options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = this;\r\n addClass(container, 'monaco-menu-container');\r\n container.setAttribute('role', 'presentation');\r\n var menuElement = document.createElement('div');\r\n addClass(menuElement, 'monaco-menu');\r\n menuElement.setAttribute('role', 'presentation');\r\n _this = _super.call(this, menuElement, {\r\n orientation: 2 /* VERTICAL */,\r\n actionViewItemProvider: function (action) { return _this.doGetActionViewItem(action, options, parentData); },\r\n context: options.context,\r\n actionRunner: options.actionRunner,\r\n ariaLabel: options.ariaLabel,\r\n triggerKeys: { keys: __spreadArrays([3 /* Enter */], (isMacintosh ? [10 /* Space */] : [])), keyDown: true }\r\n }) || this;\r\n _this.menuElement = menuElement;\r\n _this.actionsList.setAttribute('role', 'menu');\r\n _this.actionsList.tabIndex = 0;\r\n _this.menuDisposables = _this._register(new DisposableStore());\r\n addDisposableListener(menuElement, EventType.KEY_DOWN, function (e) {\r\n var event = new StandardKeyboardEvent(e);\r\n // Stop tab navigation of menus\r\n if (event.equals(2 /* Tab */)) {\r\n e.preventDefault();\r\n }\r\n });\r\n if (options.enableMnemonics) {\r\n _this.menuDisposables.add(addDisposableListener(menuElement, EventType.KEY_DOWN, function (e) {\r\n var key = e.key.toLocaleLowerCase();\r\n if (_this.mnemonics.has(key)) {\r\n EventHelper.stop(e, true);\r\n var actions_1 = _this.mnemonics.get(key);\r\n if (actions_1.length === 1) {\r\n if (actions_1[0] instanceof SubmenuMenuActionViewItem && actions_1[0].container) {\r\n _this.focusItemByElement(actions_1[0].container);\r\n }\r\n actions_1[0].onClick(e);\r\n }\r\n if (actions_1.length > 1) {\r\n var action = actions_1.shift();\r\n if (action && action.container) {\r\n _this.focusItemByElement(action.container);\r\n actions_1.push(action);\r\n }\r\n _this.mnemonics.set(key, actions_1);\r\n }\r\n }\r\n }));\r\n }\r\n if (isLinux) {\r\n _this._register(addDisposableListener(menuElement, EventType.KEY_DOWN, function (e) {\r\n var event = new StandardKeyboardEvent(e);\r\n if (event.equals(14 /* Home */) || event.equals(11 /* PageUp */)) {\r\n _this.focusedItem = _this.viewItems.length - 1;\r\n _this.focusNext();\r\n EventHelper.stop(e, true);\r\n }\r\n else if (event.equals(13 /* End */) || event.equals(12 /* PageDown */)) {\r\n _this.focusedItem = 0;\r\n _this.focusPrevious();\r\n EventHelper.stop(e, true);\r\n }\r\n }));\r\n }\r\n _this._register(addDisposableListener(_this.domNode, EventType.MOUSE_OUT, function (e) {\r\n var relatedTarget = e.relatedTarget;\r\n if (!isAncestor(relatedTarget, _this.domNode)) {\r\n _this.focusedItem = undefined;\r\n _this.updateFocus();\r\n e.stopPropagation();\r\n }\r\n }));\r\n _this._register(addDisposableListener(_this.actionsList, EventType.MOUSE_OVER, function (e) {\r\n var target = e.target;\r\n if (!target || !isAncestor(target, _this.actionsList) || target === _this.actionsList) {\r\n return;\r\n }\r\n while (target.parentElement !== _this.actionsList && target.parentElement !== null) {\r\n target = target.parentElement;\r\n }\r\n if (hasClass(target, 'action-item')) {\r\n var lastFocusedItem = _this.focusedItem;\r\n _this.setFocusedItem(target);\r\n if (lastFocusedItem !== _this.focusedItem) {\r\n _this.updateFocus();\r\n }\r\n }\r\n }));\r\n var parentData = {\r\n parent: _this\r\n };\r\n _this.mnemonics = new Map();\r\n // Scroll Logic\r\n _this.scrollableElement = _this._register(new DomScrollableElement(menuElement, {\r\n alwaysConsumeMouseWheel: true,\r\n horizontal: 2 /* Hidden */,\r\n vertical: 3 /* Visible */,\r\n verticalScrollbarSize: 7,\r\n handleMouseWheel: true,\r\n useShadows: true\r\n }));\r\n var scrollElement = _this.scrollableElement.getDomNode();\r\n scrollElement.style.position = '';\r\n _this._register(addDisposableListener(scrollElement, EventType.MOUSE_UP, function (e) {\r\n // Absorb clicks in menu dead space https://github.com/Microsoft/vscode/issues/63575\r\n // We do this on the scroll element so the scroll bar doesn't dismiss the menu either\r\n e.preventDefault();\r\n }));\r\n menuElement.style.maxHeight = Math.max(10, window.innerHeight - container.getBoundingClientRect().top - 30) + \"px\";\r\n _this.push(actions, { icon: true, label: true, isMenu: true });\r\n container.appendChild(_this.scrollableElement.getDomNode());\r\n _this.scrollableElement.scanDomNode();\r\n _this.viewItems.filter(function (item) { return !(item instanceof MenuSeparatorActionViewItem); }).forEach(function (item, index, array) {\r\n item.updatePositionInSet(index + 1, array.length);\r\n });\r\n return _this;\r\n }\r\n Menu.prototype.style = function (style) {\r\n var container = this.getContainer();\r\n var fgColor = style.foregroundColor ? \"\" + style.foregroundColor : '';\r\n var bgColor = style.backgroundColor ? \"\" + style.backgroundColor : '';\r\n var border = style.borderColor ? \"1px solid \" + style.borderColor : '';\r\n var shadow = style.shadowColor ? \"0 2px 4px \" + style.shadowColor : '';\r\n container.style.border = border;\r\n this.domNode.style.color = fgColor;\r\n this.domNode.style.backgroundColor = bgColor;\r\n container.style.boxShadow = shadow;\r\n if (this.viewItems) {\r\n this.viewItems.forEach(function (item) {\r\n if (item instanceof BaseMenuActionViewItem || item instanceof MenuSeparatorActionViewItem) {\r\n item.style(style);\r\n }\r\n });\r\n }\r\n };\r\n Menu.prototype.getContainer = function () {\r\n return this.scrollableElement.getDomNode();\r\n };\r\n Object.defineProperty(Menu.prototype, \"onScroll\", {\r\n get: function () {\r\n return this.scrollableElement.onScroll;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"scrollOffset\", {\r\n get: function () {\r\n return this.menuElement.scrollTop;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Menu.prototype.focusItemByElement = function (element) {\r\n var lastFocusedItem = this.focusedItem;\r\n this.setFocusedItem(element);\r\n if (lastFocusedItem !== this.focusedItem) {\r\n this.updateFocus();\r\n }\r\n };\r\n Menu.prototype.setFocusedItem = function (element) {\r\n for (var i = 0; i < this.actionsList.children.length; i++) {\r\n var elem = this.actionsList.children[i];\r\n if (element === elem) {\r\n this.focusedItem = i;\r\n break;\r\n }\r\n }\r\n };\r\n Menu.prototype.updateFocus = function (fromRight) {\r\n _super.prototype.updateFocus.call(this, fromRight, true);\r\n if (typeof this.focusedItem !== 'undefined') {\r\n // Workaround for #80047 caused by an issue in chromium\r\n // https://bugs.chromium.org/p/chromium/issues/detail?id=414283\r\n // When that's fixed, just call this.scrollableElement.scanDomNode()\r\n this.scrollableElement.setScrollPosition({\r\n scrollTop: Math.round(this.menuElement.scrollTop)\r\n });\r\n }\r\n };\r\n Menu.prototype.doGetActionViewItem = function (action, options, parentData) {\r\n if (action instanceof Separator) {\r\n return new MenuSeparatorActionViewItem(options.context, action, { icon: true });\r\n }\r\n else if (action instanceof SubmenuAction) {\r\n var menuActionViewItem = new SubmenuMenuActionViewItem(action, action.entries, parentData, options);\r\n if (options.enableMnemonics) {\r\n var mnemonic = menuActionViewItem.getMnemonic();\r\n if (mnemonic && menuActionViewItem.isEnabled()) {\r\n var actionViewItems = [];\r\n if (this.mnemonics.has(mnemonic)) {\r\n actionViewItems = this.mnemonics.get(mnemonic);\r\n }\r\n actionViewItems.push(menuActionViewItem);\r\n this.mnemonics.set(mnemonic, actionViewItems);\r\n }\r\n }\r\n return menuActionViewItem;\r\n }\r\n else {\r\n var menuItemOptions = { enableMnemonics: options.enableMnemonics };\r\n if (options.getKeyBinding) {\r\n var keybinding = options.getKeyBinding(action);\r\n if (keybinding) {\r\n var keybindingLabel = keybinding.getLabel();\r\n if (keybindingLabel) {\r\n menuItemOptions.keybinding = keybindingLabel;\r\n }\r\n }\r\n }\r\n var menuActionViewItem = new BaseMenuActionViewItem(options.context, action, menuItemOptions);\r\n if (options.enableMnemonics) {\r\n var mnemonic = menuActionViewItem.getMnemonic();\r\n if (mnemonic && menuActionViewItem.isEnabled()) {\r\n var actionViewItems = [];\r\n if (this.mnemonics.has(mnemonic)) {\r\n actionViewItems = this.mnemonics.get(mnemonic);\r\n }\r\n actionViewItems.push(menuActionViewItem);\r\n this.mnemonics.set(mnemonic, actionViewItems);\r\n }\r\n }\r\n return menuActionViewItem;\r\n }\r\n };\r\n return Menu;\r\n}(ActionBar));\r\nexport { Menu };\r\nvar BaseMenuActionViewItem = /** @class */ (function (_super) {\r\n __extends(BaseMenuActionViewItem, _super);\r\n function BaseMenuActionViewItem(ctx, action, options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = this;\r\n options.isMenu = true;\r\n _this = _super.call(this, action, action, options) || this;\r\n _this.options = options;\r\n _this.options.icon = options.icon !== undefined ? options.icon : false;\r\n _this.options.label = options.label !== undefined ? options.label : true;\r\n _this.cssClass = '';\r\n // Set mnemonic\r\n if (_this.options.label && options.enableMnemonics) {\r\n var label = _this.getAction().label;\r\n if (label) {\r\n var matches = MENU_MNEMONIC_REGEX.exec(label);\r\n if (matches) {\r\n _this.mnemonic = (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase();\r\n }\r\n }\r\n }\r\n // Add mouse up listener later to avoid accidental clicks\r\n _this.runOnceToEnableMouseUp = new RunOnceScheduler(function () {\r\n if (!_this.element) {\r\n return;\r\n }\r\n _this._register(addDisposableListener(_this.element, EventType.MOUSE_UP, function (e) {\r\n if (e.defaultPrevented) {\r\n return;\r\n }\r\n EventHelper.stop(e, true);\r\n _this.onClick(e);\r\n }));\r\n }, 100);\r\n _this._register(_this.runOnceToEnableMouseUp);\r\n return _this;\r\n }\r\n BaseMenuActionViewItem.prototype.render = function (container) {\r\n _super.prototype.render.call(this, container);\r\n if (!this.element) {\r\n return;\r\n }\r\n this.container = container;\r\n this.item = append(this.element, $('a.action-menu-item'));\r\n if (this._action.id === Separator.ID) {\r\n // A separator is a presentation item\r\n this.item.setAttribute('role', 'presentation');\r\n }\r\n else {\r\n this.item.setAttribute('role', 'menuitem');\r\n if (this.mnemonic) {\r\n this.item.setAttribute('aria-keyshortcuts', \"\" + this.mnemonic);\r\n }\r\n }\r\n this.check = append(this.item, $('span.menu-item-check'));\r\n this.check.setAttribute('role', 'none');\r\n this.label = append(this.item, $('span.action-label'));\r\n if (this.options.label && this.options.keybinding) {\r\n append(this.item, $('span.keybinding')).textContent = this.options.keybinding;\r\n }\r\n // Adds mouse up listener to actually run the action\r\n this.runOnceToEnableMouseUp.schedule();\r\n this.updateClass();\r\n this.updateLabel();\r\n this.updateTooltip();\r\n this.updateEnabled();\r\n this.updateChecked();\r\n };\r\n BaseMenuActionViewItem.prototype.blur = function () {\r\n _super.prototype.blur.call(this);\r\n this.applyStyle();\r\n };\r\n BaseMenuActionViewItem.prototype.focus = function () {\r\n _super.prototype.focus.call(this);\r\n if (this.item) {\r\n this.item.focus();\r\n }\r\n this.applyStyle();\r\n };\r\n BaseMenuActionViewItem.prototype.updatePositionInSet = function (pos, setSize) {\r\n if (this.item) {\r\n this.item.setAttribute('aria-posinset', \"\" + pos);\r\n this.item.setAttribute('aria-setsize', \"\" + setSize);\r\n }\r\n };\r\n BaseMenuActionViewItem.prototype.updateLabel = function () {\r\n if (this.options.label) {\r\n var label = this.getAction().label;\r\n if (label) {\r\n var cleanLabel = cleanMnemonic(label);\r\n if (!this.options.enableMnemonics) {\r\n label = cleanLabel;\r\n }\r\n if (this.label) {\r\n this.label.setAttribute('aria-label', cleanLabel.replace(/&&/g, '&'));\r\n }\r\n var matches = MENU_MNEMONIC_REGEX.exec(label);\r\n if (matches) {\r\n label = strings.escape(label);\r\n // This is global, reset it\r\n MENU_ESCAPED_MNEMONIC_REGEX.lastIndex = 0;\r\n var escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\r\n // We can't use negative lookbehind so if we match our negative and skip\r\n while (escMatch && escMatch[1]) {\r\n escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\r\n }\r\n if (escMatch) {\r\n label = label.substr(0, escMatch.index) + \"\" + escMatch[3] + \"\" + label.substr(escMatch.index + escMatch[0].length);\r\n }\r\n label = label.replace(/&&/g, '&');\r\n if (this.item) {\r\n this.item.setAttribute('aria-keyshortcuts', (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase());\r\n }\r\n }\r\n else {\r\n label = label.replace(/&&/g, '&');\r\n }\r\n }\r\n if (this.label) {\r\n this.label.innerHTML = label.trim();\r\n }\r\n }\r\n };\r\n BaseMenuActionViewItem.prototype.updateTooltip = function () {\r\n var title = null;\r\n if (this.getAction().tooltip) {\r\n title = this.getAction().tooltip;\r\n }\r\n else if (!this.options.label && this.getAction().label && this.options.icon) {\r\n title = this.getAction().label;\r\n if (this.options.keybinding) {\r\n title = nls.localize({ key: 'titleLabel', comment: ['action title', 'action keybinding'] }, \"{0} ({1})\", title, this.options.keybinding);\r\n }\r\n }\r\n if (title && this.item) {\r\n this.item.title = title;\r\n }\r\n };\r\n BaseMenuActionViewItem.prototype.updateClass = function () {\r\n if (this.cssClass && this.item) {\r\n removeClasses(this.item, this.cssClass);\r\n }\r\n if (this.options.icon && this.label) {\r\n this.cssClass = this.getAction().class || '';\r\n addClass(this.label, 'icon');\r\n if (this.cssClass) {\r\n addClasses(this.label, this.cssClass);\r\n }\r\n this.updateEnabled();\r\n }\r\n else if (this.label) {\r\n removeClass(this.label, 'icon');\r\n }\r\n };\r\n BaseMenuActionViewItem.prototype.updateEnabled = function () {\r\n if (this.getAction().enabled) {\r\n if (this.element) {\r\n removeClass(this.element, 'disabled');\r\n }\r\n if (this.item) {\r\n removeClass(this.item, 'disabled');\r\n this.item.tabIndex = 0;\r\n }\r\n }\r\n else {\r\n if (this.element) {\r\n addClass(this.element, 'disabled');\r\n }\r\n if (this.item) {\r\n addClass(this.item, 'disabled');\r\n removeTabIndexAndUpdateFocus(this.item);\r\n }\r\n }\r\n };\r\n BaseMenuActionViewItem.prototype.updateChecked = function () {\r\n if (!this.item) {\r\n return;\r\n }\r\n if (this.getAction().checked) {\r\n addClass(this.item, 'checked');\r\n this.item.setAttribute('role', 'menuitemcheckbox');\r\n this.item.setAttribute('aria-checked', 'true');\r\n }\r\n else {\r\n removeClass(this.item, 'checked');\r\n this.item.setAttribute('role', 'menuitem');\r\n this.item.setAttribute('aria-checked', 'false');\r\n }\r\n };\r\n BaseMenuActionViewItem.prototype.getMnemonic = function () {\r\n return this.mnemonic;\r\n };\r\n BaseMenuActionViewItem.prototype.applyStyle = function () {\r\n if (!this.menuStyle) {\r\n return;\r\n }\r\n var isSelected = this.element && hasClass(this.element, 'focused');\r\n var fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\r\n var bgColor = isSelected && this.menuStyle.selectionBackgroundColor ? this.menuStyle.selectionBackgroundColor : this.menuStyle.backgroundColor;\r\n var border = isSelected && this.menuStyle.selectionBorderColor ? \"thin solid \" + this.menuStyle.selectionBorderColor : '';\r\n if (this.item) {\r\n this.item.style.color = fgColor ? \"\" + fgColor : null;\r\n this.item.style.backgroundColor = bgColor ? \"\" + bgColor : '';\r\n }\r\n if (this.check) {\r\n this.check.style.backgroundColor = fgColor ? \"\" + fgColor : '';\r\n }\r\n if (this.container) {\r\n this.container.style.border = border;\r\n }\r\n };\r\n BaseMenuActionViewItem.prototype.style = function (style) {\r\n this.menuStyle = style;\r\n this.applyStyle();\r\n };\r\n return BaseMenuActionViewItem;\r\n}(BaseActionViewItem));\r\nvar SubmenuMenuActionViewItem = /** @class */ (function (_super) {\r\n __extends(SubmenuMenuActionViewItem, _super);\r\n function SubmenuMenuActionViewItem(action, submenuActions, parentData, submenuOptions) {\r\n var _this = _super.call(this, action, action, submenuOptions) || this;\r\n _this.submenuActions = submenuActions;\r\n _this.parentData = parentData;\r\n _this.submenuOptions = submenuOptions;\r\n _this.mysubmenu = null;\r\n _this.submenuDisposables = _this._register(new DisposableStore());\r\n _this.mouseOver = false;\r\n _this.expandDirection = submenuOptions && submenuOptions.expandDirection !== undefined ? submenuOptions.expandDirection : Direction.Right;\r\n _this.showScheduler = new RunOnceScheduler(function () {\r\n if (_this.mouseOver) {\r\n _this.cleanupExistingSubmenu(false);\r\n _this.createSubmenu(false);\r\n }\r\n }, 250);\r\n _this.hideScheduler = new RunOnceScheduler(function () {\r\n if (_this.element && (!isAncestor(document.activeElement, _this.element) && _this.parentData.submenu === _this.mysubmenu)) {\r\n _this.parentData.parent.focus(false);\r\n _this.cleanupExistingSubmenu(true);\r\n }\r\n }, 750);\r\n return _this;\r\n }\r\n SubmenuMenuActionViewItem.prototype.render = function (container) {\r\n var _this = this;\r\n _super.prototype.render.call(this, container);\r\n if (!this.element) {\r\n return;\r\n }\r\n if (this.item) {\r\n addClass(this.item, 'monaco-submenu-item');\r\n this.item.setAttribute('aria-haspopup', 'true');\r\n this.updateAriaExpanded('false');\r\n this.submenuIndicator = append(this.item, $('span.submenu-indicator'));\r\n this.submenuIndicator.setAttribute('aria-hidden', 'true');\r\n }\r\n this._register(addDisposableListener(this.element, EventType.KEY_UP, function (e) {\r\n var event = new StandardKeyboardEvent(e);\r\n if (event.equals(17 /* RightArrow */) || event.equals(3 /* Enter */)) {\r\n EventHelper.stop(e, true);\r\n _this.createSubmenu(true);\r\n }\r\n }));\r\n this._register(addDisposableListener(this.element, EventType.KEY_DOWN, function (e) {\r\n var event = new StandardKeyboardEvent(e);\r\n if (document.activeElement === _this.item) {\r\n if (event.equals(17 /* RightArrow */) || event.equals(3 /* Enter */)) {\r\n EventHelper.stop(e, true);\r\n }\r\n }\r\n }));\r\n this._register(addDisposableListener(this.element, EventType.MOUSE_OVER, function (e) {\r\n if (!_this.mouseOver) {\r\n _this.mouseOver = true;\r\n _this.showScheduler.schedule();\r\n }\r\n }));\r\n this._register(addDisposableListener(this.element, EventType.MOUSE_LEAVE, function (e) {\r\n _this.mouseOver = false;\r\n }));\r\n this._register(addDisposableListener(this.element, EventType.FOCUS_OUT, function (e) {\r\n if (_this.element && !isAncestor(document.activeElement, _this.element)) {\r\n _this.hideScheduler.schedule();\r\n }\r\n }));\r\n this._register(this.parentData.parent.onScroll(function () {\r\n _this.parentData.parent.focus(false);\r\n _this.cleanupExistingSubmenu(false);\r\n }));\r\n };\r\n SubmenuMenuActionViewItem.prototype.onClick = function (e) {\r\n // stop clicking from trying to run an action\r\n EventHelper.stop(e, true);\r\n this.cleanupExistingSubmenu(false);\r\n this.createSubmenu(true);\r\n };\r\n SubmenuMenuActionViewItem.prototype.cleanupExistingSubmenu = function (force) {\r\n if (this.parentData.submenu && (force || (this.parentData.submenu !== this.mysubmenu))) {\r\n this.parentData.submenu.dispose();\r\n this.parentData.submenu = undefined;\r\n this.updateAriaExpanded('false');\r\n if (this.submenuContainer) {\r\n this.submenuDisposables.clear();\r\n this.submenuContainer = undefined;\r\n }\r\n }\r\n };\r\n SubmenuMenuActionViewItem.prototype.createSubmenu = function (selectFirstItem) {\r\n var _this = this;\r\n if (selectFirstItem === void 0) { selectFirstItem = true; }\r\n if (!this.element) {\r\n return;\r\n }\r\n if (!this.parentData.submenu) {\r\n this.updateAriaExpanded('true');\r\n this.submenuContainer = append(this.element, $('div.monaco-submenu'));\r\n addClasses(this.submenuContainer, 'menubar-menu-items-holder', 'context-view');\r\n // Set the top value of the menu container before construction\r\n // This allows the menu constructor to calculate the proper max height\r\n var computedStyles = getComputedStyle(this.parentData.parent.domNode);\r\n var paddingTop = parseFloat(computedStyles.paddingTop || '0') || 0;\r\n this.submenuContainer.style.top = this.element.offsetTop - this.parentData.parent.scrollOffset - paddingTop + \"px\";\r\n this.parentData.submenu = new Menu(this.submenuContainer, this.submenuActions, this.submenuOptions);\r\n if (this.menuStyle) {\r\n this.parentData.submenu.style(this.menuStyle);\r\n }\r\n var boundingRect = this.element.getBoundingClientRect();\r\n var childBoundingRect = this.submenuContainer.getBoundingClientRect();\r\n if (this.expandDirection === Direction.Right) {\r\n if (window.innerWidth <= boundingRect.right + childBoundingRect.width) {\r\n this.submenuContainer.style.left = '10px';\r\n this.submenuContainer.style.top = this.element.offsetTop - this.parentData.parent.scrollOffset + boundingRect.height + \"px\";\r\n }\r\n else {\r\n this.submenuContainer.style.left = this.element.offsetWidth + \"px\";\r\n this.submenuContainer.style.top = this.element.offsetTop - this.parentData.parent.scrollOffset - paddingTop + \"px\";\r\n }\r\n }\r\n else if (this.expandDirection === Direction.Left) {\r\n this.submenuContainer.style.right = this.element.offsetWidth + \"px\";\r\n this.submenuContainer.style.left = 'auto';\r\n this.submenuContainer.style.top = this.element.offsetTop - this.parentData.parent.scrollOffset - paddingTop + \"px\";\r\n }\r\n this.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_UP, function (e) {\r\n var event = new StandardKeyboardEvent(e);\r\n if (event.equals(15 /* LeftArrow */)) {\r\n EventHelper.stop(e, true);\r\n _this.parentData.parent.focus();\r\n _this.cleanupExistingSubmenu(true);\r\n }\r\n }));\r\n this.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_DOWN, function (e) {\r\n var event = new StandardKeyboardEvent(e);\r\n if (event.equals(15 /* LeftArrow */)) {\r\n EventHelper.stop(e, true);\r\n }\r\n }));\r\n this.submenuDisposables.add(this.parentData.submenu.onDidCancel(function () {\r\n _this.parentData.parent.focus();\r\n _this.cleanupExistingSubmenu(true);\r\n }));\r\n this.parentData.submenu.focus(selectFirstItem);\r\n this.mysubmenu = this.parentData.submenu;\r\n }\r\n else {\r\n this.parentData.submenu.focus(false);\r\n }\r\n };\r\n SubmenuMenuActionViewItem.prototype.updateAriaExpanded = function (value) {\r\n var _a;\r\n if (this.item) {\r\n (_a = this.item) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', value);\r\n }\r\n };\r\n SubmenuMenuActionViewItem.prototype.applyStyle = function () {\r\n _super.prototype.applyStyle.call(this);\r\n if (!this.menuStyle) {\r\n return;\r\n }\r\n var isSelected = this.element && hasClass(this.element, 'focused');\r\n var fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\r\n if (this.submenuIndicator) {\r\n this.submenuIndicator.style.backgroundColor = fgColor ? \"\" + fgColor : '';\r\n }\r\n if (this.parentData.submenu) {\r\n this.parentData.submenu.style(this.menuStyle);\r\n }\r\n };\r\n SubmenuMenuActionViewItem.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this.hideScheduler.dispose();\r\n if (this.mysubmenu) {\r\n this.mysubmenu.dispose();\r\n this.mysubmenu = null;\r\n }\r\n if (this.submenuContainer) {\r\n this.submenuContainer = undefined;\r\n }\r\n };\r\n return SubmenuMenuActionViewItem;\r\n}(BaseMenuActionViewItem));\r\nvar MenuSeparatorActionViewItem = /** @class */ (function (_super) {\r\n __extends(MenuSeparatorActionViewItem, _super);\r\n function MenuSeparatorActionViewItem() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n MenuSeparatorActionViewItem.prototype.style = function (style) {\r\n if (this.label) {\r\n this.label.style.borderBottomColor = style.separatorColor ? \"\" + style.separatorColor : '';\r\n }\r\n };\r\n return MenuSeparatorActionViewItem;\r\n}(ActionViewItem));\r\nexport function cleanMnemonic(label) {\r\n var regex = MENU_MNEMONIC_REGEX;\r\n var matches = regex.exec(label);\r\n if (!matches) {\r\n return label;\r\n }\r\n var mnemonicInText = !matches[1];\r\n return label.replace(regex, mnemonicInText ? '$2$3' : '').trim();\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport { inputBackground, inputForeground, inputBorder, foreground, editorBackground, contrastBorder, listFocusBackground, listFocusForeground, listActiveSelectionBackground, listActiveSelectionForeground, listInactiveSelectionForeground, listInactiveSelectionBackground, listInactiveFocusBackground, listHoverBackground, listHoverForeground, listDropBackground, pickerGroupBorder, pickerGroupForeground, widgetShadow, inputValidationInfoBorder, inputValidationInfoBackground, inputValidationWarningBorder, inputValidationWarningBackground, inputValidationErrorBorder, inputValidationErrorBackground, activeContrastBorder, badgeBackground, badgeForeground, progressBarBackground, inputValidationInfoForeground, inputValidationWarningForeground, inputValidationErrorForeground, menuForeground, menuBackground, menuSelectionForeground, menuSelectionBackground, menuSelectionBorder, menuBorder, menuSeparatorBackground, darken, listFilterWidgetOutline, listFilterWidgetNoMatchesOutline, listFilterWidgetBackground, treeIndentGuidesStroke, resolveColorValue } from './colorRegistry.js';\r\nexport function computeStyles(theme, styleMap) {\r\n var styles = Object.create(null);\r\n for (var key in styleMap) {\r\n var value = styleMap[key];\r\n if (value) {\r\n styles[key] = resolveColorValue(value, theme);\r\n }\r\n }\r\n return styles;\r\n}\r\nexport function attachStyler(themeService, styleMap, widgetOrCallback) {\r\n function applyStyles(theme) {\r\n var styles = computeStyles(themeService.getTheme(), styleMap);\r\n if (typeof widgetOrCallback === 'function') {\r\n widgetOrCallback(styles);\r\n }\r\n else {\r\n widgetOrCallback.style(styles);\r\n }\r\n }\r\n applyStyles(themeService.getTheme());\r\n return themeService.onThemeChange(applyStyles);\r\n}\r\nexport function attachBadgeStyler(widget, themeService, style) {\r\n return attachStyler(themeService, {\r\n badgeBackground: (style && style.badgeBackground) || badgeBackground,\r\n badgeForeground: (style && style.badgeForeground) || badgeForeground,\r\n badgeBorder: contrastBorder\r\n }, widget);\r\n}\r\nexport function attachQuickOpenStyler(widget, themeService, style) {\r\n return attachStyler(themeService, {\r\n foreground: (style && style.foreground) || foreground,\r\n background: (style && style.background) || editorBackground,\r\n borderColor: style && style.borderColor || contrastBorder,\r\n widgetShadow: style && style.widgetShadow || widgetShadow,\r\n progressBarBackground: style && style.progressBarBackground || progressBarBackground,\r\n pickerGroupForeground: style && style.pickerGroupForeground || pickerGroupForeground,\r\n pickerGroupBorder: style && style.pickerGroupBorder || pickerGroupBorder,\r\n inputBackground: (style && style.inputBackground) || inputBackground,\r\n inputForeground: (style && style.inputForeground) || inputForeground,\r\n inputBorder: (style && style.inputBorder) || inputBorder,\r\n inputValidationInfoBorder: (style && style.inputValidationInfoBorder) || inputValidationInfoBorder,\r\n inputValidationInfoBackground: (style && style.inputValidationInfoBackground) || inputValidationInfoBackground,\r\n inputValidationInfoForeground: (style && style.inputValidationInfoForeground) || inputValidationInfoForeground,\r\n inputValidationWarningBorder: (style && style.inputValidationWarningBorder) || inputValidationWarningBorder,\r\n inputValidationWarningBackground: (style && style.inputValidationWarningBackground) || inputValidationWarningBackground,\r\n inputValidationWarningForeground: (style && style.inputValidationWarningForeground) || inputValidationWarningForeground,\r\n inputValidationErrorBorder: (style && style.inputValidationErrorBorder) || inputValidationErrorBorder,\r\n inputValidationErrorBackground: (style && style.inputValidationErrorBackground) || inputValidationErrorBackground,\r\n inputValidationErrorForeground: (style && style.inputValidationErrorForeground) || inputValidationErrorForeground,\r\n listFocusBackground: (style && style.listFocusBackground) || listFocusBackground,\r\n listFocusForeground: (style && style.listFocusForeground) || listFocusForeground,\r\n listActiveSelectionBackground: (style && style.listActiveSelectionBackground) || darken(listActiveSelectionBackground, 0.1),\r\n listActiveSelectionForeground: (style && style.listActiveSelectionForeground) || listActiveSelectionForeground,\r\n listFocusAndSelectionBackground: style && style.listFocusAndSelectionBackground || listActiveSelectionBackground,\r\n listFocusAndSelectionForeground: (style && style.listFocusAndSelectionForeground) || listActiveSelectionForeground,\r\n listInactiveSelectionBackground: (style && style.listInactiveSelectionBackground) || listInactiveSelectionBackground,\r\n listInactiveSelectionForeground: (style && style.listInactiveSelectionForeground) || listInactiveSelectionForeground,\r\n listInactiveFocusBackground: (style && style.listInactiveFocusBackground) || listInactiveFocusBackground,\r\n listHoverBackground: (style && style.listHoverBackground) || listHoverBackground,\r\n listHoverForeground: (style && style.listHoverForeground) || listHoverForeground,\r\n listDropBackground: (style && style.listDropBackground) || listDropBackground,\r\n listFocusOutline: (style && style.listFocusOutline) || activeContrastBorder,\r\n listSelectionOutline: (style && style.listSelectionOutline) || activeContrastBorder,\r\n listHoverOutline: (style && style.listHoverOutline) || activeContrastBorder\r\n }, widget);\r\n}\r\nexport function attachListStyler(widget, themeService, overrides) {\r\n return attachStyler(themeService, __assign(__assign({}, defaultListStyles), (overrides || {})), widget);\r\n}\r\nexport var defaultListStyles = {\r\n listFocusBackground: listFocusBackground,\r\n listFocusForeground: listFocusForeground,\r\n listActiveSelectionBackground: darken(listActiveSelectionBackground, 0.1),\r\n listActiveSelectionForeground: listActiveSelectionForeground,\r\n listFocusAndSelectionBackground: listActiveSelectionBackground,\r\n listFocusAndSelectionForeground: listActiveSelectionForeground,\r\n listInactiveSelectionBackground: listInactiveSelectionBackground,\r\n listInactiveSelectionForeground: listInactiveSelectionForeground,\r\n listInactiveFocusBackground: listInactiveFocusBackground,\r\n listHoverBackground: listHoverBackground,\r\n listHoverForeground: listHoverForeground,\r\n listDropBackground: listDropBackground,\r\n listFocusOutline: activeContrastBorder,\r\n listSelectionOutline: activeContrastBorder,\r\n listHoverOutline: activeContrastBorder,\r\n listFilterWidgetBackground: listFilterWidgetBackground,\r\n listFilterWidgetOutline: listFilterWidgetOutline,\r\n listFilterWidgetNoMatchesOutline: listFilterWidgetNoMatchesOutline,\r\n listMatchesShadow: widgetShadow,\r\n treeIndentGuidesStroke: treeIndentGuidesStroke\r\n};\r\nexport var defaultMenuStyles = {\r\n shadowColor: widgetShadow,\r\n borderColor: menuBorder,\r\n foregroundColor: menuForeground,\r\n backgroundColor: menuBackground,\r\n selectionForegroundColor: menuSelectionForeground,\r\n selectionBackgroundColor: menuSelectionBackground,\r\n selectionBorderColor: menuSelectionBorder,\r\n separatorColor: menuSeparatorBackground\r\n};\r\nexport function attachMenuStyler(widget, themeService, style) {\r\n return attachStyler(themeService, __assign(__assign({}, defaultMenuStyles), style), widget);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport './contextMenuHandler.css';\r\nimport { ActionRunner } from '../../../base/common/actions.js';\r\nimport { combinedDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\r\nimport { Menu } from '../../../base/browser/ui/menu/menu.js';\r\nimport { EventType, $, removeNode } from '../../../base/browser/dom.js';\r\nimport { attachMenuStyler } from '../../theme/common/styler.js';\r\nimport { domEvent } from '../../../base/browser/event.js';\r\nimport { StandardMouseEvent } from '../../../base/browser/mouseEvent.js';\r\nvar ContextMenuHandler = /** @class */ (function () {\r\n function ContextMenuHandler(contextViewService, telemetryService, notificationService, keybindingService, themeService) {\r\n this.contextViewService = contextViewService;\r\n this.telemetryService = telemetryService;\r\n this.notificationService = notificationService;\r\n this.keybindingService = keybindingService;\r\n this.themeService = themeService;\r\n this.focusToReturn = null;\r\n this.block = null;\r\n this.options = { blockMouse: true };\r\n }\r\n ContextMenuHandler.prototype.configure = function (options) {\r\n this.options = options;\r\n };\r\n ContextMenuHandler.prototype.showContextMenu = function (delegate) {\r\n var _this = this;\r\n var actions = delegate.getActions();\r\n if (!actions.length) {\r\n return; // Don't render an empty context menu\r\n }\r\n this.focusToReturn = document.activeElement;\r\n var menu;\r\n this.contextViewService.showContextView({\r\n getAnchor: function () { return delegate.getAnchor(); },\r\n canRelayout: false,\r\n anchorAlignment: delegate.anchorAlignment,\r\n render: function (container) {\r\n var className = delegate.getMenuClassName ? delegate.getMenuClassName() : '';\r\n if (className) {\r\n container.className += ' ' + className;\r\n }\r\n // Render invisible div to block mouse interaction in the rest of the UI\r\n if (_this.options.blockMouse) {\r\n _this.block = container.appendChild($('.context-view-block'));\r\n }\r\n var menuDisposables = new DisposableStore();\r\n var actionRunner = delegate.actionRunner || new ActionRunner();\r\n actionRunner.onDidBeforeRun(_this.onActionRun, _this, menuDisposables);\r\n actionRunner.onDidRun(_this.onDidActionRun, _this, menuDisposables);\r\n menu = new Menu(container, actions, {\r\n actionViewItemProvider: delegate.getActionViewItem,\r\n context: delegate.getActionsContext ? delegate.getActionsContext() : null,\r\n actionRunner: actionRunner,\r\n getKeyBinding: delegate.getKeyBinding ? delegate.getKeyBinding : function (action) { return _this.keybindingService.lookupKeybinding(action.id); }\r\n });\r\n menuDisposables.add(attachMenuStyler(menu, _this.themeService));\r\n menu.onDidCancel(function () { return _this.contextViewService.hideContextView(true); }, null, menuDisposables);\r\n menu.onDidBlur(function () { return _this.contextViewService.hideContextView(true); }, null, menuDisposables);\r\n domEvent(window, EventType.BLUR)(function () { _this.contextViewService.hideContextView(true); }, null, menuDisposables);\r\n domEvent(window, EventType.MOUSE_DOWN)(function (e) {\r\n if (e.defaultPrevented) {\r\n return;\r\n }\r\n var event = new StandardMouseEvent(e);\r\n var element = event.target;\r\n // Don't do anything as we are likely creating a context menu\r\n if (event.rightButton) {\r\n return;\r\n }\r\n while (element) {\r\n if (element === container) {\r\n return;\r\n }\r\n element = element.parentElement;\r\n }\r\n _this.contextViewService.hideContextView(true);\r\n }, null, menuDisposables);\r\n return combinedDisposable(menuDisposables, menu);\r\n },\r\n focus: function () {\r\n if (menu) {\r\n menu.focus(!!delegate.autoSelectFirstItem);\r\n }\r\n },\r\n onHide: function (didCancel) {\r\n if (delegate.onHide) {\r\n delegate.onHide(!!didCancel);\r\n }\r\n if (_this.block) {\r\n removeNode(_this.block);\r\n _this.block = null;\r\n }\r\n if (_this.focusToReturn) {\r\n _this.focusToReturn.focus();\r\n }\r\n }\r\n });\r\n };\r\n ContextMenuHandler.prototype.onActionRun = function (e) {\r\n if (this.telemetryService) {\r\n this.telemetryService.publicLog2('workbenchActionExecuted', { id: e.action.id, from: 'contextMenu' });\r\n }\r\n this.contextViewService.hideContextView(false);\r\n // Restore focus here\r\n if (this.focusToReturn) {\r\n this.focusToReturn.focus();\r\n }\r\n };\r\n ContextMenuHandler.prototype.onDidActionRun = function (e) {\r\n if (e.error && this.notificationService) {\r\n this.notificationService.error(e.error);\r\n }\r\n };\r\n return ContextMenuHandler;\r\n}());\r\nexport { ContextMenuHandler };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport var Range;\r\n(function (Range) {\r\n /**\r\n * Returns the intersection between two ranges as a range itself.\r\n * Returns `{ start: 0, end: 0 }` if the intersection is empty.\r\n */\r\n function intersect(one, other) {\r\n if (one.start >= other.end || other.start >= one.end) {\r\n return { start: 0, end: 0 };\r\n }\r\n var start = Math.max(one.start, other.start);\r\n var end = Math.min(one.end, other.end);\r\n if (end - start <= 0) {\r\n return { start: 0, end: 0 };\r\n }\r\n return { start: start, end: end };\r\n }\r\n Range.intersect = intersect;\r\n function isEmpty(range) {\r\n return range.end - range.start <= 0;\r\n }\r\n Range.isEmpty = isEmpty;\r\n function intersects(one, other) {\r\n return !isEmpty(intersect(one, other));\r\n }\r\n Range.intersects = intersects;\r\n function relativeComplement(one, other) {\r\n var result = [];\r\n var first = { start: one.start, end: Math.min(other.start, one.end) };\r\n var second = { start: Math.max(other.end, one.start), end: one.end };\r\n if (!isEmpty(first)) {\r\n result.push(first);\r\n }\r\n if (!isEmpty(second)) {\r\n result.push(second);\r\n }\r\n return result;\r\n }\r\n Range.relativeComplement = relativeComplement;\r\n})(Range || (Range = {}));\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport { ContextMenuHandler } from './contextMenuHandler.js';\r\nimport { IContextViewService } from './contextView.js';\r\nimport { ITelemetryService } from '../../telemetry/common/telemetry.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { INotificationService } from '../../notification/common/notification.js';\r\nimport { IThemeService } from '../../theme/common/themeService.js';\r\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nvar ContextMenuService = /** @class */ (function (_super) {\r\n __extends(ContextMenuService, _super);\r\n function ContextMenuService(telemetryService, notificationService, contextViewService, keybindingService, themeService) {\r\n var _this = _super.call(this) || this;\r\n _this._onDidContextMenu = _this._register(new Emitter());\r\n _this.contextMenuHandler = new ContextMenuHandler(contextViewService, telemetryService, notificationService, keybindingService, themeService);\r\n return _this;\r\n }\r\n ContextMenuService.prototype.configure = function (options) {\r\n this.contextMenuHandler.configure(options);\r\n };\r\n // ContextMenu\r\n ContextMenuService.prototype.showContextMenu = function (delegate) {\r\n this.contextMenuHandler.showContextMenu(delegate);\r\n this._onDidContextMenu.fire();\r\n };\r\n ContextMenuService = __decorate([\r\n __param(0, ITelemetryService),\r\n __param(1, INotificationService),\r\n __param(2, IContextViewService),\r\n __param(3, IKeybindingService),\r\n __param(4, IThemeService)\r\n ], ContextMenuService);\r\n return ContextMenuService;\r\n}(Disposable));\r\nexport { ContextMenuService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport './contextview.css';\r\nimport * as DOM from '../../dom.js';\r\nimport * as platform from '../../../common/platform.js';\r\nimport { toDisposable, Disposable, DisposableStore } from '../../../common/lifecycle.js';\r\nimport { Range } from '../../../common/range.js';\r\nimport { BrowserFeatures } from '../../canIUse.js';\r\n/**\r\n * Lays out a one dimensional view next to an anchor in a viewport.\r\n *\r\n * @returns The view offset within the viewport.\r\n */\r\nexport function layout(viewportSize, viewSize, anchor) {\r\n var anchorEnd = anchor.offset + anchor.size;\r\n if (anchor.position === 0 /* Before */) {\r\n if (viewSize <= viewportSize - anchorEnd) {\r\n return anchorEnd; // happy case, lay it out after the anchor\r\n }\r\n if (viewSize <= anchor.offset) {\r\n return anchor.offset - viewSize; // ok case, lay it out before the anchor\r\n }\r\n return Math.max(viewportSize - viewSize, 0); // sad case, lay it over the anchor\r\n }\r\n else {\r\n if (viewSize <= anchor.offset) {\r\n return anchor.offset - viewSize; // happy case, lay it out before the anchor\r\n }\r\n if (viewSize <= viewportSize - anchorEnd) {\r\n return anchorEnd; // ok case, lay it out after the anchor\r\n }\r\n return 0; // sad case, lay it over the anchor\r\n }\r\n}\r\nvar ContextView = /** @class */ (function (_super) {\r\n __extends(ContextView, _super);\r\n function ContextView(container) {\r\n var _this = _super.call(this) || this;\r\n _this.container = null;\r\n _this.delegate = null;\r\n _this.toDisposeOnClean = Disposable.None;\r\n _this.toDisposeOnSetContainer = Disposable.None;\r\n _this.view = DOM.$('.context-view');\r\n DOM.hide(_this.view);\r\n _this.setContainer(container);\r\n _this._register(toDisposable(function () { return _this.setContainer(null); }));\r\n return _this;\r\n }\r\n ContextView.prototype.setContainer = function (container) {\r\n var _this = this;\r\n if (this.container) {\r\n this.toDisposeOnSetContainer.dispose();\r\n this.container.removeChild(this.view);\r\n this.container = null;\r\n }\r\n if (container) {\r\n this.container = container;\r\n this.container.appendChild(this.view);\r\n var toDisposeOnSetContainer_1 = new DisposableStore();\r\n ContextView.BUBBLE_UP_EVENTS.forEach(function (event) {\r\n toDisposeOnSetContainer_1.add(DOM.addStandardDisposableListener(_this.container, event, function (e) {\r\n _this.onDOMEvent(e, false);\r\n }));\r\n });\r\n ContextView.BUBBLE_DOWN_EVENTS.forEach(function (event) {\r\n toDisposeOnSetContainer_1.add(DOM.addStandardDisposableListener(_this.container, event, function (e) {\r\n _this.onDOMEvent(e, true);\r\n }, true));\r\n });\r\n this.toDisposeOnSetContainer = toDisposeOnSetContainer_1;\r\n }\r\n };\r\n ContextView.prototype.show = function (delegate) {\r\n if (this.isVisible()) {\r\n this.hide();\r\n }\r\n // Show static box\r\n DOM.clearNode(this.view);\r\n this.view.className = 'context-view';\r\n this.view.style.top = '0px';\r\n this.view.style.left = '0px';\r\n DOM.show(this.view);\r\n // Render content\r\n this.toDisposeOnClean = delegate.render(this.view) || Disposable.None;\r\n // Set active delegate\r\n this.delegate = delegate;\r\n // Layout\r\n this.doLayout();\r\n // Focus\r\n if (this.delegate.focus) {\r\n this.delegate.focus();\r\n }\r\n };\r\n ContextView.prototype.layout = function () {\r\n if (!this.isVisible()) {\r\n return;\r\n }\r\n if (this.delegate.canRelayout === false && !(platform.isIOS && BrowserFeatures.pointerEvents)) {\r\n this.hide();\r\n return;\r\n }\r\n if (this.delegate.layout) {\r\n this.delegate.layout();\r\n }\r\n this.doLayout();\r\n };\r\n ContextView.prototype.doLayout = function () {\r\n // Check that we still have a delegate - this.delegate.layout may have hidden\r\n if (!this.isVisible()) {\r\n return;\r\n }\r\n // Get anchor\r\n var anchor = this.delegate.getAnchor();\r\n // Compute around\r\n var around;\r\n // Get the element's position and size (to anchor the view)\r\n if (DOM.isHTMLElement(anchor)) {\r\n var elementPosition = DOM.getDomNodePagePosition(anchor);\r\n around = {\r\n top: elementPosition.top,\r\n left: elementPosition.left,\r\n width: elementPosition.width,\r\n height: elementPosition.height\r\n };\r\n }\r\n else {\r\n around = {\r\n top: anchor.y,\r\n left: anchor.x,\r\n width: anchor.width || 1,\r\n height: anchor.height || 2\r\n };\r\n }\r\n var viewSizeWidth = DOM.getTotalWidth(this.view);\r\n var viewSizeHeight = DOM.getTotalHeight(this.view);\r\n var anchorPosition = this.delegate.anchorPosition || 0 /* BELOW */;\r\n var anchorAlignment = this.delegate.anchorAlignment || 0 /* LEFT */;\r\n var verticalAnchor = { offset: around.top - window.pageYOffset, size: around.height, position: anchorPosition === 0 /* BELOW */ ? 0 /* Before */ : 1 /* After */ };\r\n var horizontalAnchor;\r\n if (anchorAlignment === 0 /* LEFT */) {\r\n horizontalAnchor = { offset: around.left, size: 0, position: 0 /* Before */ };\r\n }\r\n else {\r\n horizontalAnchor = { offset: around.left + around.width, size: 0, position: 1 /* After */ };\r\n }\r\n var top = layout(window.innerHeight, viewSizeHeight, verticalAnchor) + window.pageYOffset;\r\n // if view intersects vertically with anchor, shift it horizontally\r\n if (Range.intersects({ start: top, end: top + viewSizeHeight }, { start: verticalAnchor.offset, end: verticalAnchor.offset + verticalAnchor.size })) {\r\n horizontalAnchor.size = around.width;\r\n if (anchorAlignment === 1 /* RIGHT */) {\r\n horizontalAnchor.offset = around.left;\r\n }\r\n }\r\n var left = layout(window.innerWidth, viewSizeWidth, horizontalAnchor);\r\n DOM.removeClasses(this.view, 'top', 'bottom', 'left', 'right');\r\n DOM.addClass(this.view, anchorPosition === 0 /* BELOW */ ? 'bottom' : 'top');\r\n DOM.addClass(this.view, anchorAlignment === 0 /* LEFT */ ? 'left' : 'right');\r\n var containerPosition = DOM.getDomNodePagePosition(this.container);\r\n this.view.style.top = top - containerPosition.top + \"px\";\r\n this.view.style.left = left - containerPosition.left + \"px\";\r\n this.view.style.width = 'initial';\r\n };\r\n ContextView.prototype.hide = function (data) {\r\n var _a;\r\n var delegate = this.delegate;\r\n this.delegate = null;\r\n if ((_a = delegate) === null || _a === void 0 ? void 0 : _a.onHide) {\r\n delegate.onHide(data);\r\n }\r\n this.toDisposeOnClean.dispose();\r\n DOM.hide(this.view);\r\n };\r\n ContextView.prototype.isVisible = function () {\r\n return !!this.delegate;\r\n };\r\n ContextView.prototype.onDOMEvent = function (e, onCapture) {\r\n if (this.delegate) {\r\n if (this.delegate.onDOMEvent) {\r\n this.delegate.onDOMEvent(e, document.activeElement);\r\n }\r\n else if (onCapture && !DOM.isAncestor(e.target, this.container)) {\r\n this.hide();\r\n }\r\n }\r\n };\r\n ContextView.prototype.dispose = function () {\r\n this.hide();\r\n _super.prototype.dispose.call(this);\r\n };\r\n ContextView.BUBBLE_UP_EVENTS = ['click', 'keydown', 'focus', 'blur'];\r\n ContextView.BUBBLE_DOWN_EVENTS = ['click'];\r\n return ContextView;\r\n}(Disposable));\r\nexport { ContextView };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nexport var ILayoutService = createDecorator('layoutService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport { ContextView } from '../../../base/browser/ui/contextview/contextview.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\r\nvar ContextViewService = /** @class */ (function (_super) {\r\n __extends(ContextViewService, _super);\r\n function ContextViewService(layoutService) {\r\n var _this = _super.call(this) || this;\r\n _this.layoutService = layoutService;\r\n _this.contextView = _this._register(new ContextView(layoutService.container));\r\n _this.layout();\r\n _this._register(layoutService.onLayout(function () { return _this.layout(); }));\r\n return _this;\r\n }\r\n // ContextView\r\n ContextViewService.prototype.setContainer = function (container) {\r\n this.contextView.setContainer(container);\r\n };\r\n ContextViewService.prototype.showContextView = function (delegate) {\r\n this.contextView.show(delegate);\r\n };\r\n ContextViewService.prototype.layout = function () {\r\n this.contextView.layout();\r\n };\r\n ContextViewService.prototype.hideContextView = function (data) {\r\n this.contextView.hide(data);\r\n };\r\n ContextViewService = __decorate([\r\n __param(0, ILayoutService)\r\n ], ContextViewService);\r\n return ContextViewService;\r\n}(Disposable));\r\nexport { ContextViewService };\r\n","import { createDecorator } from '../../instantiation/common/instantiation.js';\r\nexport var IDialogService = createDecorator('dialogService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { isEmptyObject } from '../../../base/common/types.js';\r\nimport { forEach } from '../../../base/common/collections.js';\r\nfunction newNode(data) {\r\n return {\r\n data: data,\r\n incoming: Object.create(null),\r\n outgoing: Object.create(null)\r\n };\r\n}\r\nvar Graph = /** @class */ (function () {\r\n function Graph(_hashFn) {\r\n this._hashFn = _hashFn;\r\n this._nodes = Object.create(null);\r\n // empty\r\n }\r\n Graph.prototype.roots = function () {\r\n var ret = [];\r\n forEach(this._nodes, function (entry) {\r\n if (isEmptyObject(entry.value.outgoing)) {\r\n ret.push(entry.value);\r\n }\r\n });\r\n return ret;\r\n };\r\n Graph.prototype.insertEdge = function (from, to) {\r\n var fromNode = this.lookupOrInsertNode(from), toNode = this.lookupOrInsertNode(to);\r\n fromNode.outgoing[this._hashFn(to)] = toNode;\r\n toNode.incoming[this._hashFn(from)] = fromNode;\r\n };\r\n Graph.prototype.removeNode = function (data) {\r\n var key = this._hashFn(data);\r\n delete this._nodes[key];\r\n forEach(this._nodes, function (entry) {\r\n delete entry.value.outgoing[key];\r\n delete entry.value.incoming[key];\r\n });\r\n };\r\n Graph.prototype.lookupOrInsertNode = function (data) {\r\n var key = this._hashFn(data);\r\n var node = this._nodes[key];\r\n if (!node) {\r\n node = newNode(data);\r\n this._nodes[key] = node;\r\n }\r\n return node;\r\n };\r\n Graph.prototype.isEmpty = function () {\r\n for (var _key in this._nodes) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n Graph.prototype.toString = function () {\r\n var data = [];\r\n forEach(this._nodes, function (entry) {\r\n data.push(entry.key + \", (incoming)[\" + Object.keys(entry.value.incoming).join(', ') + \"], (outgoing)[\" + Object.keys(entry.value.outgoing).join(',') + \"]\");\r\n });\r\n return data.join('\\n');\r\n };\r\n return Graph;\r\n}());\r\nexport { Graph };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nexport var ListAriaRootRole;\r\n(function (ListAriaRootRole) {\r\n /** default tree structure role */\r\n ListAriaRootRole[\"TREE\"] = \"tree\";\r\n /** role='tree' can interfere with screenreaders reading nested elements inside the tree row. Use FORM in that case. */\r\n ListAriaRootRole[\"FORM\"] = \"form\";\r\n})(ListAriaRootRole || (ListAriaRootRole = {}));\r\nvar ListError = /** @class */ (function (_super) {\r\n __extends(ListError, _super);\r\n function ListError(user, message) {\r\n return _super.call(this, \"ListError [\" + user + \"] \" + message) || this;\r\n }\r\n return ListError;\r\n}(Error));\r\nexport { ListError };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { illegalState } from '../../../base/common/errors.js';\r\nimport { Graph } from './graph.js';\r\nimport { SyncDescriptor } from './descriptors.js';\r\nimport { IInstantiationService, _util, optional } from './instantiation.js';\r\nimport { ServiceCollection } from './serviceCollection.js';\r\nimport { IdleValue } from '../../../base/common/async.js';\r\n// TRACING\r\nvar _enableTracing = false;\r\nvar _canUseProxy = typeof Proxy === 'function';\r\nvar CyclicDependencyError = /** @class */ (function (_super) {\r\n __extends(CyclicDependencyError, _super);\r\n function CyclicDependencyError(graph) {\r\n var _this = _super.call(this, 'cyclic dependency between services') || this;\r\n _this.message = graph.toString();\r\n return _this;\r\n }\r\n return CyclicDependencyError;\r\n}(Error));\r\nvar InstantiationService = /** @class */ (function () {\r\n function InstantiationService(services, strict, parent) {\r\n if (services === void 0) { services = new ServiceCollection(); }\r\n if (strict === void 0) { strict = false; }\r\n this._services = services;\r\n this._strict = strict;\r\n this._parent = parent;\r\n this._services.set(IInstantiationService, this);\r\n }\r\n InstantiationService.prototype.createChild = function (services) {\r\n return new InstantiationService(services, this._strict, this);\r\n };\r\n InstantiationService.prototype.invokeFunction = function (fn) {\r\n var _this = this;\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var _trace = Trace.traceInvocation(fn);\r\n var _done = false;\r\n try {\r\n var accessor = {\r\n get: function (id, isOptional) {\r\n if (_done) {\r\n throw illegalState('service accessor is only valid during the invocation of its target method');\r\n }\r\n var result = _this._getOrCreateServiceInstance(id, _trace);\r\n if (!result && isOptional !== optional) {\r\n throw new Error(\"[invokeFunction] unknown service '\" + id + \"'\");\r\n }\r\n return result;\r\n }\r\n };\r\n return fn.apply(undefined, __spreadArrays([accessor], args));\r\n }\r\n finally {\r\n _done = true;\r\n _trace.stop();\r\n }\r\n };\r\n InstantiationService.prototype.createInstance = function (ctorOrDescriptor) {\r\n var rest = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n rest[_i - 1] = arguments[_i];\r\n }\r\n var _trace;\r\n var result;\r\n if (ctorOrDescriptor instanceof SyncDescriptor) {\r\n _trace = Trace.traceCreation(ctorOrDescriptor.ctor);\r\n result = this._createInstance(ctorOrDescriptor.ctor, ctorOrDescriptor.staticArguments.concat(rest), _trace);\r\n }\r\n else {\r\n _trace = Trace.traceCreation(ctorOrDescriptor);\r\n result = this._createInstance(ctorOrDescriptor, rest, _trace);\r\n }\r\n _trace.stop();\r\n return result;\r\n };\r\n InstantiationService.prototype._createInstance = function (ctor, args, _trace) {\r\n if (args === void 0) { args = []; }\r\n // arguments defined by service decorators\r\n var serviceDependencies = _util.getServiceDependencies(ctor).sort(function (a, b) { return a.index - b.index; });\r\n var serviceArgs = [];\r\n for (var _i = 0, serviceDependencies_1 = serviceDependencies; _i < serviceDependencies_1.length; _i++) {\r\n var dependency = serviceDependencies_1[_i];\r\n var service = this._getOrCreateServiceInstance(dependency.id, _trace);\r\n if (!service && this._strict && !dependency.optional) {\r\n throw new Error(\"[createInstance] \" + ctor.name + \" depends on UNKNOWN service \" + dependency.id + \".\");\r\n }\r\n serviceArgs.push(service);\r\n }\r\n var firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\r\n // check for argument mismatches, adjust static args if needed\r\n if (args.length !== firstServiceArgPos) {\r\n console.warn(\"[createInstance] First service dependency of \" + ctor.name + \" at position \" + (firstServiceArgPos + 1) + \" conflicts with \" + args.length + \" static arguments\");\r\n var delta = firstServiceArgPos - args.length;\r\n if (delta > 0) {\r\n args = args.concat(new Array(delta));\r\n }\r\n else {\r\n args = args.slice(0, firstServiceArgPos);\r\n }\r\n }\r\n // now create the instance\r\n return new (ctor.bind.apply(ctor, __spreadArrays([void 0], __spreadArrays(args, serviceArgs))))();\r\n };\r\n InstantiationService.prototype._setServiceInstance = function (id, instance) {\r\n if (this._services.get(id) instanceof SyncDescriptor) {\r\n this._services.set(id, instance);\r\n }\r\n else if (this._parent) {\r\n this._parent._setServiceInstance(id, instance);\r\n }\r\n else {\r\n throw new Error('illegalState - setting UNKNOWN service instance');\r\n }\r\n };\r\n InstantiationService.prototype._getServiceInstanceOrDescriptor = function (id) {\r\n var instanceOrDesc = this._services.get(id);\r\n if (!instanceOrDesc && this._parent) {\r\n return this._parent._getServiceInstanceOrDescriptor(id);\r\n }\r\n else {\r\n return instanceOrDesc;\r\n }\r\n };\r\n InstantiationService.prototype._getOrCreateServiceInstance = function (id, _trace) {\r\n var thing = this._getServiceInstanceOrDescriptor(id);\r\n if (thing instanceof SyncDescriptor) {\r\n return this._createAndCacheServiceInstance(id, thing, _trace.branch(id, true));\r\n }\r\n else {\r\n _trace.branch(id, false);\r\n return thing;\r\n }\r\n };\r\n InstantiationService.prototype._createAndCacheServiceInstance = function (id, desc, _trace) {\r\n var graph = new Graph(function (data) { return data.id.toString(); });\r\n var cycleCount = 0;\r\n var stack = [{ id: id, desc: desc, _trace: _trace }];\r\n while (stack.length) {\r\n var item = stack.pop();\r\n graph.lookupOrInsertNode(item);\r\n // a weak but working heuristic for cycle checks\r\n if (cycleCount++ > 150) {\r\n throw new CyclicDependencyError(graph);\r\n }\r\n // check all dependencies for existence and if they need to be created first\r\n for (var _i = 0, _a = _util.getServiceDependencies(item.desc.ctor); _i < _a.length; _i++) {\r\n var dependency = _a[_i];\r\n var instanceOrDesc = this._getServiceInstanceOrDescriptor(dependency.id);\r\n if (!instanceOrDesc && !dependency.optional) {\r\n console.warn(\"[createInstance] \" + id + \" depends on \" + dependency.id + \" which is NOT registered.\");\r\n }\r\n if (instanceOrDesc instanceof SyncDescriptor) {\r\n var d = { id: dependency.id, desc: instanceOrDesc, _trace: item._trace.branch(dependency.id, true) };\r\n graph.insertEdge(item, d);\r\n stack.push(d);\r\n }\r\n }\r\n }\r\n while (true) {\r\n var roots = graph.roots();\r\n // if there is no more roots but still\r\n // nodes in the graph we have a cycle\r\n if (roots.length === 0) {\r\n if (!graph.isEmpty()) {\r\n throw new CyclicDependencyError(graph);\r\n }\r\n break;\r\n }\r\n for (var _b = 0, roots_1 = roots; _b < roots_1.length; _b++) {\r\n var data = roots_1[_b].data;\r\n // create instance and overwrite the service collections\r\n var instance = this._createServiceInstanceWithOwner(data.id, data.desc.ctor, data.desc.staticArguments, data.desc.supportsDelayedInstantiation, data._trace);\r\n this._setServiceInstance(data.id, instance);\r\n graph.removeNode(data);\r\n }\r\n }\r\n return this._getServiceInstanceOrDescriptor(id);\r\n };\r\n InstantiationService.prototype._createServiceInstanceWithOwner = function (id, ctor, args, supportsDelayedInstantiation, _trace) {\r\n if (args === void 0) { args = []; }\r\n if (this._services.get(id) instanceof SyncDescriptor) {\r\n return this._createServiceInstance(ctor, args, supportsDelayedInstantiation, _trace);\r\n }\r\n else if (this._parent) {\r\n return this._parent._createServiceInstanceWithOwner(id, ctor, args, supportsDelayedInstantiation, _trace);\r\n }\r\n else {\r\n throw new Error(\"illegalState - creating UNKNOWN service instance \" + ctor.name);\r\n }\r\n };\r\n InstantiationService.prototype._createServiceInstance = function (ctor, args, _supportsDelayedInstantiation, _trace) {\r\n var _this = this;\r\n if (args === void 0) { args = []; }\r\n if (!_supportsDelayedInstantiation || !_canUseProxy) {\r\n // eager instantiation or no support JS proxies (e.g. IE11)\r\n return this._createInstance(ctor, args, _trace);\r\n }\r\n else {\r\n // Return a proxy object that's backed by an idle value. That\r\n // strategy is to instantiate services in our idle time or when actually\r\n // needed but not when injected into a consumer\r\n var idle_1 = new IdleValue(function () { return _this._createInstance(ctor, args, _trace); });\r\n return new Proxy(Object.create(null), {\r\n get: function (target, key) {\r\n if (key in target) {\r\n return target[key];\r\n }\r\n var obj = idle_1.getValue();\r\n var prop = obj[key];\r\n if (typeof prop !== 'function') {\r\n return prop;\r\n }\r\n prop = prop.bind(obj);\r\n target[key] = prop;\r\n return prop;\r\n },\r\n set: function (_target, p, value) {\r\n idle_1.getValue()[p] = value;\r\n return true;\r\n }\r\n });\r\n }\r\n };\r\n return InstantiationService;\r\n}());\r\nexport { InstantiationService };\r\nvar Trace = /** @class */ (function () {\r\n function Trace(type, name) {\r\n this.type = type;\r\n this.name = name;\r\n this._start = Date.now();\r\n this._dep = [];\r\n }\r\n Trace.traceInvocation = function (ctor) {\r\n return !_enableTracing ? Trace._None : new Trace(1 /* Invocation */, ctor.name || ctor.toString().substring(0, 42).replace(/\\n/g, ''));\r\n };\r\n Trace.traceCreation = function (ctor) {\r\n return !_enableTracing ? Trace._None : new Trace(0 /* Creation */, ctor.name);\r\n };\r\n Trace.prototype.branch = function (id, first) {\r\n var child = new Trace(2 /* Branch */, id.toString());\r\n this._dep.push([id, first, child]);\r\n return child;\r\n };\r\n Trace.prototype.stop = function () {\r\n var dur = Date.now() - this._start;\r\n Trace._totals += dur;\r\n var causedCreation = false;\r\n function printChild(n, trace) {\r\n var res = [];\r\n var prefix = new Array(n + 1).join('\\t');\r\n for (var _i = 0, _a = trace._dep; _i < _a.length; _i++) {\r\n var _b = _a[_i], id = _b[0], first = _b[1], child = _b[2];\r\n if (first && child) {\r\n causedCreation = true;\r\n res.push(prefix + \"CREATES -> \" + id);\r\n var nested = printChild(n + 1, child);\r\n if (nested) {\r\n res.push(nested);\r\n }\r\n }\r\n else {\r\n res.push(prefix + \"uses -> \" + id);\r\n }\r\n }\r\n return res.join('\\n');\r\n }\r\n var lines = [\r\n (this.type === 0 /* Creation */ ? 'CREATE' : 'CALL') + \" \" + this.name,\r\n \"\" + printChild(1, this),\r\n \"DONE, took \" + dur.toFixed(2) + \"ms (grand total \" + Trace._totals.toFixed(2) + \"ms)\"\r\n ];\r\n if (dur > 2 || causedCreation) {\r\n console.log(lines.join('\\n'));\r\n }\r\n };\r\n Trace._None = new /** @class */ (function (_super) {\r\n __extends(class_1, _super);\r\n function class_1() {\r\n return _super.call(this, -1, null) || this;\r\n }\r\n class_1.prototype.stop = function () { };\r\n class_1.prototype.branch = function () { return this; };\r\n return class_1;\r\n }(Trace));\r\n Trace._totals = 0;\r\n return Trace;\r\n}());\r\n//#endregion\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nvar LABEL_SERVICE_ID = 'label';\r\nexport var ILabelService = createDecorator(LABEL_SERVICE_ID);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Range } from '../../../common/range.js';\r\n/**\r\n * Returns the intersection between a ranged group and a range.\r\n * Returns `[]` if the intersection is empty.\r\n */\r\nexport function groupIntersect(range, groups) {\r\n var result = [];\r\n for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {\r\n var r = groups_1[_i];\r\n if (range.start >= r.range.end) {\r\n continue;\r\n }\r\n if (range.end < r.range.start) {\r\n break;\r\n }\r\n var intersection = Range.intersect(range, r.range);\r\n if (Range.isEmpty(intersection)) {\r\n continue;\r\n }\r\n result.push({\r\n range: intersection,\r\n size: r.size\r\n });\r\n }\r\n return result;\r\n}\r\n/**\r\n * Shifts a range by that `much`.\r\n */\r\nexport function shift(_a, much) {\r\n var start = _a.start, end = _a.end;\r\n return { start: start + much, end: end + much };\r\n}\r\n/**\r\n * Consolidates a collection of ranged groups.\r\n *\r\n * Consolidation is the process of merging consecutive ranged groups\r\n * that share the same `size`.\r\n */\r\nexport function consolidate(groups) {\r\n var result = [];\r\n var previousGroup = null;\r\n for (var _i = 0, groups_2 = groups; _i < groups_2.length; _i++) {\r\n var group = groups_2[_i];\r\n var start = group.range.start;\r\n var end = group.range.end;\r\n var size = group.size;\r\n if (previousGroup && size === previousGroup.size) {\r\n previousGroup.range.end = end;\r\n continue;\r\n }\r\n previousGroup = { range: { start: start, end: end }, size: size };\r\n result.push(previousGroup);\r\n }\r\n return result;\r\n}\r\n/**\r\n * Concatenates several collections of ranged groups into a single\r\n * collection.\r\n */\r\nfunction concat() {\r\n var groups = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n groups[_i] = arguments[_i];\r\n }\r\n return consolidate(groups.reduce(function (r, g) { return r.concat(g); }, []));\r\n}\r\nvar RangeMap = /** @class */ (function () {\r\n function RangeMap() {\r\n this.groups = [];\r\n this._size = 0;\r\n }\r\n RangeMap.prototype.splice = function (index, deleteCount, items) {\r\n if (items === void 0) { items = []; }\r\n var diff = items.length - deleteCount;\r\n var before = groupIntersect({ start: 0, end: index }, this.groups);\r\n var after = groupIntersect({ start: index + deleteCount, end: Number.POSITIVE_INFINITY }, this.groups)\r\n .map(function (g) { return ({ range: shift(g.range, diff), size: g.size }); });\r\n var middle = items.map(function (item, i) { return ({\r\n range: { start: index + i, end: index + i + 1 },\r\n size: item.size\r\n }); });\r\n this.groups = concat(before, middle, after);\r\n this._size = this.groups.reduce(function (t, g) { return t + (g.size * (g.range.end - g.range.start)); }, 0);\r\n };\r\n Object.defineProperty(RangeMap.prototype, \"count\", {\r\n /**\r\n * Returns the number of items in the range map.\r\n */\r\n get: function () {\r\n var len = this.groups.length;\r\n if (!len) {\r\n return 0;\r\n }\r\n return this.groups[len - 1].range.end;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RangeMap.prototype, \"size\", {\r\n /**\r\n * Returns the sum of the sizes of all items in the range map.\r\n */\r\n get: function () {\r\n return this._size;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns the index of the item at the given position.\r\n */\r\n RangeMap.prototype.indexAt = function (position) {\r\n if (position < 0) {\r\n return -1;\r\n }\r\n var index = 0;\r\n var size = 0;\r\n for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\r\n var group = _a[_i];\r\n var count = group.range.end - group.range.start;\r\n var newSize = size + (count * group.size);\r\n if (position < newSize) {\r\n return index + Math.floor((position - size) / group.size);\r\n }\r\n index += count;\r\n size = newSize;\r\n }\r\n return index;\r\n };\r\n /**\r\n * Returns the index of the item right after the item at the\r\n * index of the given position.\r\n */\r\n RangeMap.prototype.indexAfter = function (position) {\r\n return Math.min(this.indexAt(position) + 1, this.count);\r\n };\r\n /**\r\n * Returns the start position of the item at the given index.\r\n */\r\n RangeMap.prototype.positionAt = function (index) {\r\n if (index < 0) {\r\n return -1;\r\n }\r\n var position = 0;\r\n var count = 0;\r\n for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\r\n var group = _a[_i];\r\n var groupCount = group.range.end - group.range.start;\r\n var newCount = count + groupCount;\r\n if (index < newCount) {\r\n return position + ((index - count) * group.size);\r\n }\r\n position += groupCount * group.size;\r\n count = newCount;\r\n }\r\n return -1;\r\n };\r\n return RangeMap;\r\n}());\r\nexport { RangeMap };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { $, removeClass } from '../../dom.js';\r\nfunction removeFromParent(element) {\r\n try {\r\n if (element.parentElement) {\r\n element.parentElement.removeChild(element);\r\n }\r\n }\r\n catch (e) {\r\n // this will throw if this happens due to a blur event, nasty business\r\n }\r\n}\r\nvar RowCache = /** @class */ (function () {\r\n function RowCache(renderers) {\r\n this.renderers = renderers;\r\n this.cache = new Map();\r\n }\r\n /**\r\n * Returns a row either by creating a new one or reusing\r\n * a previously released row which shares the same templateId.\r\n */\r\n RowCache.prototype.alloc = function (templateId) {\r\n var result = this.getTemplateCache(templateId).pop();\r\n if (!result) {\r\n var domNode = $('.monaco-list-row');\r\n var renderer = this.getRenderer(templateId);\r\n var templateData = renderer.renderTemplate(domNode);\r\n result = { domNode: domNode, templateId: templateId, templateData: templateData };\r\n }\r\n return result;\r\n };\r\n /**\r\n * Releases the row for eventual reuse.\r\n */\r\n RowCache.prototype.release = function (row) {\r\n if (!row) {\r\n return;\r\n }\r\n this.releaseRow(row);\r\n };\r\n RowCache.prototype.releaseRow = function (row) {\r\n var domNode = row.domNode, templateId = row.templateId;\r\n if (domNode) {\r\n removeClass(domNode, 'scrolling');\r\n removeFromParent(domNode);\r\n }\r\n var cache = this.getTemplateCache(templateId);\r\n cache.push(row);\r\n };\r\n RowCache.prototype.getTemplateCache = function (templateId) {\r\n var result = this.cache.get(templateId);\r\n if (!result) {\r\n result = [];\r\n this.cache.set(templateId, result);\r\n }\r\n return result;\r\n };\r\n RowCache.prototype.dispose = function () {\r\n var _this = this;\r\n this.cache.forEach(function (cachedRows, templateId) {\r\n for (var _i = 0, cachedRows_1 = cachedRows; _i < cachedRows_1.length; _i++) {\r\n var cachedRow = cachedRows_1[_i];\r\n var renderer = _this.getRenderer(templateId);\r\n renderer.disposeTemplate(cachedRow.templateData);\r\n cachedRow.domNode = null;\r\n cachedRow.templateData = null;\r\n }\r\n });\r\n this.cache.clear();\r\n };\r\n RowCache.prototype.getRenderer = function (templateId) {\r\n var renderer = this.renderers.get(templateId);\r\n if (!renderer) {\r\n throw new Error(\"No renderer found for \" + templateId);\r\n }\r\n return renderer;\r\n };\r\n return RowCache;\r\n}());\r\nexport { RowCache };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { getOrDefault } from '../../../common/objects.js';\r\nimport { dispose, Disposable, toDisposable, DisposableStore } from '../../../common/lifecycle.js';\r\nimport { Gesture, EventType as TouchEventType } from '../../touch.js';\r\nimport * as DOM from '../../dom.js';\r\nimport { Event, Emitter } from '../../../common/event.js';\r\nimport { domEvent } from '../../event.js';\r\nimport { ScrollableElement } from '../scrollbar/scrollableElement.js';\r\nimport { RangeMap, shift } from './rangeMap.js';\r\nimport { RowCache } from './rowCache.js';\r\nimport { memoize } from '../../../common/decorators.js';\r\nimport { Range } from '../../../common/range.js';\r\nimport { equals, distinct } from '../../../common/arrays.js';\r\nimport { DataTransfers, StaticDND } from '../../dnd.js';\r\nimport { disposableTimeout, Delayer } from '../../../common/async.js';\r\nimport { isFirefox } from '../../browser.js';\r\nvar DefaultOptions = {\r\n useShadows: true,\r\n verticalScrollMode: 1 /* Auto */,\r\n setRowLineHeight: true,\r\n supportDynamicHeights: false,\r\n dnd: {\r\n getDragElements: function (e) { return [e]; },\r\n getDragURI: function () { return null; },\r\n onDragStart: function () { },\r\n onDragOver: function () { return false; },\r\n drop: function () { }\r\n },\r\n horizontalScrolling: false\r\n};\r\nvar ElementsDragAndDropData = /** @class */ (function () {\r\n function ElementsDragAndDropData(elements) {\r\n this.elements = elements;\r\n }\r\n ElementsDragAndDropData.prototype.update = function () { };\r\n ElementsDragAndDropData.prototype.getData = function () {\r\n return this.elements;\r\n };\r\n return ElementsDragAndDropData;\r\n}());\r\nexport { ElementsDragAndDropData };\r\nvar ExternalElementsDragAndDropData = /** @class */ (function () {\r\n function ExternalElementsDragAndDropData(elements) {\r\n this.elements = elements;\r\n }\r\n ExternalElementsDragAndDropData.prototype.update = function () { };\r\n ExternalElementsDragAndDropData.prototype.getData = function () {\r\n return this.elements;\r\n };\r\n return ExternalElementsDragAndDropData;\r\n}());\r\nexport { ExternalElementsDragAndDropData };\r\nvar DesktopDragAndDropData = /** @class */ (function () {\r\n function DesktopDragAndDropData() {\r\n this.types = [];\r\n this.files = [];\r\n }\r\n DesktopDragAndDropData.prototype.update = function (dataTransfer) {\r\n var _a;\r\n if (dataTransfer.types) {\r\n (_a = this.types).splice.apply(_a, __spreadArrays([0, this.types.length], dataTransfer.types));\r\n }\r\n if (dataTransfer.files) {\r\n this.files.splice(0, this.files.length);\r\n for (var i = 0; i < dataTransfer.files.length; i++) {\r\n var file = dataTransfer.files.item(i);\r\n if (file && (file.size || file.type)) {\r\n this.files.push(file);\r\n }\r\n }\r\n }\r\n };\r\n DesktopDragAndDropData.prototype.getData = function () {\r\n return {\r\n types: this.types,\r\n files: this.files\r\n };\r\n };\r\n return DesktopDragAndDropData;\r\n}());\r\nexport { DesktopDragAndDropData };\r\nfunction equalsDragFeedback(f1, f2) {\r\n if (Array.isArray(f1) && Array.isArray(f2)) {\r\n return equals(f1, f2);\r\n }\r\n return f1 === f2;\r\n}\r\nvar ListView = /** @class */ (function () {\r\n function ListView(container, virtualDelegate, renderers, options) {\r\n var _this = this;\r\n if (options === void 0) { options = DefaultOptions; }\r\n this.virtualDelegate = virtualDelegate;\r\n this.domId = \"list_id_\" + ++ListView.InstanceCount;\r\n this.renderers = new Map();\r\n this.renderWidth = 0;\r\n this._scrollHeight = 0;\r\n this.scrollableElementUpdateDisposable = null;\r\n this.scrollableElementWidthDelayer = new Delayer(50);\r\n this.splicing = false;\r\n this.dragOverAnimationStopDisposable = Disposable.None;\r\n this.dragOverMouseY = 0;\r\n this.canDrop = false;\r\n this.currentDragFeedbackDisposable = Disposable.None;\r\n this.onDragLeaveTimeout = Disposable.None;\r\n this.disposables = new DisposableStore();\r\n this._onDidChangeContentHeight = new Emitter();\r\n if (options.horizontalScrolling && options.supportDynamicHeights) {\r\n throw new Error('Horizontal scrolling and dynamic heights not supported simultaneously');\r\n }\r\n this.items = [];\r\n this.itemId = 0;\r\n this.rangeMap = new RangeMap();\r\n for (var _i = 0, renderers_1 = renderers; _i < renderers_1.length; _i++) {\r\n var renderer = renderers_1[_i];\r\n this.renderers.set(renderer.templateId, renderer);\r\n }\r\n this.cache = this.disposables.add(new RowCache(this.renderers));\r\n this.lastRenderTop = 0;\r\n this.lastRenderHeight = 0;\r\n this.domNode = document.createElement('div');\r\n this.domNode.className = 'monaco-list';\r\n DOM.addClass(this.domNode, this.domId);\r\n this.domNode.tabIndex = 0;\r\n DOM.toggleClass(this.domNode, 'mouse-support', typeof options.mouseSupport === 'boolean' ? options.mouseSupport : true);\r\n this.horizontalScrolling = getOrDefault(options, function (o) { return o.horizontalScrolling; }, DefaultOptions.horizontalScrolling);\r\n DOM.toggleClass(this.domNode, 'horizontal-scrolling', this.horizontalScrolling);\r\n this.additionalScrollHeight = typeof options.additionalScrollHeight === 'undefined' ? 0 : options.additionalScrollHeight;\r\n this.ariaProvider = options.ariaProvider || { getSetSize: function (e, i, length) { return length; }, getPosInSet: function (_, index) { return index + 1; } };\r\n this.rowsContainer = document.createElement('div');\r\n this.rowsContainer.className = 'monaco-list-rows';\r\n this.rowsContainer.style.transform = 'translate3d(0px, 0px, 0px)';\r\n this.disposables.add(Gesture.addTarget(this.rowsContainer));\r\n this.scrollableElement = this.disposables.add(new ScrollableElement(this.rowsContainer, {\r\n alwaysConsumeMouseWheel: true,\r\n horizontal: this.horizontalScrolling ? 1 /* Auto */ : 2 /* Hidden */,\r\n vertical: getOrDefault(options, function (o) { return o.verticalScrollMode; }, DefaultOptions.verticalScrollMode),\r\n useShadows: getOrDefault(options, function (o) { return o.useShadows; }, DefaultOptions.useShadows)\r\n }));\r\n this.domNode.appendChild(this.scrollableElement.getDomNode());\r\n container.appendChild(this.domNode);\r\n this.scrollableElement.onScroll(this.onScroll, this, this.disposables);\r\n domEvent(this.rowsContainer, TouchEventType.Change)(this.onTouchChange, this, this.disposables);\r\n // Prevent the monaco-scrollable-element from scrolling\r\n // https://github.com/Microsoft/vscode/issues/44181\r\n domEvent(this.scrollableElement.getDomNode(), 'scroll')(function (e) { return e.target.scrollTop = 0; }, null, this.disposables);\r\n Event.map(domEvent(this.domNode, 'dragover'), function (e) { return _this.toDragEvent(e); })(this.onDragOver, this, this.disposables);\r\n Event.map(domEvent(this.domNode, 'drop'), function (e) { return _this.toDragEvent(e); })(this.onDrop, this, this.disposables);\r\n domEvent(this.domNode, 'dragleave')(this.onDragLeave, this, this.disposables);\r\n domEvent(window, 'dragend')(this.onDragEnd, this, this.disposables);\r\n this.setRowLineHeight = getOrDefault(options, function (o) { return o.setRowLineHeight; }, DefaultOptions.setRowLineHeight);\r\n this.supportDynamicHeights = getOrDefault(options, function (o) { return o.supportDynamicHeights; }, DefaultOptions.supportDynamicHeights);\r\n this.dnd = getOrDefault(options, function (o) { return o.dnd; }, DefaultOptions.dnd);\r\n this.layout();\r\n }\r\n Object.defineProperty(ListView.prototype, \"contentHeight\", {\r\n get: function () { return this.rangeMap.size; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ListView.prototype.splice = function (start, deleteCount, elements) {\r\n if (elements === void 0) { elements = []; }\r\n if (this.splicing) {\r\n throw new Error('Can\\'t run recursive splices.');\r\n }\r\n this.splicing = true;\r\n try {\r\n return this._splice(start, deleteCount, elements);\r\n }\r\n finally {\r\n this.splicing = false;\r\n this._onDidChangeContentHeight.fire(this.contentHeight);\r\n }\r\n };\r\n ListView.prototype._splice = function (start, deleteCount, elements) {\r\n var _a;\r\n var _this = this;\r\n if (elements === void 0) { elements = []; }\r\n var previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\r\n var deleteRange = { start: start, end: start + deleteCount };\r\n var removeRange = Range.intersect(previousRenderRange, deleteRange);\r\n for (var i = removeRange.start; i < removeRange.end; i++) {\r\n this.removeItemFromDOM(i);\r\n }\r\n var previousRestRange = { start: start + deleteCount, end: this.items.length };\r\n var previousRenderedRestRange = Range.intersect(previousRestRange, previousRenderRange);\r\n var previousUnrenderedRestRanges = Range.relativeComplement(previousRestRange, previousRenderRange);\r\n var inserted = elements.map(function (element) { return ({\r\n id: String(_this.itemId++),\r\n element: element,\r\n templateId: _this.virtualDelegate.getTemplateId(element),\r\n size: _this.virtualDelegate.getHeight(element),\r\n width: undefined,\r\n hasDynamicHeight: !!_this.virtualDelegate.hasDynamicHeight && _this.virtualDelegate.hasDynamicHeight(element),\r\n lastDynamicHeightWidth: undefined,\r\n row: null,\r\n uri: undefined,\r\n dropTarget: false,\r\n dragStartDisposable: Disposable.None\r\n }); });\r\n var deleted;\r\n // TODO@joao: improve this optimization to catch even more cases\r\n if (start === 0 && deleteCount >= this.items.length) {\r\n this.rangeMap = new RangeMap();\r\n this.rangeMap.splice(0, 0, inserted);\r\n this.items = inserted;\r\n deleted = [];\r\n }\r\n else {\r\n this.rangeMap.splice(start, deleteCount, inserted);\r\n deleted = (_a = this.items).splice.apply(_a, __spreadArrays([start, deleteCount], inserted));\r\n }\r\n var delta = elements.length - deleteCount;\r\n var renderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\r\n var renderedRestRange = shift(previousRenderedRestRange, delta);\r\n var updateRange = Range.intersect(renderRange, renderedRestRange);\r\n for (var i = updateRange.start; i < updateRange.end; i++) {\r\n this.updateItemInDOM(this.items[i], i);\r\n }\r\n var removeRanges = Range.relativeComplement(renderedRestRange, renderRange);\r\n for (var _i = 0, removeRanges_1 = removeRanges; _i < removeRanges_1.length; _i++) {\r\n var range = removeRanges_1[_i];\r\n for (var i = range.start; i < range.end; i++) {\r\n this.removeItemFromDOM(i);\r\n }\r\n }\r\n var unrenderedRestRanges = previousUnrenderedRestRanges.map(function (r) { return shift(r, delta); });\r\n var elementsRange = { start: start, end: start + elements.length };\r\n var insertRanges = __spreadArrays([elementsRange], unrenderedRestRanges).map(function (r) { return Range.intersect(renderRange, r); });\r\n var beforeElement = this.getNextToLastElement(insertRanges);\r\n for (var _b = 0, insertRanges_1 = insertRanges; _b < insertRanges_1.length; _b++) {\r\n var range = insertRanges_1[_b];\r\n for (var i = range.start; i < range.end; i++) {\r\n this.insertItemInDOM(i, beforeElement);\r\n }\r\n }\r\n this.eventuallyUpdateScrollDimensions();\r\n if (this.supportDynamicHeights) {\r\n this._rerender(this.scrollTop, this.renderHeight);\r\n }\r\n return deleted.map(function (i) { return i.element; });\r\n };\r\n ListView.prototype.eventuallyUpdateScrollDimensions = function () {\r\n var _this = this;\r\n this._scrollHeight = this.contentHeight;\r\n this.rowsContainer.style.height = this._scrollHeight + \"px\";\r\n if (!this.scrollableElementUpdateDisposable) {\r\n this.scrollableElementUpdateDisposable = DOM.scheduleAtNextAnimationFrame(function () {\r\n _this.scrollableElement.setScrollDimensions({ scrollHeight: _this.scrollHeight });\r\n _this.updateScrollWidth();\r\n _this.scrollableElementUpdateDisposable = null;\r\n });\r\n }\r\n };\r\n ListView.prototype.eventuallyUpdateScrollWidth = function () {\r\n var _this = this;\r\n if (!this.horizontalScrolling) {\r\n return;\r\n }\r\n this.scrollableElementWidthDelayer.trigger(function () { return _this.updateScrollWidth(); });\r\n };\r\n ListView.prototype.updateScrollWidth = function () {\r\n if (!this.horizontalScrolling) {\r\n return;\r\n }\r\n if (this.items.length === 0) {\r\n this.scrollableElement.setScrollDimensions({ scrollWidth: 0 });\r\n }\r\n var scrollWidth = 0;\r\n for (var _i = 0, _a = this.items; _i < _a.length; _i++) {\r\n var item = _a[_i];\r\n if (typeof item.width !== 'undefined') {\r\n scrollWidth = Math.max(scrollWidth, item.width);\r\n }\r\n }\r\n this.scrollWidth = scrollWidth;\r\n this.scrollableElement.setScrollDimensions({ scrollWidth: scrollWidth + 10 });\r\n };\r\n ListView.prototype.rerender = function () {\r\n if (!this.supportDynamicHeights) {\r\n return;\r\n }\r\n for (var _i = 0, _a = this.items; _i < _a.length; _i++) {\r\n var item = _a[_i];\r\n item.lastDynamicHeightWidth = undefined;\r\n }\r\n this._rerender(this.lastRenderTop, this.lastRenderHeight);\r\n };\r\n Object.defineProperty(ListView.prototype, \"length\", {\r\n get: function () {\r\n return this.items.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListView.prototype, \"renderHeight\", {\r\n get: function () {\r\n var scrollDimensions = this.scrollableElement.getScrollDimensions();\r\n return scrollDimensions.height;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ListView.prototype.element = function (index) {\r\n return this.items[index].element;\r\n };\r\n ListView.prototype.domElement = function (index) {\r\n var row = this.items[index].row;\r\n return row && row.domNode;\r\n };\r\n ListView.prototype.elementHeight = function (index) {\r\n return this.items[index].size;\r\n };\r\n ListView.prototype.elementTop = function (index) {\r\n return this.rangeMap.positionAt(index);\r\n };\r\n ListView.prototype.indexAt = function (position) {\r\n return this.rangeMap.indexAt(position);\r\n };\r\n ListView.prototype.indexAfter = function (position) {\r\n return this.rangeMap.indexAfter(position);\r\n };\r\n ListView.prototype.layout = function (height, width) {\r\n var scrollDimensions = {\r\n height: typeof height === 'number' ? height : DOM.getContentHeight(this.domNode)\r\n };\r\n if (this.scrollableElementUpdateDisposable) {\r\n this.scrollableElementUpdateDisposable.dispose();\r\n this.scrollableElementUpdateDisposable = null;\r\n scrollDimensions.scrollHeight = this.scrollHeight;\r\n }\r\n this.scrollableElement.setScrollDimensions(scrollDimensions);\r\n if (typeof width !== 'undefined') {\r\n this.renderWidth = width;\r\n if (this.supportDynamicHeights) {\r\n this._rerender(this.scrollTop, this.renderHeight);\r\n }\r\n if (this.horizontalScrolling) {\r\n this.scrollableElement.setScrollDimensions({\r\n width: typeof width === 'number' ? width : DOM.getContentWidth(this.domNode)\r\n });\r\n }\r\n }\r\n };\r\n // Render\r\n ListView.prototype.render = function (renderTop, renderHeight, renderLeft, scrollWidth) {\r\n var previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\r\n var renderRange = this.getRenderRange(renderTop, renderHeight);\r\n var rangesToInsert = Range.relativeComplement(renderRange, previousRenderRange);\r\n var rangesToRemove = Range.relativeComplement(previousRenderRange, renderRange);\r\n var beforeElement = this.getNextToLastElement(rangesToInsert);\r\n for (var _i = 0, rangesToInsert_1 = rangesToInsert; _i < rangesToInsert_1.length; _i++) {\r\n var range = rangesToInsert_1[_i];\r\n for (var i = range.start; i < range.end; i++) {\r\n this.insertItemInDOM(i, beforeElement);\r\n }\r\n }\r\n for (var _a = 0, rangesToRemove_1 = rangesToRemove; _a < rangesToRemove_1.length; _a++) {\r\n var range = rangesToRemove_1[_a];\r\n for (var i = range.start; i < range.end; i++) {\r\n this.removeItemFromDOM(i);\r\n }\r\n }\r\n this.rowsContainer.style.left = \"-\" + renderLeft + \"px\";\r\n this.rowsContainer.style.top = \"-\" + renderTop + \"px\";\r\n if (this.horizontalScrolling) {\r\n this.rowsContainer.style.width = Math.max(scrollWidth, this.renderWidth) + \"px\";\r\n }\r\n this.lastRenderTop = renderTop;\r\n this.lastRenderHeight = renderHeight;\r\n };\r\n // DOM operations\r\n ListView.prototype.insertItemInDOM = function (index, beforeElement) {\r\n var _this = this;\r\n var item = this.items[index];\r\n if (!item.row) {\r\n item.row = this.cache.alloc(item.templateId);\r\n var role = this.ariaProvider.getRole ? this.ariaProvider.getRole(item.element) : 'treeitem';\r\n item.row.domNode.setAttribute('role', role);\r\n var checked = this.ariaProvider.isChecked ? this.ariaProvider.isChecked(item.element) : undefined;\r\n if (typeof checked !== 'undefined') {\r\n item.row.domNode.setAttribute('aria-checked', String(checked));\r\n }\r\n }\r\n if (!item.row.domNode.parentElement) {\r\n if (beforeElement) {\r\n this.rowsContainer.insertBefore(item.row.domNode, beforeElement);\r\n }\r\n else {\r\n this.rowsContainer.appendChild(item.row.domNode);\r\n }\r\n }\r\n this.updateItemInDOM(item, index);\r\n var renderer = this.renderers.get(item.templateId);\r\n if (!renderer) {\r\n throw new Error(\"No renderer found for template id \" + item.templateId);\r\n }\r\n if (renderer) {\r\n renderer.renderElement(item.element, index, item.row.templateData, item.size);\r\n }\r\n var uri = this.dnd.getDragURI(item.element);\r\n item.dragStartDisposable.dispose();\r\n item.row.domNode.draggable = !!uri;\r\n if (uri) {\r\n var onDragStart = domEvent(item.row.domNode, 'dragstart');\r\n item.dragStartDisposable = onDragStart(function (event) { return _this.onDragStart(item.element, uri, event); });\r\n }\r\n if (this.horizontalScrolling) {\r\n this.measureItemWidth(item);\r\n this.eventuallyUpdateScrollWidth();\r\n }\r\n };\r\n ListView.prototype.measureItemWidth = function (item) {\r\n if (!item.row || !item.row.domNode) {\r\n return;\r\n }\r\n item.row.domNode.style.width = isFirefox ? '-moz-fit-content' : 'fit-content';\r\n item.width = DOM.getContentWidth(item.row.domNode);\r\n var style = window.getComputedStyle(item.row.domNode);\r\n if (style.paddingLeft) {\r\n item.width += parseFloat(style.paddingLeft);\r\n }\r\n if (style.paddingRight) {\r\n item.width += parseFloat(style.paddingRight);\r\n }\r\n item.row.domNode.style.width = '';\r\n };\r\n ListView.prototype.updateItemInDOM = function (item, index) {\r\n item.row.domNode.style.top = this.elementTop(index) + \"px\";\r\n item.row.domNode.style.height = item.size + \"px\";\r\n if (this.setRowLineHeight) {\r\n item.row.domNode.style.lineHeight = item.size + \"px\";\r\n }\r\n item.row.domNode.setAttribute('data-index', \"\" + index);\r\n item.row.domNode.setAttribute('data-last-element', index === this.length - 1 ? 'true' : 'false');\r\n item.row.domNode.setAttribute('aria-setsize', String(this.ariaProvider.getSetSize(item.element, index, this.length)));\r\n item.row.domNode.setAttribute('aria-posinset', String(this.ariaProvider.getPosInSet(item.element, index)));\r\n item.row.domNode.setAttribute('id', this.getElementDomId(index));\r\n DOM.toggleClass(item.row.domNode, 'drop-target', item.dropTarget);\r\n };\r\n ListView.prototype.removeItemFromDOM = function (index) {\r\n var item = this.items[index];\r\n item.dragStartDisposable.dispose();\r\n var renderer = this.renderers.get(item.templateId);\r\n if (renderer && renderer.disposeElement) {\r\n renderer.disposeElement(item.element, index, item.row.templateData, item.size);\r\n }\r\n this.cache.release(item.row);\r\n item.row = null;\r\n if (this.horizontalScrolling) {\r\n this.eventuallyUpdateScrollWidth();\r\n }\r\n };\r\n ListView.prototype.getScrollTop = function () {\r\n var scrollPosition = this.scrollableElement.getScrollPosition();\r\n return scrollPosition.scrollTop;\r\n };\r\n ListView.prototype.setScrollTop = function (scrollTop) {\r\n if (this.scrollableElementUpdateDisposable) {\r\n this.scrollableElementUpdateDisposable.dispose();\r\n this.scrollableElementUpdateDisposable = null;\r\n this.scrollableElement.setScrollDimensions({ scrollHeight: this.scrollHeight });\r\n }\r\n this.scrollableElement.setScrollPosition({ scrollTop: scrollTop });\r\n };\r\n Object.defineProperty(ListView.prototype, \"scrollTop\", {\r\n get: function () {\r\n return this.getScrollTop();\r\n },\r\n set: function (scrollTop) {\r\n this.setScrollTop(scrollTop);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListView.prototype, \"scrollHeight\", {\r\n get: function () {\r\n return this._scrollHeight + (this.horizontalScrolling ? 10 : 0) + this.additionalScrollHeight;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListView.prototype, \"onMouseClick\", {\r\n // Events\r\n get: function () {\r\n var _this = this;\r\n return Event.map(domEvent(this.domNode, 'click'), function (e) { return _this.toMouseEvent(e); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListView.prototype, \"onMouseDblClick\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.map(domEvent(this.domNode, 'dblclick'), function (e) { return _this.toMouseEvent(e); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListView.prototype, \"onMouseMiddleClick\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.filter(Event.map(domEvent(this.domNode, 'auxclick'), function (e) { return _this.toMouseEvent(e); }), function (e) { return e.browserEvent.button === 1; });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListView.prototype, \"onMouseDown\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.map(domEvent(this.domNode, 'mousedown'), function (e) { return _this.toMouseEvent(e); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListView.prototype, \"onContextMenu\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.map(domEvent(this.domNode, 'contextmenu'), function (e) { return _this.toMouseEvent(e); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListView.prototype, \"onTouchStart\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.map(domEvent(this.domNode, 'touchstart'), function (e) { return _this.toTouchEvent(e); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListView.prototype, \"onTap\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.map(domEvent(this.rowsContainer, TouchEventType.Tap), function (e) { return _this.toGestureEvent(e); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ListView.prototype.toMouseEvent = function (browserEvent) {\r\n var index = this.getItemIndexFromEventTarget(browserEvent.target || null);\r\n var item = typeof index === 'undefined' ? undefined : this.items[index];\r\n var element = item && item.element;\r\n return { browserEvent: browserEvent, index: index, element: element };\r\n };\r\n ListView.prototype.toTouchEvent = function (browserEvent) {\r\n var index = this.getItemIndexFromEventTarget(browserEvent.target || null);\r\n var item = typeof index === 'undefined' ? undefined : this.items[index];\r\n var element = item && item.element;\r\n return { browserEvent: browserEvent, index: index, element: element };\r\n };\r\n ListView.prototype.toGestureEvent = function (browserEvent) {\r\n var index = this.getItemIndexFromEventTarget(browserEvent.initialTarget || null);\r\n var item = typeof index === 'undefined' ? undefined : this.items[index];\r\n var element = item && item.element;\r\n return { browserEvent: browserEvent, index: index, element: element };\r\n };\r\n ListView.prototype.toDragEvent = function (browserEvent) {\r\n var index = this.getItemIndexFromEventTarget(browserEvent.target || null);\r\n var item = typeof index === 'undefined' ? undefined : this.items[index];\r\n var element = item && item.element;\r\n return { browserEvent: browserEvent, index: index, element: element };\r\n };\r\n ListView.prototype.onScroll = function (e) {\r\n try {\r\n this.render(e.scrollTop, e.height, e.scrollLeft, e.scrollWidth);\r\n if (this.supportDynamicHeights) {\r\n this._rerender(e.scrollTop, e.height);\r\n }\r\n }\r\n catch (err) {\r\n console.error('Got bad scroll event:', e);\r\n throw err;\r\n }\r\n };\r\n ListView.prototype.onTouchChange = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.scrollTop -= event.translationY;\r\n };\r\n // DND\r\n ListView.prototype.onDragStart = function (element, uri, event) {\r\n if (!event.dataTransfer) {\r\n return;\r\n }\r\n var elements = this.dnd.getDragElements(element);\r\n event.dataTransfer.effectAllowed = 'copyMove';\r\n event.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify([uri]));\r\n if (event.dataTransfer.setDragImage) {\r\n var label = void 0;\r\n if (this.dnd.getDragLabel) {\r\n label = this.dnd.getDragLabel(elements, event);\r\n }\r\n if (typeof label === 'undefined') {\r\n label = String(elements.length);\r\n }\r\n var dragImage_1 = DOM.$('.monaco-drag-image');\r\n dragImage_1.textContent = label;\r\n document.body.appendChild(dragImage_1);\r\n event.dataTransfer.setDragImage(dragImage_1, -10, -10);\r\n setTimeout(function () { return document.body.removeChild(dragImage_1); }, 0);\r\n }\r\n this.currentDragData = new ElementsDragAndDropData(elements);\r\n StaticDND.CurrentDragAndDropData = new ExternalElementsDragAndDropData(elements);\r\n if (this.dnd.onDragStart) {\r\n this.dnd.onDragStart(this.currentDragData, event);\r\n }\r\n };\r\n ListView.prototype.onDragOver = function (event) {\r\n var _this = this;\r\n event.browserEvent.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)\r\n this.onDragLeaveTimeout.dispose();\r\n if (StaticDND.CurrentDragAndDropData && StaticDND.CurrentDragAndDropData.getData() === 'vscode-ui') {\r\n return false;\r\n }\r\n this.setupDragAndDropScrollTopAnimation(event.browserEvent);\r\n if (!event.browserEvent.dataTransfer) {\r\n return false;\r\n }\r\n // Drag over from outside\r\n if (!this.currentDragData) {\r\n if (StaticDND.CurrentDragAndDropData) {\r\n // Drag over from another list\r\n this.currentDragData = StaticDND.CurrentDragAndDropData;\r\n }\r\n else {\r\n // Drag over from the desktop\r\n if (!event.browserEvent.dataTransfer.types) {\r\n return false;\r\n }\r\n this.currentDragData = new DesktopDragAndDropData();\r\n }\r\n }\r\n var result = this.dnd.onDragOver(this.currentDragData, event.element, event.index, event.browserEvent);\r\n this.canDrop = typeof result === 'boolean' ? result : result.accept;\r\n if (!this.canDrop) {\r\n this.currentDragFeedback = undefined;\r\n this.currentDragFeedbackDisposable.dispose();\r\n return false;\r\n }\r\n event.browserEvent.dataTransfer.dropEffect = (typeof result !== 'boolean' && result.effect === 0 /* Copy */) ? 'copy' : 'move';\r\n var feedback;\r\n if (typeof result !== 'boolean' && result.feedback) {\r\n feedback = result.feedback;\r\n }\r\n else {\r\n if (typeof event.index === 'undefined') {\r\n feedback = [-1];\r\n }\r\n else {\r\n feedback = [event.index];\r\n }\r\n }\r\n // sanitize feedback list\r\n feedback = distinct(feedback).filter(function (i) { return i >= -1 && i < _this.length; }).sort();\r\n feedback = feedback[0] === -1 ? [-1] : feedback;\r\n if (equalsDragFeedback(this.currentDragFeedback, feedback)) {\r\n return true;\r\n }\r\n this.currentDragFeedback = feedback;\r\n this.currentDragFeedbackDisposable.dispose();\r\n if (feedback[0] === -1) { // entire list feedback\r\n DOM.addClass(this.domNode, 'drop-target');\r\n DOM.addClass(this.rowsContainer, 'drop-target');\r\n this.currentDragFeedbackDisposable = toDisposable(function () {\r\n DOM.removeClass(_this.domNode, 'drop-target');\r\n DOM.removeClass(_this.rowsContainer, 'drop-target');\r\n });\r\n }\r\n else {\r\n for (var _i = 0, feedback_1 = feedback; _i < feedback_1.length; _i++) {\r\n var index = feedback_1[_i];\r\n var item = this.items[index];\r\n item.dropTarget = true;\r\n if (item.row && item.row.domNode) {\r\n DOM.addClass(item.row.domNode, 'drop-target');\r\n }\r\n }\r\n this.currentDragFeedbackDisposable = toDisposable(function () {\r\n for (var _i = 0, feedback_2 = feedback; _i < feedback_2.length; _i++) {\r\n var index = feedback_2[_i];\r\n var item = _this.items[index];\r\n item.dropTarget = false;\r\n if (item.row && item.row.domNode) {\r\n DOM.removeClass(item.row.domNode, 'drop-target');\r\n }\r\n }\r\n });\r\n }\r\n return true;\r\n };\r\n ListView.prototype.onDragLeave = function () {\r\n var _this = this;\r\n this.onDragLeaveTimeout.dispose();\r\n this.onDragLeaveTimeout = disposableTimeout(function () { return _this.clearDragOverFeedback(); }, 100);\r\n };\r\n ListView.prototype.onDrop = function (event) {\r\n if (!this.canDrop) {\r\n return;\r\n }\r\n var dragData = this.currentDragData;\r\n this.teardownDragAndDropScrollTopAnimation();\r\n this.clearDragOverFeedback();\r\n this.currentDragData = undefined;\r\n StaticDND.CurrentDragAndDropData = undefined;\r\n if (!dragData || !event.browserEvent.dataTransfer) {\r\n return;\r\n }\r\n event.browserEvent.preventDefault();\r\n dragData.update(event.browserEvent.dataTransfer);\r\n this.dnd.drop(dragData, event.element, event.index, event.browserEvent);\r\n };\r\n ListView.prototype.onDragEnd = function (event) {\r\n this.canDrop = false;\r\n this.teardownDragAndDropScrollTopAnimation();\r\n this.clearDragOverFeedback();\r\n this.currentDragData = undefined;\r\n StaticDND.CurrentDragAndDropData = undefined;\r\n if (this.dnd.onDragEnd) {\r\n this.dnd.onDragEnd(event);\r\n }\r\n };\r\n ListView.prototype.clearDragOverFeedback = function () {\r\n this.currentDragFeedback = undefined;\r\n this.currentDragFeedbackDisposable.dispose();\r\n this.currentDragFeedbackDisposable = Disposable.None;\r\n };\r\n // DND scroll top animation\r\n ListView.prototype.setupDragAndDropScrollTopAnimation = function (event) {\r\n var _this = this;\r\n if (!this.dragOverAnimationDisposable) {\r\n var viewTop = DOM.getTopLeftOffset(this.domNode).top;\r\n this.dragOverAnimationDisposable = DOM.animate(this.animateDragAndDropScrollTop.bind(this, viewTop));\r\n }\r\n this.dragOverAnimationStopDisposable.dispose();\r\n this.dragOverAnimationStopDisposable = disposableTimeout(function () {\r\n if (_this.dragOverAnimationDisposable) {\r\n _this.dragOverAnimationDisposable.dispose();\r\n _this.dragOverAnimationDisposable = undefined;\r\n }\r\n }, 1000);\r\n this.dragOverMouseY = event.pageY;\r\n };\r\n ListView.prototype.animateDragAndDropScrollTop = function (viewTop) {\r\n if (this.dragOverMouseY === undefined) {\r\n return;\r\n }\r\n var diff = this.dragOverMouseY - viewTop;\r\n var upperLimit = this.renderHeight - 35;\r\n if (diff < 35) {\r\n this.scrollTop += Math.max(-14, Math.floor(0.3 * (diff - 35)));\r\n }\r\n else if (diff > upperLimit) {\r\n this.scrollTop += Math.min(14, Math.floor(0.3 * (diff - upperLimit)));\r\n }\r\n };\r\n ListView.prototype.teardownDragAndDropScrollTopAnimation = function () {\r\n this.dragOverAnimationStopDisposable.dispose();\r\n if (this.dragOverAnimationDisposable) {\r\n this.dragOverAnimationDisposable.dispose();\r\n this.dragOverAnimationDisposable = undefined;\r\n }\r\n };\r\n // Util\r\n ListView.prototype.getItemIndexFromEventTarget = function (target) {\r\n var element = target;\r\n while (element instanceof HTMLElement && element !== this.rowsContainer) {\r\n var rawIndex = element.getAttribute('data-index');\r\n if (rawIndex) {\r\n var index = Number(rawIndex);\r\n if (!isNaN(index)) {\r\n return index;\r\n }\r\n }\r\n element = element.parentElement;\r\n }\r\n return undefined;\r\n };\r\n ListView.prototype.getRenderRange = function (renderTop, renderHeight) {\r\n return {\r\n start: this.rangeMap.indexAt(renderTop),\r\n end: this.rangeMap.indexAfter(renderTop + renderHeight - 1)\r\n };\r\n };\r\n /**\r\n * Given a stable rendered state, checks every rendered element whether it needs\r\n * to be probed for dynamic height. Adjusts scroll height and top if necessary.\r\n */\r\n ListView.prototype._rerender = function (renderTop, renderHeight) {\r\n var previousRenderRange = this.getRenderRange(renderTop, renderHeight);\r\n // Let's remember the second element's position, this helps in scrolling up\r\n // and preserving a linear upwards scroll movement\r\n var anchorElementIndex;\r\n var anchorElementTopDelta;\r\n if (renderTop === this.elementTop(previousRenderRange.start)) {\r\n anchorElementIndex = previousRenderRange.start;\r\n anchorElementTopDelta = 0;\r\n }\r\n else if (previousRenderRange.end - previousRenderRange.start > 1) {\r\n anchorElementIndex = previousRenderRange.start + 1;\r\n anchorElementTopDelta = this.elementTop(anchorElementIndex) - renderTop;\r\n }\r\n var heightDiff = 0;\r\n while (true) {\r\n var renderRange = this.getRenderRange(renderTop, renderHeight);\r\n var didChange = false;\r\n for (var i = renderRange.start; i < renderRange.end; i++) {\r\n var diff = this.probeDynamicHeight(i);\r\n if (diff !== 0) {\r\n this.rangeMap.splice(i, 1, [this.items[i]]);\r\n }\r\n heightDiff += diff;\r\n didChange = didChange || diff !== 0;\r\n }\r\n if (!didChange) {\r\n if (heightDiff !== 0) {\r\n this.eventuallyUpdateScrollDimensions();\r\n }\r\n var unrenderRanges = Range.relativeComplement(previousRenderRange, renderRange);\r\n for (var _i = 0, unrenderRanges_1 = unrenderRanges; _i < unrenderRanges_1.length; _i++) {\r\n var range = unrenderRanges_1[_i];\r\n for (var i = range.start; i < range.end; i++) {\r\n if (this.items[i].row) {\r\n this.removeItemFromDOM(i);\r\n }\r\n }\r\n }\r\n var renderRanges = Range.relativeComplement(renderRange, previousRenderRange);\r\n for (var _a = 0, renderRanges_1 = renderRanges; _a < renderRanges_1.length; _a++) {\r\n var range = renderRanges_1[_a];\r\n for (var i = range.start; i < range.end; i++) {\r\n var afterIndex = i + 1;\r\n var beforeRow = afterIndex < this.items.length ? this.items[afterIndex].row : null;\r\n var beforeElement = beforeRow ? beforeRow.domNode : null;\r\n this.insertItemInDOM(i, beforeElement);\r\n }\r\n }\r\n for (var i = renderRange.start; i < renderRange.end; i++) {\r\n if (this.items[i].row) {\r\n this.updateItemInDOM(this.items[i], i);\r\n }\r\n }\r\n if (typeof anchorElementIndex === 'number') {\r\n this.scrollTop = this.elementTop(anchorElementIndex) - anchorElementTopDelta;\r\n }\r\n this._onDidChangeContentHeight.fire(this.contentHeight);\r\n return;\r\n }\r\n }\r\n };\r\n ListView.prototype.probeDynamicHeight = function (index) {\r\n var item = this.items[index];\r\n if (!item.hasDynamicHeight || item.lastDynamicHeightWidth === this.renderWidth) {\r\n return 0;\r\n }\r\n var size = item.size;\r\n var row = this.cache.alloc(item.templateId);\r\n row.domNode.style.height = '';\r\n this.rowsContainer.appendChild(row.domNode);\r\n var renderer = this.renderers.get(item.templateId);\r\n if (renderer) {\r\n renderer.renderElement(item.element, index, row.templateData, undefined);\r\n if (renderer.disposeElement) {\r\n renderer.disposeElement(item.element, index, row.templateData, undefined);\r\n }\r\n }\r\n item.size = row.domNode.offsetHeight;\r\n if (this.virtualDelegate.setDynamicHeight) {\r\n this.virtualDelegate.setDynamicHeight(item.element, item.size);\r\n }\r\n item.lastDynamicHeightWidth = this.renderWidth;\r\n this.rowsContainer.removeChild(row.domNode);\r\n this.cache.release(row);\r\n return item.size - size;\r\n };\r\n ListView.prototype.getNextToLastElement = function (ranges) {\r\n var lastRange = ranges[ranges.length - 1];\r\n if (!lastRange) {\r\n return null;\r\n }\r\n var nextToLastItem = this.items[lastRange.end];\r\n if (!nextToLastItem) {\r\n return null;\r\n }\r\n if (!nextToLastItem.row) {\r\n return null;\r\n }\r\n return nextToLastItem.row.domNode;\r\n };\r\n ListView.prototype.getElementDomId = function (index) {\r\n return this.domId + \"_\" + index;\r\n };\r\n // Dispose\r\n ListView.prototype.dispose = function () {\r\n if (this.items) {\r\n for (var _i = 0, _a = this.items; _i < _a.length; _i++) {\r\n var item = _a[_i];\r\n if (item.row) {\r\n var renderer = this.renderers.get(item.row.templateId);\r\n if (renderer) {\r\n renderer.disposeTemplate(item.row.templateData);\r\n }\r\n }\r\n }\r\n this.items = [];\r\n }\r\n if (this.domNode && this.domNode.parentNode) {\r\n this.domNode.parentNode.removeChild(this.domNode);\r\n }\r\n dispose(this.disposables);\r\n };\r\n ListView.InstanceCount = 0;\r\n __decorate([\r\n memoize\r\n ], ListView.prototype, \"onMouseClick\", null);\r\n __decorate([\r\n memoize\r\n ], ListView.prototype, \"onMouseDblClick\", null);\r\n __decorate([\r\n memoize\r\n ], ListView.prototype, \"onMouseMiddleClick\", null);\r\n __decorate([\r\n memoize\r\n ], ListView.prototype, \"onMouseDown\", null);\r\n __decorate([\r\n memoize\r\n ], ListView.prototype, \"onContextMenu\", null);\r\n __decorate([\r\n memoize\r\n ], ListView.prototype, \"onTouchStart\", null);\r\n __decorate([\r\n memoize\r\n ], ListView.prototype, \"onTap\", null);\r\n return ListView;\r\n}());\r\nexport { ListView };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar CombinedSpliceable = /** @class */ (function () {\r\n function CombinedSpliceable(spliceables) {\r\n this.spliceables = spliceables;\r\n }\r\n CombinedSpliceable.prototype.splice = function (start, deleteCount, elements) {\r\n this.spliceables.forEach(function (s) { return s.splice(start, deleteCount, elements); });\r\n };\r\n return CombinedSpliceable;\r\n}());\r\nexport { CombinedSpliceable };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nexport function clamp(value, min, max) {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { LRUCache } from './map.js';\r\nimport * as strings from './strings.js';\r\n// Combined filters\r\n/**\r\n * @returns A filter which combines the provided set\r\n * of filters with an or. The *first* filters that\r\n * matches defined the return value of the returned\r\n * filter.\r\n */\r\nexport function or() {\r\n var filter = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n filter[_i] = arguments[_i];\r\n }\r\n return function (word, wordToMatchAgainst) {\r\n for (var i = 0, len = filter.length; i < len; i++) {\r\n var match = filter[i](word, wordToMatchAgainst);\r\n if (match) {\r\n return match;\r\n }\r\n }\r\n return null;\r\n };\r\n}\r\nexport var matchesPrefix = _matchesPrefix.bind(undefined, true);\r\nfunction _matchesPrefix(ignoreCase, word, wordToMatchAgainst) {\r\n if (!wordToMatchAgainst || wordToMatchAgainst.length < word.length) {\r\n return null;\r\n }\r\n var matches;\r\n if (ignoreCase) {\r\n matches = strings.startsWithIgnoreCase(wordToMatchAgainst, word);\r\n }\r\n else {\r\n matches = wordToMatchAgainst.indexOf(word) === 0;\r\n }\r\n if (!matches) {\r\n return null;\r\n }\r\n return word.length > 0 ? [{ start: 0, end: word.length }] : [];\r\n}\r\n// Contiguous Substring\r\nexport function matchesContiguousSubString(word, wordToMatchAgainst) {\r\n var index = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase());\r\n if (index === -1) {\r\n return null;\r\n }\r\n return [{ start: index, end: index + word.length }];\r\n}\r\n// Substring\r\nexport function matchesSubString(word, wordToMatchAgainst) {\r\n return _matchesSubString(word.toLowerCase(), wordToMatchAgainst.toLowerCase(), 0, 0);\r\n}\r\nfunction _matchesSubString(word, wordToMatchAgainst, i, j) {\r\n if (i === word.length) {\r\n return [];\r\n }\r\n else if (j === wordToMatchAgainst.length) {\r\n return null;\r\n }\r\n else {\r\n if (word[i] === wordToMatchAgainst[j]) {\r\n var result = null;\r\n if (result = _matchesSubString(word, wordToMatchAgainst, i + 1, j + 1)) {\r\n return join({ start: j, end: j + 1 }, result);\r\n }\r\n return null;\r\n }\r\n return _matchesSubString(word, wordToMatchAgainst, i, j + 1);\r\n }\r\n}\r\n// CamelCase\r\nfunction isLower(code) {\r\n return 97 /* a */ <= code && code <= 122 /* z */;\r\n}\r\nexport function isUpper(code) {\r\n return 65 /* A */ <= code && code <= 90 /* Z */;\r\n}\r\nfunction isNumber(code) {\r\n return 48 /* Digit0 */ <= code && code <= 57 /* Digit9 */;\r\n}\r\nfunction isWhitespace(code) {\r\n return (code === 32 /* Space */\r\n || code === 9 /* Tab */\r\n || code === 10 /* LineFeed */\r\n || code === 13 /* CarriageReturn */);\r\n}\r\nvar wordSeparators = new Set();\r\n'`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?'\r\n .split('')\r\n .forEach(function (s) { return wordSeparators.add(s.charCodeAt(0)); });\r\nfunction isAlphanumeric(code) {\r\n return isLower(code) || isUpper(code) || isNumber(code);\r\n}\r\nfunction join(head, tail) {\r\n if (tail.length === 0) {\r\n tail = [head];\r\n }\r\n else if (head.end === tail[0].start) {\r\n tail[0].start = head.start;\r\n }\r\n else {\r\n tail.unshift(head);\r\n }\r\n return tail;\r\n}\r\nfunction nextAnchor(camelCaseWord, start) {\r\n for (var i = start; i < camelCaseWord.length; i++) {\r\n var c = camelCaseWord.charCodeAt(i);\r\n if (isUpper(c) || isNumber(c) || (i > 0 && !isAlphanumeric(camelCaseWord.charCodeAt(i - 1)))) {\r\n return i;\r\n }\r\n }\r\n return camelCaseWord.length;\r\n}\r\nfunction _matchesCamelCase(word, camelCaseWord, i, j) {\r\n if (i === word.length) {\r\n return [];\r\n }\r\n else if (j === camelCaseWord.length) {\r\n return null;\r\n }\r\n else if (word[i] !== camelCaseWord[j].toLowerCase()) {\r\n return null;\r\n }\r\n else {\r\n var result = null;\r\n var nextUpperIndex = j + 1;\r\n result = _matchesCamelCase(word, camelCaseWord, i + 1, j + 1);\r\n while (!result && (nextUpperIndex = nextAnchor(camelCaseWord, nextUpperIndex)) < camelCaseWord.length) {\r\n result = _matchesCamelCase(word, camelCaseWord, i + 1, nextUpperIndex);\r\n nextUpperIndex++;\r\n }\r\n return result === null ? null : join({ start: j, end: j + 1 }, result);\r\n }\r\n}\r\n// Heuristic to avoid computing camel case matcher for words that don't\r\n// look like camelCaseWords.\r\nfunction analyzeCamelCaseWord(word) {\r\n var upper = 0, lower = 0, alpha = 0, numeric = 0, code = 0;\r\n for (var i = 0; i < word.length; i++) {\r\n code = word.charCodeAt(i);\r\n if (isUpper(code)) {\r\n upper++;\r\n }\r\n if (isLower(code)) {\r\n lower++;\r\n }\r\n if (isAlphanumeric(code)) {\r\n alpha++;\r\n }\r\n if (isNumber(code)) {\r\n numeric++;\r\n }\r\n }\r\n var upperPercent = upper / word.length;\r\n var lowerPercent = lower / word.length;\r\n var alphaPercent = alpha / word.length;\r\n var numericPercent = numeric / word.length;\r\n return { upperPercent: upperPercent, lowerPercent: lowerPercent, alphaPercent: alphaPercent, numericPercent: numericPercent };\r\n}\r\nfunction isUpperCaseWord(analysis) {\r\n var upperPercent = analysis.upperPercent, lowerPercent = analysis.lowerPercent;\r\n return lowerPercent === 0 && upperPercent > 0.6;\r\n}\r\nfunction isCamelCaseWord(analysis) {\r\n var upperPercent = analysis.upperPercent, lowerPercent = analysis.lowerPercent, alphaPercent = analysis.alphaPercent, numericPercent = analysis.numericPercent;\r\n return lowerPercent > 0.2 && upperPercent < 0.8 && alphaPercent > 0.6 && numericPercent < 0.2;\r\n}\r\n// Heuristic to avoid computing camel case matcher for words that don't\r\n// look like camel case patterns.\r\nfunction isCamelCasePattern(word) {\r\n var upper = 0, lower = 0, code = 0, whitespace = 0;\r\n for (var i = 0; i < word.length; i++) {\r\n code = word.charCodeAt(i);\r\n if (isUpper(code)) {\r\n upper++;\r\n }\r\n if (isLower(code)) {\r\n lower++;\r\n }\r\n if (isWhitespace(code)) {\r\n whitespace++;\r\n }\r\n }\r\n if ((upper === 0 || lower === 0) && whitespace === 0) {\r\n return word.length <= 30;\r\n }\r\n else {\r\n return upper <= 5;\r\n }\r\n}\r\nexport function matchesCamelCase(word, camelCaseWord) {\r\n if (!camelCaseWord) {\r\n return null;\r\n }\r\n camelCaseWord = camelCaseWord.trim();\r\n if (camelCaseWord.length === 0) {\r\n return null;\r\n }\r\n if (!isCamelCasePattern(word)) {\r\n return null;\r\n }\r\n if (camelCaseWord.length > 60) {\r\n return null;\r\n }\r\n var analysis = analyzeCamelCaseWord(camelCaseWord);\r\n if (!isCamelCaseWord(analysis)) {\r\n if (!isUpperCaseWord(analysis)) {\r\n return null;\r\n }\r\n camelCaseWord = camelCaseWord.toLowerCase();\r\n }\r\n var result = null;\r\n var i = 0;\r\n word = word.toLowerCase();\r\n while (i < camelCaseWord.length && (result = _matchesCamelCase(word, camelCaseWord, 0, i)) === null) {\r\n i = nextAnchor(camelCaseWord, i + 1);\r\n }\r\n return result;\r\n}\r\n// Fuzzy\r\nvar fuzzyContiguousFilter = or(matchesPrefix, matchesCamelCase, matchesContiguousSubString);\r\nvar fuzzySeparateFilter = or(matchesPrefix, matchesCamelCase, matchesSubString);\r\nvar fuzzyRegExpCache = new LRUCache(10000); // bounded to 10000 elements\r\nexport function matchesFuzzy(word, wordToMatchAgainst, enableSeparateSubstringMatching) {\r\n if (enableSeparateSubstringMatching === void 0) { enableSeparateSubstringMatching = false; }\r\n if (typeof word !== 'string' || typeof wordToMatchAgainst !== 'string') {\r\n return null; // return early for invalid input\r\n }\r\n // Form RegExp for wildcard matches\r\n var regexp = fuzzyRegExpCache.get(word);\r\n if (!regexp) {\r\n regexp = new RegExp(strings.convertSimple2RegExpPattern(word), 'i');\r\n fuzzyRegExpCache.set(word, regexp);\r\n }\r\n // RegExp Filter\r\n var match = regexp.exec(wordToMatchAgainst);\r\n if (match) {\r\n return [{ start: match.index, end: match.index + match[0].length }];\r\n }\r\n // Default Filter\r\n return enableSeparateSubstringMatching ? fuzzySeparateFilter(word, wordToMatchAgainst) : fuzzyContiguousFilter(word, wordToMatchAgainst);\r\n}\r\nexport function anyScore(pattern, lowPattern, _patternPos, word, lowWord, _wordPos) {\r\n var result = fuzzyScore(pattern, lowPattern, 0, word, lowWord, 0, true);\r\n if (result) {\r\n return result;\r\n }\r\n var matches = 0;\r\n var score = 0;\r\n var idx = _wordPos;\r\n for (var patternPos = 0; patternPos < lowPattern.length && patternPos < _maxLen; ++patternPos) {\r\n var wordPos = lowWord.indexOf(lowPattern.charAt(patternPos), idx);\r\n if (wordPos >= 0) {\r\n score += 1;\r\n matches += Math.pow(2, wordPos);\r\n idx = wordPos + 1;\r\n }\r\n else if (matches !== 0) {\r\n // once we have started matching things\r\n // we need to match the remaining pattern\r\n // characters\r\n break;\r\n }\r\n }\r\n return [score, matches, _wordPos];\r\n}\r\n//#region --- fuzzyScore ---\r\nexport function createMatches(score) {\r\n if (typeof score === 'undefined') {\r\n return [];\r\n }\r\n var matches = score[1].toString(2);\r\n var wordStart = score[2];\r\n var res = [];\r\n for (var pos = wordStart; pos < _maxLen; pos++) {\r\n if (matches[matches.length - (pos + 1)] === '1') {\r\n var last = res[res.length - 1];\r\n if (last && last.end === pos) {\r\n last.end = pos + 1;\r\n }\r\n else {\r\n res.push({ start: pos, end: pos + 1 });\r\n }\r\n }\r\n }\r\n return res;\r\n}\r\nvar _maxLen = 128;\r\nfunction initTable() {\r\n var table = [];\r\n var row = [0];\r\n for (var i = 1; i <= _maxLen; i++) {\r\n row.push(-i);\r\n }\r\n for (var i = 0; i <= _maxLen; i++) {\r\n var thisRow = row.slice(0);\r\n thisRow[0] = -i;\r\n table.push(thisRow);\r\n }\r\n return table;\r\n}\r\nvar _table = initTable();\r\nvar _scores = initTable();\r\nvar _arrows = initTable();\r\nvar _debug = false;\r\nfunction printTable(table, pattern, patternLen, word, wordLen) {\r\n function pad(s, n, pad) {\r\n if (pad === void 0) { pad = ' '; }\r\n while (s.length < n) {\r\n s = pad + s;\r\n }\r\n return s;\r\n }\r\n var ret = \" | |\" + word.split('').map(function (c) { return pad(c, 3); }).join('|') + \"\\n\";\r\n for (var i = 0; i <= patternLen; i++) {\r\n if (i === 0) {\r\n ret += ' |';\r\n }\r\n else {\r\n ret += pattern[i - 1] + \"|\";\r\n }\r\n ret += table[i].slice(0, wordLen + 1).map(function (n) { return pad(n.toString(), 3); }).join('|') + '\\n';\r\n }\r\n return ret;\r\n}\r\nfunction printTables(pattern, patternStart, word, wordStart) {\r\n pattern = pattern.substr(patternStart);\r\n word = word.substr(wordStart);\r\n console.log(printTable(_table, pattern, pattern.length, word, word.length));\r\n console.log(printTable(_arrows, pattern, pattern.length, word, word.length));\r\n console.log(printTable(_scores, pattern, pattern.length, word, word.length));\r\n}\r\nfunction isSeparatorAtPos(value, index) {\r\n if (index < 0 || index >= value.length) {\r\n return false;\r\n }\r\n var code = value.charCodeAt(index);\r\n switch (code) {\r\n case 95 /* Underline */:\r\n case 45 /* Dash */:\r\n case 46 /* Period */:\r\n case 32 /* Space */:\r\n case 47 /* Slash */:\r\n case 92 /* Backslash */:\r\n case 39 /* SingleQuote */:\r\n case 34 /* DoubleQuote */:\r\n case 58 /* Colon */:\r\n case 36 /* DollarSign */:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction isWhitespaceAtPos(value, index) {\r\n if (index < 0 || index >= value.length) {\r\n return false;\r\n }\r\n var code = value.charCodeAt(index);\r\n switch (code) {\r\n case 32 /* Space */:\r\n case 9 /* Tab */:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction isUpperCaseAtPos(pos, word, wordLow) {\r\n return word[pos] !== wordLow[pos];\r\n}\r\nexport function isPatternInWord(patternLow, patternPos, patternLen, wordLow, wordPos, wordLen) {\r\n while (patternPos < patternLen && wordPos < wordLen) {\r\n if (patternLow[patternPos] === wordLow[wordPos]) {\r\n patternPos += 1;\r\n }\r\n wordPos += 1;\r\n }\r\n return patternPos === patternLen; // pattern must be exhausted\r\n}\r\nexport var FuzzyScore;\r\n(function (FuzzyScore) {\r\n /**\r\n * No matches and value `-100`\r\n */\r\n FuzzyScore.Default = Object.freeze([-100, 0, 0]);\r\n function isDefault(score) {\r\n return !score || (score[0] === -100 && score[1] === 0 && score[2] === 0);\r\n }\r\n FuzzyScore.isDefault = isDefault;\r\n})(FuzzyScore || (FuzzyScore = {}));\r\nexport function fuzzyScore(pattern, patternLow, patternStart, word, wordLow, wordStart, firstMatchCanBeWeak) {\r\n var patternLen = pattern.length > _maxLen ? _maxLen : pattern.length;\r\n var wordLen = word.length > _maxLen ? _maxLen : word.length;\r\n if (patternStart >= patternLen || wordStart >= wordLen || (patternLen - patternStart) > (wordLen - wordStart)) {\r\n return undefined;\r\n }\r\n // Run a simple check if the characters of pattern occur\r\n // (in order) at all in word. If that isn't the case we\r\n // stop because no match will be possible\r\n if (!isPatternInWord(patternLow, patternStart, patternLen, wordLow, wordStart, wordLen)) {\r\n return undefined;\r\n }\r\n var row = 1;\r\n var column = 1;\r\n var patternPos = patternStart;\r\n var wordPos = wordStart;\r\n // There will be a match, fill in tables\r\n for (row = 1, patternPos = patternStart; patternPos < patternLen; row++, patternPos++) {\r\n for (column = 1, wordPos = wordStart; wordPos < wordLen; column++, wordPos++) {\r\n var score = _doScore(pattern, patternLow, patternPos, patternStart, word, wordLow, wordPos);\r\n _scores[row][column] = score;\r\n var diag = _table[row - 1][column - 1] + (score > 1 ? 1 : score);\r\n var top_1 = _table[row - 1][column] + -1;\r\n var left = _table[row][column - 1] + -1;\r\n if (left >= top_1) {\r\n // left or diag\r\n if (left > diag) {\r\n _table[row][column] = left;\r\n _arrows[row][column] = 4 /* Left */;\r\n }\r\n else if (left === diag) {\r\n _table[row][column] = left;\r\n _arrows[row][column] = 4 /* Left */ | 2 /* Diag */;\r\n }\r\n else {\r\n _table[row][column] = diag;\r\n _arrows[row][column] = 2 /* Diag */;\r\n }\r\n }\r\n else {\r\n // top or diag\r\n if (top_1 > diag) {\r\n _table[row][column] = top_1;\r\n _arrows[row][column] = 1 /* Top */;\r\n }\r\n else if (top_1 === diag) {\r\n _table[row][column] = top_1;\r\n _arrows[row][column] = 1 /* Top */ | 2 /* Diag */;\r\n }\r\n else {\r\n _table[row][column] = diag;\r\n _arrows[row][column] = 2 /* Diag */;\r\n }\r\n }\r\n }\r\n }\r\n if (_debug) {\r\n printTables(pattern, patternStart, word, wordStart);\r\n }\r\n _matchesCount = 0;\r\n _topScore = -100;\r\n _wordStart = wordStart;\r\n _firstMatchCanBeWeak = firstMatchCanBeWeak;\r\n _findAllMatches2(row - 1, column - 1, patternLen === wordLen ? 1 : 0, 0, false);\r\n if (_matchesCount === 0) {\r\n return undefined;\r\n }\r\n return [_topScore, _topMatch2, wordStart];\r\n}\r\nfunction _doScore(pattern, patternLow, patternPos, patternStart, word, wordLow, wordPos) {\r\n if (patternLow[patternPos] !== wordLow[wordPos]) {\r\n return -1;\r\n }\r\n if (wordPos === (patternPos - patternStart)) {\r\n // common prefix: `foobar <-> foobaz`\r\n // ^^^^^\r\n if (pattern[patternPos] === word[wordPos]) {\r\n return 7;\r\n }\r\n else {\r\n return 5;\r\n }\r\n }\r\n else if (isUpperCaseAtPos(wordPos, word, wordLow) && (wordPos === 0 || !isUpperCaseAtPos(wordPos - 1, word, wordLow))) {\r\n // hitting upper-case: `foo <-> forOthers`\r\n // ^^ ^\r\n if (pattern[patternPos] === word[wordPos]) {\r\n return 7;\r\n }\r\n else {\r\n return 5;\r\n }\r\n }\r\n else if (isSeparatorAtPos(wordLow, wordPos) && (wordPos === 0 || !isSeparatorAtPos(wordLow, wordPos - 1))) {\r\n // hitting a separator: `. <-> foo.bar`\r\n // ^\r\n return 5;\r\n }\r\n else if (isSeparatorAtPos(wordLow, wordPos - 1) || isWhitespaceAtPos(wordLow, wordPos - 1)) {\r\n // post separator: `foo <-> bar_foo`\r\n // ^^^\r\n return 5;\r\n }\r\n else {\r\n return 1;\r\n }\r\n}\r\nvar _matchesCount = 0;\r\nvar _topMatch2 = 0;\r\nvar _topScore = 0;\r\nvar _wordStart = 0;\r\nvar _firstMatchCanBeWeak = false;\r\nfunction _findAllMatches2(row, column, total, matches, lastMatched) {\r\n if (_matchesCount >= 10 || total < -25) {\r\n // stop when having already 10 results, or\r\n // when a potential alignment as already 5 gaps\r\n return;\r\n }\r\n var simpleMatchCount = 0;\r\n while (row > 0 && column > 0) {\r\n var score = _scores[row][column];\r\n var arrow = _arrows[row][column];\r\n if (arrow === 4 /* Left */) {\r\n // left -> no match, skip a word character\r\n column -= 1;\r\n if (lastMatched) {\r\n total -= 5; // new gap penalty\r\n }\r\n else if (matches !== 0) {\r\n total -= 1; // gap penalty after first match\r\n }\r\n lastMatched = false;\r\n simpleMatchCount = 0;\r\n }\r\n else if (arrow & 2 /* Diag */) {\r\n if (arrow & 4 /* Left */) {\r\n // left\r\n _findAllMatches2(row, column - 1, matches !== 0 ? total - 1 : total, // gap penalty after first match\r\n matches, lastMatched);\r\n }\r\n // diag\r\n total += score;\r\n row -= 1;\r\n column -= 1;\r\n lastMatched = true;\r\n // match -> set a 1 at the word pos\r\n matches += Math.pow(2, (column + _wordStart));\r\n // count simple matches and boost a row of\r\n // simple matches when they yield in a\r\n // strong match.\r\n if (score === 1) {\r\n simpleMatchCount += 1;\r\n if (row === 0 && !_firstMatchCanBeWeak) {\r\n // when the first match is a weak\r\n // match we discard it\r\n return undefined;\r\n }\r\n }\r\n else {\r\n // boost\r\n total += 1 + (simpleMatchCount * (score - 1));\r\n simpleMatchCount = 0;\r\n }\r\n }\r\n else {\r\n return undefined;\r\n }\r\n }\r\n total -= column >= 3 ? 9 : column * 3; // late start penalty\r\n // dynamically keep track of the current top score\r\n // and insert the current best score at head, the rest at tail\r\n _matchesCount += 1;\r\n if (total > _topScore) {\r\n _topScore = total;\r\n _topMatch2 = matches;\r\n }\r\n}\r\n//#endregion\r\n//#region --- graceful ---\r\nexport function fuzzyScoreGracefulAggressive(pattern, lowPattern, patternPos, word, lowWord, wordPos, firstMatchCanBeWeak) {\r\n return fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, true, firstMatchCanBeWeak);\r\n}\r\nfunction fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, aggressive, firstMatchCanBeWeak) {\r\n var top = fuzzyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos, firstMatchCanBeWeak);\r\n if (top && !aggressive) {\r\n // when using the original pattern yield a result we`\r\n // return it unless we are aggressive and try to find\r\n // a better alignment, e.g. `cno` -> `^co^ns^ole` or `^c^o^nsole`.\r\n return top;\r\n }\r\n if (pattern.length >= 3) {\r\n // When the pattern is long enough then try a few (max 7)\r\n // permutations of the pattern to find a better match. The\r\n // permutations only swap neighbouring characters, e.g\r\n // `cnoso` becomes `conso`, `cnsoo`, `cnoos`.\r\n var tries = Math.min(7, pattern.length - 1);\r\n for (var movingPatternPos = patternPos + 1; movingPatternPos < tries; movingPatternPos++) {\r\n var newPattern = nextTypoPermutation(pattern, movingPatternPos);\r\n if (newPattern) {\r\n var candidate = fuzzyScore(newPattern, newPattern.toLowerCase(), patternPos, word, lowWord, wordPos, firstMatchCanBeWeak);\r\n if (candidate) {\r\n candidate[0] -= 3; // permutation penalty\r\n if (!top || candidate[0] > top[0]) {\r\n top = candidate;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return top;\r\n}\r\nfunction nextTypoPermutation(pattern, patternPos) {\r\n if (patternPos + 1 >= pattern.length) {\r\n return undefined;\r\n }\r\n var swap1 = pattern[patternPos];\r\n var swap2 = pattern[patternPos + 1];\r\n if (swap1 === swap2) {\r\n return undefined;\r\n }\r\n return pattern.slice(0, patternPos)\r\n + swap2\r\n + swap1\r\n + pattern.slice(patternPos + 2);\r\n}\r\n//#endregion\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport './list.css';\r\nimport { localize } from '../../../../nls.js';\r\nimport { dispose, DisposableStore } from '../../../common/lifecycle.js';\r\nimport { isNumber } from '../../../common/types.js';\r\nimport { range, firstIndex, binarySearch } from '../../../common/arrays.js';\r\nimport { memoize } from '../../../common/decorators.js';\r\nimport * as DOM from '../../dom.js';\r\nimport * as platform from '../../../common/platform.js';\r\nimport { Gesture } from '../../touch.js';\r\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\r\nimport { Event, Emitter, EventBufferer } from '../../../common/event.js';\r\nimport { domEvent } from '../../event.js';\r\nimport { ListAriaRootRole, ListError } from './list.js';\r\nimport { ListView } from './listView.js';\r\nimport { Color } from '../../../common/color.js';\r\nimport { mixin } from '../../../common/objects.js';\r\nimport { CombinedSpliceable } from './splice.js';\r\nimport { clamp } from '../../../common/numbers.js';\r\nimport { matchesPrefix } from '../../../common/filters.js';\r\nvar TraitRenderer = /** @class */ (function () {\r\n function TraitRenderer(trait) {\r\n this.trait = trait;\r\n this.renderedElements = [];\r\n }\r\n Object.defineProperty(TraitRenderer.prototype, \"templateId\", {\r\n get: function () {\r\n return \"template:\" + this.trait.trait;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TraitRenderer.prototype.renderTemplate = function (container) {\r\n return container;\r\n };\r\n TraitRenderer.prototype.renderElement = function (element, index, templateData) {\r\n var renderedElementIndex = firstIndex(this.renderedElements, function (el) { return el.templateData === templateData; });\r\n if (renderedElementIndex >= 0) {\r\n var rendered = this.renderedElements[renderedElementIndex];\r\n this.trait.unrender(templateData);\r\n rendered.index = index;\r\n }\r\n else {\r\n var rendered = { index: index, templateData: templateData };\r\n this.renderedElements.push(rendered);\r\n }\r\n this.trait.renderIndex(index, templateData);\r\n };\r\n TraitRenderer.prototype.splice = function (start, deleteCount, insertCount) {\r\n var rendered = [];\r\n for (var _i = 0, _a = this.renderedElements; _i < _a.length; _i++) {\r\n var renderedElement = _a[_i];\r\n if (renderedElement.index < start) {\r\n rendered.push(renderedElement);\r\n }\r\n else if (renderedElement.index >= start + deleteCount) {\r\n rendered.push({\r\n index: renderedElement.index + insertCount - deleteCount,\r\n templateData: renderedElement.templateData\r\n });\r\n }\r\n }\r\n this.renderedElements = rendered;\r\n };\r\n TraitRenderer.prototype.renderIndexes = function (indexes) {\r\n for (var _i = 0, _a = this.renderedElements; _i < _a.length; _i++) {\r\n var _b = _a[_i], index = _b.index, templateData = _b.templateData;\r\n if (indexes.indexOf(index) > -1) {\r\n this.trait.renderIndex(index, templateData);\r\n }\r\n }\r\n };\r\n TraitRenderer.prototype.disposeTemplate = function (templateData) {\r\n var index = firstIndex(this.renderedElements, function (el) { return el.templateData === templateData; });\r\n if (index < 0) {\r\n return;\r\n }\r\n this.renderedElements.splice(index, 1);\r\n };\r\n return TraitRenderer;\r\n}());\r\nvar Trait = /** @class */ (function () {\r\n function Trait(_trait) {\r\n this._trait = _trait;\r\n this.indexes = [];\r\n this.sortedIndexes = [];\r\n this._onChange = new Emitter();\r\n this.onChange = this._onChange.event;\r\n }\r\n Object.defineProperty(Trait.prototype, \"trait\", {\r\n get: function () { return this._trait; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Trait.prototype, \"renderer\", {\r\n get: function () {\r\n return new TraitRenderer(this);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Trait.prototype.splice = function (start, deleteCount, elements) {\r\n var diff = elements.length - deleteCount;\r\n var end = start + deleteCount;\r\n var indexes = __spreadArrays(this.sortedIndexes.filter(function (i) { return i < start; }), elements.map(function (hasTrait, i) { return hasTrait ? i + start : -1; }).filter(function (i) { return i !== -1; }), this.sortedIndexes.filter(function (i) { return i >= end; }).map(function (i) { return i + diff; }));\r\n this.renderer.splice(start, deleteCount, elements.length);\r\n this._set(indexes, indexes);\r\n };\r\n Trait.prototype.renderIndex = function (index, container) {\r\n DOM.toggleClass(container, this._trait, this.contains(index));\r\n };\r\n Trait.prototype.unrender = function (container) {\r\n DOM.removeClass(container, this._trait);\r\n };\r\n /**\r\n * Sets the indexes which should have this trait.\r\n *\r\n * @param indexes Indexes which should have this trait.\r\n * @return The old indexes which had this trait.\r\n */\r\n Trait.prototype.set = function (indexes, browserEvent) {\r\n return this._set(indexes, __spreadArrays(indexes).sort(numericSort), browserEvent);\r\n };\r\n Trait.prototype._set = function (indexes, sortedIndexes, browserEvent) {\r\n var result = this.indexes;\r\n var sortedResult = this.sortedIndexes;\r\n this.indexes = indexes;\r\n this.sortedIndexes = sortedIndexes;\r\n var toRender = disjunction(sortedResult, indexes);\r\n this.renderer.renderIndexes(toRender);\r\n this._onChange.fire({ indexes: indexes, browserEvent: browserEvent });\r\n return result;\r\n };\r\n Trait.prototype.get = function () {\r\n return this.indexes;\r\n };\r\n Trait.prototype.contains = function (index) {\r\n return binarySearch(this.sortedIndexes, index, numericSort) >= 0;\r\n };\r\n Trait.prototype.dispose = function () {\r\n dispose(this._onChange);\r\n };\r\n __decorate([\r\n memoize\r\n ], Trait.prototype, \"renderer\", null);\r\n return Trait;\r\n}());\r\nvar FocusTrait = /** @class */ (function (_super) {\r\n __extends(FocusTrait, _super);\r\n function FocusTrait() {\r\n return _super.call(this, 'focused') || this;\r\n }\r\n FocusTrait.prototype.renderIndex = function (index, container) {\r\n _super.prototype.renderIndex.call(this, index, container);\r\n if (this.contains(index)) {\r\n container.setAttribute('aria-selected', 'true');\r\n }\r\n else {\r\n container.removeAttribute('aria-selected');\r\n }\r\n };\r\n return FocusTrait;\r\n}(Trait));\r\n/**\r\n * The TraitSpliceable is used as a util class to be able\r\n * to preserve traits across splice calls, given an identity\r\n * provider.\r\n */\r\nvar TraitSpliceable = /** @class */ (function () {\r\n function TraitSpliceable(trait, view, identityProvider) {\r\n this.trait = trait;\r\n this.view = view;\r\n this.identityProvider = identityProvider;\r\n }\r\n TraitSpliceable.prototype.splice = function (start, deleteCount, elements) {\r\n var _this = this;\r\n if (!this.identityProvider) {\r\n return this.trait.splice(start, deleteCount, elements.map(function () { return false; }));\r\n }\r\n var pastElementsWithTrait = this.trait.get().map(function (i) { return _this.identityProvider.getId(_this.view.element(i)).toString(); });\r\n var elementsWithTrait = elements.map(function (e) { return pastElementsWithTrait.indexOf(_this.identityProvider.getId(e).toString()) > -1; });\r\n this.trait.splice(start, deleteCount, elementsWithTrait);\r\n };\r\n return TraitSpliceable;\r\n}());\r\nfunction isInputElement(e) {\r\n return e.tagName === 'INPUT' || e.tagName === 'TEXTAREA';\r\n}\r\nvar KeyboardController = /** @class */ (function () {\r\n function KeyboardController(list, view, options) {\r\n this.list = list;\r\n this.view = view;\r\n this.disposables = new DisposableStore();\r\n var multipleSelectionSupport = options.multipleSelectionSupport !== false;\r\n this.openController = options.openController || DefaultOpenController;\r\n var onKeyDown = Event.chain(domEvent(view.domNode, 'keydown'))\r\n .filter(function (e) { return !isInputElement(e.target); })\r\n .map(function (e) { return new StandardKeyboardEvent(e); });\r\n onKeyDown.filter(function (e) { return e.keyCode === 3 /* Enter */; }).on(this.onEnter, this, this.disposables);\r\n onKeyDown.filter(function (e) { return e.keyCode === 16 /* UpArrow */; }).on(this.onUpArrow, this, this.disposables);\r\n onKeyDown.filter(function (e) { return e.keyCode === 18 /* DownArrow */; }).on(this.onDownArrow, this, this.disposables);\r\n onKeyDown.filter(function (e) { return e.keyCode === 11 /* PageUp */; }).on(this.onPageUpArrow, this, this.disposables);\r\n onKeyDown.filter(function (e) { return e.keyCode === 12 /* PageDown */; }).on(this.onPageDownArrow, this, this.disposables);\r\n onKeyDown.filter(function (e) { return e.keyCode === 9 /* Escape */; }).on(this.onEscape, this, this.disposables);\r\n if (multipleSelectionSupport) {\r\n onKeyDown.filter(function (e) { return (platform.isMacintosh ? e.metaKey : e.ctrlKey) && e.keyCode === 31 /* KEY_A */; }).on(this.onCtrlA, this, this.disposables);\r\n }\r\n }\r\n KeyboardController.prototype.onEnter = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.list.setSelection(this.list.getFocus(), e.browserEvent);\r\n if (this.openController.shouldOpen(e.browserEvent)) {\r\n this.list.open(this.list.getFocus(), e.browserEvent);\r\n }\r\n };\r\n KeyboardController.prototype.onUpArrow = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.list.focusPrevious(1, false, e.browserEvent);\r\n this.list.reveal(this.list.getFocus()[0]);\r\n this.view.domNode.focus();\r\n };\r\n KeyboardController.prototype.onDownArrow = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.list.focusNext(1, false, e.browserEvent);\r\n this.list.reveal(this.list.getFocus()[0]);\r\n this.view.domNode.focus();\r\n };\r\n KeyboardController.prototype.onPageUpArrow = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.list.focusPreviousPage(e.browserEvent);\r\n this.list.reveal(this.list.getFocus()[0]);\r\n this.view.domNode.focus();\r\n };\r\n KeyboardController.prototype.onPageDownArrow = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.list.focusNextPage(e.browserEvent);\r\n this.list.reveal(this.list.getFocus()[0]);\r\n this.view.domNode.focus();\r\n };\r\n KeyboardController.prototype.onCtrlA = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.list.setSelection(range(this.list.length), e.browserEvent);\r\n this.view.domNode.focus();\r\n };\r\n KeyboardController.prototype.onEscape = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.list.setSelection([], e.browserEvent);\r\n this.view.domNode.focus();\r\n };\r\n KeyboardController.prototype.dispose = function () {\r\n this.disposables.dispose();\r\n };\r\n return KeyboardController;\r\n}());\r\nvar TypeLabelControllerState;\r\n(function (TypeLabelControllerState) {\r\n TypeLabelControllerState[TypeLabelControllerState[\"Idle\"] = 0] = \"Idle\";\r\n TypeLabelControllerState[TypeLabelControllerState[\"Typing\"] = 1] = \"Typing\";\r\n})(TypeLabelControllerState || (TypeLabelControllerState = {}));\r\nexport var DefaultKeyboardNavigationDelegate = new /** @class */ (function () {\r\n function class_1() {\r\n }\r\n class_1.prototype.mightProducePrintableCharacter = function (event) {\r\n if (event.ctrlKey || event.metaKey || event.altKey) {\r\n return false;\r\n }\r\n return (event.keyCode >= 31 /* KEY_A */ && event.keyCode <= 56 /* KEY_Z */)\r\n || (event.keyCode >= 21 /* KEY_0 */ && event.keyCode <= 30 /* KEY_9 */)\r\n || (event.keyCode >= 93 /* NUMPAD_0 */ && event.keyCode <= 102 /* NUMPAD_9 */)\r\n || (event.keyCode >= 80 /* US_SEMICOLON */ && event.keyCode <= 90 /* US_QUOTE */);\r\n };\r\n return class_1;\r\n}());\r\nvar TypeLabelController = /** @class */ (function () {\r\n function TypeLabelController(list, view, keyboardNavigationLabelProvider, delegate) {\r\n this.list = list;\r\n this.view = view;\r\n this.keyboardNavigationLabelProvider = keyboardNavigationLabelProvider;\r\n this.delegate = delegate;\r\n this.enabled = false;\r\n this.state = TypeLabelControllerState.Idle;\r\n this.automaticKeyboardNavigation = true;\r\n this.triggered = false;\r\n this.enabledDisposables = new DisposableStore();\r\n this.disposables = new DisposableStore();\r\n this.updateOptions(list.options);\r\n }\r\n TypeLabelController.prototype.updateOptions = function (options) {\r\n var enableKeyboardNavigation = typeof options.enableKeyboardNavigation === 'undefined' ? true : !!options.enableKeyboardNavigation;\r\n if (enableKeyboardNavigation) {\r\n this.enable();\r\n }\r\n else {\r\n this.disable();\r\n }\r\n if (typeof options.automaticKeyboardNavigation !== 'undefined') {\r\n this.automaticKeyboardNavigation = options.automaticKeyboardNavigation;\r\n }\r\n };\r\n TypeLabelController.prototype.enable = function () {\r\n var _this = this;\r\n if (this.enabled) {\r\n return;\r\n }\r\n var onChar = Event.chain(domEvent(this.view.domNode, 'keydown'))\r\n .filter(function (e) { return !isInputElement(e.target); })\r\n .filter(function () { return _this.automaticKeyboardNavigation || _this.triggered; })\r\n .map(function (event) { return new StandardKeyboardEvent(event); })\r\n .filter(function (e) { return _this.delegate.mightProducePrintableCharacter(e); })\r\n .forEach(function (e) { e.stopPropagation(); e.preventDefault(); })\r\n .map(function (event) { return event.browserEvent.key; })\r\n .event;\r\n var onClear = Event.debounce(onChar, function () { return null; }, 800);\r\n var onInput = Event.reduce(Event.any(onChar, onClear), function (r, i) { return i === null ? null : ((r || '') + i); });\r\n onInput(this.onInput, this, this.enabledDisposables);\r\n this.enabled = true;\r\n this.triggered = false;\r\n };\r\n TypeLabelController.prototype.disable = function () {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n this.enabledDisposables.clear();\r\n this.enabled = false;\r\n this.triggered = false;\r\n };\r\n TypeLabelController.prototype.onInput = function (word) {\r\n if (!word) {\r\n this.state = TypeLabelControllerState.Idle;\r\n this.triggered = false;\r\n return;\r\n }\r\n var focus = this.list.getFocus();\r\n var start = focus.length > 0 ? focus[0] : 0;\r\n var delta = this.state === TypeLabelControllerState.Idle ? 1 : 0;\r\n this.state = TypeLabelControllerState.Typing;\r\n for (var i = 0; i < this.list.length; i++) {\r\n var index = (start + i + delta) % this.list.length;\r\n var label = this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(this.view.element(index));\r\n var labelStr = label && label.toString();\r\n if (typeof labelStr === 'undefined' || matchesPrefix(word, labelStr)) {\r\n this.list.setFocus([index]);\r\n this.list.reveal(index);\r\n return;\r\n }\r\n }\r\n };\r\n TypeLabelController.prototype.dispose = function () {\r\n this.disable();\r\n this.enabledDisposables.dispose();\r\n this.disposables.dispose();\r\n };\r\n return TypeLabelController;\r\n}());\r\nvar DOMFocusController = /** @class */ (function () {\r\n function DOMFocusController(list, view) {\r\n this.list = list;\r\n this.view = view;\r\n this.disposables = new DisposableStore();\r\n var onKeyDown = Event.chain(domEvent(view.domNode, 'keydown'))\r\n .filter(function (e) { return !isInputElement(e.target); })\r\n .map(function (e) { return new StandardKeyboardEvent(e); });\r\n onKeyDown.filter(function (e) { return e.keyCode === 2 /* Tab */ && !e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey; })\r\n .on(this.onTab, this, this.disposables);\r\n }\r\n DOMFocusController.prototype.onTab = function (e) {\r\n if (e.target !== this.view.domNode) {\r\n return;\r\n }\r\n var focus = this.list.getFocus();\r\n if (focus.length === 0) {\r\n return;\r\n }\r\n var focusedDomElement = this.view.domElement(focus[0]);\r\n if (!focusedDomElement) {\r\n return;\r\n }\r\n var tabIndexElement = focusedDomElement.querySelector('[tabIndex]');\r\n if (!tabIndexElement || !(tabIndexElement instanceof HTMLElement) || tabIndexElement.tabIndex === -1) {\r\n return;\r\n }\r\n var style = window.getComputedStyle(tabIndexElement);\r\n if (style.visibility === 'hidden' || style.display === 'none') {\r\n return;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n tabIndexElement.focus();\r\n };\r\n DOMFocusController.prototype.dispose = function () {\r\n this.disposables.dispose();\r\n };\r\n return DOMFocusController;\r\n}());\r\nexport function isSelectionSingleChangeEvent(event) {\r\n return platform.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey;\r\n}\r\nexport function isSelectionRangeChangeEvent(event) {\r\n return event.browserEvent.shiftKey;\r\n}\r\nfunction isMouseRightClick(event) {\r\n return event instanceof MouseEvent && event.button === 2;\r\n}\r\nvar DefaultMultipleSelectionController = {\r\n isSelectionSingleChangeEvent: isSelectionSingleChangeEvent,\r\n isSelectionRangeChangeEvent: isSelectionRangeChangeEvent\r\n};\r\nvar DefaultOpenController = {\r\n shouldOpen: function (event) {\r\n if (event instanceof MouseEvent) {\r\n return !isMouseRightClick(event);\r\n }\r\n return true;\r\n }\r\n};\r\nvar MouseController = /** @class */ (function () {\r\n function MouseController(list) {\r\n this.list = list;\r\n this.disposables = new DisposableStore();\r\n this.multipleSelectionSupport = !(list.options.multipleSelectionSupport === false);\r\n if (this.multipleSelectionSupport) {\r\n this.multipleSelectionController = list.options.multipleSelectionController || DefaultMultipleSelectionController;\r\n }\r\n this.openController = list.options.openController || DefaultOpenController;\r\n this.mouseSupport = typeof list.options.mouseSupport === 'undefined' || !!list.options.mouseSupport;\r\n if (this.mouseSupport) {\r\n list.onMouseDown(this.onMouseDown, this, this.disposables);\r\n list.onContextMenu(this.onContextMenu, this, this.disposables);\r\n list.onMouseDblClick(this.onDoubleClick, this, this.disposables);\r\n list.onTouchStart(this.onMouseDown, this, this.disposables);\r\n this.disposables.add(Gesture.addTarget(list.getHTMLElement()));\r\n }\r\n list.onMouseClick(this.onPointer, this, this.disposables);\r\n list.onMouseMiddleClick(this.onPointer, this, this.disposables);\r\n list.onTap(this.onPointer, this, this.disposables);\r\n }\r\n MouseController.prototype.isSelectionSingleChangeEvent = function (event) {\r\n if (this.multipleSelectionController) {\r\n return this.multipleSelectionController.isSelectionSingleChangeEvent(event);\r\n }\r\n return platform.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey;\r\n };\r\n MouseController.prototype.isSelectionRangeChangeEvent = function (event) {\r\n if (this.multipleSelectionController) {\r\n return this.multipleSelectionController.isSelectionRangeChangeEvent(event);\r\n }\r\n return event.browserEvent.shiftKey;\r\n };\r\n MouseController.prototype.isSelectionChangeEvent = function (event) {\r\n return this.isSelectionSingleChangeEvent(event) || this.isSelectionRangeChangeEvent(event);\r\n };\r\n MouseController.prototype.onMouseDown = function (e) {\r\n if (document.activeElement !== e.browserEvent.target) {\r\n this.list.domFocus();\r\n }\r\n };\r\n MouseController.prototype.onContextMenu = function (e) {\r\n var focus = typeof e.index === 'undefined' ? [] : [e.index];\r\n this.list.setFocus(focus, e.browserEvent);\r\n };\r\n MouseController.prototype.onPointer = function (e) {\r\n if (!this.mouseSupport) {\r\n return;\r\n }\r\n if (isInputElement(e.browserEvent.target)) {\r\n return;\r\n }\r\n var reference = this.list.getFocus()[0];\r\n var selection = this.list.getSelection();\r\n reference = reference === undefined ? selection[0] : reference;\r\n var focus = e.index;\r\n if (typeof focus === 'undefined') {\r\n this.list.setFocus([], e.browserEvent);\r\n this.list.setSelection([], e.browserEvent);\r\n return;\r\n }\r\n if (this.multipleSelectionSupport && this.isSelectionRangeChangeEvent(e)) {\r\n return this.changeSelection(e, reference);\r\n }\r\n if (this.multipleSelectionSupport && this.isSelectionChangeEvent(e)) {\r\n return this.changeSelection(e, reference);\r\n }\r\n this.list.setFocus([focus], e.browserEvent);\r\n if (!isMouseRightClick(e.browserEvent)) {\r\n this.list.setSelection([focus], e.browserEvent);\r\n if (this.openController.shouldOpen(e.browserEvent)) {\r\n this.list.open([focus], e.browserEvent);\r\n }\r\n }\r\n };\r\n MouseController.prototype.onDoubleClick = function (e) {\r\n if (isInputElement(e.browserEvent.target)) {\r\n return;\r\n }\r\n if (this.multipleSelectionSupport && this.isSelectionChangeEvent(e)) {\r\n return;\r\n }\r\n var focus = this.list.getFocus();\r\n this.list.setSelection(focus, e.browserEvent);\r\n this.list.pin(focus);\r\n };\r\n MouseController.prototype.changeSelection = function (e, reference) {\r\n var focus = e.index;\r\n if (this.isSelectionRangeChangeEvent(e) && reference !== undefined) {\r\n var min = Math.min(reference, focus);\r\n var max = Math.max(reference, focus);\r\n var rangeSelection = range(min, max + 1);\r\n var selection = this.list.getSelection();\r\n var contiguousRange = getContiguousRangeContaining(disjunction(selection, [reference]), reference);\r\n if (contiguousRange.length === 0) {\r\n return;\r\n }\r\n var newSelection = disjunction(rangeSelection, relativeComplement(selection, contiguousRange));\r\n this.list.setSelection(newSelection, e.browserEvent);\r\n }\r\n else if (this.isSelectionSingleChangeEvent(e)) {\r\n var selection = this.list.getSelection();\r\n var newSelection = selection.filter(function (i) { return i !== focus; });\r\n this.list.setFocus([focus]);\r\n if (selection.length === newSelection.length) {\r\n this.list.setSelection(__spreadArrays(newSelection, [focus]), e.browserEvent);\r\n }\r\n else {\r\n this.list.setSelection(newSelection, e.browserEvent);\r\n }\r\n }\r\n };\r\n MouseController.prototype.dispose = function () {\r\n this.disposables.dispose();\r\n };\r\n return MouseController;\r\n}());\r\nexport { MouseController };\r\nvar DefaultStyleController = /** @class */ (function () {\r\n function DefaultStyleController(styleElement, selectorSuffix) {\r\n this.styleElement = styleElement;\r\n this.selectorSuffix = selectorSuffix;\r\n }\r\n DefaultStyleController.prototype.style = function (styles) {\r\n var suffix = this.selectorSuffix && \".\" + this.selectorSuffix;\r\n var content = [];\r\n if (styles.listBackground) {\r\n if (styles.listBackground.isOpaque()) {\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-rows { background: \" + styles.listBackground + \"; }\");\r\n }\r\n else if (!platform.isMacintosh) { // subpixel AA doesn't exist in macOS\r\n console.warn(\"List with id '\" + this.selectorSuffix + \"' was styled with a non-opaque background color. This will break sub-pixel antialiasing.\");\r\n }\r\n }\r\n if (styles.listFocusBackground) {\r\n content.push(\".monaco-list\" + suffix + \":focus .monaco-list-row.focused { background-color: \" + styles.listFocusBackground + \"; }\");\r\n content.push(\".monaco-list\" + suffix + \":focus .monaco-list-row.focused:hover { background-color: \" + styles.listFocusBackground + \"; }\"); // overwrite :hover style in this case!\r\n }\r\n if (styles.listFocusForeground) {\r\n content.push(\".monaco-list\" + suffix + \":focus .monaco-list-row.focused { color: \" + styles.listFocusForeground + \"; }\");\r\n }\r\n if (styles.listActiveSelectionBackground) {\r\n content.push(\".monaco-list\" + suffix + \":focus .monaco-list-row.selected { background-color: \" + styles.listActiveSelectionBackground + \"; }\");\r\n content.push(\".monaco-list\" + suffix + \":focus .monaco-list-row.selected:hover { background-color: \" + styles.listActiveSelectionBackground + \"; }\"); // overwrite :hover style in this case!\r\n }\r\n if (styles.listActiveSelectionForeground) {\r\n content.push(\".monaco-list\" + suffix + \":focus .monaco-list-row.selected { color: \" + styles.listActiveSelectionForeground + \"; }\");\r\n }\r\n if (styles.listFocusAndSelectionBackground) {\r\n content.push(\"\\n\\t\\t\\t\\t.monaco-drag-image,\\n\\t\\t\\t\\t.monaco-list\" + suffix + \":focus .monaco-list-row.selected.focused { background-color: \" + styles.listFocusAndSelectionBackground + \"; }\\n\\t\\t\\t\");\r\n }\r\n if (styles.listFocusAndSelectionForeground) {\r\n content.push(\"\\n\\t\\t\\t\\t.monaco-drag-image,\\n\\t\\t\\t\\t.monaco-list\" + suffix + \":focus .monaco-list-row.selected.focused { color: \" + styles.listFocusAndSelectionForeground + \"; }\\n\\t\\t\\t\");\r\n }\r\n if (styles.listInactiveFocusBackground) {\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-row.focused { background-color: \" + styles.listInactiveFocusBackground + \"; }\");\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-row.focused:hover { background-color: \" + styles.listInactiveFocusBackground + \"; }\"); // overwrite :hover style in this case!\r\n }\r\n if (styles.listInactiveSelectionBackground) {\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-row.selected { background-color: \" + styles.listInactiveSelectionBackground + \"; }\");\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-row.selected:hover { background-color: \" + styles.listInactiveSelectionBackground + \"; }\"); // overwrite :hover style in this case!\r\n }\r\n if (styles.listInactiveSelectionForeground) {\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-row.selected { color: \" + styles.listInactiveSelectionForeground + \"; }\");\r\n }\r\n if (styles.listHoverBackground) {\r\n content.push(\".monaco-list\" + suffix + \":not(.drop-target) .monaco-list-row:hover:not(.selected):not(.focused) { background-color: \" + styles.listHoverBackground + \"; }\");\r\n }\r\n if (styles.listHoverForeground) {\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-row:hover:not(.selected):not(.focused) { color: \" + styles.listHoverForeground + \"; }\");\r\n }\r\n if (styles.listSelectionOutline) {\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-row.selected { outline: 1px dotted \" + styles.listSelectionOutline + \"; outline-offset: -1px; }\");\r\n }\r\n if (styles.listFocusOutline) {\r\n content.push(\"\\n\\t\\t\\t\\t.monaco-drag-image,\\n\\t\\t\\t\\t.monaco-list\" + suffix + \":focus .monaco-list-row.focused { outline: 1px solid \" + styles.listFocusOutline + \"; outline-offset: -1px; }\\n\\t\\t\\t\");\r\n }\r\n if (styles.listInactiveFocusOutline) {\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-row.focused { outline: 1px dotted \" + styles.listInactiveFocusOutline + \"; outline-offset: -1px; }\");\r\n }\r\n if (styles.listHoverOutline) {\r\n content.push(\".monaco-list\" + suffix + \" .monaco-list-row:hover { outline: 1px dashed \" + styles.listHoverOutline + \"; outline-offset: -1px; }\");\r\n }\r\n if (styles.listDropBackground) {\r\n content.push(\"\\n\\t\\t\\t\\t.monaco-list\" + suffix + \".drop-target,\\n\\t\\t\\t\\t.monaco-list\" + suffix + \" .monaco-list-rows.drop-target,\\n\\t\\t\\t\\t.monaco-list\" + suffix + \" .monaco-list-row.drop-target { background-color: \" + styles.listDropBackground + \" !important; color: inherit !important; }\\n\\t\\t\\t\");\r\n }\r\n if (styles.listFilterWidgetBackground) {\r\n content.push(\".monaco-list-type-filter { background-color: \" + styles.listFilterWidgetBackground + \" }\");\r\n }\r\n if (styles.listFilterWidgetOutline) {\r\n content.push(\".monaco-list-type-filter { border: 1px solid \" + styles.listFilterWidgetOutline + \"; }\");\r\n }\r\n if (styles.listFilterWidgetNoMatchesOutline) {\r\n content.push(\".monaco-list-type-filter.no-matches { border: 1px solid \" + styles.listFilterWidgetNoMatchesOutline + \"; }\");\r\n }\r\n if (styles.listMatchesShadow) {\r\n content.push(\".monaco-list-type-filter { box-shadow: 1px 1px 1px \" + styles.listMatchesShadow + \"; }\");\r\n }\r\n var newStyles = content.join('\\n');\r\n if (newStyles !== this.styleElement.innerHTML) {\r\n this.styleElement.innerHTML = newStyles;\r\n }\r\n };\r\n return DefaultStyleController;\r\n}());\r\nexport { DefaultStyleController };\r\nvar defaultStyles = {\r\n listFocusBackground: Color.fromHex('#7FB0D0'),\r\n listActiveSelectionBackground: Color.fromHex('#0E639C'),\r\n listActiveSelectionForeground: Color.fromHex('#FFFFFF'),\r\n listFocusAndSelectionBackground: Color.fromHex('#094771'),\r\n listFocusAndSelectionForeground: Color.fromHex('#FFFFFF'),\r\n listInactiveSelectionBackground: Color.fromHex('#3F3F46'),\r\n listHoverBackground: Color.fromHex('#2A2D2E'),\r\n listDropBackground: Color.fromHex('#383B3D'),\r\n treeIndentGuidesStroke: Color.fromHex('#a9a9a9')\r\n};\r\nvar DefaultOptions = {\r\n keyboardSupport: true,\r\n mouseSupport: true,\r\n multipleSelectionSupport: true,\r\n dnd: {\r\n getDragURI: function () { return null; },\r\n onDragStart: function () { },\r\n onDragOver: function () { return false; },\r\n drop: function () { }\r\n },\r\n ariaRootRole: ListAriaRootRole.TREE\r\n};\r\n// TODO@Joao: move these utils into a SortedArray class\r\nfunction getContiguousRangeContaining(range, value) {\r\n var index = range.indexOf(value);\r\n if (index === -1) {\r\n return [];\r\n }\r\n var result = [];\r\n var i = index - 1;\r\n while (i >= 0 && range[i] === value - (index - i)) {\r\n result.push(range[i--]);\r\n }\r\n result.reverse();\r\n i = index;\r\n while (i < range.length && range[i] === value + (i - index)) {\r\n result.push(range[i++]);\r\n }\r\n return result;\r\n}\r\n/**\r\n * Given two sorted collections of numbers, returns the intersection\r\n * between them (OR).\r\n */\r\nfunction disjunction(one, other) {\r\n var result = [];\r\n var i = 0, j = 0;\r\n while (i < one.length || j < other.length) {\r\n if (i >= one.length) {\r\n result.push(other[j++]);\r\n }\r\n else if (j >= other.length) {\r\n result.push(one[i++]);\r\n }\r\n else if (one[i] === other[j]) {\r\n result.push(one[i]);\r\n i++;\r\n j++;\r\n continue;\r\n }\r\n else if (one[i] < other[j]) {\r\n result.push(one[i++]);\r\n }\r\n else {\r\n result.push(other[j++]);\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * Given two sorted collections of numbers, returns the relative\r\n * complement between them (XOR).\r\n */\r\nfunction relativeComplement(one, other) {\r\n var result = [];\r\n var i = 0, j = 0;\r\n while (i < one.length || j < other.length) {\r\n if (i >= one.length) {\r\n result.push(other[j++]);\r\n }\r\n else if (j >= other.length) {\r\n result.push(one[i++]);\r\n }\r\n else if (one[i] === other[j]) {\r\n i++;\r\n j++;\r\n continue;\r\n }\r\n else if (one[i] < other[j]) {\r\n result.push(one[i++]);\r\n }\r\n else {\r\n j++;\r\n }\r\n }\r\n return result;\r\n}\r\nvar numericSort = function (a, b) { return a - b; };\r\nvar PipelineRenderer = /** @class */ (function () {\r\n function PipelineRenderer(_templateId, renderers) {\r\n this._templateId = _templateId;\r\n this.renderers = renderers;\r\n }\r\n Object.defineProperty(PipelineRenderer.prototype, \"templateId\", {\r\n get: function () {\r\n return this._templateId;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n PipelineRenderer.prototype.renderTemplate = function (container) {\r\n return this.renderers.map(function (r) { return r.renderTemplate(container); });\r\n };\r\n PipelineRenderer.prototype.renderElement = function (element, index, templateData, height) {\r\n var i = 0;\r\n for (var _i = 0, _a = this.renderers; _i < _a.length; _i++) {\r\n var renderer = _a[_i];\r\n renderer.renderElement(element, index, templateData[i++], height);\r\n }\r\n };\r\n PipelineRenderer.prototype.disposeElement = function (element, index, templateData, height) {\r\n var i = 0;\r\n for (var _i = 0, _a = this.renderers; _i < _a.length; _i++) {\r\n var renderer = _a[_i];\r\n if (renderer.disposeElement) {\r\n renderer.disposeElement(element, index, templateData[i], height);\r\n }\r\n i += 1;\r\n }\r\n };\r\n PipelineRenderer.prototype.disposeTemplate = function (templateData) {\r\n var i = 0;\r\n for (var _i = 0, _a = this.renderers; _i < _a.length; _i++) {\r\n var renderer = _a[_i];\r\n renderer.disposeTemplate(templateData[i++]);\r\n }\r\n };\r\n return PipelineRenderer;\r\n}());\r\nvar AccessibiltyRenderer = /** @class */ (function () {\r\n function AccessibiltyRenderer(accessibilityProvider) {\r\n this.accessibilityProvider = accessibilityProvider;\r\n this.templateId = 'a18n';\r\n }\r\n AccessibiltyRenderer.prototype.renderTemplate = function (container) {\r\n return container;\r\n };\r\n AccessibiltyRenderer.prototype.renderElement = function (element, index, container) {\r\n var ariaLabel = this.accessibilityProvider.getAriaLabel(element);\r\n if (ariaLabel) {\r\n container.setAttribute('aria-label', ariaLabel);\r\n }\r\n else {\r\n container.removeAttribute('aria-label');\r\n }\r\n var ariaLevel = this.accessibilityProvider.getAriaLevel && this.accessibilityProvider.getAriaLevel(element);\r\n if (typeof ariaLevel === 'number') {\r\n container.setAttribute('aria-level', \"\" + ariaLevel);\r\n }\r\n else {\r\n container.removeAttribute('aria-level');\r\n }\r\n };\r\n AccessibiltyRenderer.prototype.disposeTemplate = function (templateData) {\r\n // noop\r\n };\r\n return AccessibiltyRenderer;\r\n}());\r\nvar ListViewDragAndDrop = /** @class */ (function () {\r\n function ListViewDragAndDrop(list, dnd) {\r\n this.list = list;\r\n this.dnd = dnd;\r\n }\r\n ListViewDragAndDrop.prototype.getDragElements = function (element) {\r\n var selection = this.list.getSelectedElements();\r\n var elements = selection.indexOf(element) > -1 ? selection : [element];\r\n return elements;\r\n };\r\n ListViewDragAndDrop.prototype.getDragURI = function (element) {\r\n return this.dnd.getDragURI(element);\r\n };\r\n ListViewDragAndDrop.prototype.getDragLabel = function (elements, originalEvent) {\r\n if (this.dnd.getDragLabel) {\r\n return this.dnd.getDragLabel(elements, originalEvent);\r\n }\r\n return undefined;\r\n };\r\n ListViewDragAndDrop.prototype.onDragStart = function (data, originalEvent) {\r\n if (this.dnd.onDragStart) {\r\n this.dnd.onDragStart(data, originalEvent);\r\n }\r\n };\r\n ListViewDragAndDrop.prototype.onDragOver = function (data, targetElement, targetIndex, originalEvent) {\r\n return this.dnd.onDragOver(data, targetElement, targetIndex, originalEvent);\r\n };\r\n ListViewDragAndDrop.prototype.onDragEnd = function (originalEvent) {\r\n if (this.dnd.onDragEnd) {\r\n this.dnd.onDragEnd(originalEvent);\r\n }\r\n };\r\n ListViewDragAndDrop.prototype.drop = function (data, targetElement, targetIndex, originalEvent) {\r\n this.dnd.drop(data, targetElement, targetIndex, originalEvent);\r\n };\r\n return ListViewDragAndDrop;\r\n}());\r\nvar List = /** @class */ (function () {\r\n function List(user, container, virtualDelegate, renderers, _options) {\r\n if (_options === void 0) { _options = DefaultOptions; }\r\n this.user = user;\r\n this._options = _options;\r\n this.eventBufferer = new EventBufferer();\r\n this.disposables = new DisposableStore();\r\n this._onDidOpen = new Emitter();\r\n this.onDidOpen = this._onDidOpen.event;\r\n this._onDidPin = new Emitter();\r\n this.didJustPressContextMenuKey = false;\r\n this._onDidDispose = new Emitter();\r\n this.onDidDispose = this._onDidDispose.event;\r\n this.focus = new FocusTrait();\r\n this.selection = new Trait('selected');\r\n mixin(_options, defaultStyles, false);\r\n var baseRenderers = [this.focus.renderer, this.selection.renderer];\r\n this.accessibilityProvider = _options.accessibilityProvider;\r\n if (this.accessibilityProvider) {\r\n baseRenderers.push(new AccessibiltyRenderer(this.accessibilityProvider));\r\n if (this.accessibilityProvider.onDidChangeActiveDescendant) {\r\n this.accessibilityProvider.onDidChangeActiveDescendant(this.onDidChangeActiveDescendant, this, this.disposables);\r\n }\r\n }\r\n renderers = renderers.map(function (r) { return new PipelineRenderer(r.templateId, __spreadArrays(baseRenderers, [r])); });\r\n var viewOptions = __assign(__assign({}, _options), { dnd: _options.dnd && new ListViewDragAndDrop(this, _options.dnd) });\r\n this.view = new ListView(container, virtualDelegate, renderers, viewOptions);\r\n if (typeof _options.ariaRole !== 'string') {\r\n this.view.domNode.setAttribute('role', ListAriaRootRole.TREE);\r\n }\r\n else {\r\n this.view.domNode.setAttribute('role', _options.ariaRole);\r\n }\r\n if (_options.styleController) {\r\n this.styleController = _options.styleController(this.view.domId);\r\n }\r\n else {\r\n var styleElement = DOM.createStyleSheet(this.view.domNode);\r\n this.styleController = new DefaultStyleController(styleElement, this.view.domId);\r\n }\r\n this.spliceable = new CombinedSpliceable([\r\n new TraitSpliceable(this.focus, this.view, _options.identityProvider),\r\n new TraitSpliceable(this.selection, this.view, _options.identityProvider),\r\n this.view\r\n ]);\r\n this.disposables.add(this.focus);\r\n this.disposables.add(this.selection);\r\n this.disposables.add(this.view);\r\n this.disposables.add(this._onDidDispose);\r\n this.onDidFocus = Event.map(domEvent(this.view.domNode, 'focus', true), function () { return null; });\r\n this.onDidBlur = Event.map(domEvent(this.view.domNode, 'blur', true), function () { return null; });\r\n this.disposables.add(new DOMFocusController(this, this.view));\r\n if (typeof _options.keyboardSupport !== 'boolean' || _options.keyboardSupport) {\r\n var controller = new KeyboardController(this, this.view, _options);\r\n this.disposables.add(controller);\r\n }\r\n if (_options.keyboardNavigationLabelProvider) {\r\n var delegate = _options.keyboardNavigationDelegate || DefaultKeyboardNavigationDelegate;\r\n this.typeLabelController = new TypeLabelController(this, this.view, _options.keyboardNavigationLabelProvider, delegate);\r\n this.disposables.add(this.typeLabelController);\r\n }\r\n this.disposables.add(this.createMouseController(_options));\r\n this.onFocusChange(this._onFocusChange, this, this.disposables);\r\n this.onSelectionChange(this._onSelectionChange, this, this.disposables);\r\n if (_options.ariaLabel) {\r\n this.view.domNode.setAttribute('aria-label', localize('aria list', \"{0}. Use the navigation keys to navigate.\", _options.ariaLabel));\r\n }\r\n }\r\n Object.defineProperty(List.prototype, \"onFocusChange\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.map(this.eventBufferer.wrapEvent(this.focus.onChange), function (e) { return _this.toListEvent(e); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"onSelectionChange\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.map(this.eventBufferer.wrapEvent(this.selection.onChange), function (e) { return _this.toListEvent(e); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"domId\", {\r\n get: function () { return this.view.domId; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"onMouseClick\", {\r\n get: function () { return this.view.onMouseClick; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"onMouseDblClick\", {\r\n get: function () { return this.view.onMouseDblClick; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"onMouseMiddleClick\", {\r\n get: function () { return this.view.onMouseMiddleClick; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"onMouseDown\", {\r\n get: function () { return this.view.onMouseDown; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"onTouchStart\", {\r\n get: function () { return this.view.onTouchStart; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"onTap\", {\r\n get: function () { return this.view.onTap; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"onContextMenu\", {\r\n get: function () {\r\n var _this = this;\r\n var fromKeydown = Event.chain(domEvent(this.view.domNode, 'keydown'))\r\n .map(function (e) { return new StandardKeyboardEvent(e); })\r\n .filter(function (e) { return _this.didJustPressContextMenuKey = e.keyCode === 58 /* ContextMenu */ || (e.shiftKey && e.keyCode === 68 /* F10 */); })\r\n .filter(function (e) { e.preventDefault(); e.stopPropagation(); return false; })\r\n .event;\r\n var fromKeyup = Event.chain(domEvent(this.view.domNode, 'keyup'))\r\n .filter(function () {\r\n var didJustPressContextMenuKey = _this.didJustPressContextMenuKey;\r\n _this.didJustPressContextMenuKey = false;\r\n return didJustPressContextMenuKey;\r\n })\r\n .filter(function () { return _this.getFocus().length > 0 && !!_this.view.domElement(_this.getFocus()[0]); })\r\n .map(function (browserEvent) {\r\n var index = _this.getFocus()[0];\r\n var element = _this.view.element(index);\r\n var anchor = _this.view.domElement(index);\r\n return { index: index, element: element, anchor: anchor, browserEvent: browserEvent };\r\n })\r\n .event;\r\n var fromMouse = Event.chain(this.view.onContextMenu)\r\n .filter(function () { return !_this.didJustPressContextMenuKey; })\r\n .map(function (_a) {\r\n var element = _a.element, index = _a.index, browserEvent = _a.browserEvent;\r\n return ({ element: element, index: index, anchor: { x: browserEvent.clientX + 1, y: browserEvent.clientY }, browserEvent: browserEvent });\r\n })\r\n .event;\r\n return Event.any(fromKeydown, fromKeyup, fromMouse);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"onKeyDown\", {\r\n get: function () { return domEvent(this.view.domNode, 'keydown'); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n List.prototype.createMouseController = function (options) {\r\n return new MouseController(this);\r\n };\r\n List.prototype.updateOptions = function (optionsUpdate) {\r\n if (optionsUpdate === void 0) { optionsUpdate = {}; }\r\n this._options = __assign(__assign({}, this._options), optionsUpdate);\r\n if (this.typeLabelController) {\r\n this.typeLabelController.updateOptions(this._options);\r\n }\r\n };\r\n Object.defineProperty(List.prototype, \"options\", {\r\n get: function () {\r\n return this._options;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n List.prototype.splice = function (start, deleteCount, elements) {\r\n var _this = this;\r\n if (elements === void 0) { elements = []; }\r\n if (start < 0 || start > this.view.length) {\r\n throw new ListError(this.user, \"Invalid start index: \" + start);\r\n }\r\n if (deleteCount < 0) {\r\n throw new ListError(this.user, \"Invalid delete count: \" + deleteCount);\r\n }\r\n if (deleteCount === 0 && elements.length === 0) {\r\n return;\r\n }\r\n this.eventBufferer.bufferEvents(function () { return _this.spliceable.splice(start, deleteCount, elements); });\r\n };\r\n List.prototype.rerender = function () {\r\n this.view.rerender();\r\n };\r\n List.prototype.element = function (index) {\r\n return this.view.element(index);\r\n };\r\n Object.defineProperty(List.prototype, \"length\", {\r\n get: function () {\r\n return this.view.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"contentHeight\", {\r\n get: function () {\r\n return this.view.contentHeight;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(List.prototype, \"scrollTop\", {\r\n get: function () {\r\n return this.view.getScrollTop();\r\n },\r\n set: function (scrollTop) {\r\n this.view.setScrollTop(scrollTop);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n List.prototype.domFocus = function () {\r\n this.view.domNode.focus();\r\n };\r\n List.prototype.layout = function (height, width) {\r\n this.view.layout(height, width);\r\n };\r\n List.prototype.setSelection = function (indexes, browserEvent) {\r\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\r\n var index = indexes_1[_i];\r\n if (index < 0 || index >= this.length) {\r\n throw new ListError(this.user, \"Invalid index \" + index);\r\n }\r\n }\r\n this.selection.set(indexes, browserEvent);\r\n };\r\n List.prototype.getSelection = function () {\r\n return this.selection.get();\r\n };\r\n List.prototype.getSelectedElements = function () {\r\n var _this = this;\r\n return this.getSelection().map(function (i) { return _this.view.element(i); });\r\n };\r\n List.prototype.setFocus = function (indexes, browserEvent) {\r\n for (var _i = 0, indexes_2 = indexes; _i < indexes_2.length; _i++) {\r\n var index = indexes_2[_i];\r\n if (index < 0 || index >= this.length) {\r\n throw new ListError(this.user, \"Invalid index \" + index);\r\n }\r\n }\r\n this.focus.set(indexes, browserEvent);\r\n };\r\n List.prototype.focusNext = function (n, loop, browserEvent, filter) {\r\n if (n === void 0) { n = 1; }\r\n if (loop === void 0) { loop = false; }\r\n if (this.length === 0) {\r\n return;\r\n }\r\n var focus = this.focus.get();\r\n var index = this.findNextIndex(focus.length > 0 ? focus[0] + n : 0, loop, filter);\r\n if (index > -1) {\r\n this.setFocus([index], browserEvent);\r\n }\r\n };\r\n List.prototype.focusPrevious = function (n, loop, browserEvent, filter) {\r\n if (n === void 0) { n = 1; }\r\n if (loop === void 0) { loop = false; }\r\n if (this.length === 0) {\r\n return;\r\n }\r\n var focus = this.focus.get();\r\n var index = this.findPreviousIndex(focus.length > 0 ? focus[0] - n : 0, loop, filter);\r\n if (index > -1) {\r\n this.setFocus([index], browserEvent);\r\n }\r\n };\r\n List.prototype.focusNextPage = function (browserEvent, filter) {\r\n var _this = this;\r\n var lastPageIndex = this.view.indexAt(this.view.getScrollTop() + this.view.renderHeight);\r\n lastPageIndex = lastPageIndex === 0 ? 0 : lastPageIndex - 1;\r\n var lastPageElement = this.view.element(lastPageIndex);\r\n var currentlyFocusedElement = this.getFocusedElements()[0];\r\n if (currentlyFocusedElement !== lastPageElement) {\r\n var lastGoodPageIndex = this.findPreviousIndex(lastPageIndex, false, filter);\r\n if (lastGoodPageIndex > -1 && currentlyFocusedElement !== this.view.element(lastGoodPageIndex)) {\r\n this.setFocus([lastGoodPageIndex], browserEvent);\r\n }\r\n else {\r\n this.setFocus([lastPageIndex], browserEvent);\r\n }\r\n }\r\n else {\r\n var previousScrollTop = this.view.getScrollTop();\r\n this.view.setScrollTop(previousScrollTop + this.view.renderHeight - this.view.elementHeight(lastPageIndex));\r\n if (this.view.getScrollTop() !== previousScrollTop) {\r\n // Let the scroll event listener run\r\n setTimeout(function () { return _this.focusNextPage(browserEvent, filter); }, 0);\r\n }\r\n }\r\n };\r\n List.prototype.focusPreviousPage = function (browserEvent, filter) {\r\n var _this = this;\r\n var firstPageIndex;\r\n var scrollTop = this.view.getScrollTop();\r\n if (scrollTop === 0) {\r\n firstPageIndex = this.view.indexAt(scrollTop);\r\n }\r\n else {\r\n firstPageIndex = this.view.indexAfter(scrollTop - 1);\r\n }\r\n var firstPageElement = this.view.element(firstPageIndex);\r\n var currentlyFocusedElement = this.getFocusedElements()[0];\r\n if (currentlyFocusedElement !== firstPageElement) {\r\n var firstGoodPageIndex = this.findNextIndex(firstPageIndex, false, filter);\r\n if (firstGoodPageIndex > -1 && currentlyFocusedElement !== this.view.element(firstGoodPageIndex)) {\r\n this.setFocus([firstGoodPageIndex], browserEvent);\r\n }\r\n else {\r\n this.setFocus([firstPageIndex], browserEvent);\r\n }\r\n }\r\n else {\r\n var previousScrollTop = scrollTop;\r\n this.view.setScrollTop(scrollTop - this.view.renderHeight);\r\n if (this.view.getScrollTop() !== previousScrollTop) {\r\n // Let the scroll event listener run\r\n setTimeout(function () { return _this.focusPreviousPage(browserEvent, filter); }, 0);\r\n }\r\n }\r\n };\r\n List.prototype.focusLast = function (browserEvent, filter) {\r\n if (this.length === 0) {\r\n return;\r\n }\r\n var index = this.findPreviousIndex(this.length - 1, false, filter);\r\n if (index > -1) {\r\n this.setFocus([index], browserEvent);\r\n }\r\n };\r\n List.prototype.focusFirst = function (browserEvent, filter) {\r\n if (this.length === 0) {\r\n return;\r\n }\r\n var index = this.findNextIndex(0, false, filter);\r\n if (index > -1) {\r\n this.setFocus([index], browserEvent);\r\n }\r\n };\r\n List.prototype.findNextIndex = function (index, loop, filter) {\r\n if (loop === void 0) { loop = false; }\r\n for (var i = 0; i < this.length; i++) {\r\n if (index >= this.length && !loop) {\r\n return -1;\r\n }\r\n index = index % this.length;\r\n if (!filter || filter(this.element(index))) {\r\n return index;\r\n }\r\n index++;\r\n }\r\n return -1;\r\n };\r\n List.prototype.findPreviousIndex = function (index, loop, filter) {\r\n if (loop === void 0) { loop = false; }\r\n for (var i = 0; i < this.length; i++) {\r\n if (index < 0 && !loop) {\r\n return -1;\r\n }\r\n index = (this.length + (index % this.length)) % this.length;\r\n if (!filter || filter(this.element(index))) {\r\n return index;\r\n }\r\n index--;\r\n }\r\n return -1;\r\n };\r\n List.prototype.getFocus = function () {\r\n return this.focus.get();\r\n };\r\n List.prototype.getFocusedElements = function () {\r\n var _this = this;\r\n return this.getFocus().map(function (i) { return _this.view.element(i); });\r\n };\r\n List.prototype.reveal = function (index, relativeTop) {\r\n if (index < 0 || index >= this.length) {\r\n throw new ListError(this.user, \"Invalid index \" + index);\r\n }\r\n var scrollTop = this.view.getScrollTop();\r\n var elementTop = this.view.elementTop(index);\r\n var elementHeight = this.view.elementHeight(index);\r\n if (isNumber(relativeTop)) {\r\n // y = mx + b\r\n var m = elementHeight - this.view.renderHeight;\r\n this.view.setScrollTop(m * clamp(relativeTop, 0, 1) + elementTop);\r\n }\r\n else {\r\n var viewItemBottom = elementTop + elementHeight;\r\n var wrapperBottom = scrollTop + this.view.renderHeight;\r\n if (elementTop < scrollTop && viewItemBottom >= wrapperBottom) {\r\n // The element is already overflowing the viewport, no-op\r\n }\r\n else if (elementTop < scrollTop) {\r\n this.view.setScrollTop(elementTop);\r\n }\r\n else if (viewItemBottom >= wrapperBottom) {\r\n this.view.setScrollTop(viewItemBottom - this.view.renderHeight);\r\n }\r\n }\r\n };\r\n /**\r\n * Returns the relative position of an element rendered in the list.\r\n * Returns `null` if the element isn't *entirely* in the visible viewport.\r\n */\r\n List.prototype.getRelativeTop = function (index) {\r\n if (index < 0 || index >= this.length) {\r\n throw new ListError(this.user, \"Invalid index \" + index);\r\n }\r\n var scrollTop = this.view.getScrollTop();\r\n var elementTop = this.view.elementTop(index);\r\n var elementHeight = this.view.elementHeight(index);\r\n if (elementTop < scrollTop || elementTop + elementHeight > scrollTop + this.view.renderHeight) {\r\n return null;\r\n }\r\n // y = mx + b\r\n var m = elementHeight - this.view.renderHeight;\r\n return Math.abs((scrollTop - elementTop) / m);\r\n };\r\n List.prototype.getHTMLElement = function () {\r\n return this.view.domNode;\r\n };\r\n List.prototype.open = function (indexes, browserEvent) {\r\n var _this = this;\r\n for (var _i = 0, indexes_3 = indexes; _i < indexes_3.length; _i++) {\r\n var index = indexes_3[_i];\r\n if (index < 0 || index >= this.length) {\r\n throw new ListError(this.user, \"Invalid index \" + index);\r\n }\r\n }\r\n this._onDidOpen.fire({ indexes: indexes, elements: indexes.map(function (i) { return _this.view.element(i); }), browserEvent: browserEvent });\r\n };\r\n List.prototype.pin = function (indexes, browserEvent) {\r\n var _this = this;\r\n for (var _i = 0, indexes_4 = indexes; _i < indexes_4.length; _i++) {\r\n var index = indexes_4[_i];\r\n if (index < 0 || index >= this.length) {\r\n throw new ListError(this.user, \"Invalid index \" + index);\r\n }\r\n }\r\n this._onDidPin.fire({ indexes: indexes, elements: indexes.map(function (i) { return _this.view.element(i); }), browserEvent: browserEvent });\r\n };\r\n List.prototype.style = function (styles) {\r\n this.styleController.style(styles);\r\n };\r\n List.prototype.toListEvent = function (_a) {\r\n var _this = this;\r\n var indexes = _a.indexes, browserEvent = _a.browserEvent;\r\n return { indexes: indexes, elements: indexes.map(function (i) { return _this.view.element(i); }), browserEvent: browserEvent };\r\n };\r\n List.prototype._onFocusChange = function () {\r\n var focus = this.focus.get();\r\n DOM.toggleClass(this.view.domNode, 'element-focused', focus.length > 0);\r\n this.onDidChangeActiveDescendant();\r\n };\r\n List.prototype.onDidChangeActiveDescendant = function () {\r\n var _a;\r\n var focus = this.focus.get();\r\n if (focus.length > 0) {\r\n var id = void 0;\r\n if ((_a = this.accessibilityProvider) === null || _a === void 0 ? void 0 : _a.getActiveDescendantId) {\r\n id = this.accessibilityProvider.getActiveDescendantId(this.view.element(focus[0]));\r\n }\r\n this.view.domNode.setAttribute('aria-activedescendant', id || this.view.getElementDomId(focus[0]));\r\n }\r\n else {\r\n this.view.domNode.removeAttribute('aria-activedescendant');\r\n }\r\n };\r\n List.prototype._onSelectionChange = function () {\r\n var selection = this.selection.get();\r\n DOM.toggleClass(this.view.domNode, 'selection-none', selection.length === 0);\r\n DOM.toggleClass(this.view.domNode, 'selection-single', selection.length === 1);\r\n DOM.toggleClass(this.view.domNode, 'selection-multiple', selection.length > 1);\r\n };\r\n List.prototype.dispose = function () {\r\n this._onDidDispose.fire();\r\n this.disposables.dispose();\r\n this._onDidOpen.dispose();\r\n this._onDidPin.dispose();\r\n this._onDidDispose.dispose();\r\n };\r\n __decorate([\r\n memoize\r\n ], List.prototype, \"onFocusChange\", null);\r\n __decorate([\r\n memoize\r\n ], List.prototype, \"onSelectionChange\", null);\r\n __decorate([\r\n memoize\r\n ], List.prototype, \"onContextMenu\", null);\r\n return List;\r\n}());\r\nexport { List };\r\n","export var InputFocusedContextKey = 'inputFocus';\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar TreeError = /** @class */ (function (_super) {\r\n __extends(TreeError, _super);\r\n function TreeError(user, message) {\r\n return _super.call(this, \"TreeError [\" + user + \"] \" + message) || this;\r\n }\r\n return TreeError;\r\n}(Error));\r\nexport { TreeError };\r\nvar WeakMapper = /** @class */ (function () {\r\n function WeakMapper(fn) {\r\n this.fn = fn;\r\n this._map = new WeakMap();\r\n }\r\n WeakMapper.prototype.map = function (key) {\r\n var result = this._map.get(key);\r\n if (!result) {\r\n result = this.fn(key);\r\n this._map.set(key, result);\r\n }\r\n return result;\r\n };\r\n return WeakMapper;\r\n}());\r\nexport { WeakMapper };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { TreeError } from './tree.js';\r\nimport { tail2 } from '../../../common/arrays.js';\r\nimport { Emitter, EventBufferer } from '../../../common/event.js';\r\nimport { Iterator } from '../../../common/iterator.js';\r\nexport function isFilterResult(obj) {\r\n return typeof obj === 'object' && 'visibility' in obj && 'data' in obj;\r\n}\r\nexport function getVisibleState(visibility) {\r\n switch (visibility) {\r\n case true: return 1 /* Visible */;\r\n case false: return 0 /* Hidden */;\r\n default: return visibility;\r\n }\r\n}\r\nfunction isCollapsibleStateUpdate(update) {\r\n return typeof update.collapsible === 'boolean';\r\n}\r\nvar IndexTreeModel = /** @class */ (function () {\r\n function IndexTreeModel(user, list, rootElement, options) {\r\n if (options === void 0) { options = {}; }\r\n this.user = user;\r\n this.list = list;\r\n this.rootRef = [];\r\n this.eventBufferer = new EventBufferer();\r\n this._onDidChangeCollapseState = new Emitter();\r\n this.onDidChangeCollapseState = this.eventBufferer.wrapEvent(this._onDidChangeCollapseState.event);\r\n this._onDidChangeRenderNodeCount = new Emitter();\r\n this.onDidChangeRenderNodeCount = this.eventBufferer.wrapEvent(this._onDidChangeRenderNodeCount.event);\r\n this._onDidSplice = new Emitter();\r\n this.onDidSplice = this._onDidSplice.event;\r\n this.collapseByDefault = typeof options.collapseByDefault === 'undefined' ? false : options.collapseByDefault;\r\n this.filter = options.filter;\r\n this.autoExpandSingleChildren = typeof options.autoExpandSingleChildren === 'undefined' ? false : options.autoExpandSingleChildren;\r\n this.root = {\r\n parent: undefined,\r\n element: rootElement,\r\n children: [],\r\n depth: 0,\r\n visibleChildrenCount: 0,\r\n visibleChildIndex: -1,\r\n collapsible: false,\r\n collapsed: false,\r\n renderNodeCount: 0,\r\n visible: true,\r\n filterData: undefined\r\n };\r\n }\r\n IndexTreeModel.prototype.splice = function (location, deleteCount, toInsert, onDidCreateNode, onDidDeleteNode) {\r\n var _a;\r\n var _this = this;\r\n if (location.length === 0) {\r\n throw new TreeError(this.user, 'Invalid tree location');\r\n }\r\n var _b = this.getParentNodeWithListIndex(location), parentNode = _b.parentNode, listIndex = _b.listIndex, revealed = _b.revealed, visible = _b.visible;\r\n var treeListElementsToInsert = [];\r\n var nodesToInsertIterator = Iterator.map(Iterator.from(toInsert), function (el) { return _this.createTreeNode(el, parentNode, parentNode.visible ? 1 /* Visible */ : 0 /* Hidden */, revealed, treeListElementsToInsert, onDidCreateNode); });\r\n var lastIndex = location[location.length - 1];\r\n // figure out what's the visible child start index right before the\r\n // splice point\r\n var visibleChildStartIndex = 0;\r\n for (var i = lastIndex; i >= 0 && i < parentNode.children.length; i--) {\r\n var child = parentNode.children[i];\r\n if (child.visible) {\r\n visibleChildStartIndex = child.visibleChildIndex;\r\n break;\r\n }\r\n }\r\n var nodesToInsert = [];\r\n var insertedVisibleChildrenCount = 0;\r\n var renderNodeCount = 0;\r\n Iterator.forEach(nodesToInsertIterator, function (child) {\r\n nodesToInsert.push(child);\r\n renderNodeCount += child.renderNodeCount;\r\n if (child.visible) {\r\n child.visibleChildIndex = visibleChildStartIndex + insertedVisibleChildrenCount++;\r\n }\r\n });\r\n var deletedNodes = (_a = parentNode.children).splice.apply(_a, __spreadArrays([lastIndex, deleteCount], nodesToInsert));\r\n // figure out what is the count of deleted visible children\r\n var deletedVisibleChildrenCount = 0;\r\n for (var _i = 0, deletedNodes_1 = deletedNodes; _i < deletedNodes_1.length; _i++) {\r\n var child = deletedNodes_1[_i];\r\n if (child.visible) {\r\n deletedVisibleChildrenCount++;\r\n }\r\n }\r\n // and adjust for all visible children after the splice point\r\n if (deletedVisibleChildrenCount !== 0) {\r\n for (var i = lastIndex + nodesToInsert.length; i < parentNode.children.length; i++) {\r\n var child = parentNode.children[i];\r\n if (child.visible) {\r\n child.visibleChildIndex -= deletedVisibleChildrenCount;\r\n }\r\n }\r\n }\r\n // update parent's visible children count\r\n parentNode.visibleChildrenCount += insertedVisibleChildrenCount - deletedVisibleChildrenCount;\r\n if (revealed && visible) {\r\n var visibleDeleteCount = deletedNodes.reduce(function (r, node) { return r + (node.visible ? node.renderNodeCount : 0); }, 0);\r\n this._updateAncestorsRenderNodeCount(parentNode, renderNodeCount - visibleDeleteCount);\r\n this.list.splice(listIndex, visibleDeleteCount, treeListElementsToInsert);\r\n }\r\n if (deletedNodes.length > 0 && onDidDeleteNode) {\r\n var visit_1 = function (node) {\r\n onDidDeleteNode(node);\r\n node.children.forEach(visit_1);\r\n };\r\n deletedNodes.forEach(visit_1);\r\n }\r\n this._onDidSplice.fire({ insertedNodes: nodesToInsert, deletedNodes: deletedNodes });\r\n };\r\n IndexTreeModel.prototype.rerender = function (location) {\r\n if (location.length === 0) {\r\n throw new TreeError(this.user, 'Invalid tree location');\r\n }\r\n var _a = this.getTreeNodeWithListIndex(location), node = _a.node, listIndex = _a.listIndex, revealed = _a.revealed;\r\n if (revealed) {\r\n this.list.splice(listIndex, 1, [node]);\r\n }\r\n };\r\n IndexTreeModel.prototype.getListIndex = function (location) {\r\n var _a = this.getTreeNodeWithListIndex(location), listIndex = _a.listIndex, visible = _a.visible, revealed = _a.revealed;\r\n return visible && revealed ? listIndex : -1;\r\n };\r\n IndexTreeModel.prototype.getListRenderCount = function (location) {\r\n return this.getTreeNode(location).renderNodeCount;\r\n };\r\n IndexTreeModel.prototype.setCollapsible = function (location, collapsible) {\r\n var _this = this;\r\n var node = this.getTreeNode(location);\r\n if (typeof collapsible === 'undefined') {\r\n collapsible = !node.collapsible;\r\n }\r\n var update = { collapsible: collapsible };\r\n return this.eventBufferer.bufferEvents(function () { return _this._setCollapseState(location, update); });\r\n };\r\n IndexTreeModel.prototype.isCollapsed = function (location) {\r\n return this.getTreeNode(location).collapsed;\r\n };\r\n IndexTreeModel.prototype.setCollapsed = function (location, collapsed, recursive) {\r\n var _this = this;\r\n var node = this.getTreeNode(location);\r\n if (typeof collapsed === 'undefined') {\r\n collapsed = !node.collapsed;\r\n }\r\n var update = { collapsed: collapsed, recursive: recursive || false };\r\n return this.eventBufferer.bufferEvents(function () { return _this._setCollapseState(location, update); });\r\n };\r\n IndexTreeModel.prototype._setCollapseState = function (location, update) {\r\n var _a = this.getTreeNodeWithListIndex(location), node = _a.node, listIndex = _a.listIndex, revealed = _a.revealed;\r\n var result = this._setListNodeCollapseState(node, listIndex, revealed, update);\r\n if (node !== this.root && this.autoExpandSingleChildren && result && !isCollapsibleStateUpdate(update) && node.collapsible && !node.collapsed && !update.recursive) {\r\n var onlyVisibleChildIndex = -1;\r\n for (var i = 0; i < node.children.length; i++) {\r\n var child = node.children[i];\r\n if (child.visible) {\r\n if (onlyVisibleChildIndex > -1) {\r\n onlyVisibleChildIndex = -1;\r\n break;\r\n }\r\n else {\r\n onlyVisibleChildIndex = i;\r\n }\r\n }\r\n }\r\n if (onlyVisibleChildIndex > -1) {\r\n this._setCollapseState(__spreadArrays(location, [onlyVisibleChildIndex]), update);\r\n }\r\n }\r\n return result;\r\n };\r\n IndexTreeModel.prototype._setListNodeCollapseState = function (node, listIndex, revealed, update) {\r\n var result = this._setNodeCollapseState(node, update, false);\r\n if (!revealed || !node.visible || !result) {\r\n return result;\r\n }\r\n var previousRenderNodeCount = node.renderNodeCount;\r\n var toInsert = this.updateNodeAfterCollapseChange(node);\r\n var deleteCount = previousRenderNodeCount - (listIndex === -1 ? 0 : 1);\r\n this.list.splice(listIndex + 1, deleteCount, toInsert.slice(1));\r\n return result;\r\n };\r\n IndexTreeModel.prototype._setNodeCollapseState = function (node, update, deep) {\r\n var result;\r\n if (node === this.root) {\r\n result = false;\r\n }\r\n else {\r\n if (isCollapsibleStateUpdate(update)) {\r\n result = node.collapsible !== update.collapsible;\r\n node.collapsible = update.collapsible;\r\n }\r\n else {\r\n result = node.collapsed !== update.collapsed;\r\n node.collapsed = update.collapsed;\r\n }\r\n if (result) {\r\n this._onDidChangeCollapseState.fire({ node: node, deep: deep });\r\n }\r\n }\r\n if (!isCollapsibleStateUpdate(update) && update.recursive) {\r\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n result = this._setNodeCollapseState(child, update, true) || result;\r\n }\r\n }\r\n return result;\r\n };\r\n IndexTreeModel.prototype.expandTo = function (location) {\r\n var _this = this;\r\n this.eventBufferer.bufferEvents(function () {\r\n var node = _this.getTreeNode(location);\r\n while (node.parent) {\r\n node = node.parent;\r\n location = location.slice(0, location.length - 1);\r\n if (node.collapsed) {\r\n _this._setCollapseState(location, { collapsed: false, recursive: false });\r\n }\r\n }\r\n });\r\n };\r\n IndexTreeModel.prototype.refilter = function () {\r\n var previousRenderNodeCount = this.root.renderNodeCount;\r\n var toInsert = this.updateNodeAfterFilterChange(this.root);\r\n this.list.splice(0, previousRenderNodeCount, toInsert);\r\n };\r\n IndexTreeModel.prototype.createTreeNode = function (treeElement, parent, parentVisibility, revealed, treeListElements, onDidCreateNode) {\r\n var _this = this;\r\n var node = {\r\n parent: parent,\r\n element: treeElement.element,\r\n children: [],\r\n depth: parent.depth + 1,\r\n visibleChildrenCount: 0,\r\n visibleChildIndex: -1,\r\n collapsible: typeof treeElement.collapsible === 'boolean' ? treeElement.collapsible : (typeof treeElement.collapsed !== 'undefined'),\r\n collapsed: typeof treeElement.collapsed === 'undefined' ? this.collapseByDefault : treeElement.collapsed,\r\n renderNodeCount: 1,\r\n visible: true,\r\n filterData: undefined\r\n };\r\n var visibility = this._filterNode(node, parentVisibility);\r\n if (revealed) {\r\n treeListElements.push(node);\r\n }\r\n var childElements = Iterator.from(treeElement.children);\r\n var childRevealed = revealed && visibility !== 0 /* Hidden */ && !node.collapsed;\r\n var childNodes = Iterator.map(childElements, function (el) { return _this.createTreeNode(el, node, visibility, childRevealed, treeListElements, onDidCreateNode); });\r\n var visibleChildrenCount = 0;\r\n var renderNodeCount = 1;\r\n Iterator.forEach(childNodes, function (child) {\r\n node.children.push(child);\r\n renderNodeCount += child.renderNodeCount;\r\n if (child.visible) {\r\n child.visibleChildIndex = visibleChildrenCount++;\r\n }\r\n });\r\n node.collapsible = node.collapsible || node.children.length > 0;\r\n node.visibleChildrenCount = visibleChildrenCount;\r\n node.visible = visibility === 2 /* Recurse */ ? visibleChildrenCount > 0 : (visibility === 1 /* Visible */);\r\n if (!node.visible) {\r\n node.renderNodeCount = 0;\r\n if (revealed) {\r\n treeListElements.pop();\r\n }\r\n }\r\n else if (!node.collapsed) {\r\n node.renderNodeCount = renderNodeCount;\r\n }\r\n if (onDidCreateNode) {\r\n onDidCreateNode(node);\r\n }\r\n return node;\r\n };\r\n IndexTreeModel.prototype.updateNodeAfterCollapseChange = function (node) {\r\n var previousRenderNodeCount = node.renderNodeCount;\r\n var result = [];\r\n this._updateNodeAfterCollapseChange(node, result);\r\n this._updateAncestorsRenderNodeCount(node.parent, result.length - previousRenderNodeCount);\r\n return result;\r\n };\r\n IndexTreeModel.prototype._updateNodeAfterCollapseChange = function (node, result) {\r\n if (node.visible === false) {\r\n return 0;\r\n }\r\n result.push(node);\r\n node.renderNodeCount = 1;\r\n if (!node.collapsed) {\r\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n node.renderNodeCount += this._updateNodeAfterCollapseChange(child, result);\r\n }\r\n }\r\n this._onDidChangeRenderNodeCount.fire(node);\r\n return node.renderNodeCount;\r\n };\r\n IndexTreeModel.prototype.updateNodeAfterFilterChange = function (node) {\r\n var previousRenderNodeCount = node.renderNodeCount;\r\n var result = [];\r\n this._updateNodeAfterFilterChange(node, node.visible ? 1 /* Visible */ : 0 /* Hidden */, result);\r\n this._updateAncestorsRenderNodeCount(node.parent, result.length - previousRenderNodeCount);\r\n return result;\r\n };\r\n IndexTreeModel.prototype._updateNodeAfterFilterChange = function (node, parentVisibility, result, revealed) {\r\n if (revealed === void 0) { revealed = true; }\r\n var visibility;\r\n if (node !== this.root) {\r\n visibility = this._filterNode(node, parentVisibility);\r\n if (visibility === 0 /* Hidden */) {\r\n node.visible = false;\r\n node.renderNodeCount = 0;\r\n return false;\r\n }\r\n if (revealed) {\r\n result.push(node);\r\n }\r\n }\r\n var resultStartLength = result.length;\r\n node.renderNodeCount = node === this.root ? 0 : 1;\r\n var hasVisibleDescendants = false;\r\n if (!node.collapsed || visibility !== 0 /* Hidden */) {\r\n var visibleChildIndex = 0;\r\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\r\n var child = _a[_i];\r\n hasVisibleDescendants = this._updateNodeAfterFilterChange(child, visibility, result, revealed && !node.collapsed) || hasVisibleDescendants;\r\n if (child.visible) {\r\n child.visibleChildIndex = visibleChildIndex++;\r\n }\r\n }\r\n node.visibleChildrenCount = visibleChildIndex;\r\n }\r\n else {\r\n node.visibleChildrenCount = 0;\r\n }\r\n if (node !== this.root) {\r\n node.visible = visibility === 2 /* Recurse */ ? hasVisibleDescendants : (visibility === 1 /* Visible */);\r\n }\r\n if (!node.visible) {\r\n node.renderNodeCount = 0;\r\n if (revealed) {\r\n result.pop();\r\n }\r\n }\r\n else if (!node.collapsed) {\r\n node.renderNodeCount += result.length - resultStartLength;\r\n }\r\n this._onDidChangeRenderNodeCount.fire(node);\r\n return node.visible;\r\n };\r\n IndexTreeModel.prototype._updateAncestorsRenderNodeCount = function (node, diff) {\r\n if (diff === 0) {\r\n return;\r\n }\r\n while (node) {\r\n node.renderNodeCount += diff;\r\n this._onDidChangeRenderNodeCount.fire(node);\r\n node = node.parent;\r\n }\r\n };\r\n IndexTreeModel.prototype._filterNode = function (node, parentVisibility) {\r\n var result = this.filter ? this.filter.filter(node.element, parentVisibility) : 1 /* Visible */;\r\n if (typeof result === 'boolean') {\r\n node.filterData = undefined;\r\n return result ? 1 /* Visible */ : 0 /* Hidden */;\r\n }\r\n else if (isFilterResult(result)) {\r\n node.filterData = result.data;\r\n return getVisibleState(result.visibility);\r\n }\r\n else {\r\n node.filterData = undefined;\r\n return getVisibleState(result);\r\n }\r\n };\r\n // cheap\r\n IndexTreeModel.prototype.getTreeNode = function (location, node) {\r\n if (node === void 0) { node = this.root; }\r\n if (!location || location.length === 0) {\r\n return node;\r\n }\r\n var index = location[0], rest = location.slice(1);\r\n if (index < 0 || index > node.children.length) {\r\n throw new TreeError(this.user, 'Invalid tree location');\r\n }\r\n return this.getTreeNode(rest, node.children[index]);\r\n };\r\n // expensive\r\n IndexTreeModel.prototype.getTreeNodeWithListIndex = function (location) {\r\n if (location.length === 0) {\r\n return { node: this.root, listIndex: -1, revealed: true, visible: false };\r\n }\r\n var _a = this.getParentNodeWithListIndex(location), parentNode = _a.parentNode, listIndex = _a.listIndex, revealed = _a.revealed, visible = _a.visible;\r\n var index = location[location.length - 1];\r\n if (index < 0 || index > parentNode.children.length) {\r\n throw new TreeError(this.user, 'Invalid tree location');\r\n }\r\n var node = parentNode.children[index];\r\n return { node: node, listIndex: listIndex, revealed: revealed, visible: visible && node.visible };\r\n };\r\n IndexTreeModel.prototype.getParentNodeWithListIndex = function (location, node, listIndex, revealed, visible) {\r\n if (node === void 0) { node = this.root; }\r\n if (listIndex === void 0) { listIndex = 0; }\r\n if (revealed === void 0) { revealed = true; }\r\n if (visible === void 0) { visible = true; }\r\n var index = location[0], rest = location.slice(1);\r\n if (index < 0 || index > node.children.length) {\r\n throw new TreeError(this.user, 'Invalid tree location');\r\n }\r\n // TODO@joao perf!\r\n for (var i = 0; i < index; i++) {\r\n listIndex += node.children[i].renderNodeCount;\r\n }\r\n revealed = revealed && !node.collapsed;\r\n visible = visible && node.visible;\r\n if (rest.length === 0) {\r\n return { parentNode: node, listIndex: listIndex, revealed: revealed, visible: visible };\r\n }\r\n return this.getParentNodeWithListIndex(rest, node.children[index], listIndex + 1, revealed, visible);\r\n };\r\n IndexTreeModel.prototype.getNode = function (location) {\r\n if (location === void 0) { location = []; }\r\n return this.getTreeNode(location);\r\n };\r\n // TODO@joao perf!\r\n IndexTreeModel.prototype.getNodeLocation = function (node) {\r\n var location = [];\r\n var indexTreeNode = node; // typing woes\r\n while (indexTreeNode.parent) {\r\n location.push(indexTreeNode.parent.children.indexOf(indexTreeNode));\r\n indexTreeNode = indexTreeNode.parent;\r\n }\r\n return location.reverse();\r\n };\r\n IndexTreeModel.prototype.getParentNodeLocation = function (location) {\r\n if (location.length === 0) {\r\n return undefined;\r\n }\r\n else if (location.length === 1) {\r\n return [];\r\n }\r\n else {\r\n return tail2(location)[0];\r\n }\r\n };\r\n return IndexTreeModel;\r\n}());\r\nexport { IndexTreeModel };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport './media/tree.css';\r\nimport { dispose, Disposable, toDisposable, DisposableStore } from '../../../common/lifecycle.js';\r\nimport { List, MouseController, DefaultKeyboardNavigationDelegate } from '../list/listWidget.js';\r\nimport { append, $, toggleClass, getDomNodePagePosition, removeClass, addClass, hasClass, createStyleSheet, clearNode, addClasses, removeClasses } from '../../dom.js';\r\nimport { Event, Relay, Emitter, EventBufferer } from '../../../common/event.js';\r\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\r\nimport { StaticDND, DragAndDropData } from '../../dnd.js';\r\nimport { range, equals, distinctES6, fromSet } from '../../../common/arrays.js';\r\nimport { ElementsDragAndDropData } from '../list/listView.js';\r\nimport { domEvent } from '../../event.js';\r\nimport { fuzzyScore, FuzzyScore } from '../../../common/filters.js';\r\nimport { getVisibleState, isFilterResult } from './indexTreeModel.js';\r\nimport { localize } from '../../../../nls.js';\r\nimport { disposableTimeout } from '../../../common/async.js';\r\nimport { isMacintosh } from '../../../common/platform.js';\r\nimport { values } from '../../../common/map.js';\r\nimport { clamp } from '../../../common/numbers.js';\r\nimport { SetMap } from '../../../common/collections.js';\r\nvar TreeElementsDragAndDropData = /** @class */ (function (_super) {\r\n __extends(TreeElementsDragAndDropData, _super);\r\n function TreeElementsDragAndDropData(data) {\r\n var _this = _super.call(this, data.elements.map(function (node) { return node.element; })) || this;\r\n _this.data = data;\r\n return _this;\r\n }\r\n return TreeElementsDragAndDropData;\r\n}(ElementsDragAndDropData));\r\nfunction asTreeDragAndDropData(data) {\r\n if (data instanceof ElementsDragAndDropData) {\r\n return new TreeElementsDragAndDropData(data);\r\n }\r\n return data;\r\n}\r\nvar TreeNodeListDragAndDrop = /** @class */ (function () {\r\n function TreeNodeListDragAndDrop(modelProvider, dnd) {\r\n this.modelProvider = modelProvider;\r\n this.dnd = dnd;\r\n this.autoExpandDisposable = Disposable.None;\r\n }\r\n TreeNodeListDragAndDrop.prototype.getDragURI = function (node) {\r\n return this.dnd.getDragURI(node.element);\r\n };\r\n TreeNodeListDragAndDrop.prototype.getDragLabel = function (nodes, originalEvent) {\r\n if (this.dnd.getDragLabel) {\r\n return this.dnd.getDragLabel(nodes.map(function (node) { return node.element; }), originalEvent);\r\n }\r\n return undefined;\r\n };\r\n TreeNodeListDragAndDrop.prototype.onDragStart = function (data, originalEvent) {\r\n if (this.dnd.onDragStart) {\r\n this.dnd.onDragStart(asTreeDragAndDropData(data), originalEvent);\r\n }\r\n };\r\n TreeNodeListDragAndDrop.prototype.onDragOver = function (data, targetNode, targetIndex, originalEvent, raw) {\r\n var _this = this;\r\n if (raw === void 0) { raw = true; }\r\n var result = this.dnd.onDragOver(asTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, originalEvent);\r\n var didChangeAutoExpandNode = this.autoExpandNode !== targetNode;\r\n if (didChangeAutoExpandNode) {\r\n this.autoExpandDisposable.dispose();\r\n this.autoExpandNode = targetNode;\r\n }\r\n if (typeof targetNode === 'undefined') {\r\n return result;\r\n }\r\n if (didChangeAutoExpandNode && typeof result !== 'boolean' && result.autoExpand) {\r\n this.autoExpandDisposable = disposableTimeout(function () {\r\n var model = _this.modelProvider();\r\n var ref = model.getNodeLocation(targetNode);\r\n if (model.isCollapsed(ref)) {\r\n model.setCollapsed(ref, false);\r\n }\r\n _this.autoExpandNode = undefined;\r\n }, 500);\r\n }\r\n if (typeof result === 'boolean' || !result.accept || typeof result.bubble === 'undefined' || result.feedback) {\r\n if (!raw) {\r\n var accept = typeof result === 'boolean' ? result : result.accept;\r\n var effect = typeof result === 'boolean' ? undefined : result.effect;\r\n return { accept: accept, effect: effect, feedback: [targetIndex] };\r\n }\r\n return result;\r\n }\r\n if (result.bubble === 1 /* Up */) {\r\n var model_1 = this.modelProvider();\r\n var ref_1 = model_1.getNodeLocation(targetNode);\r\n var parentRef = model_1.getParentNodeLocation(ref_1);\r\n var parentNode = model_1.getNode(parentRef);\r\n var parentIndex = parentRef && model_1.getListIndex(parentRef);\r\n return this.onDragOver(data, parentNode, parentIndex, originalEvent, false);\r\n }\r\n var model = this.modelProvider();\r\n var ref = model.getNodeLocation(targetNode);\r\n var start = model.getListIndex(ref);\r\n var length = model.getListRenderCount(ref);\r\n return __assign(__assign({}, result), { feedback: range(start, start + length) });\r\n };\r\n TreeNodeListDragAndDrop.prototype.drop = function (data, targetNode, targetIndex, originalEvent) {\r\n this.autoExpandDisposable.dispose();\r\n this.autoExpandNode = undefined;\r\n this.dnd.drop(asTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, originalEvent);\r\n };\r\n TreeNodeListDragAndDrop.prototype.onDragEnd = function (originalEvent) {\r\n if (this.dnd.onDragEnd) {\r\n this.dnd.onDragEnd(originalEvent);\r\n }\r\n };\r\n return TreeNodeListDragAndDrop;\r\n}());\r\nfunction asListOptions(modelProvider, options) {\r\n return options && __assign(__assign({}, options), { identityProvider: options.identityProvider && {\r\n getId: function (el) {\r\n return options.identityProvider.getId(el.element);\r\n }\r\n }, dnd: options.dnd && new TreeNodeListDragAndDrop(modelProvider, options.dnd), multipleSelectionController: options.multipleSelectionController && {\r\n isSelectionSingleChangeEvent: function (e) {\r\n return options.multipleSelectionController.isSelectionSingleChangeEvent(__assign(__assign({}, e), { element: e.element }));\r\n },\r\n isSelectionRangeChangeEvent: function (e) {\r\n return options.multipleSelectionController.isSelectionRangeChangeEvent(__assign(__assign({}, e), { element: e.element }));\r\n }\r\n }, accessibilityProvider: options.accessibilityProvider && __assign(__assign({}, options.accessibilityProvider), { getAriaLabel: function (e) {\r\n return options.accessibilityProvider.getAriaLabel(e.element);\r\n },\r\n getAriaLevel: function (node) {\r\n return node.depth;\r\n }, getActiveDescendantId: options.accessibilityProvider.getActiveDescendantId && (function (node) {\r\n return options.accessibilityProvider.getActiveDescendantId(node.element);\r\n }) }), keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && __assign(__assign({}, options.keyboardNavigationLabelProvider), { getKeyboardNavigationLabel: function (node) {\r\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(node.element);\r\n } }), enableKeyboardNavigation: options.simpleKeyboardNavigation, ariaProvider: {\r\n getSetSize: function (node) {\r\n var model = modelProvider();\r\n var ref = model.getNodeLocation(node);\r\n var parentRef = model.getParentNodeLocation(ref);\r\n var parentNode = model.getNode(parentRef);\r\n return parentNode.visibleChildrenCount;\r\n },\r\n getPosInSet: function (node) {\r\n return node.visibleChildIndex + 1;\r\n }\r\n } });\r\n}\r\nvar ComposedTreeDelegate = /** @class */ (function () {\r\n function ComposedTreeDelegate(delegate) {\r\n this.delegate = delegate;\r\n }\r\n ComposedTreeDelegate.prototype.getHeight = function (element) {\r\n return this.delegate.getHeight(element.element);\r\n };\r\n ComposedTreeDelegate.prototype.getTemplateId = function (element) {\r\n return this.delegate.getTemplateId(element.element);\r\n };\r\n ComposedTreeDelegate.prototype.hasDynamicHeight = function (element) {\r\n return !!this.delegate.hasDynamicHeight && this.delegate.hasDynamicHeight(element.element);\r\n };\r\n ComposedTreeDelegate.prototype.setDynamicHeight = function (element, height) {\r\n if (this.delegate.setDynamicHeight) {\r\n this.delegate.setDynamicHeight(element.element, height);\r\n }\r\n };\r\n return ComposedTreeDelegate;\r\n}());\r\nexport { ComposedTreeDelegate };\r\nexport var RenderIndentGuides;\r\n(function (RenderIndentGuides) {\r\n RenderIndentGuides[\"None\"] = \"none\";\r\n RenderIndentGuides[\"OnHover\"] = \"onHover\";\r\n RenderIndentGuides[\"Always\"] = \"always\";\r\n})(RenderIndentGuides || (RenderIndentGuides = {}));\r\nvar EventCollection = /** @class */ (function () {\r\n function EventCollection(onDidChange, _elements) {\r\n var _this = this;\r\n if (_elements === void 0) { _elements = []; }\r\n this._elements = _elements;\r\n this.onDidChange = Event.forEach(onDidChange, function (elements) { return _this._elements = elements; });\r\n }\r\n Object.defineProperty(EventCollection.prototype, \"elements\", {\r\n get: function () {\r\n return this._elements;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return EventCollection;\r\n}());\r\nvar TreeRenderer = /** @class */ (function () {\r\n function TreeRenderer(renderer, modelProvider, onDidChangeCollapseState, activeNodes, options) {\r\n if (options === void 0) { options = {}; }\r\n this.renderer = renderer;\r\n this.modelProvider = modelProvider;\r\n this.activeNodes = activeNodes;\r\n this.renderedElements = new Map();\r\n this.renderedNodes = new Map();\r\n this.indent = TreeRenderer.DefaultIndent;\r\n this.hideTwistiesOfChildlessElements = false;\r\n this.shouldRenderIndentGuides = false;\r\n this.renderedIndentGuides = new SetMap();\r\n this.activeIndentNodes = new Set();\r\n this.indentGuidesDisposable = Disposable.None;\r\n this.disposables = new DisposableStore();\r\n this.templateId = renderer.templateId;\r\n this.updateOptions(options);\r\n Event.map(onDidChangeCollapseState, function (e) { return e.node; })(this.onDidChangeNodeTwistieState, this, this.disposables);\r\n if (renderer.onDidChangeTwistieState) {\r\n renderer.onDidChangeTwistieState(this.onDidChangeTwistieState, this, this.disposables);\r\n }\r\n }\r\n TreeRenderer.prototype.updateOptions = function (options) {\r\n if (options === void 0) { options = {}; }\r\n if (typeof options.indent !== 'undefined') {\r\n this.indent = clamp(options.indent, 0, 40);\r\n }\r\n if (typeof options.renderIndentGuides !== 'undefined') {\r\n var shouldRenderIndentGuides = options.renderIndentGuides !== RenderIndentGuides.None;\r\n if (shouldRenderIndentGuides !== this.shouldRenderIndentGuides) {\r\n this.shouldRenderIndentGuides = shouldRenderIndentGuides;\r\n this.indentGuidesDisposable.dispose();\r\n if (shouldRenderIndentGuides) {\r\n var disposables = new DisposableStore();\r\n this.activeNodes.onDidChange(this._onDidChangeActiveNodes, this, disposables);\r\n this.indentGuidesDisposable = disposables;\r\n this._onDidChangeActiveNodes(this.activeNodes.elements);\r\n }\r\n }\r\n }\r\n if (typeof options.hideTwistiesOfChildlessElements !== 'undefined') {\r\n this.hideTwistiesOfChildlessElements = options.hideTwistiesOfChildlessElements;\r\n }\r\n };\r\n TreeRenderer.prototype.renderTemplate = function (container) {\r\n var el = append(container, $('.monaco-tl-row'));\r\n var indent = append(el, $('.monaco-tl-indent'));\r\n var twistie = append(el, $('.monaco-tl-twistie'));\r\n var contents = append(el, $('.monaco-tl-contents'));\r\n var templateData = this.renderer.renderTemplate(contents);\r\n return { container: container, indent: indent, twistie: twistie, indentGuidesDisposable: Disposable.None, templateData: templateData };\r\n };\r\n TreeRenderer.prototype.renderElement = function (node, index, templateData, height) {\r\n if (typeof height === 'number') {\r\n this.renderedNodes.set(node, { templateData: templateData, height: height });\r\n this.renderedElements.set(node.element, node);\r\n }\r\n var indent = TreeRenderer.DefaultIndent + (node.depth - 1) * this.indent;\r\n templateData.twistie.style.paddingLeft = indent + \"px\";\r\n templateData.indent.style.width = indent + this.indent - 16 + \"px\";\r\n this.renderTwistie(node, templateData);\r\n if (typeof height === 'number') {\r\n this.renderIndentGuides(node, templateData);\r\n }\r\n this.renderer.renderElement(node, index, templateData.templateData, height);\r\n };\r\n TreeRenderer.prototype.disposeElement = function (node, index, templateData, height) {\r\n templateData.indentGuidesDisposable.dispose();\r\n if (this.renderer.disposeElement) {\r\n this.renderer.disposeElement(node, index, templateData.templateData, height);\r\n }\r\n if (typeof height === 'number') {\r\n this.renderedNodes.delete(node);\r\n this.renderedElements.delete(node.element);\r\n }\r\n };\r\n TreeRenderer.prototype.disposeTemplate = function (templateData) {\r\n this.renderer.disposeTemplate(templateData.templateData);\r\n };\r\n TreeRenderer.prototype.onDidChangeTwistieState = function (element) {\r\n var node = this.renderedElements.get(element);\r\n if (!node) {\r\n return;\r\n }\r\n this.onDidChangeNodeTwistieState(node);\r\n };\r\n TreeRenderer.prototype.onDidChangeNodeTwistieState = function (node) {\r\n var data = this.renderedNodes.get(node);\r\n if (!data) {\r\n return;\r\n }\r\n this.renderTwistie(node, data.templateData);\r\n this._onDidChangeActiveNodes(this.activeNodes.elements);\r\n this.renderIndentGuides(node, data.templateData);\r\n };\r\n TreeRenderer.prototype.renderTwistie = function (node, templateData) {\r\n if (this.renderer.renderTwistie) {\r\n this.renderer.renderTwistie(node.element, templateData.twistie);\r\n }\r\n if (node.collapsible && (!this.hideTwistiesOfChildlessElements || node.visibleChildrenCount > 0)) {\r\n addClasses(templateData.twistie, 'codicon', 'codicon-chevron-down', 'collapsible');\r\n toggleClass(templateData.twistie, 'collapsed', node.collapsed);\r\n }\r\n else {\r\n removeClasses(templateData.twistie, 'codicon', 'codicon-chevron-down', 'collapsible', 'collapsed');\r\n }\r\n if (node.collapsible) {\r\n templateData.container.setAttribute('aria-expanded', String(!node.collapsed));\r\n }\r\n else {\r\n templateData.container.removeAttribute('aria-expanded');\r\n }\r\n };\r\n TreeRenderer.prototype.renderIndentGuides = function (target, templateData) {\r\n var _this = this;\r\n clearNode(templateData.indent);\r\n templateData.indentGuidesDisposable.dispose();\r\n if (!this.shouldRenderIndentGuides) {\r\n return;\r\n }\r\n var disposableStore = new DisposableStore();\r\n var model = this.modelProvider();\r\n var node = target;\r\n var _loop_1 = function () {\r\n var ref = model.getNodeLocation(node);\r\n var parentRef = model.getParentNodeLocation(ref);\r\n if (!parentRef) {\r\n return \"break\";\r\n }\r\n var parent_1 = model.getNode(parentRef);\r\n var guide = $('.indent-guide', { style: \"width: \" + this_1.indent + \"px\" });\r\n if (this_1.activeIndentNodes.has(parent_1)) {\r\n addClass(guide, 'active');\r\n }\r\n if (templateData.indent.childElementCount === 0) {\r\n templateData.indent.appendChild(guide);\r\n }\r\n else {\r\n templateData.indent.insertBefore(guide, templateData.indent.firstElementChild);\r\n }\r\n this_1.renderedIndentGuides.add(parent_1, guide);\r\n disposableStore.add(toDisposable(function () { return _this.renderedIndentGuides.delete(parent_1, guide); }));\r\n node = parent_1;\r\n };\r\n var this_1 = this;\r\n while (true) {\r\n var state_1 = _loop_1();\r\n if (state_1 === \"break\")\r\n break;\r\n }\r\n templateData.indentGuidesDisposable = disposableStore;\r\n };\r\n TreeRenderer.prototype._onDidChangeActiveNodes = function (nodes) {\r\n var _this = this;\r\n if (!this.shouldRenderIndentGuides) {\r\n return;\r\n }\r\n var set = new Set();\r\n var model = this.modelProvider();\r\n nodes.forEach(function (node) {\r\n var ref = model.getNodeLocation(node);\r\n try {\r\n var parentRef = model.getParentNodeLocation(ref);\r\n if (node.collapsible && node.children.length > 0 && !node.collapsed) {\r\n set.add(node);\r\n }\r\n else if (parentRef) {\r\n set.add(model.getNode(parentRef));\r\n }\r\n }\r\n catch (_a) {\r\n // noop\r\n }\r\n });\r\n this.activeIndentNodes.forEach(function (node) {\r\n if (!set.has(node)) {\r\n _this.renderedIndentGuides.forEach(node, function (line) { return removeClass(line, 'active'); });\r\n }\r\n });\r\n set.forEach(function (node) {\r\n if (!_this.activeIndentNodes.has(node)) {\r\n _this.renderedIndentGuides.forEach(node, function (line) { return addClass(line, 'active'); });\r\n }\r\n });\r\n this.activeIndentNodes = set;\r\n };\r\n TreeRenderer.prototype.dispose = function () {\r\n this.renderedNodes.clear();\r\n this.renderedElements.clear();\r\n this.indentGuidesDisposable.dispose();\r\n dispose(this.disposables);\r\n };\r\n TreeRenderer.DefaultIndent = 8;\r\n return TreeRenderer;\r\n}());\r\nvar TypeFilter = /** @class */ (function () {\r\n function TypeFilter(tree, keyboardNavigationLabelProvider, _filter) {\r\n this.tree = tree;\r\n this.keyboardNavigationLabelProvider = keyboardNavigationLabelProvider;\r\n this._filter = _filter;\r\n this._totalCount = 0;\r\n this._matchCount = 0;\r\n this._pattern = '';\r\n this._lowercasePattern = '';\r\n this.disposables = new DisposableStore();\r\n tree.onWillRefilter(this.reset, this, this.disposables);\r\n }\r\n Object.defineProperty(TypeFilter.prototype, \"totalCount\", {\r\n get: function () { return this._totalCount; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TypeFilter.prototype, \"matchCount\", {\r\n get: function () { return this._matchCount; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TypeFilter.prototype, \"pattern\", {\r\n set: function (pattern) {\r\n this._pattern = pattern;\r\n this._lowercasePattern = pattern.toLowerCase();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TypeFilter.prototype.filter = function (element, parentVisibility) {\r\n if (this._filter) {\r\n var result = this._filter.filter(element, parentVisibility);\r\n if (this.tree.options.simpleKeyboardNavigation) {\r\n return result;\r\n }\r\n var visibility = void 0;\r\n if (typeof result === 'boolean') {\r\n visibility = result ? 1 /* Visible */ : 0 /* Hidden */;\r\n }\r\n else if (isFilterResult(result)) {\r\n visibility = getVisibleState(result.visibility);\r\n }\r\n else {\r\n visibility = result;\r\n }\r\n if (visibility === 0 /* Hidden */) {\r\n return false;\r\n }\r\n }\r\n this._totalCount++;\r\n if (this.tree.options.simpleKeyboardNavigation || !this._pattern) {\r\n this._matchCount++;\r\n return { data: FuzzyScore.Default, visibility: true };\r\n }\r\n var label = this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(element);\r\n var labelStr = label && label.toString();\r\n if (typeof labelStr === 'undefined') {\r\n return { data: FuzzyScore.Default, visibility: true };\r\n }\r\n var score = fuzzyScore(this._pattern, this._lowercasePattern, 0, labelStr, labelStr.toLowerCase(), 0, true);\r\n if (!score) {\r\n if (this.tree.options.filterOnType) {\r\n return 2 /* Recurse */;\r\n }\r\n else {\r\n return { data: FuzzyScore.Default, visibility: true };\r\n }\r\n // DEMO: smarter filter ?\r\n // return parentVisibility === TreeVisibility.Visible ? true : TreeVisibility.Recurse;\r\n }\r\n this._matchCount++;\r\n return { data: score, visibility: true };\r\n };\r\n TypeFilter.prototype.reset = function () {\r\n this._totalCount = 0;\r\n this._matchCount = 0;\r\n };\r\n TypeFilter.prototype.dispose = function () {\r\n dispose(this.disposables);\r\n };\r\n return TypeFilter;\r\n}());\r\nvar TypeFilterController = /** @class */ (function () {\r\n function TypeFilterController(tree, model, view, filter, keyboardNavigationDelegate) {\r\n this.tree = tree;\r\n this.view = view;\r\n this.filter = filter;\r\n this.keyboardNavigationDelegate = keyboardNavigationDelegate;\r\n this._enabled = false;\r\n this._pattern = '';\r\n this._empty = false;\r\n this._onDidChangeEmptyState = new Emitter();\r\n this.positionClassName = 'ne';\r\n this.automaticKeyboardNavigation = true;\r\n this.triggered = false;\r\n this._onDidChangePattern = new Emitter();\r\n this.enabledDisposables = new DisposableStore();\r\n this.disposables = new DisposableStore();\r\n this.domNode = $(\".monaco-list-type-filter.\" + this.positionClassName);\r\n this.domNode.draggable = true;\r\n domEvent(this.domNode, 'dragstart')(this.onDragStart, this, this.disposables);\r\n this.messageDomNode = append(view.getHTMLElement(), $(\".monaco-list-type-filter-message\"));\r\n this.labelDomNode = append(this.domNode, $('span.label'));\r\n var controls = append(this.domNode, $('.controls'));\r\n this._filterOnType = !!tree.options.filterOnType;\r\n this.filterOnTypeDomNode = append(controls, $('input.filter.codicon.codicon-list-selection'));\r\n this.filterOnTypeDomNode.type = 'checkbox';\r\n this.filterOnTypeDomNode.checked = this._filterOnType;\r\n this.filterOnTypeDomNode.tabIndex = -1;\r\n this.updateFilterOnTypeTitle();\r\n domEvent(this.filterOnTypeDomNode, 'input')(this.onDidChangeFilterOnType, this, this.disposables);\r\n this.clearDomNode = append(controls, $('button.clear.codicon.codicon-close'));\r\n this.clearDomNode.tabIndex = -1;\r\n this.clearDomNode.title = localize('clear', \"Clear\");\r\n this.keyboardNavigationEventFilter = tree.options.keyboardNavigationEventFilter;\r\n model.onDidSplice(this.onDidSpliceModel, this, this.disposables);\r\n this.updateOptions(tree.options);\r\n }\r\n Object.defineProperty(TypeFilterController.prototype, \"enabled\", {\r\n get: function () { return this._enabled; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TypeFilterController.prototype, \"pattern\", {\r\n get: function () { return this._pattern; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TypeFilterController.prototype, \"filterOnType\", {\r\n get: function () { return this._filterOnType; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TypeFilterController.prototype.updateOptions = function (options) {\r\n if (options.simpleKeyboardNavigation) {\r\n this.disable();\r\n }\r\n else {\r\n this.enable();\r\n }\r\n if (typeof options.filterOnType !== 'undefined') {\r\n this._filterOnType = !!options.filterOnType;\r\n this.filterOnTypeDomNode.checked = this._filterOnType;\r\n }\r\n if (typeof options.automaticKeyboardNavigation !== 'undefined') {\r\n this.automaticKeyboardNavigation = options.automaticKeyboardNavigation;\r\n }\r\n this.tree.refilter();\r\n this.render();\r\n if (!this.automaticKeyboardNavigation) {\r\n this.onEventOrInput('');\r\n }\r\n };\r\n TypeFilterController.prototype.enable = function () {\r\n var _this = this;\r\n if (this._enabled) {\r\n return;\r\n }\r\n var onKeyDown = Event.chain(domEvent(this.view.getHTMLElement(), 'keydown'))\r\n .filter(function (e) { return !isInputElement(e.target) || e.target === _this.filterOnTypeDomNode; })\r\n .filter(function (e) { return e.key !== 'Dead' && !/^Media/.test(e.key); })\r\n .map(function (e) { return new StandardKeyboardEvent(e); })\r\n .filter(this.keyboardNavigationEventFilter || (function () { return true; }))\r\n .filter(function () { return _this.automaticKeyboardNavigation || _this.triggered; })\r\n .filter(function (e) { return _this.keyboardNavigationDelegate.mightProducePrintableCharacter(e) || ((_this.pattern.length > 0 || _this.triggered) && ((e.keyCode === 9 /* Escape */ || e.keyCode === 1 /* Backspace */) && !e.altKey && !e.ctrlKey && !e.metaKey) || (e.keyCode === 1 /* Backspace */ && (isMacintosh ? (e.altKey && !e.metaKey) : e.ctrlKey) && !e.shiftKey)); })\r\n .forEach(function (e) { e.stopPropagation(); e.preventDefault(); })\r\n .event;\r\n var onClear = domEvent(this.clearDomNode, 'click');\r\n Event.chain(Event.any(onKeyDown, onClear))\r\n .event(this.onEventOrInput, this, this.enabledDisposables);\r\n this.filter.pattern = '';\r\n this.tree.refilter();\r\n this.render();\r\n this._enabled = true;\r\n this.triggered = false;\r\n };\r\n TypeFilterController.prototype.disable = function () {\r\n if (!this._enabled) {\r\n return;\r\n }\r\n this.domNode.remove();\r\n this.enabledDisposables.clear();\r\n this.tree.refilter();\r\n this.render();\r\n this._enabled = false;\r\n this.triggered = false;\r\n };\r\n TypeFilterController.prototype.onEventOrInput = function (e) {\r\n if (typeof e === 'string') {\r\n this.onInput(e);\r\n }\r\n else if (e instanceof MouseEvent || e.keyCode === 9 /* Escape */ || (e.keyCode === 1 /* Backspace */ && (isMacintosh ? e.altKey : e.ctrlKey))) {\r\n this.onInput('');\r\n }\r\n else if (e.keyCode === 1 /* Backspace */) {\r\n this.onInput(this.pattern.length === 0 ? '' : this.pattern.substr(0, this.pattern.length - 1));\r\n }\r\n else {\r\n this.onInput(this.pattern + e.browserEvent.key);\r\n }\r\n };\r\n TypeFilterController.prototype.onInput = function (pattern) {\r\n var container = this.view.getHTMLElement();\r\n if (pattern && !this.domNode.parentElement) {\r\n container.append(this.domNode);\r\n }\r\n else if (!pattern && this.domNode.parentElement) {\r\n this.domNode.remove();\r\n this.tree.domFocus();\r\n }\r\n this._pattern = pattern;\r\n this._onDidChangePattern.fire(pattern);\r\n this.filter.pattern = pattern;\r\n this.tree.refilter();\r\n if (pattern) {\r\n this.tree.focusNext(0, true, undefined, function (node) { return !FuzzyScore.isDefault(node.filterData); });\r\n }\r\n var focus = this.tree.getFocus();\r\n if (focus.length > 0) {\r\n var element = focus[0];\r\n if (this.tree.getRelativeTop(element) === null) {\r\n this.tree.reveal(element, 0.5);\r\n }\r\n }\r\n this.render();\r\n if (!pattern) {\r\n this.triggered = false;\r\n }\r\n };\r\n TypeFilterController.prototype.onDragStart = function () {\r\n var _this = this;\r\n var container = this.view.getHTMLElement();\r\n var left = getDomNodePagePosition(container).left;\r\n var containerWidth = container.clientWidth;\r\n var midContainerWidth = containerWidth / 2;\r\n var width = this.domNode.clientWidth;\r\n var disposables = new DisposableStore();\r\n var positionClassName = this.positionClassName;\r\n var updatePosition = function () {\r\n switch (positionClassName) {\r\n case 'nw':\r\n _this.domNode.style.top = \"4px\";\r\n _this.domNode.style.left = \"4px\";\r\n break;\r\n case 'ne':\r\n _this.domNode.style.top = \"4px\";\r\n _this.domNode.style.left = containerWidth - width - 6 + \"px\";\r\n break;\r\n }\r\n };\r\n var onDragOver = function (event) {\r\n event.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)\r\n var x = event.screenX - left;\r\n if (event.dataTransfer) {\r\n event.dataTransfer.dropEffect = 'none';\r\n }\r\n if (x < midContainerWidth) {\r\n positionClassName = 'nw';\r\n }\r\n else {\r\n positionClassName = 'ne';\r\n }\r\n updatePosition();\r\n };\r\n var onDragEnd = function () {\r\n _this.positionClassName = positionClassName;\r\n _this.domNode.className = \"monaco-list-type-filter \" + _this.positionClassName;\r\n _this.domNode.style.top = '';\r\n _this.domNode.style.left = '';\r\n dispose(disposables);\r\n };\r\n updatePosition();\r\n removeClass(this.domNode, positionClassName);\r\n addClass(this.domNode, 'dragging');\r\n disposables.add(toDisposable(function () { return removeClass(_this.domNode, 'dragging'); }));\r\n domEvent(document, 'dragover')(onDragOver, null, disposables);\r\n domEvent(this.domNode, 'dragend')(onDragEnd, null, disposables);\r\n StaticDND.CurrentDragAndDropData = new DragAndDropData('vscode-ui');\r\n disposables.add(toDisposable(function () { return StaticDND.CurrentDragAndDropData = undefined; }));\r\n };\r\n TypeFilterController.prototype.onDidSpliceModel = function () {\r\n if (!this._enabled || this.pattern.length === 0) {\r\n return;\r\n }\r\n this.tree.refilter();\r\n this.render();\r\n };\r\n TypeFilterController.prototype.onDidChangeFilterOnType = function () {\r\n this.tree.updateOptions({ filterOnType: this.filterOnTypeDomNode.checked });\r\n this.tree.refilter();\r\n this.tree.domFocus();\r\n this.render();\r\n this.updateFilterOnTypeTitle();\r\n };\r\n TypeFilterController.prototype.updateFilterOnTypeTitle = function () {\r\n if (this.filterOnType) {\r\n this.filterOnTypeDomNode.title = localize('disable filter on type', \"Disable Filter on Type\");\r\n }\r\n else {\r\n this.filterOnTypeDomNode.title = localize('enable filter on type', \"Enable Filter on Type\");\r\n }\r\n };\r\n TypeFilterController.prototype.render = function () {\r\n var noMatches = this.filter.totalCount > 0 && this.filter.matchCount === 0;\r\n if (this.pattern && this.tree.options.filterOnType && noMatches) {\r\n this.messageDomNode.textContent = localize('empty', \"No elements found\");\r\n this._empty = true;\r\n }\r\n else {\r\n this.messageDomNode.innerHTML = '';\r\n this._empty = false;\r\n }\r\n toggleClass(this.domNode, 'no-matches', noMatches);\r\n this.domNode.title = localize('found', \"Matched {0} out of {1} elements\", this.filter.matchCount, this.filter.totalCount);\r\n this.labelDomNode.textContent = this.pattern.length > 16 ? '…' + this.pattern.substr(this.pattern.length - 16) : this.pattern;\r\n this._onDidChangeEmptyState.fire(this._empty);\r\n };\r\n TypeFilterController.prototype.shouldAllowFocus = function (node) {\r\n if (!this.enabled || !this.pattern || this.filterOnType) {\r\n return true;\r\n }\r\n if (this.filter.totalCount > 0 && this.filter.matchCount <= 1) {\r\n return true;\r\n }\r\n return !FuzzyScore.isDefault(node.filterData);\r\n };\r\n TypeFilterController.prototype.dispose = function () {\r\n if (this._enabled) {\r\n this.domNode.remove();\r\n this.enabledDisposables.dispose();\r\n this._enabled = false;\r\n this.triggered = false;\r\n }\r\n this._onDidChangePattern.dispose();\r\n dispose(this.disposables);\r\n };\r\n return TypeFilterController;\r\n}());\r\nfunction isInputElement(e) {\r\n return e.tagName === 'INPUT' || e.tagName === 'TEXTAREA';\r\n}\r\nfunction asTreeEvent(event) {\r\n return {\r\n elements: event.elements.map(function (node) { return node.element; }),\r\n browserEvent: event.browserEvent\r\n };\r\n}\r\nfunction dfs(node, fn) {\r\n fn(node);\r\n node.children.forEach(function (child) { return dfs(child, fn); });\r\n}\r\n/**\r\n * The trait concept needs to exist at the tree level, because collapsed\r\n * tree nodes will not be known by the list.\r\n */\r\nvar Trait = /** @class */ (function () {\r\n function Trait(identityProvider) {\r\n this.identityProvider = identityProvider;\r\n this.nodes = [];\r\n this._onDidChange = new Emitter();\r\n this.onDidChange = this._onDidChange.event;\r\n }\r\n Object.defineProperty(Trait.prototype, \"nodeSet\", {\r\n get: function () {\r\n if (!this._nodeSet) {\r\n this._nodeSet = this.createNodeSet();\r\n }\r\n return this._nodeSet;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Trait.prototype.set = function (nodes, browserEvent) {\r\n if (equals(this.nodes, nodes)) {\r\n return;\r\n }\r\n this._set(nodes, false, browserEvent);\r\n };\r\n Trait.prototype._set = function (nodes, silent, browserEvent) {\r\n this.nodes = __spreadArrays(nodes);\r\n this.elements = undefined;\r\n this._nodeSet = undefined;\r\n if (!silent) {\r\n var that_1 = this;\r\n this._onDidChange.fire({ get elements() { return that_1.get(); }, browserEvent: browserEvent });\r\n }\r\n };\r\n Trait.prototype.get = function () {\r\n if (!this.elements) {\r\n this.elements = this.nodes.map(function (node) { return node.element; });\r\n }\r\n return __spreadArrays(this.elements);\r\n };\r\n Trait.prototype.getNodes = function () {\r\n return this.nodes;\r\n };\r\n Trait.prototype.has = function (node) {\r\n return this.nodeSet.has(node);\r\n };\r\n Trait.prototype.onDidModelSplice = function (_a) {\r\n var _this = this;\r\n var insertedNodes = _a.insertedNodes, deletedNodes = _a.deletedNodes;\r\n if (!this.identityProvider) {\r\n var set_1 = this.createNodeSet();\r\n var visit_1 = function (node) { return set_1.delete(node); };\r\n deletedNodes.forEach(function (node) { return dfs(node, visit_1); });\r\n this.set(values(set_1));\r\n return;\r\n }\r\n var deletedNodesIdSet = new Set();\r\n var deletedNodesVisitor = function (node) { return deletedNodesIdSet.add(_this.identityProvider.getId(node.element).toString()); };\r\n deletedNodes.forEach(function (node) { return dfs(node, deletedNodesVisitor); });\r\n var insertedNodesMap = new Map();\r\n var insertedNodesVisitor = function (node) { return insertedNodesMap.set(_this.identityProvider.getId(node.element).toString(), node); };\r\n insertedNodes.forEach(function (node) { return dfs(node, insertedNodesVisitor); });\r\n var nodes = [];\r\n for (var _i = 0, _b = this.nodes; _i < _b.length; _i++) {\r\n var node = _b[_i];\r\n var id = this.identityProvider.getId(node.element).toString();\r\n var wasDeleted = deletedNodesIdSet.has(id);\r\n if (!wasDeleted) {\r\n nodes.push(node);\r\n }\r\n else {\r\n var insertedNode = insertedNodesMap.get(id);\r\n if (insertedNode) {\r\n nodes.push(insertedNode);\r\n }\r\n }\r\n }\r\n this._set(nodes, true);\r\n };\r\n Trait.prototype.createNodeSet = function () {\r\n var set = new Set();\r\n for (var _i = 0, _a = this.nodes; _i < _a.length; _i++) {\r\n var node = _a[_i];\r\n set.add(node);\r\n }\r\n return set;\r\n };\r\n return Trait;\r\n}());\r\nvar TreeNodeListMouseController = /** @class */ (function (_super) {\r\n __extends(TreeNodeListMouseController, _super);\r\n function TreeNodeListMouseController(list, tree) {\r\n var _this = _super.call(this, list) || this;\r\n _this.tree = tree;\r\n return _this;\r\n }\r\n TreeNodeListMouseController.prototype.onPointer = function (e) {\r\n if (isInputElement(e.browserEvent.target)) {\r\n return;\r\n }\r\n var node = e.element;\r\n if (!node) {\r\n return _super.prototype.onPointer.call(this, e);\r\n }\r\n if (this.isSelectionRangeChangeEvent(e) || this.isSelectionSingleChangeEvent(e)) {\r\n return _super.prototype.onPointer.call(this, e);\r\n }\r\n var onTwistie = hasClass(e.browserEvent.target, 'monaco-tl-twistie');\r\n if (!this.tree.openOnSingleClick && e.browserEvent.detail !== 2 && !onTwistie) {\r\n return _super.prototype.onPointer.call(this, e);\r\n }\r\n var expandOnlyOnTwistieClick = false;\r\n if (typeof this.tree.expandOnlyOnTwistieClick === 'function') {\r\n expandOnlyOnTwistieClick = this.tree.expandOnlyOnTwistieClick(node.element);\r\n }\r\n else {\r\n expandOnlyOnTwistieClick = !!this.tree.expandOnlyOnTwistieClick;\r\n }\r\n if (expandOnlyOnTwistieClick && !onTwistie) {\r\n return _super.prototype.onPointer.call(this, e);\r\n }\r\n if (node.collapsible) {\r\n var model = this.tree.model; // internal\r\n var location_1 = model.getNodeLocation(node);\r\n var recursive = e.browserEvent.altKey;\r\n model.setCollapsed(location_1, undefined, recursive);\r\n if (expandOnlyOnTwistieClick && onTwistie) {\r\n return;\r\n }\r\n }\r\n _super.prototype.onPointer.call(this, e);\r\n };\r\n TreeNodeListMouseController.prototype.onDoubleClick = function (e) {\r\n var onTwistie = hasClass(e.browserEvent.target, 'monaco-tl-twistie');\r\n if (onTwistie) {\r\n return;\r\n }\r\n _super.prototype.onDoubleClick.call(this, e);\r\n };\r\n return TreeNodeListMouseController;\r\n}(MouseController));\r\n/**\r\n * We use this List subclass to restore selection and focus as nodes\r\n * get rendered in the list, possibly due to a node expand() call.\r\n */\r\nvar TreeNodeList = /** @class */ (function (_super) {\r\n __extends(TreeNodeList, _super);\r\n function TreeNodeList(user, container, virtualDelegate, renderers, focusTrait, selectionTrait, options) {\r\n var _this = _super.call(this, user, container, virtualDelegate, renderers, options) || this;\r\n _this.focusTrait = focusTrait;\r\n _this.selectionTrait = selectionTrait;\r\n return _this;\r\n }\r\n TreeNodeList.prototype.createMouseController = function (options) {\r\n return new TreeNodeListMouseController(this, options.tree);\r\n };\r\n TreeNodeList.prototype.splice = function (start, deleteCount, elements) {\r\n var _this = this;\r\n if (elements === void 0) { elements = []; }\r\n _super.prototype.splice.call(this, start, deleteCount, elements);\r\n if (elements.length === 0) {\r\n return;\r\n }\r\n var additionalFocus = [];\r\n var additionalSelection = [];\r\n elements.forEach(function (node, index) {\r\n if (_this.focusTrait.has(node)) {\r\n additionalFocus.push(start + index);\r\n }\r\n if (_this.selectionTrait.has(node)) {\r\n additionalSelection.push(start + index);\r\n }\r\n });\r\n if (additionalFocus.length > 0) {\r\n _super.prototype.setFocus.call(this, distinctES6(__spreadArrays(_super.prototype.getFocus.call(this), additionalFocus)));\r\n }\r\n if (additionalSelection.length > 0) {\r\n _super.prototype.setSelection.call(this, distinctES6(__spreadArrays(_super.prototype.getSelection.call(this), additionalSelection)));\r\n }\r\n };\r\n TreeNodeList.prototype.setFocus = function (indexes, browserEvent, fromAPI) {\r\n var _this = this;\r\n if (fromAPI === void 0) { fromAPI = false; }\r\n _super.prototype.setFocus.call(this, indexes, browserEvent);\r\n if (!fromAPI) {\r\n this.focusTrait.set(indexes.map(function (i) { return _this.element(i); }), browserEvent);\r\n }\r\n };\r\n TreeNodeList.prototype.setSelection = function (indexes, browserEvent, fromAPI) {\r\n var _this = this;\r\n if (fromAPI === void 0) { fromAPI = false; }\r\n _super.prototype.setSelection.call(this, indexes, browserEvent);\r\n if (!fromAPI) {\r\n this.selectionTrait.set(indexes.map(function (i) { return _this.element(i); }), browserEvent);\r\n }\r\n };\r\n return TreeNodeList;\r\n}(List));\r\nvar AbstractTree = /** @class */ (function () {\r\n function AbstractTree(user, container, delegate, renderers, _options) {\r\n var _this = this;\r\n if (_options === void 0) { _options = {}; }\r\n this._options = _options;\r\n this.eventBufferer = new EventBufferer();\r\n this.disposables = new DisposableStore();\r\n this._onWillRefilter = new Emitter();\r\n this.onWillRefilter = this._onWillRefilter.event;\r\n this._onDidUpdateOptions = new Emitter();\r\n var treeDelegate = new ComposedTreeDelegate(delegate);\r\n var onDidChangeCollapseStateRelay = new Relay();\r\n var onDidChangeActiveNodes = new Relay();\r\n var activeNodes = new EventCollection(onDidChangeActiveNodes.event);\r\n this.renderers = renderers.map(function (r) { return new TreeRenderer(r, function () { return _this.model; }, onDidChangeCollapseStateRelay.event, activeNodes, _options); });\r\n for (var _i = 0, _a = this.renderers; _i < _a.length; _i++) {\r\n var r = _a[_i];\r\n this.disposables.add(r);\r\n }\r\n var filter;\r\n if (_options.keyboardNavigationLabelProvider) {\r\n filter = new TypeFilter(this, _options.keyboardNavigationLabelProvider, _options.filter);\r\n _options = __assign(__assign({}, _options), { filter: filter }); // TODO need typescript help here\r\n this.disposables.add(filter);\r\n }\r\n this.focus = new Trait(_options.identityProvider);\r\n this.selection = new Trait(_options.identityProvider);\r\n this.view = new TreeNodeList(user, container, treeDelegate, this.renderers, this.focus, this.selection, __assign(__assign({}, asListOptions(function () { return _this.model; }, _options)), { tree: this }));\r\n this.model = this.createModel(user, this.view, _options);\r\n onDidChangeCollapseStateRelay.input = this.model.onDidChangeCollapseState;\r\n var onDidModelSplice = Event.forEach(this.model.onDidSplice, function (e) {\r\n _this.eventBufferer.bufferEvents(function () {\r\n _this.focus.onDidModelSplice(e);\r\n _this.selection.onDidModelSplice(e);\r\n });\r\n });\r\n // Make sure the `forEach` always runs\r\n onDidModelSplice(function () { return null; }, null, this.disposables);\r\n // Active nodes can change when the model changes or when focus or selection change.\r\n // We debouce it with 0 delay since these events may fire in the same stack and we only\r\n // want to run this once. It also doesn't matter if it runs on the next tick since it's only\r\n // a nice to have UI feature.\r\n onDidChangeActiveNodes.input = Event.chain(Event.any(onDidModelSplice, this.focus.onDidChange, this.selection.onDidChange))\r\n .debounce(function () { return null; }, 0)\r\n .map(function () {\r\n var set = new Set();\r\n for (var _i = 0, _a = _this.focus.getNodes(); _i < _a.length; _i++) {\r\n var node = _a[_i];\r\n set.add(node);\r\n }\r\n for (var _b = 0, _c = _this.selection.getNodes(); _b < _c.length; _b++) {\r\n var node = _c[_b];\r\n set.add(node);\r\n }\r\n return fromSet(set);\r\n }).event;\r\n if (_options.keyboardSupport !== false) {\r\n var onKeyDown = Event.chain(this.view.onKeyDown)\r\n .filter(function (e) { return !isInputElement(e.target); })\r\n .map(function (e) { return new StandardKeyboardEvent(e); });\r\n onKeyDown.filter(function (e) { return e.keyCode === 15 /* LeftArrow */; }).on(this.onLeftArrow, this, this.disposables);\r\n onKeyDown.filter(function (e) { return e.keyCode === 17 /* RightArrow */; }).on(this.onRightArrow, this, this.disposables);\r\n onKeyDown.filter(function (e) { return e.keyCode === 10 /* Space */; }).on(this.onSpace, this, this.disposables);\r\n }\r\n if (_options.keyboardNavigationLabelProvider) {\r\n var delegate_1 = _options.keyboardNavigationDelegate || DefaultKeyboardNavigationDelegate;\r\n this.typeFilterController = new TypeFilterController(this, this.model, this.view, filter, delegate_1);\r\n this.focusNavigationFilter = function (node) { return _this.typeFilterController.shouldAllowFocus(node); };\r\n this.disposables.add(this.typeFilterController);\r\n }\r\n this.styleElement = createStyleSheet(this.view.getHTMLElement());\r\n toggleClass(this.getHTMLElement(), 'always', this._options.renderIndentGuides === RenderIndentGuides.Always);\r\n }\r\n Object.defineProperty(AbstractTree.prototype, \"onDidChangeFocus\", {\r\n get: function () { return this.eventBufferer.wrapEvent(this.focus.onDidChange); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AbstractTree.prototype, \"onDidChangeSelection\", {\r\n get: function () { return this.eventBufferer.wrapEvent(this.selection.onDidChange); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AbstractTree.prototype, \"onDidOpen\", {\r\n get: function () { return Event.map(this.view.onDidOpen, asTreeEvent); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AbstractTree.prototype, \"onDidFocus\", {\r\n get: function () { return this.view.onDidFocus; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AbstractTree.prototype, \"onDidChangeCollapseState\", {\r\n get: function () { return this.model.onDidChangeCollapseState; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AbstractTree.prototype, \"openOnSingleClick\", {\r\n get: function () { return typeof this._options.openOnSingleClick === 'undefined' ? true : this._options.openOnSingleClick; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AbstractTree.prototype, \"expandOnlyOnTwistieClick\", {\r\n get: function () { return typeof this._options.expandOnlyOnTwistieClick === 'undefined' ? false : this._options.expandOnlyOnTwistieClick; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AbstractTree.prototype, \"onDidDispose\", {\r\n get: function () { return this.view.onDidDispose; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AbstractTree.prototype.updateOptions = function (optionsUpdate) {\r\n if (optionsUpdate === void 0) { optionsUpdate = {}; }\r\n this._options = __assign(__assign({}, this._options), optionsUpdate);\r\n for (var _i = 0, _a = this.renderers; _i < _a.length; _i++) {\r\n var renderer = _a[_i];\r\n renderer.updateOptions(optionsUpdate);\r\n }\r\n this.view.updateOptions({\r\n enableKeyboardNavigation: this._options.simpleKeyboardNavigation,\r\n automaticKeyboardNavigation: this._options.automaticKeyboardNavigation\r\n });\r\n if (this.typeFilterController) {\r\n this.typeFilterController.updateOptions(this._options);\r\n }\r\n this._onDidUpdateOptions.fire(this._options);\r\n toggleClass(this.getHTMLElement(), 'always', this._options.renderIndentGuides === RenderIndentGuides.Always);\r\n };\r\n Object.defineProperty(AbstractTree.prototype, \"options\", {\r\n get: function () {\r\n return this._options;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n // Widget\r\n AbstractTree.prototype.getHTMLElement = function () {\r\n return this.view.getHTMLElement();\r\n };\r\n Object.defineProperty(AbstractTree.prototype, \"scrollTop\", {\r\n get: function () {\r\n return this.view.scrollTop;\r\n },\r\n set: function (scrollTop) {\r\n this.view.scrollTop = scrollTop;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AbstractTree.prototype.domFocus = function () {\r\n this.view.domFocus();\r\n };\r\n AbstractTree.prototype.layout = function (height, width) {\r\n this.view.layout(height, width);\r\n };\r\n AbstractTree.prototype.style = function (styles) {\r\n var suffix = \".\" + this.view.domId;\r\n var content = [];\r\n if (styles.treeIndentGuidesStroke) {\r\n content.push(\".monaco-list\" + suffix + \":hover .monaco-tl-indent > .indent-guide, .monaco-list\" + suffix + \".always .monaco-tl-indent > .indent-guide { border-color: \" + styles.treeIndentGuidesStroke.transparent(0.4) + \"; }\");\r\n content.push(\".monaco-list\" + suffix + \" .monaco-tl-indent > .indent-guide.active { border-color: \" + styles.treeIndentGuidesStroke + \"; }\");\r\n }\r\n var newStyles = content.join('\\n');\r\n if (newStyles !== this.styleElement.innerHTML) {\r\n this.styleElement.innerHTML = newStyles;\r\n }\r\n this.view.style(styles);\r\n };\r\n AbstractTree.prototype.collapse = function (location, recursive) {\r\n if (recursive === void 0) { recursive = false; }\r\n return this.model.setCollapsed(location, true, recursive);\r\n };\r\n AbstractTree.prototype.expand = function (location, recursive) {\r\n if (recursive === void 0) { recursive = false; }\r\n return this.model.setCollapsed(location, false, recursive);\r\n };\r\n AbstractTree.prototype.setCollapsible = function (location, collapsible) {\r\n return this.model.setCollapsible(location, collapsible);\r\n };\r\n AbstractTree.prototype.isCollapsed = function (location) {\r\n return this.model.isCollapsed(location);\r\n };\r\n AbstractTree.prototype.refilter = function () {\r\n this._onWillRefilter.fire(undefined);\r\n this.model.refilter();\r\n };\r\n AbstractTree.prototype.setSelection = function (elements, browserEvent) {\r\n var _this = this;\r\n var nodes = elements.map(function (e) { return _this.model.getNode(e); });\r\n this.selection.set(nodes, browserEvent);\r\n var indexes = elements.map(function (e) { return _this.model.getListIndex(e); }).filter(function (i) { return i > -1; });\r\n this.view.setSelection(indexes, browserEvent, true);\r\n };\r\n AbstractTree.prototype.getSelection = function () {\r\n return this.selection.get();\r\n };\r\n AbstractTree.prototype.setFocus = function (elements, browserEvent) {\r\n var _this = this;\r\n var nodes = elements.map(function (e) { return _this.model.getNode(e); });\r\n this.focus.set(nodes, browserEvent);\r\n var indexes = elements.map(function (e) { return _this.model.getListIndex(e); }).filter(function (i) { return i > -1; });\r\n this.view.setFocus(indexes, browserEvent, true);\r\n };\r\n AbstractTree.prototype.focusNext = function (n, loop, browserEvent, filter) {\r\n if (n === void 0) { n = 1; }\r\n if (loop === void 0) { loop = false; }\r\n if (filter === void 0) { filter = this.focusNavigationFilter; }\r\n this.view.focusNext(n, loop, browserEvent, filter);\r\n };\r\n AbstractTree.prototype.getFocus = function () {\r\n return this.focus.get();\r\n };\r\n AbstractTree.prototype.reveal = function (location, relativeTop) {\r\n this.model.expandTo(location);\r\n var index = this.model.getListIndex(location);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.view.reveal(index, relativeTop);\r\n };\r\n /**\r\n * Returns the relative position of an element rendered in the list.\r\n * Returns `null` if the element isn't *entirely* in the visible viewport.\r\n */\r\n AbstractTree.prototype.getRelativeTop = function (location) {\r\n var index = this.model.getListIndex(location);\r\n if (index === -1) {\r\n return null;\r\n }\r\n return this.view.getRelativeTop(index);\r\n };\r\n // List\r\n AbstractTree.prototype.onLeftArrow = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n var nodes = this.view.getFocusedElements();\r\n if (nodes.length === 0) {\r\n return;\r\n }\r\n var node = nodes[0];\r\n var location = this.model.getNodeLocation(node);\r\n var didChange = this.model.setCollapsed(location, true);\r\n if (!didChange) {\r\n var parentLocation = this.model.getParentNodeLocation(location);\r\n if (!parentLocation) {\r\n return;\r\n }\r\n var parentListIndex = this.model.getListIndex(parentLocation);\r\n this.view.reveal(parentListIndex);\r\n this.view.setFocus([parentListIndex]);\r\n }\r\n };\r\n AbstractTree.prototype.onRightArrow = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n var nodes = this.view.getFocusedElements();\r\n if (nodes.length === 0) {\r\n return;\r\n }\r\n var node = nodes[0];\r\n var location = this.model.getNodeLocation(node);\r\n var didChange = this.model.setCollapsed(location, false);\r\n if (!didChange) {\r\n if (!node.children.some(function (child) { return child.visible; })) {\r\n return;\r\n }\r\n var focusedIndex = this.view.getFocus()[0];\r\n var firstChildIndex = focusedIndex + 1;\r\n this.view.reveal(firstChildIndex);\r\n this.view.setFocus([firstChildIndex]);\r\n }\r\n };\r\n AbstractTree.prototype.onSpace = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n var nodes = this.view.getFocusedElements();\r\n if (nodes.length === 0) {\r\n return;\r\n }\r\n var node = nodes[0];\r\n var location = this.model.getNodeLocation(node);\r\n var recursive = e.browserEvent.altKey;\r\n this.model.setCollapsed(location, undefined, recursive);\r\n };\r\n AbstractTree.prototype.dispose = function () {\r\n dispose(this.disposables);\r\n this.view.dispose();\r\n };\r\n return AbstractTree;\r\n}());\r\nexport { AbstractTree };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { Iterator, getSequenceIterator } from '../../../common/iterator.js';\r\nimport { IndexTreeModel } from './indexTreeModel.js';\r\nimport { TreeError } from './tree.js';\r\nimport { mergeSort } from '../../../common/arrays.js';\r\nvar ObjectTreeModel = /** @class */ (function () {\r\n function ObjectTreeModel(user, list, options) {\r\n if (options === void 0) { options = {}; }\r\n this.user = user;\r\n this.nodes = new Map();\r\n this.nodesByIdentity = new Map();\r\n this.model = new IndexTreeModel(user, list, null, options);\r\n this.onDidSplice = this.model.onDidSplice;\r\n this.onDidChangeCollapseState = this.model.onDidChangeCollapseState;\r\n this.onDidChangeRenderNodeCount = this.model.onDidChangeRenderNodeCount;\r\n if (options.sorter) {\r\n this.sorter = {\r\n compare: function (a, b) {\r\n return options.sorter.compare(a.element, b.element);\r\n }\r\n };\r\n }\r\n this.identityProvider = options.identityProvider;\r\n }\r\n ObjectTreeModel.prototype.setChildren = function (element, children, onDidCreateNode, onDidDeleteNode) {\r\n var location = this.getElementLocation(element);\r\n this._setChildren(location, this.preserveCollapseState(children), onDidCreateNode, onDidDeleteNode);\r\n };\r\n ObjectTreeModel.prototype._setChildren = function (location, children, onDidCreateNode, onDidDeleteNode) {\r\n var _this = this;\r\n var insertedElements = new Set();\r\n var insertedElementIds = new Set();\r\n var _onDidCreateNode = function (node) {\r\n insertedElements.add(node.element);\r\n _this.nodes.set(node.element, node);\r\n if (_this.identityProvider) {\r\n var id = _this.identityProvider.getId(node.element).toString();\r\n insertedElementIds.add(id);\r\n _this.nodesByIdentity.set(id, node);\r\n }\r\n if (onDidCreateNode) {\r\n onDidCreateNode(node);\r\n }\r\n };\r\n var _onDidDeleteNode = function (node) {\r\n if (!insertedElements.has(node.element)) {\r\n _this.nodes.delete(node.element);\r\n }\r\n if (_this.identityProvider) {\r\n var id = _this.identityProvider.getId(node.element).toString();\r\n if (!insertedElementIds.has(id)) {\r\n _this.nodesByIdentity.delete(id);\r\n }\r\n }\r\n if (onDidDeleteNode) {\r\n onDidDeleteNode(node);\r\n }\r\n };\r\n this.model.splice(__spreadArrays(location, [0]), Number.MAX_VALUE, children, _onDidCreateNode, _onDidDeleteNode);\r\n };\r\n ObjectTreeModel.prototype.preserveCollapseState = function (elements) {\r\n var _this = this;\r\n var iterator = elements ? getSequenceIterator(elements) : Iterator.empty();\r\n if (this.sorter) {\r\n iterator = Iterator.fromArray(mergeSort(Iterator.collect(iterator), this.sorter.compare.bind(this.sorter)));\r\n }\r\n return Iterator.map(iterator, function (treeElement) {\r\n var node = _this.nodes.get(treeElement.element);\r\n if (!node && _this.identityProvider) {\r\n var id = _this.identityProvider.getId(treeElement.element).toString();\r\n node = _this.nodesByIdentity.get(id);\r\n }\r\n if (!node) {\r\n return __assign(__assign({}, treeElement), { children: _this.preserveCollapseState(treeElement.children) });\r\n }\r\n var collapsible = typeof treeElement.collapsible === 'boolean' ? treeElement.collapsible : node.collapsible;\r\n var collapsed = typeof treeElement.collapsed !== 'undefined' ? treeElement.collapsed : node.collapsed;\r\n return __assign(__assign({}, treeElement), { collapsible: collapsible,\r\n collapsed: collapsed, children: _this.preserveCollapseState(treeElement.children) });\r\n });\r\n };\r\n ObjectTreeModel.prototype.rerender = function (element) {\r\n var location = this.getElementLocation(element);\r\n this.model.rerender(location);\r\n };\r\n ObjectTreeModel.prototype.getListIndex = function (element) {\r\n var location = this.getElementLocation(element);\r\n return this.model.getListIndex(location);\r\n };\r\n ObjectTreeModel.prototype.getListRenderCount = function (element) {\r\n var location = this.getElementLocation(element);\r\n return this.model.getListRenderCount(location);\r\n };\r\n ObjectTreeModel.prototype.setCollapsible = function (element, collapsible) {\r\n var location = this.getElementLocation(element);\r\n return this.model.setCollapsible(location, collapsible);\r\n };\r\n ObjectTreeModel.prototype.isCollapsed = function (element) {\r\n var location = this.getElementLocation(element);\r\n return this.model.isCollapsed(location);\r\n };\r\n ObjectTreeModel.prototype.setCollapsed = function (element, collapsed, recursive) {\r\n var location = this.getElementLocation(element);\r\n return this.model.setCollapsed(location, collapsed, recursive);\r\n };\r\n ObjectTreeModel.prototype.expandTo = function (element) {\r\n var location = this.getElementLocation(element);\r\n this.model.expandTo(location);\r\n };\r\n ObjectTreeModel.prototype.refilter = function () {\r\n this.model.refilter();\r\n };\r\n ObjectTreeModel.prototype.getNode = function (element) {\r\n if (element === void 0) { element = null; }\r\n if (element === null) {\r\n return this.model.getNode(this.model.rootRef);\r\n }\r\n var node = this.nodes.get(element);\r\n if (!node) {\r\n throw new TreeError(this.user, \"Tree element not found: \" + element);\r\n }\r\n return node;\r\n };\r\n ObjectTreeModel.prototype.getNodeLocation = function (node) {\r\n return node.element;\r\n };\r\n ObjectTreeModel.prototype.getParentNodeLocation = function (element) {\r\n if (element === null) {\r\n throw new TreeError(this.user, \"Invalid getParentNodeLocation call\");\r\n }\r\n var node = this.nodes.get(element);\r\n if (!node) {\r\n throw new TreeError(this.user, \"Tree element not found: \" + element);\r\n }\r\n var location = this.model.getNodeLocation(node);\r\n var parentLocation = this.model.getParentNodeLocation(location);\r\n var parent = this.model.getNode(parentLocation);\r\n return parent.element;\r\n };\r\n ObjectTreeModel.prototype.getElementLocation = function (element) {\r\n if (element === null) {\r\n return [];\r\n }\r\n var node = this.nodes.get(element);\r\n if (!node) {\r\n throw new TreeError(this.user, \"Tree element not found: \" + element);\r\n }\r\n return this.model.getNodeLocation(node);\r\n };\r\n return ObjectTreeModel;\r\n}());\r\nexport { ObjectTreeModel };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport { Iterator } from '../../../common/iterator.js';\r\nimport { Event } from '../../../common/event.js';\r\nimport { TreeError, WeakMapper } from './tree.js';\r\nimport { ObjectTreeModel } from './objectTreeModel.js';\r\nfunction noCompress(element) {\r\n var elements = [element.element];\r\n var incompressible = element.incompressible || false;\r\n return {\r\n element: { elements: elements, incompressible: incompressible },\r\n children: Iterator.map(Iterator.from(element.children), noCompress),\r\n collapsible: element.collapsible,\r\n collapsed: element.collapsed\r\n };\r\n}\r\n// Exported only for test reasons, do not use directly\r\nexport function compress(element) {\r\n var elements = [element.element];\r\n var incompressible = element.incompressible || false;\r\n var childrenIterator;\r\n var children;\r\n while (true) {\r\n childrenIterator = Iterator.from(element.children);\r\n children = Iterator.collect(childrenIterator, 2);\r\n if (children.length !== 1) {\r\n break;\r\n }\r\n element = children[0];\r\n if (element.incompressible) {\r\n break;\r\n }\r\n elements.push(element.element);\r\n }\r\n return {\r\n element: { elements: elements, incompressible: incompressible },\r\n children: Iterator.map(Iterator.concat(Iterator.fromArray(children), childrenIterator), compress),\r\n collapsible: element.collapsible,\r\n collapsed: element.collapsed\r\n };\r\n}\r\nfunction _decompress(element, index) {\r\n if (index === void 0) { index = 0; }\r\n var children;\r\n if (index < element.element.elements.length - 1) {\r\n children = Iterator.single(_decompress(element, index + 1));\r\n }\r\n else {\r\n children = Iterator.map(Iterator.from(element.children), function (el) { return _decompress(el, 0); });\r\n }\r\n if (index === 0 && element.element.incompressible) {\r\n return {\r\n element: element.element.elements[index],\r\n children: children,\r\n incompressible: true,\r\n collapsible: element.collapsible,\r\n collapsed: element.collapsed\r\n };\r\n }\r\n return {\r\n element: element.element.elements[index],\r\n children: children,\r\n collapsible: element.collapsible,\r\n collapsed: element.collapsed\r\n };\r\n}\r\n// Exported only for test reasons, do not use directly\r\nexport function decompress(element) {\r\n return _decompress(element, 0);\r\n}\r\nfunction splice(treeElement, element, children) {\r\n if (treeElement.element === element) {\r\n return __assign(__assign({}, treeElement), { children: children });\r\n }\r\n return __assign(__assign({}, treeElement), { children: Iterator.map(Iterator.from(treeElement.children), function (e) { return splice(e, element, children); }) });\r\n}\r\n// Exported only for test reasons, do not use directly\r\nvar CompressedObjectTreeModel = /** @class */ (function () {\r\n function CompressedObjectTreeModel(user, list, options) {\r\n if (options === void 0) { options = {}; }\r\n this.user = user;\r\n this.nodes = new Map();\r\n this.model = new ObjectTreeModel(user, list, options);\r\n this.enabled = typeof options.compressionEnabled === 'undefined' ? true : options.compressionEnabled;\r\n }\r\n Object.defineProperty(CompressedObjectTreeModel.prototype, \"onDidSplice\", {\r\n get: function () { return this.model.onDidSplice; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressedObjectTreeModel.prototype, \"onDidChangeCollapseState\", {\r\n get: function () { return this.model.onDidChangeCollapseState; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n CompressedObjectTreeModel.prototype.setChildren = function (element, children) {\r\n if (element === null) {\r\n var compressedChildren = Iterator.map(Iterator.from(children), this.enabled ? compress : noCompress);\r\n this._setChildren(null, compressedChildren);\r\n return;\r\n }\r\n var compressedNode = this.nodes.get(element);\r\n if (!compressedNode) {\r\n throw new Error('Unknown compressed tree node');\r\n }\r\n var node = this.model.getNode(compressedNode);\r\n var compressedParentNode = this.model.getParentNodeLocation(compressedNode);\r\n var parent = this.model.getNode(compressedParentNode);\r\n var decompressedElement = decompress(node);\r\n var splicedElement = splice(decompressedElement, element, Iterator.from(children));\r\n var recompressedElement = (this.enabled ? compress : noCompress)(splicedElement);\r\n var parentChildren = parent.children\r\n .map(function (child) { return child === node ? recompressedElement : child; });\r\n this._setChildren(parent.element, parentChildren);\r\n };\r\n CompressedObjectTreeModel.prototype.setCompressionEnabled = function (enabled) {\r\n if (enabled === this.enabled) {\r\n return;\r\n }\r\n this.enabled = enabled;\r\n var root = this.model.getNode();\r\n var rootChildren = Iterator.from(root.children);\r\n var decompressedRootChildren = Iterator.map(rootChildren, decompress);\r\n var recompressedRootChildren = Iterator.map(decompressedRootChildren, enabled ? compress : noCompress);\r\n this._setChildren(null, recompressedRootChildren);\r\n };\r\n CompressedObjectTreeModel.prototype._setChildren = function (node, children) {\r\n var _this = this;\r\n var insertedElements = new Set();\r\n var _onDidCreateNode = function (node) {\r\n for (var _i = 0, _a = node.element.elements; _i < _a.length; _i++) {\r\n var element = _a[_i];\r\n insertedElements.add(element);\r\n _this.nodes.set(element, node.element);\r\n }\r\n };\r\n var _onDidDeleteNode = function (node) {\r\n for (var _i = 0, _a = node.element.elements; _i < _a.length; _i++) {\r\n var element = _a[_i];\r\n if (!insertedElements.has(element)) {\r\n _this.nodes.delete(element);\r\n }\r\n }\r\n };\r\n this.model.setChildren(node, children, _onDidCreateNode, _onDidDeleteNode);\r\n };\r\n CompressedObjectTreeModel.prototype.getListIndex = function (location) {\r\n var node = this.getCompressedNode(location);\r\n return this.model.getListIndex(node);\r\n };\r\n CompressedObjectTreeModel.prototype.getListRenderCount = function (location) {\r\n var node = this.getCompressedNode(location);\r\n return this.model.getListRenderCount(node);\r\n };\r\n CompressedObjectTreeModel.prototype.getNode = function (location) {\r\n if (typeof location === 'undefined') {\r\n return this.model.getNode();\r\n }\r\n var node = this.getCompressedNode(location);\r\n return this.model.getNode(node);\r\n };\r\n // TODO: review this\r\n CompressedObjectTreeModel.prototype.getNodeLocation = function (node) {\r\n var compressedNode = this.model.getNodeLocation(node);\r\n if (compressedNode === null) {\r\n return null;\r\n }\r\n return compressedNode.elements[compressedNode.elements.length - 1];\r\n };\r\n // TODO: review this\r\n CompressedObjectTreeModel.prototype.getParentNodeLocation = function (location) {\r\n var compressedNode = this.getCompressedNode(location);\r\n var parentNode = this.model.getParentNodeLocation(compressedNode);\r\n if (parentNode === null) {\r\n return null;\r\n }\r\n return parentNode.elements[parentNode.elements.length - 1];\r\n };\r\n CompressedObjectTreeModel.prototype.setCollapsible = function (location, collapsible) {\r\n var compressedNode = this.getCompressedNode(location);\r\n return this.model.setCollapsible(compressedNode, collapsible);\r\n };\r\n CompressedObjectTreeModel.prototype.isCollapsed = function (location) {\r\n var compressedNode = this.getCompressedNode(location);\r\n return this.model.isCollapsed(compressedNode);\r\n };\r\n CompressedObjectTreeModel.prototype.setCollapsed = function (location, collapsed, recursive) {\r\n var compressedNode = this.getCompressedNode(location);\r\n return this.model.setCollapsed(compressedNode, collapsed, recursive);\r\n };\r\n CompressedObjectTreeModel.prototype.expandTo = function (location) {\r\n var compressedNode = this.getCompressedNode(location);\r\n this.model.expandTo(compressedNode);\r\n };\r\n CompressedObjectTreeModel.prototype.rerender = function (location) {\r\n var compressedNode = this.getCompressedNode(location);\r\n this.model.rerender(compressedNode);\r\n };\r\n CompressedObjectTreeModel.prototype.refilter = function () {\r\n this.model.refilter();\r\n };\r\n CompressedObjectTreeModel.prototype.getCompressedNode = function (element) {\r\n if (element === null) {\r\n return null;\r\n }\r\n var node = this.nodes.get(element);\r\n if (!node) {\r\n throw new TreeError(this.user, \"Tree element not found: \" + element);\r\n }\r\n return node;\r\n };\r\n return CompressedObjectTreeModel;\r\n}());\r\nexport { CompressedObjectTreeModel };\r\nexport var DefaultElementMapper = function (elements) { return elements[elements.length - 1]; };\r\nvar CompressedTreeNodeWrapper = /** @class */ (function () {\r\n function CompressedTreeNodeWrapper(unwrapper, node) {\r\n this.unwrapper = unwrapper;\r\n this.node = node;\r\n }\r\n Object.defineProperty(CompressedTreeNodeWrapper.prototype, \"element\", {\r\n get: function () { return this.node.element === null ? null : this.unwrapper(this.node.element); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressedTreeNodeWrapper.prototype, \"children\", {\r\n get: function () {\r\n var _this = this;\r\n return this.node.children.map(function (node) { return new CompressedTreeNodeWrapper(_this.unwrapper, node); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressedTreeNodeWrapper.prototype, \"depth\", {\r\n get: function () { return this.node.depth; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressedTreeNodeWrapper.prototype, \"visibleChildrenCount\", {\r\n get: function () { return this.node.visibleChildrenCount; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressedTreeNodeWrapper.prototype, \"visibleChildIndex\", {\r\n get: function () { return this.node.visibleChildIndex; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressedTreeNodeWrapper.prototype, \"collapsible\", {\r\n get: function () { return this.node.collapsible; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressedTreeNodeWrapper.prototype, \"collapsed\", {\r\n get: function () { return this.node.collapsed; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressedTreeNodeWrapper.prototype, \"visible\", {\r\n get: function () { return this.node.visible; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressedTreeNodeWrapper.prototype, \"filterData\", {\r\n get: function () { return this.node.filterData; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return CompressedTreeNodeWrapper;\r\n}());\r\nfunction mapList(nodeMapper, list) {\r\n return {\r\n splice: function (start, deleteCount, toInsert) {\r\n list.splice(start, deleteCount, toInsert.map(function (node) { return nodeMapper.map(node); }));\r\n }\r\n };\r\n}\r\nfunction mapOptions(compressedNodeUnwrapper, options) {\r\n return __assign(__assign({}, options), { sorter: options.sorter && {\r\n compare: function (node, otherNode) {\r\n return options.sorter.compare(node.elements[0], otherNode.elements[0]);\r\n }\r\n }, identityProvider: options.identityProvider && {\r\n getId: function (node) {\r\n return options.identityProvider.getId(compressedNodeUnwrapper(node));\r\n }\r\n }, filter: options.filter && {\r\n filter: function (node, parentVisibility) {\r\n return options.filter.filter(compressedNodeUnwrapper(node), parentVisibility);\r\n }\r\n } });\r\n}\r\nvar CompressibleObjectTreeModel = /** @class */ (function () {\r\n function CompressibleObjectTreeModel(user, list, options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n this.elementMapper = options.elementMapper || DefaultElementMapper;\r\n var compressedNodeUnwrapper = function (node) { return _this.elementMapper(node.elements); };\r\n this.nodeMapper = new WeakMapper(function (node) { return new CompressedTreeNodeWrapper(compressedNodeUnwrapper, node); });\r\n this.model = new CompressedObjectTreeModel(user, mapList(this.nodeMapper, list), mapOptions(compressedNodeUnwrapper, options));\r\n }\r\n Object.defineProperty(CompressibleObjectTreeModel.prototype, \"onDidSplice\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.map(this.model.onDidSplice, function (_a) {\r\n var insertedNodes = _a.insertedNodes, deletedNodes = _a.deletedNodes;\r\n return ({\r\n insertedNodes: insertedNodes.map(function (node) { return _this.nodeMapper.map(node); }),\r\n deletedNodes: deletedNodes.map(function (node) { return _this.nodeMapper.map(node); }),\r\n });\r\n });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressibleObjectTreeModel.prototype, \"onDidChangeCollapseState\", {\r\n get: function () {\r\n var _this = this;\r\n return Event.map(this.model.onDidChangeCollapseState, function (_a) {\r\n var node = _a.node, deep = _a.deep;\r\n return ({\r\n node: _this.nodeMapper.map(node),\r\n deep: deep\r\n });\r\n });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n CompressibleObjectTreeModel.prototype.setChildren = function (element, children) {\r\n this.model.setChildren(element, children);\r\n };\r\n CompressibleObjectTreeModel.prototype.setCompressionEnabled = function (enabled) {\r\n this.model.setCompressionEnabled(enabled);\r\n };\r\n CompressibleObjectTreeModel.prototype.getListIndex = function (location) {\r\n return this.model.getListIndex(location);\r\n };\r\n CompressibleObjectTreeModel.prototype.getListRenderCount = function (location) {\r\n return this.model.getListRenderCount(location);\r\n };\r\n CompressibleObjectTreeModel.prototype.getNode = function (location) {\r\n return this.nodeMapper.map(this.model.getNode(location));\r\n };\r\n CompressibleObjectTreeModel.prototype.getNodeLocation = function (node) {\r\n return node.element;\r\n };\r\n CompressibleObjectTreeModel.prototype.getParentNodeLocation = function (location) {\r\n return this.model.getParentNodeLocation(location);\r\n };\r\n CompressibleObjectTreeModel.prototype.setCollapsible = function (location, collapsed) {\r\n return this.model.setCollapsible(location, collapsed);\r\n };\r\n CompressibleObjectTreeModel.prototype.isCollapsed = function (location) {\r\n return this.model.isCollapsed(location);\r\n };\r\n CompressibleObjectTreeModel.prototype.setCollapsed = function (location, collapsed, recursive) {\r\n return this.model.setCollapsed(location, collapsed, recursive);\r\n };\r\n CompressibleObjectTreeModel.prototype.expandTo = function (location) {\r\n return this.model.expandTo(location);\r\n };\r\n CompressibleObjectTreeModel.prototype.rerender = function (location) {\r\n return this.model.rerender(location);\r\n };\r\n CompressibleObjectTreeModel.prototype.refilter = function () {\r\n return this.model.refilter();\r\n };\r\n CompressibleObjectTreeModel.prototype.getCompressedTreeNode = function (location) {\r\n if (location === void 0) { location = null; }\r\n return this.model.getNode(location);\r\n };\r\n return CompressibleObjectTreeModel;\r\n}());\r\nexport { CompressibleObjectTreeModel };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nimport { AbstractTree } from './abstractTree.js';\r\nimport { ObjectTreeModel } from './objectTreeModel.js';\r\nimport { CompressibleObjectTreeModel } from './compressedObjectTreeModel.js';\r\nimport { memoize } from '../../../common/decorators.js';\r\nvar ObjectTree = /** @class */ (function (_super) {\r\n __extends(ObjectTree, _super);\r\n function ObjectTree(user, container, delegate, renderers, options) {\r\n if (options === void 0) { options = {}; }\r\n return _super.call(this, user, container, delegate, renderers, options) || this;\r\n }\r\n Object.defineProperty(ObjectTree.prototype, \"onDidChangeCollapseState\", {\r\n get: function () { return this.model.onDidChangeCollapseState; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ObjectTree.prototype.setChildren = function (element, children) {\r\n this.model.setChildren(element, children);\r\n };\r\n ObjectTree.prototype.rerender = function (element) {\r\n if (element === undefined) {\r\n this.view.rerender();\r\n return;\r\n }\r\n this.model.rerender(element);\r\n };\r\n ObjectTree.prototype.createModel = function (user, view, options) {\r\n return new ObjectTreeModel(user, view, options);\r\n };\r\n return ObjectTree;\r\n}(AbstractTree));\r\nexport { ObjectTree };\r\nvar CompressibleRenderer = /** @class */ (function () {\r\n function CompressibleRenderer(_compressedTreeNodeProvider, renderer) {\r\n this._compressedTreeNodeProvider = _compressedTreeNodeProvider;\r\n this.renderer = renderer;\r\n this.templateId = renderer.templateId;\r\n if (renderer.onDidChangeTwistieState) {\r\n this.onDidChangeTwistieState = renderer.onDidChangeTwistieState;\r\n }\r\n }\r\n Object.defineProperty(CompressibleRenderer.prototype, \"compressedTreeNodeProvider\", {\r\n get: function () {\r\n return this._compressedTreeNodeProvider();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n CompressibleRenderer.prototype.renderTemplate = function (container) {\r\n var data = this.renderer.renderTemplate(container);\r\n return { compressedTreeNode: undefined, data: data };\r\n };\r\n CompressibleRenderer.prototype.renderElement = function (node, index, templateData, height) {\r\n var compressedTreeNode = this.compressedTreeNodeProvider.getCompressedTreeNode(node.element);\r\n if (compressedTreeNode.element.elements.length === 1) {\r\n templateData.compressedTreeNode = undefined;\r\n this.renderer.renderElement(node, index, templateData.data, height);\r\n }\r\n else {\r\n templateData.compressedTreeNode = compressedTreeNode;\r\n this.renderer.renderCompressedElements(compressedTreeNode, index, templateData.data, height);\r\n }\r\n };\r\n CompressibleRenderer.prototype.disposeElement = function (node, index, templateData, height) {\r\n if (templateData.compressedTreeNode) {\r\n if (this.renderer.disposeCompressedElements) {\r\n this.renderer.disposeCompressedElements(templateData.compressedTreeNode, index, templateData.data, height);\r\n }\r\n }\r\n else {\r\n if (this.renderer.disposeElement) {\r\n this.renderer.disposeElement(node, index, templateData.data, height);\r\n }\r\n }\r\n };\r\n CompressibleRenderer.prototype.disposeTemplate = function (templateData) {\r\n this.renderer.disposeTemplate(templateData.data);\r\n };\r\n CompressibleRenderer.prototype.renderTwistie = function (element, twistieElement) {\r\n if (this.renderer.renderTwistie) {\r\n this.renderer.renderTwistie(element, twistieElement);\r\n }\r\n };\r\n __decorate([\r\n memoize\r\n ], CompressibleRenderer.prototype, \"compressedTreeNodeProvider\", null);\r\n return CompressibleRenderer;\r\n}());\r\nfunction asObjectTreeOptions(compressedTreeNodeProvider, options) {\r\n return options && __assign(__assign({}, options), { keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && {\r\n getKeyboardNavigationLabel: function (e) {\r\n var compressedTreeNode;\r\n try {\r\n compressedTreeNode = compressedTreeNodeProvider().getCompressedTreeNode(e);\r\n }\r\n catch (_a) {\r\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e);\r\n }\r\n if (compressedTreeNode.element.elements.length === 1) {\r\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e);\r\n }\r\n else {\r\n return options.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(compressedTreeNode.element.elements);\r\n }\r\n }\r\n } });\r\n}\r\nvar CompressibleObjectTree = /** @class */ (function (_super) {\r\n __extends(CompressibleObjectTree, _super);\r\n function CompressibleObjectTree(user, container, delegate, renderers, options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = this;\r\n var compressedTreeNodeProvider = function () { return _this; };\r\n var compressibleRenderers = renderers.map(function (r) { return new CompressibleRenderer(compressedTreeNodeProvider, r); });\r\n _this = _super.call(this, user, container, delegate, compressibleRenderers, asObjectTreeOptions(compressedTreeNodeProvider, options)) || this;\r\n return _this;\r\n }\r\n CompressibleObjectTree.prototype.setChildren = function (element, children) {\r\n this.model.setChildren(element, children);\r\n };\r\n CompressibleObjectTree.prototype.createModel = function (user, view, options) {\r\n return new CompressibleObjectTreeModel(user, view, options);\r\n };\r\n CompressibleObjectTree.prototype.updateOptions = function (optionsUpdate) {\r\n if (optionsUpdate === void 0) { optionsUpdate = {}; }\r\n _super.prototype.updateOptions.call(this, optionsUpdate);\r\n if (typeof optionsUpdate.compressionEnabled !== 'undefined') {\r\n this.model.setCompressionEnabled(optionsUpdate.compressionEnabled);\r\n }\r\n };\r\n CompressibleObjectTree.prototype.getCompressedTreeNode = function (element) {\r\n if (element === void 0) { element = null; }\r\n return this.model.getCompressedTreeNode(element);\r\n };\r\n return CompressibleObjectTree;\r\n}(ObjectTree));\r\nexport { CompressibleObjectTree };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { ComposedTreeDelegate } from './abstractTree.js';\r\nimport { ObjectTree, CompressibleObjectTree } from './objectTree.js';\r\nimport { TreeError, WeakMapper } from './tree.js';\r\nimport { dispose, DisposableStore } from '../../../common/lifecycle.js';\r\nimport { Emitter, Event } from '../../../common/event.js';\r\nimport { timeout, createCancelablePromise } from '../../../common/async.js';\r\nimport { Iterator } from '../../../common/iterator.js';\r\nimport { ElementsDragAndDropData } from '../list/listView.js';\r\nimport { isPromiseCanceledError, onUnexpectedError } from '../../../common/errors.js';\r\nimport { toggleClass } from '../../dom.js';\r\nimport { values } from '../../../common/map.js';\r\nimport { isFilterResult, getVisibleState } from './indexTreeModel.js';\r\nfunction createAsyncDataTreeNode(props) {\r\n return __assign(__assign({}, props), { children: [], refreshPromise: undefined, stale: true, slow: false, collapsedByDefault: undefined });\r\n}\r\nfunction isAncestor(ancestor, descendant) {\r\n if (!descendant.parent) {\r\n return false;\r\n }\r\n else if (descendant.parent === ancestor) {\r\n return true;\r\n }\r\n else {\r\n return isAncestor(ancestor, descendant.parent);\r\n }\r\n}\r\nfunction intersects(node, other) {\r\n return node === other || isAncestor(node, other) || isAncestor(other, node);\r\n}\r\nvar AsyncDataTreeNodeWrapper = /** @class */ (function () {\r\n function AsyncDataTreeNodeWrapper(node) {\r\n this.node = node;\r\n }\r\n Object.defineProperty(AsyncDataTreeNodeWrapper.prototype, \"element\", {\r\n get: function () { return this.node.element.element; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTreeNodeWrapper.prototype, \"children\", {\r\n get: function () { return this.node.children.map(function (node) { return new AsyncDataTreeNodeWrapper(node); }); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTreeNodeWrapper.prototype, \"depth\", {\r\n get: function () { return this.node.depth; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTreeNodeWrapper.prototype, \"visibleChildrenCount\", {\r\n get: function () { return this.node.visibleChildrenCount; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTreeNodeWrapper.prototype, \"visibleChildIndex\", {\r\n get: function () { return this.node.visibleChildIndex; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTreeNodeWrapper.prototype, \"collapsible\", {\r\n get: function () { return this.node.collapsible; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTreeNodeWrapper.prototype, \"collapsed\", {\r\n get: function () { return this.node.collapsed; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTreeNodeWrapper.prototype, \"visible\", {\r\n get: function () { return this.node.visible; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTreeNodeWrapper.prototype, \"filterData\", {\r\n get: function () { return this.node.filterData; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return AsyncDataTreeNodeWrapper;\r\n}());\r\nvar AsyncDataTreeRenderer = /** @class */ (function () {\r\n function AsyncDataTreeRenderer(renderer, nodeMapper, onDidChangeTwistieState) {\r\n this.renderer = renderer;\r\n this.nodeMapper = nodeMapper;\r\n this.onDidChangeTwistieState = onDidChangeTwistieState;\r\n this.renderedNodes = new Map();\r\n this.templateId = renderer.templateId;\r\n }\r\n AsyncDataTreeRenderer.prototype.renderTemplate = function (container) {\r\n var templateData = this.renderer.renderTemplate(container);\r\n return { templateData: templateData };\r\n };\r\n AsyncDataTreeRenderer.prototype.renderElement = function (node, index, templateData, height) {\r\n this.renderer.renderElement(this.nodeMapper.map(node), index, templateData.templateData, height);\r\n };\r\n AsyncDataTreeRenderer.prototype.renderTwistie = function (element, twistieElement) {\r\n toggleClass(twistieElement, 'codicon-loading', element.slow);\r\n return false;\r\n };\r\n AsyncDataTreeRenderer.prototype.disposeElement = function (node, index, templateData, height) {\r\n if (this.renderer.disposeElement) {\r\n this.renderer.disposeElement(this.nodeMapper.map(node), index, templateData.templateData, height);\r\n }\r\n };\r\n AsyncDataTreeRenderer.prototype.disposeTemplate = function (templateData) {\r\n this.renderer.disposeTemplate(templateData.templateData);\r\n };\r\n AsyncDataTreeRenderer.prototype.dispose = function () {\r\n this.renderedNodes.clear();\r\n };\r\n return AsyncDataTreeRenderer;\r\n}());\r\nfunction asTreeEvent(e) {\r\n return {\r\n browserEvent: e.browserEvent,\r\n elements: e.elements.map(function (e) { return e.element; })\r\n };\r\n}\r\nvar AsyncDataTreeElementsDragAndDropData = /** @class */ (function (_super) {\r\n __extends(AsyncDataTreeElementsDragAndDropData, _super);\r\n function AsyncDataTreeElementsDragAndDropData(data) {\r\n var _this = _super.call(this, data.elements.map(function (node) { return node.element; })) || this;\r\n _this.data = data;\r\n return _this;\r\n }\r\n return AsyncDataTreeElementsDragAndDropData;\r\n}(ElementsDragAndDropData));\r\nfunction asAsyncDataTreeDragAndDropData(data) {\r\n if (data instanceof ElementsDragAndDropData) {\r\n return new AsyncDataTreeElementsDragAndDropData(data);\r\n }\r\n return data;\r\n}\r\nvar AsyncDataTreeNodeListDragAndDrop = /** @class */ (function () {\r\n function AsyncDataTreeNodeListDragAndDrop(dnd) {\r\n this.dnd = dnd;\r\n }\r\n AsyncDataTreeNodeListDragAndDrop.prototype.getDragURI = function (node) {\r\n return this.dnd.getDragURI(node.element);\r\n };\r\n AsyncDataTreeNodeListDragAndDrop.prototype.getDragLabel = function (nodes, originalEvent) {\r\n if (this.dnd.getDragLabel) {\r\n return this.dnd.getDragLabel(nodes.map(function (node) { return node.element; }), originalEvent);\r\n }\r\n return undefined;\r\n };\r\n AsyncDataTreeNodeListDragAndDrop.prototype.onDragStart = function (data, originalEvent) {\r\n if (this.dnd.onDragStart) {\r\n this.dnd.onDragStart(asAsyncDataTreeDragAndDropData(data), originalEvent);\r\n }\r\n };\r\n AsyncDataTreeNodeListDragAndDrop.prototype.onDragOver = function (data, targetNode, targetIndex, originalEvent, raw) {\r\n if (raw === void 0) { raw = true; }\r\n return this.dnd.onDragOver(asAsyncDataTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, originalEvent);\r\n };\r\n AsyncDataTreeNodeListDragAndDrop.prototype.drop = function (data, targetNode, targetIndex, originalEvent) {\r\n this.dnd.drop(asAsyncDataTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, originalEvent);\r\n };\r\n AsyncDataTreeNodeListDragAndDrop.prototype.onDragEnd = function (originalEvent) {\r\n if (this.dnd.onDragEnd) {\r\n this.dnd.onDragEnd(originalEvent);\r\n }\r\n };\r\n return AsyncDataTreeNodeListDragAndDrop;\r\n}());\r\nfunction asObjectTreeOptions(options) {\r\n return options && __assign(__assign({}, options), { collapseByDefault: true, identityProvider: options.identityProvider && {\r\n getId: function (el) {\r\n return options.identityProvider.getId(el.element);\r\n }\r\n }, dnd: options.dnd && new AsyncDataTreeNodeListDragAndDrop(options.dnd), multipleSelectionController: options.multipleSelectionController && {\r\n isSelectionSingleChangeEvent: function (e) {\r\n return options.multipleSelectionController.isSelectionSingleChangeEvent(__assign(__assign({}, e), { element: e.element }));\r\n },\r\n isSelectionRangeChangeEvent: function (e) {\r\n return options.multipleSelectionController.isSelectionRangeChangeEvent(__assign(__assign({}, e), { element: e.element }));\r\n }\r\n }, accessibilityProvider: options.accessibilityProvider && __assign(__assign({}, options.accessibilityProvider), { getAriaLabel: function (e) {\r\n return options.accessibilityProvider.getAriaLabel(e.element);\r\n }, getAriaLevel: options.accessibilityProvider.getAriaLevel && (function (node) {\r\n return options.accessibilityProvider.getAriaLevel(node.element);\r\n }), getActiveDescendantId: options.accessibilityProvider.getActiveDescendantId && (function (node) {\r\n return options.accessibilityProvider.getActiveDescendantId(node.element);\r\n }) }), filter: options.filter && {\r\n filter: function (e, parentVisibility) {\r\n return options.filter.filter(e.element, parentVisibility);\r\n }\r\n }, keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && __assign(__assign({}, options.keyboardNavigationLabelProvider), { getKeyboardNavigationLabel: function (e) {\r\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e.element);\r\n } }), sorter: undefined, expandOnlyOnTwistieClick: typeof options.expandOnlyOnTwistieClick === 'undefined' ? undefined : (typeof options.expandOnlyOnTwistieClick !== 'function' ? options.expandOnlyOnTwistieClick : (function (e) { return options.expandOnlyOnTwistieClick(e.element); })), ariaProvider: undefined, additionalScrollHeight: options.additionalScrollHeight });\r\n}\r\nfunction dfs(node, fn) {\r\n fn(node);\r\n node.children.forEach(function (child) { return dfs(child, fn); });\r\n}\r\nvar AsyncDataTree = /** @class */ (function () {\r\n function AsyncDataTree(user, container, delegate, renderers, dataSource, options) {\r\n if (options === void 0) { options = {}; }\r\n this.user = user;\r\n this.dataSource = dataSource;\r\n this.nodes = new Map();\r\n this.subTreeRefreshPromises = new Map();\r\n this.refreshPromises = new Map();\r\n this._onDidRender = new Emitter();\r\n this._onDidChangeNodeSlowState = new Emitter();\r\n this.nodeMapper = new WeakMapper(function (node) { return new AsyncDataTreeNodeWrapper(node); });\r\n this.disposables = new DisposableStore();\r\n this.identityProvider = options.identityProvider;\r\n this.autoExpandSingleChildren = typeof options.autoExpandSingleChildren === 'undefined' ? false : options.autoExpandSingleChildren;\r\n this.sorter = options.sorter;\r\n this.collapseByDefault = options.collapseByDefault;\r\n this.tree = this.createTree(user, container, delegate, renderers, options);\r\n this.root = createAsyncDataTreeNode({\r\n element: undefined,\r\n parent: null,\r\n hasChildren: true\r\n });\r\n if (this.identityProvider) {\r\n this.root = __assign(__assign({}, this.root), { id: null });\r\n }\r\n this.nodes.set(null, this.root);\r\n this.tree.onDidChangeCollapseState(this._onDidChangeCollapseState, this, this.disposables);\r\n }\r\n Object.defineProperty(AsyncDataTree.prototype, \"onDidChangeFocus\", {\r\n get: function () { return Event.map(this.tree.onDidChangeFocus, asTreeEvent); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTree.prototype, \"onDidChangeSelection\", {\r\n get: function () { return Event.map(this.tree.onDidChangeSelection, asTreeEvent); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTree.prototype, \"onDidOpen\", {\r\n get: function () { return Event.map(this.tree.onDidOpen, asTreeEvent); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTree.prototype, \"onDidFocus\", {\r\n get: function () { return this.tree.onDidFocus; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AsyncDataTree.prototype, \"onDidDispose\", {\r\n get: function () { return this.tree.onDidDispose; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AsyncDataTree.prototype.createTree = function (user, container, delegate, renderers, options) {\r\n var _this = this;\r\n var objectTreeDelegate = new ComposedTreeDelegate(delegate);\r\n var objectTreeRenderers = renderers.map(function (r) { return new AsyncDataTreeRenderer(r, _this.nodeMapper, _this._onDidChangeNodeSlowState.event); });\r\n var objectTreeOptions = asObjectTreeOptions(options) || {};\r\n return new ObjectTree(user, container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions);\r\n };\r\n AsyncDataTree.prototype.updateOptions = function (options) {\r\n if (options === void 0) { options = {}; }\r\n this.tree.updateOptions(options);\r\n };\r\n // Widget\r\n AsyncDataTree.prototype.getHTMLElement = function () {\r\n return this.tree.getHTMLElement();\r\n };\r\n Object.defineProperty(AsyncDataTree.prototype, \"scrollTop\", {\r\n get: function () {\r\n return this.tree.scrollTop;\r\n },\r\n set: function (scrollTop) {\r\n this.tree.scrollTop = scrollTop;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AsyncDataTree.prototype.domFocus = function () {\r\n this.tree.domFocus();\r\n };\r\n AsyncDataTree.prototype.layout = function (height, width) {\r\n this.tree.layout(height, width);\r\n };\r\n AsyncDataTree.prototype.style = function (styles) {\r\n this.tree.style(styles);\r\n };\r\n // Model\r\n AsyncDataTree.prototype.getInput = function () {\r\n return this.root.element;\r\n };\r\n AsyncDataTree.prototype.setInput = function (input, viewState) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var viewStateContext;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n this.refreshPromises.forEach(function (promise) { return promise.cancel(); });\r\n this.refreshPromises.clear();\r\n this.root.element = input;\r\n viewStateContext = viewState && { viewState: viewState, focus: [], selection: [] };\r\n return [4 /*yield*/, this._updateChildren(input, true, false, viewStateContext)];\r\n case 1:\r\n _a.sent();\r\n if (viewStateContext) {\r\n this.tree.setFocus(viewStateContext.focus);\r\n this.tree.setSelection(viewStateContext.selection);\r\n }\r\n if (viewState && typeof viewState.scrollTop === 'number') {\r\n this.scrollTop = viewState.scrollTop;\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n AsyncDataTree.prototype._updateChildren = function (element, recursive, rerender, viewStateContext) {\r\n if (element === void 0) { element = this.root.element; }\r\n if (recursive === void 0) { recursive = true; }\r\n if (rerender === void 0) { rerender = false; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var node;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (typeof this.root.element === 'undefined') {\r\n throw new TreeError(this.user, 'Tree input not set');\r\n }\r\n if (!this.root.refreshPromise) return [3 /*break*/, 3];\r\n return [4 /*yield*/, this.root.refreshPromise];\r\n case 1:\r\n _a.sent();\r\n return [4 /*yield*/, Event.toPromise(this._onDidRender.event)];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3:\r\n node = this.getDataNode(element);\r\n return [4 /*yield*/, this.refreshAndRenderNode(node, recursive, viewStateContext)];\r\n case 4:\r\n _a.sent();\r\n if (rerender) {\r\n try {\r\n this.tree.rerender(node);\r\n }\r\n catch (_b) {\r\n // missing nodes are fine, this could've resulted from\r\n // parallel refresh calls, removing `node` altogether\r\n }\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n // View\r\n AsyncDataTree.prototype.rerender = function (element) {\r\n if (element === undefined || element === this.root.element) {\r\n this.tree.rerender();\r\n return;\r\n }\r\n var node = this.getDataNode(element);\r\n this.tree.rerender(node);\r\n };\r\n AsyncDataTree.prototype.collapse = function (element, recursive) {\r\n if (recursive === void 0) { recursive = false; }\r\n var node = this.getDataNode(element);\r\n return this.tree.collapse(node === this.root ? null : node, recursive);\r\n };\r\n AsyncDataTree.prototype.expand = function (element, recursive) {\r\n if (recursive === void 0) { recursive = false; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var node, result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (typeof this.root.element === 'undefined') {\r\n throw new TreeError(this.user, 'Tree input not set');\r\n }\r\n if (!this.root.refreshPromise) return [3 /*break*/, 3];\r\n return [4 /*yield*/, this.root.refreshPromise];\r\n case 1:\r\n _a.sent();\r\n return [4 /*yield*/, Event.toPromise(this._onDidRender.event)];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3:\r\n node = this.getDataNode(element);\r\n if (!node.refreshPromise) return [3 /*break*/, 6];\r\n return [4 /*yield*/, this.root.refreshPromise];\r\n case 4:\r\n _a.sent();\r\n return [4 /*yield*/, Event.toPromise(this._onDidRender.event)];\r\n case 5:\r\n _a.sent();\r\n _a.label = 6;\r\n case 6:\r\n if (node !== this.root && !node.refreshPromise && !this.tree.isCollapsed(node)) {\r\n return [2 /*return*/, false];\r\n }\r\n result = this.tree.expand(node === this.root ? null : node, recursive);\r\n if (!node.refreshPromise) return [3 /*break*/, 9];\r\n return [4 /*yield*/, this.root.refreshPromise];\r\n case 7:\r\n _a.sent();\r\n return [4 /*yield*/, Event.toPromise(this._onDidRender.event)];\r\n case 8:\r\n _a.sent();\r\n _a.label = 9;\r\n case 9: return [2 /*return*/, result];\r\n }\r\n });\r\n });\r\n };\r\n AsyncDataTree.prototype.setSelection = function (elements, browserEvent) {\r\n var _this = this;\r\n var nodes = elements.map(function (e) { return _this.getDataNode(e); });\r\n this.tree.setSelection(nodes, browserEvent);\r\n };\r\n AsyncDataTree.prototype.getSelection = function () {\r\n var nodes = this.tree.getSelection();\r\n return nodes.map(function (n) { return n.element; });\r\n };\r\n AsyncDataTree.prototype.setFocus = function (elements, browserEvent) {\r\n var _this = this;\r\n var nodes = elements.map(function (e) { return _this.getDataNode(e); });\r\n this.tree.setFocus(nodes, browserEvent);\r\n };\r\n AsyncDataTree.prototype.getFocus = function () {\r\n var nodes = this.tree.getFocus();\r\n return nodes.map(function (n) { return n.element; });\r\n };\r\n AsyncDataTree.prototype.reveal = function (element, relativeTop) {\r\n this.tree.reveal(this.getDataNode(element), relativeTop);\r\n };\r\n // Implementation\r\n AsyncDataTree.prototype.getDataNode = function (element) {\r\n var node = this.nodes.get((element === this.root.element ? null : element));\r\n if (!node) {\r\n throw new TreeError(this.user, \"Data tree node not found: \" + element);\r\n }\r\n return node;\r\n };\r\n AsyncDataTree.prototype.refreshAndRenderNode = function (node, recursive, viewStateContext) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.refreshNode(node, recursive, viewStateContext)];\r\n case 1:\r\n _a.sent();\r\n this.render(node, viewStateContext);\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n AsyncDataTree.prototype.refreshNode = function (node, recursive, viewStateContext) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var result;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n this.subTreeRefreshPromises.forEach(function (refreshPromise, refreshNode) {\r\n if (!result && intersects(refreshNode, node)) {\r\n result = refreshPromise.then(function () { return _this.refreshNode(node, recursive, viewStateContext); });\r\n }\r\n });\r\n if (result) {\r\n return [2 /*return*/, result];\r\n }\r\n return [2 /*return*/, this.doRefreshSubTree(node, recursive, viewStateContext)];\r\n });\r\n });\r\n };\r\n AsyncDataTree.prototype.doRefreshSubTree = function (node, recursive, viewStateContext) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var done, childrenToRefresh;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n node.refreshPromise = new Promise(function (c) { return done = c; });\r\n this.subTreeRefreshPromises.set(node, node.refreshPromise);\r\n node.refreshPromise.finally(function () {\r\n node.refreshPromise = undefined;\r\n _this.subTreeRefreshPromises.delete(node);\r\n });\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, , 4, 5]);\r\n return [4 /*yield*/, this.doRefreshNode(node, recursive, viewStateContext)];\r\n case 2:\r\n childrenToRefresh = _a.sent();\r\n node.stale = false;\r\n return [4 /*yield*/, Promise.all(childrenToRefresh.map(function (child) { return _this.doRefreshSubTree(child, recursive, viewStateContext); }))];\r\n case 3:\r\n _a.sent();\r\n return [3 /*break*/, 5];\r\n case 4:\r\n done();\r\n return [7 /*endfinally*/];\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n AsyncDataTree.prototype.doRefreshNode = function (node, recursive, viewStateContext) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var childrenPromise, slowTimeout_1, children, err_1;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n node.hasChildren = !!this.dataSource.hasChildren(node.element);\r\n if (!node.hasChildren) {\r\n childrenPromise = Promise.resolve([]);\r\n }\r\n else {\r\n slowTimeout_1 = timeout(800);\r\n slowTimeout_1.then(function () {\r\n node.slow = true;\r\n _this._onDidChangeNodeSlowState.fire(node);\r\n }, function (_) { return null; });\r\n childrenPromise = this.doGetChildren(node)\r\n .finally(function () { return slowTimeout_1.cancel(); });\r\n }\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 3, 4, 5]);\r\n return [4 /*yield*/, childrenPromise];\r\n case 2:\r\n children = _a.sent();\r\n return [2 /*return*/, this.setChildren(node, children, recursive, viewStateContext)];\r\n case 3:\r\n err_1 = _a.sent();\r\n if (node !== this.root) {\r\n this.tree.collapse(node === this.root ? null : node);\r\n }\r\n if (isPromiseCanceledError(err_1)) {\r\n return [2 /*return*/, []];\r\n }\r\n throw err_1;\r\n case 4:\r\n if (node.slow) {\r\n node.slow = false;\r\n this._onDidChangeNodeSlowState.fire(node);\r\n }\r\n return [7 /*endfinally*/];\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n AsyncDataTree.prototype.doGetChildren = function (node) {\r\n var _this = this;\r\n var result = this.refreshPromises.get(node);\r\n if (result) {\r\n return result;\r\n }\r\n result = createCancelablePromise(function () { return __awaiter(_this, void 0, void 0, function () {\r\n var children;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.dataSource.getChildren(node.element)];\r\n case 1:\r\n children = _a.sent();\r\n return [2 /*return*/, this.processChildren(children)];\r\n }\r\n });\r\n }); });\r\n this.refreshPromises.set(node, result);\r\n return result.finally(function () { return _this.refreshPromises.delete(node); });\r\n };\r\n AsyncDataTree.prototype._onDidChangeCollapseState = function (_a) {\r\n var node = _a.node, deep = _a.deep;\r\n if (!node.collapsed && node.element.stale) {\r\n if (deep) {\r\n this.collapse(node.element.element);\r\n }\r\n else {\r\n this.refreshAndRenderNode(node.element, false)\r\n .catch(onUnexpectedError);\r\n }\r\n }\r\n };\r\n AsyncDataTree.prototype.setChildren = function (node, childrenElements, recursive, viewStateContext) {\r\n var _a;\r\n var _this = this;\r\n // perf: if the node was and still is a leaf, avoid all this hassle\r\n if (node.children.length === 0 && childrenElements.length === 0) {\r\n return [];\r\n }\r\n var nodesToForget = new Map();\r\n var childrenTreeNodesById = new Map();\r\n for (var _i = 0, _b = node.children; _i < _b.length; _i++) {\r\n var child = _b[_i];\r\n nodesToForget.set(child.element, child);\r\n if (this.identityProvider) {\r\n var collapsed = this.tree.isCollapsed(child);\r\n childrenTreeNodesById.set(child.id, { node: child, collapsed: collapsed });\r\n }\r\n }\r\n var childrenToRefresh = [];\r\n var children = childrenElements.map(function (element) {\r\n var hasChildren = !!_this.dataSource.hasChildren(element);\r\n if (!_this.identityProvider) {\r\n var asyncDataTreeNode = createAsyncDataTreeNode({ element: element, parent: node, hasChildren: hasChildren });\r\n if (hasChildren && _this.collapseByDefault && !_this.collapseByDefault(element)) {\r\n asyncDataTreeNode.collapsedByDefault = false;\r\n childrenToRefresh.push(asyncDataTreeNode);\r\n }\r\n return asyncDataTreeNode;\r\n }\r\n var id = _this.identityProvider.getId(element).toString();\r\n var result = childrenTreeNodesById.get(id);\r\n if (result) {\r\n var asyncDataTreeNode = result.node;\r\n nodesToForget.delete(asyncDataTreeNode.element);\r\n _this.nodes.delete(asyncDataTreeNode.element);\r\n _this.nodes.set(element, asyncDataTreeNode);\r\n asyncDataTreeNode.element = element;\r\n asyncDataTreeNode.hasChildren = hasChildren;\r\n if (recursive) {\r\n if (result.collapsed) {\r\n asyncDataTreeNode.children.forEach(function (node) { return dfs(node, function (node) { return _this.nodes.delete(node.element); }); });\r\n asyncDataTreeNode.children.splice(0, asyncDataTreeNode.children.length);\r\n asyncDataTreeNode.stale = true;\r\n }\r\n else {\r\n childrenToRefresh.push(asyncDataTreeNode);\r\n }\r\n }\r\n else if (hasChildren && _this.collapseByDefault && !_this.collapseByDefault(element)) {\r\n asyncDataTreeNode.collapsedByDefault = false;\r\n childrenToRefresh.push(asyncDataTreeNode);\r\n }\r\n return asyncDataTreeNode;\r\n }\r\n var childAsyncDataTreeNode = createAsyncDataTreeNode({ element: element, parent: node, id: id, hasChildren: hasChildren });\r\n if (viewStateContext && viewStateContext.viewState.focus && viewStateContext.viewState.focus.indexOf(id) > -1) {\r\n viewStateContext.focus.push(childAsyncDataTreeNode);\r\n }\r\n if (viewStateContext && viewStateContext.viewState.selection && viewStateContext.viewState.selection.indexOf(id) > -1) {\r\n viewStateContext.selection.push(childAsyncDataTreeNode);\r\n }\r\n if (viewStateContext && viewStateContext.viewState.expanded && viewStateContext.viewState.expanded.indexOf(id) > -1) {\r\n childrenToRefresh.push(childAsyncDataTreeNode);\r\n }\r\n else if (hasChildren && _this.collapseByDefault && !_this.collapseByDefault(element)) {\r\n childAsyncDataTreeNode.collapsedByDefault = false;\r\n childrenToRefresh.push(childAsyncDataTreeNode);\r\n }\r\n return childAsyncDataTreeNode;\r\n });\r\n for (var _c = 0, _d = values(nodesToForget); _c < _d.length; _c++) {\r\n var node_1 = _d[_c];\r\n dfs(node_1, function (node) { return _this.nodes.delete(node.element); });\r\n }\r\n for (var _e = 0, children_1 = children; _e < children_1.length; _e++) {\r\n var child = children_1[_e];\r\n this.nodes.set(child.element, child);\r\n }\r\n (_a = node.children).splice.apply(_a, __spreadArrays([0, node.children.length], children));\r\n // TODO@joao this doesn't take filter into account\r\n if (node !== this.root && this.autoExpandSingleChildren && children.length === 1 && childrenToRefresh.length === 0) {\r\n children[0].collapsedByDefault = false;\r\n childrenToRefresh.push(children[0]);\r\n }\r\n return childrenToRefresh;\r\n };\r\n AsyncDataTree.prototype.render = function (node, viewStateContext) {\r\n var _this = this;\r\n var children = node.children.map(function (node) { return _this.asTreeElement(node, viewStateContext); });\r\n this.tree.setChildren(node === this.root ? null : node, children);\r\n if (node !== this.root) {\r\n this.tree.setCollapsible(node, node.hasChildren);\r\n }\r\n this._onDidRender.fire();\r\n };\r\n AsyncDataTree.prototype.asTreeElement = function (node, viewStateContext) {\r\n var _this = this;\r\n if (node.stale) {\r\n return {\r\n element: node,\r\n collapsible: node.hasChildren,\r\n collapsed: true\r\n };\r\n }\r\n var collapsed;\r\n if (viewStateContext && viewStateContext.viewState.expanded && node.id && viewStateContext.viewState.expanded.indexOf(node.id) > -1) {\r\n collapsed = false;\r\n }\r\n else {\r\n collapsed = node.collapsedByDefault;\r\n }\r\n node.collapsedByDefault = undefined;\r\n return {\r\n element: node,\r\n children: node.hasChildren ? Iterator.map(Iterator.fromArray(node.children), function (child) { return _this.asTreeElement(child, viewStateContext); }) : [],\r\n collapsible: node.hasChildren,\r\n collapsed: collapsed\r\n };\r\n };\r\n AsyncDataTree.prototype.processChildren = function (children) {\r\n if (this.sorter) {\r\n children.sort(this.sorter.compare.bind(this.sorter));\r\n }\r\n return children;\r\n };\r\n AsyncDataTree.prototype.dispose = function () {\r\n this.disposables.dispose();\r\n };\r\n return AsyncDataTree;\r\n}());\r\nexport { AsyncDataTree };\r\nvar CompressibleAsyncDataTreeNodeWrapper = /** @class */ (function () {\r\n function CompressibleAsyncDataTreeNodeWrapper(node) {\r\n this.node = node;\r\n }\r\n Object.defineProperty(CompressibleAsyncDataTreeNodeWrapper.prototype, \"element\", {\r\n get: function () {\r\n return {\r\n elements: this.node.element.elements.map(function (e) { return e.element; }),\r\n incompressible: this.node.element.incompressible\r\n };\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressibleAsyncDataTreeNodeWrapper.prototype, \"children\", {\r\n get: function () { return this.node.children.map(function (node) { return new CompressibleAsyncDataTreeNodeWrapper(node); }); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressibleAsyncDataTreeNodeWrapper.prototype, \"depth\", {\r\n get: function () { return this.node.depth; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressibleAsyncDataTreeNodeWrapper.prototype, \"visibleChildrenCount\", {\r\n get: function () { return this.node.visibleChildrenCount; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressibleAsyncDataTreeNodeWrapper.prototype, \"visibleChildIndex\", {\r\n get: function () { return this.node.visibleChildIndex; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressibleAsyncDataTreeNodeWrapper.prototype, \"collapsible\", {\r\n get: function () { return this.node.collapsible; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressibleAsyncDataTreeNodeWrapper.prototype, \"collapsed\", {\r\n get: function () { return this.node.collapsed; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressibleAsyncDataTreeNodeWrapper.prototype, \"visible\", {\r\n get: function () { return this.node.visible; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CompressibleAsyncDataTreeNodeWrapper.prototype, \"filterData\", {\r\n get: function () { return this.node.filterData; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return CompressibleAsyncDataTreeNodeWrapper;\r\n}());\r\nvar CompressibleAsyncDataTreeRenderer = /** @class */ (function () {\r\n function CompressibleAsyncDataTreeRenderer(renderer, nodeMapper, compressibleNodeMapperProvider, onDidChangeTwistieState) {\r\n this.renderer = renderer;\r\n this.nodeMapper = nodeMapper;\r\n this.compressibleNodeMapperProvider = compressibleNodeMapperProvider;\r\n this.onDidChangeTwistieState = onDidChangeTwistieState;\r\n this.renderedNodes = new Map();\r\n this.disposables = [];\r\n this.templateId = renderer.templateId;\r\n }\r\n CompressibleAsyncDataTreeRenderer.prototype.renderTemplate = function (container) {\r\n var templateData = this.renderer.renderTemplate(container);\r\n return { templateData: templateData };\r\n };\r\n CompressibleAsyncDataTreeRenderer.prototype.renderElement = function (node, index, templateData, height) {\r\n this.renderer.renderElement(this.nodeMapper.map(node), index, templateData.templateData, height);\r\n };\r\n CompressibleAsyncDataTreeRenderer.prototype.renderCompressedElements = function (node, index, templateData, height) {\r\n this.renderer.renderCompressedElements(this.compressibleNodeMapperProvider().map(node), index, templateData.templateData, height);\r\n };\r\n CompressibleAsyncDataTreeRenderer.prototype.renderTwistie = function (element, twistieElement) {\r\n toggleClass(twistieElement, 'codicon-loading', element.slow);\r\n return false;\r\n };\r\n CompressibleAsyncDataTreeRenderer.prototype.disposeElement = function (node, index, templateData, height) {\r\n if (this.renderer.disposeElement) {\r\n this.renderer.disposeElement(this.nodeMapper.map(node), index, templateData.templateData, height);\r\n }\r\n };\r\n CompressibleAsyncDataTreeRenderer.prototype.disposeCompressedElements = function (node, index, templateData, height) {\r\n if (this.renderer.disposeCompressedElements) {\r\n this.renderer.disposeCompressedElements(this.compressibleNodeMapperProvider().map(node), index, templateData.templateData, height);\r\n }\r\n };\r\n CompressibleAsyncDataTreeRenderer.prototype.disposeTemplate = function (templateData) {\r\n this.renderer.disposeTemplate(templateData.templateData);\r\n };\r\n CompressibleAsyncDataTreeRenderer.prototype.dispose = function () {\r\n this.renderedNodes.clear();\r\n this.disposables = dispose(this.disposables);\r\n };\r\n return CompressibleAsyncDataTreeRenderer;\r\n}());\r\nfunction asCompressibleObjectTreeOptions(options) {\r\n var objectTreeOptions = options && asObjectTreeOptions(options);\r\n return objectTreeOptions && __assign(__assign({}, objectTreeOptions), { keyboardNavigationLabelProvider: objectTreeOptions.keyboardNavigationLabelProvider && __assign(__assign({}, objectTreeOptions.keyboardNavigationLabelProvider), { getCompressedNodeKeyboardNavigationLabel: function (els) {\r\n return options.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(els.map(function (e) { return e.element; }));\r\n } }) });\r\n}\r\nvar CompressibleAsyncDataTree = /** @class */ (function (_super) {\r\n __extends(CompressibleAsyncDataTree, _super);\r\n function CompressibleAsyncDataTree(user, container, virtualDelegate, compressionDelegate, renderers, dataSource, options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, user, container, virtualDelegate, renderers, dataSource, options) || this;\r\n _this.compressionDelegate = compressionDelegate;\r\n _this.compressibleNodeMapper = new WeakMapper(function (node) { return new CompressibleAsyncDataTreeNodeWrapper(node); });\r\n _this.filter = options.filter;\r\n return _this;\r\n }\r\n CompressibleAsyncDataTree.prototype.createTree = function (user, container, delegate, renderers, options) {\r\n var _this = this;\r\n var objectTreeDelegate = new ComposedTreeDelegate(delegate);\r\n var objectTreeRenderers = renderers.map(function (r) { return new CompressibleAsyncDataTreeRenderer(r, _this.nodeMapper, function () { return _this.compressibleNodeMapper; }, _this._onDidChangeNodeSlowState.event); });\r\n var objectTreeOptions = asCompressibleObjectTreeOptions(options) || {};\r\n return new CompressibleObjectTree(user, container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions);\r\n };\r\n CompressibleAsyncDataTree.prototype.asTreeElement = function (node, viewStateContext) {\r\n return __assign({ incompressible: this.compressionDelegate.isIncompressible(node.element) }, _super.prototype.asTreeElement.call(this, node, viewStateContext));\r\n };\r\n CompressibleAsyncDataTree.prototype.updateOptions = function (options) {\r\n if (options === void 0) { options = {}; }\r\n this.tree.updateOptions(options);\r\n };\r\n CompressibleAsyncDataTree.prototype.render = function (node, viewStateContext) {\r\n var _this = this;\r\n if (!this.identityProvider) {\r\n return _super.prototype.render.call(this, node, viewStateContext);\r\n }\r\n // Preserve traits across compressions. Hacky but does the trick.\r\n // This is hard to fix properly since it requires rewriting the traits\r\n // across trees and lists. Let's just keep it this way for now.\r\n var getId = function (element) { return _this.identityProvider.getId(element).toString(); };\r\n var getUncompressedIds = function (nodes) {\r\n var result = new Set();\r\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\r\n var node_2 = nodes_1[_i];\r\n var compressedNode = _this.tree.getCompressedTreeNode(node_2 === _this.root ? null : node_2);\r\n if (!compressedNode.element) {\r\n continue;\r\n }\r\n for (var _a = 0, _b = compressedNode.element.elements; _a < _b.length; _a++) {\r\n var node_3 = _b[_a];\r\n result.add(getId(node_3.element));\r\n }\r\n }\r\n return result;\r\n };\r\n var oldSelection = getUncompressedIds(this.tree.getSelection());\r\n var oldFocus = getUncompressedIds(this.tree.getFocus());\r\n _super.prototype.render.call(this, node, viewStateContext);\r\n var selection = this.getSelection();\r\n var didChangeSelection = false;\r\n var focus = this.getFocus();\r\n var didChangeFocus = false;\r\n var visit = function (node) {\r\n var compressedNode = node.element;\r\n if (compressedNode) {\r\n for (var i = 0; i < compressedNode.elements.length; i++) {\r\n var id = getId(compressedNode.elements[i].element);\r\n var element = compressedNode.elements[compressedNode.elements.length - 1].element;\r\n // github.com/microsoft/vscode/issues/85938\r\n if (oldSelection.has(id) && selection.indexOf(element) === -1) {\r\n selection.push(element);\r\n didChangeSelection = true;\r\n }\r\n if (oldFocus.has(id) && focus.indexOf(element) === -1) {\r\n focus.push(element);\r\n didChangeFocus = true;\r\n }\r\n }\r\n }\r\n node.children.forEach(visit);\r\n };\r\n visit(this.tree.getCompressedTreeNode(node === this.root ? null : node));\r\n if (didChangeSelection) {\r\n this.setSelection(selection);\r\n }\r\n if (didChangeFocus) {\r\n this.setFocus(focus);\r\n }\r\n };\r\n // For compressed async data trees, `TreeVisibility.Recurse` doesn't currently work\r\n // and we have to filter everything beforehand\r\n // Related to #85193 and #85835\r\n CompressibleAsyncDataTree.prototype.processChildren = function (children) {\r\n var _this = this;\r\n if (this.filter) {\r\n children = children.filter(function (e) {\r\n var result = _this.filter.filter(e, 1 /* Visible */);\r\n var visibility = getVisibility(result);\r\n if (visibility === 2 /* Recurse */) {\r\n throw new Error('Recursive tree visibility not supported in async data compressed trees');\r\n }\r\n return visibility === 1 /* Visible */;\r\n });\r\n }\r\n return _super.prototype.processChildren.call(this, children);\r\n };\r\n return CompressibleAsyncDataTree;\r\n}(AsyncDataTree));\r\nexport { CompressibleAsyncDataTree };\r\nfunction getVisibility(filterResult) {\r\n if (typeof filterResult === 'boolean') {\r\n return filterResult ? 1 /* Visible */ : 0 /* Hidden */;\r\n }\r\n else if (isFilterResult(filterResult)) {\r\n return getVisibleState(filterResult.visibility);\r\n }\r\n else {\r\n return getVisibleState(filterResult);\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { AbstractTree } from './abstractTree.js';\r\nimport { ObjectTreeModel } from './objectTreeModel.js';\r\nvar DataTree = /** @class */ (function (_super) {\r\n __extends(DataTree, _super);\r\n function DataTree(user, container, delegate, renderers, dataSource, options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, user, container, delegate, renderers, options) || this;\r\n _this.user = user;\r\n _this.dataSource = dataSource;\r\n _this.identityProvider = options.identityProvider;\r\n return _this;\r\n }\r\n DataTree.prototype.createModel = function (user, view, options) {\r\n return new ObjectTreeModel(user, view, options);\r\n };\r\n return DataTree;\r\n}(AbstractTree));\r\nexport { DataTree };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nvar _a;\r\nimport { createStyleSheet } from '../../../base/browser/dom.js';\r\nimport { DefaultStyleController, isSelectionRangeChangeEvent, isSelectionSingleChangeEvent } from '../../../base/browser/ui/list/listWidget.js';\r\nimport { Disposable, dispose, toDisposable, DisposableStore, combinedDisposable } from '../../../base/common/lifecycle.js';\r\nimport { localize } from '../../../nls.js';\r\nimport { IConfigurationService, getMigratedSettingValue } from '../../configuration/common/configuration.js';\r\nimport { Extensions as ConfigurationExtensions } from '../../configuration/common/configurationRegistry.js';\r\nimport { ContextKeyExpr, IContextKeyService, RawContextKey } from '../../contextkey/common/contextkey.js';\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\r\nimport { Registry } from '../../registry/common/platform.js';\r\nimport { attachListStyler } from '../../theme/common/styler.js';\r\nimport { IThemeService } from '../../theme/common/themeService.js';\r\nimport { InputFocusedContextKey } from '../../contextkey/common/contextkeys.js';\r\nimport { ObjectTree } from '../../../base/browser/ui/tree/objectTree.js';\r\nimport { AsyncDataTree, CompressibleAsyncDataTree } from '../../../base/browser/ui/tree/asyncDataTree.js';\r\nimport { DataTree } from '../../../base/browser/ui/tree/dataTree.js';\r\nimport { IAccessibilityService } from '../../accessibility/common/accessibility.js';\r\nexport var IListService = createDecorator('listService');\r\nvar ListService = /** @class */ (function () {\r\n function ListService(themeService) {\r\n this.disposables = new DisposableStore();\r\n this.lists = [];\r\n this._lastFocusedWidget = undefined;\r\n // create a shared default tree style sheet for performance reasons\r\n var styleController = new DefaultStyleController(createStyleSheet(), '');\r\n this.disposables.add(attachListStyler(styleController, themeService));\r\n }\r\n Object.defineProperty(ListService.prototype, \"lastFocusedList\", {\r\n get: function () {\r\n return this._lastFocusedWidget;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ListService.prototype.register = function (widget, extraContextKeys) {\r\n var _this = this;\r\n if (this.lists.some(function (l) { return l.widget === widget; })) {\r\n throw new Error('Cannot register the same widget multiple times');\r\n }\r\n // Keep in our lists list\r\n var registeredList = { widget: widget, extraContextKeys: extraContextKeys };\r\n this.lists.push(registeredList);\r\n // Check for currently being focused\r\n if (widget.getHTMLElement() === document.activeElement) {\r\n this._lastFocusedWidget = widget;\r\n }\r\n return combinedDisposable(widget.onDidFocus(function () { return _this._lastFocusedWidget = widget; }), toDisposable(function () { return _this.lists.splice(_this.lists.indexOf(registeredList), 1); }), widget.onDidDispose(function () {\r\n _this.lists = _this.lists.filter(function (l) { return l !== registeredList; });\r\n if (_this._lastFocusedWidget === widget) {\r\n _this._lastFocusedWidget = undefined;\r\n }\r\n }));\r\n };\r\n ListService.prototype.dispose = function () {\r\n this.disposables.dispose();\r\n };\r\n ListService = __decorate([\r\n __param(0, IThemeService)\r\n ], ListService);\r\n return ListService;\r\n}());\r\nexport { ListService };\r\nvar RawWorkbenchListFocusContextKey = new RawContextKey('listFocus', true);\r\nexport var WorkbenchListSupportsMultiSelectContextKey = new RawContextKey('listSupportsMultiselect', true);\r\nexport var WorkbenchListFocusContextKey = ContextKeyExpr.and(RawWorkbenchListFocusContextKey, ContextKeyExpr.not(InputFocusedContextKey));\r\nexport var WorkbenchListHasSelectionOrFocus = new RawContextKey('listHasSelectionOrFocus', false);\r\nexport var WorkbenchListDoubleSelection = new RawContextKey('listDoubleSelection', false);\r\nexport var WorkbenchListMultiSelection = new RawContextKey('listMultiSelection', false);\r\nexport var WorkbenchListSupportsKeyboardNavigation = new RawContextKey('listSupportsKeyboardNavigation', true);\r\nexport var WorkbenchListAutomaticKeyboardNavigationKey = 'listAutomaticKeyboardNavigation';\r\nexport var WorkbenchListAutomaticKeyboardNavigation = new RawContextKey(WorkbenchListAutomaticKeyboardNavigationKey, true);\r\nexport var didBindWorkbenchListAutomaticKeyboardNavigation = false;\r\nfunction createScopedContextKeyService(contextKeyService, widget) {\r\n var result = contextKeyService.createScoped(widget.getHTMLElement());\r\n RawWorkbenchListFocusContextKey.bindTo(result);\r\n return result;\r\n}\r\nexport var multiSelectModifierSettingKey = 'workbench.list.multiSelectModifier';\r\nexport var openModeSettingKey = 'workbench.list.openMode';\r\nexport var horizontalScrollingKey = 'workbench.list.horizontalScrolling';\r\nexport var keyboardNavigationSettingKey = 'workbench.list.keyboardNavigation';\r\nexport var automaticKeyboardNavigationSettingKey = 'workbench.list.automaticKeyboardNavigation';\r\nvar treeIndentKey = 'workbench.tree.indent';\r\nvar treeRenderIndentGuidesKey = 'workbench.tree.renderIndentGuides';\r\nfunction getHorizontalScrollingSetting(configurationService) {\r\n return getMigratedSettingValue(configurationService, horizontalScrollingKey, 'workbench.tree.horizontalScrolling');\r\n}\r\nfunction useAltAsMultipleSelectionModifier(configurationService) {\r\n return configurationService.getValue(multiSelectModifierSettingKey) === 'alt';\r\n}\r\nfunction useSingleClickToOpen(configurationService) {\r\n return configurationService.getValue(openModeSettingKey) !== 'doubleClick';\r\n}\r\nvar MultipleSelectionController = /** @class */ (function (_super) {\r\n __extends(MultipleSelectionController, _super);\r\n function MultipleSelectionController(configurationService) {\r\n var _this = _super.call(this) || this;\r\n _this.configurationService = configurationService;\r\n _this.useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\r\n _this.registerListeners();\r\n return _this;\r\n }\r\n MultipleSelectionController.prototype.registerListeners = function () {\r\n var _this = this;\r\n this._register(this.configurationService.onDidChangeConfiguration(function (e) {\r\n if (e.affectsConfiguration(multiSelectModifierSettingKey)) {\r\n _this.useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(_this.configurationService);\r\n }\r\n }));\r\n };\r\n MultipleSelectionController.prototype.isSelectionSingleChangeEvent = function (event) {\r\n if (this.useAltAsMultipleSelectionModifier) {\r\n return event.browserEvent.altKey;\r\n }\r\n return isSelectionSingleChangeEvent(event);\r\n };\r\n MultipleSelectionController.prototype.isSelectionRangeChangeEvent = function (event) {\r\n return isSelectionRangeChangeEvent(event);\r\n };\r\n return MultipleSelectionController;\r\n}(Disposable));\r\nvar WorkbenchOpenController = /** @class */ (function (_super) {\r\n __extends(WorkbenchOpenController, _super);\r\n function WorkbenchOpenController(configurationService, existingOpenController) {\r\n var _this = _super.call(this) || this;\r\n _this.configurationService = configurationService;\r\n _this.existingOpenController = existingOpenController;\r\n _this.openOnSingleClick = useSingleClickToOpen(configurationService);\r\n _this.registerListeners();\r\n return _this;\r\n }\r\n WorkbenchOpenController.prototype.registerListeners = function () {\r\n var _this = this;\r\n this._register(this.configurationService.onDidChangeConfiguration(function (e) {\r\n if (e.affectsConfiguration(openModeSettingKey)) {\r\n _this.openOnSingleClick = useSingleClickToOpen(_this.configurationService);\r\n }\r\n }));\r\n };\r\n WorkbenchOpenController.prototype.shouldOpen = function (event) {\r\n if (event instanceof MouseEvent) {\r\n var isLeftButton = event.button === 0;\r\n var isDoubleClick = event.detail === 2;\r\n if (isLeftButton && !this.openOnSingleClick && !isDoubleClick) {\r\n return false;\r\n }\r\n if (isLeftButton /* left mouse button */ || event.button === 1 /* middle mouse button */) {\r\n return this.existingOpenController ? this.existingOpenController.shouldOpen(event) : true;\r\n }\r\n return false;\r\n }\r\n return this.existingOpenController ? this.existingOpenController.shouldOpen(event) : true;\r\n };\r\n return WorkbenchOpenController;\r\n}(Disposable));\r\nfunction toWorkbenchListOptions(options, configurationService, keybindingService) {\r\n var disposables = new DisposableStore();\r\n var result = __assign({}, options);\r\n if (options.multipleSelectionSupport !== false && !options.multipleSelectionController) {\r\n var multipleSelectionController = new MultipleSelectionController(configurationService);\r\n result.multipleSelectionController = multipleSelectionController;\r\n disposables.add(multipleSelectionController);\r\n }\r\n var openController = new WorkbenchOpenController(configurationService, options.openController);\r\n result.openController = openController;\r\n disposables.add(openController);\r\n result.keyboardNavigationDelegate = {\r\n mightProducePrintableCharacter: function (e) {\r\n return keybindingService.mightProducePrintableCharacter(e);\r\n }\r\n };\r\n return [result, disposables];\r\n}\r\nfunction createKeyboardNavigationEventFilter(container, keybindingService) {\r\n var inChord = false;\r\n return function (event) {\r\n if (inChord) {\r\n inChord = false;\r\n return false;\r\n }\r\n var result = keybindingService.softDispatch(event, container);\r\n if (result && result.enterChord) {\r\n inChord = true;\r\n return false;\r\n }\r\n inChord = false;\r\n return true;\r\n };\r\n}\r\nvar WorkbenchObjectTree = /** @class */ (function (_super) {\r\n __extends(WorkbenchObjectTree, _super);\r\n function WorkbenchObjectTree(user, container, delegate, renderers, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService) {\r\n var _this = this;\r\n var _a = workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService), treeOptions = _a.options, getAutomaticKeyboardNavigation = _a.getAutomaticKeyboardNavigation, disposable = _a.disposable;\r\n _this = _super.call(this, user, container, delegate, renderers, treeOptions) || this;\r\n _this.disposables.add(disposable);\r\n _this.internals = new WorkbenchTreeInternals(_this, treeOptions, getAutomaticKeyboardNavigation, options.overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService);\r\n _this.disposables.add(_this.internals);\r\n return _this;\r\n }\r\n WorkbenchObjectTree = __decorate([\r\n __param(5, IContextKeyService),\r\n __param(6, IListService),\r\n __param(7, IThemeService),\r\n __param(8, IConfigurationService),\r\n __param(9, IKeybindingService),\r\n __param(10, IAccessibilityService)\r\n ], WorkbenchObjectTree);\r\n return WorkbenchObjectTree;\r\n}(ObjectTree));\r\nexport { WorkbenchObjectTree };\r\nvar WorkbenchDataTree = /** @class */ (function (_super) {\r\n __extends(WorkbenchDataTree, _super);\r\n function WorkbenchDataTree(user, container, delegate, renderers, dataSource, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService) {\r\n var _this = this;\r\n var _a = workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService), treeOptions = _a.options, getAutomaticKeyboardNavigation = _a.getAutomaticKeyboardNavigation, disposable = _a.disposable;\r\n _this = _super.call(this, user, container, delegate, renderers, dataSource, treeOptions) || this;\r\n _this.disposables.add(disposable);\r\n _this.internals = new WorkbenchTreeInternals(_this, treeOptions, getAutomaticKeyboardNavigation, options.overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService);\r\n _this.disposables.add(_this.internals);\r\n return _this;\r\n }\r\n WorkbenchDataTree = __decorate([\r\n __param(6, IContextKeyService),\r\n __param(7, IListService),\r\n __param(8, IThemeService),\r\n __param(9, IConfigurationService),\r\n __param(10, IKeybindingService),\r\n __param(11, IAccessibilityService)\r\n ], WorkbenchDataTree);\r\n return WorkbenchDataTree;\r\n}(DataTree));\r\nexport { WorkbenchDataTree };\r\nvar WorkbenchAsyncDataTree = /** @class */ (function (_super) {\r\n __extends(WorkbenchAsyncDataTree, _super);\r\n function WorkbenchAsyncDataTree(user, container, delegate, renderers, dataSource, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService) {\r\n var _this = this;\r\n var _a = workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService), treeOptions = _a.options, getAutomaticKeyboardNavigation = _a.getAutomaticKeyboardNavigation, disposable = _a.disposable;\r\n _this = _super.call(this, user, container, delegate, renderers, dataSource, treeOptions) || this;\r\n _this.disposables.add(disposable);\r\n _this.internals = new WorkbenchTreeInternals(_this, treeOptions, getAutomaticKeyboardNavigation, options.overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService);\r\n _this.disposables.add(_this.internals);\r\n return _this;\r\n }\r\n WorkbenchAsyncDataTree = __decorate([\r\n __param(6, IContextKeyService),\r\n __param(7, IListService),\r\n __param(8, IThemeService),\r\n __param(9, IConfigurationService),\r\n __param(10, IKeybindingService),\r\n __param(11, IAccessibilityService)\r\n ], WorkbenchAsyncDataTree);\r\n return WorkbenchAsyncDataTree;\r\n}(AsyncDataTree));\r\nexport { WorkbenchAsyncDataTree };\r\nvar WorkbenchCompressibleAsyncDataTree = /** @class */ (function (_super) {\r\n __extends(WorkbenchCompressibleAsyncDataTree, _super);\r\n function WorkbenchCompressibleAsyncDataTree(user, container, virtualDelegate, compressionDelegate, renderers, dataSource, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService) {\r\n var _this = this;\r\n var _a = workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService), treeOptions = _a.options, getAutomaticKeyboardNavigation = _a.getAutomaticKeyboardNavigation, disposable = _a.disposable;\r\n _this = _super.call(this, user, container, virtualDelegate, compressionDelegate, renderers, dataSource, treeOptions) || this;\r\n _this.disposables.add(disposable);\r\n _this.internals = new WorkbenchTreeInternals(_this, treeOptions, getAutomaticKeyboardNavigation, options.overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService);\r\n _this.disposables.add(_this.internals);\r\n return _this;\r\n }\r\n WorkbenchCompressibleAsyncDataTree = __decorate([\r\n __param(7, IContextKeyService),\r\n __param(8, IListService),\r\n __param(9, IThemeService),\r\n __param(10, IConfigurationService),\r\n __param(11, IKeybindingService),\r\n __param(12, IAccessibilityService)\r\n ], WorkbenchCompressibleAsyncDataTree);\r\n return WorkbenchCompressibleAsyncDataTree;\r\n}(CompressibleAsyncDataTree));\r\nexport { WorkbenchCompressibleAsyncDataTree };\r\nfunction workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService) {\r\n WorkbenchListSupportsKeyboardNavigation.bindTo(contextKeyService);\r\n if (!didBindWorkbenchListAutomaticKeyboardNavigation) {\r\n WorkbenchListAutomaticKeyboardNavigation.bindTo(contextKeyService);\r\n didBindWorkbenchListAutomaticKeyboardNavigation = true;\r\n }\r\n var getAutomaticKeyboardNavigation = function () {\r\n // give priority to the context key value to disable this completely\r\n var automaticKeyboardNavigation = contextKeyService.getContextKeyValue(WorkbenchListAutomaticKeyboardNavigationKey);\r\n if (automaticKeyboardNavigation) {\r\n automaticKeyboardNavigation = configurationService.getValue(automaticKeyboardNavigationSettingKey);\r\n }\r\n return automaticKeyboardNavigation;\r\n };\r\n var accessibilityOn = accessibilityService.getAccessibilitySupport() === 2 /* Enabled */;\r\n var keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue(keyboardNavigationSettingKey);\r\n var horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : getHorizontalScrollingSetting(configurationService);\r\n var openOnSingleClick = useSingleClickToOpen(configurationService);\r\n var _a = toWorkbenchListOptions(options, configurationService, keybindingService), workbenchListOptions = _a[0], disposable = _a[1];\r\n var additionalScrollHeight = options.additionalScrollHeight;\r\n return {\r\n getAutomaticKeyboardNavigation: getAutomaticKeyboardNavigation,\r\n disposable: disposable,\r\n options: __assign(__assign({ \r\n // ...options, // TODO@Joao why is this not splatted here?\r\n keyboardSupport: false }, workbenchListOptions), { indent: configurationService.getValue(treeIndentKey), renderIndentGuides: configurationService.getValue(treeRenderIndentGuidesKey), automaticKeyboardNavigation: getAutomaticKeyboardNavigation(), simpleKeyboardNavigation: keyboardNavigation === 'simple', filterOnType: keyboardNavigation === 'filter', horizontalScrolling: horizontalScrolling,\r\n openOnSingleClick: openOnSingleClick, keyboardNavigationEventFilter: createKeyboardNavigationEventFilter(container, keybindingService), additionalScrollHeight: additionalScrollHeight, hideTwistiesOfChildlessElements: options.hideTwistiesOfChildlessElements })\r\n };\r\n}\r\nvar WorkbenchTreeInternals = /** @class */ (function () {\r\n function WorkbenchTreeInternals(tree, options, getAutomaticKeyboardNavigation, overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService) {\r\n var _this = this;\r\n this.disposables = [];\r\n this.contextKeyService = createScopedContextKeyService(contextKeyService, tree);\r\n var listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);\r\n listSupportsMultiSelect.set(!(options.multipleSelectionSupport === false));\r\n this.hasSelectionOrFocus = WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService);\r\n this.hasDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService);\r\n this.hasMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService);\r\n this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\r\n var interestingContextKeys = new Set();\r\n interestingContextKeys.add(WorkbenchListAutomaticKeyboardNavigationKey);\r\n var updateKeyboardNavigation = function () {\r\n var accessibilityOn = accessibilityService.getAccessibilitySupport() === 2 /* Enabled */;\r\n var keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue(keyboardNavigationSettingKey);\r\n tree.updateOptions({\r\n simpleKeyboardNavigation: keyboardNavigation === 'simple',\r\n filterOnType: keyboardNavigation === 'filter'\r\n });\r\n };\r\n this.disposables.push(this.contextKeyService, listService.register(tree), overrideStyles ? attachListStyler(tree, themeService, overrideStyles) : Disposable.None, tree.onDidChangeSelection(function () {\r\n var selection = tree.getSelection();\r\n var focus = tree.getFocus();\r\n _this.hasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);\r\n _this.hasMultiSelection.set(selection.length > 1);\r\n _this.hasDoubleSelection.set(selection.length === 2);\r\n }), tree.onDidChangeFocus(function () {\r\n var selection = tree.getSelection();\r\n var focus = tree.getFocus();\r\n _this.hasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);\r\n }), configurationService.onDidChangeConfiguration(function (e) {\r\n if (e.affectsConfiguration(openModeSettingKey)) {\r\n tree.updateOptions({ openOnSingleClick: useSingleClickToOpen(configurationService) });\r\n }\r\n if (e.affectsConfiguration(multiSelectModifierSettingKey)) {\r\n _this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\r\n }\r\n if (e.affectsConfiguration(treeIndentKey)) {\r\n var indent = configurationService.getValue(treeIndentKey);\r\n tree.updateOptions({ indent: indent });\r\n }\r\n if (e.affectsConfiguration(treeRenderIndentGuidesKey)) {\r\n var renderIndentGuides = configurationService.getValue(treeRenderIndentGuidesKey);\r\n tree.updateOptions({ renderIndentGuides: renderIndentGuides });\r\n }\r\n if (e.affectsConfiguration(keyboardNavigationSettingKey)) {\r\n updateKeyboardNavigation();\r\n }\r\n if (e.affectsConfiguration(automaticKeyboardNavigationSettingKey)) {\r\n tree.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });\r\n }\r\n }), this.contextKeyService.onDidChangeContext(function (e) {\r\n if (e.affectsSome(interestingContextKeys)) {\r\n tree.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });\r\n }\r\n }), accessibilityService.onDidChangeAccessibilitySupport(function () { return updateKeyboardNavigation(); }));\r\n }\r\n WorkbenchTreeInternals.prototype.dispose = function () {\r\n this.disposables = dispose(this.disposables);\r\n };\r\n WorkbenchTreeInternals = __decorate([\r\n __param(4, IContextKeyService),\r\n __param(5, IListService),\r\n __param(6, IThemeService),\r\n __param(7, IConfigurationService),\r\n __param(8, IAccessibilityService)\r\n ], WorkbenchTreeInternals);\r\n return WorkbenchTreeInternals;\r\n}());\r\nvar configurationRegistry = Registry.as(ConfigurationExtensions.Configuration);\r\nconfigurationRegistry.registerConfiguration({\r\n 'id': 'workbench',\r\n 'order': 7,\r\n 'title': localize('workbenchConfigurationTitle', \"Workbench\"),\r\n 'type': 'object',\r\n 'properties': (_a = {},\r\n _a[multiSelectModifierSettingKey] = {\r\n 'type': 'string',\r\n 'enum': ['ctrlCmd', 'alt'],\r\n 'enumDescriptions': [\r\n localize('multiSelectModifier.ctrlCmd', \"Maps to `Control` on Windows and Linux and to `Command` on macOS.\"),\r\n localize('multiSelectModifier.alt', \"Maps to `Alt` on Windows and Linux and to `Option` on macOS.\")\r\n ],\r\n 'default': 'ctrlCmd',\r\n 'description': localize({\r\n key: 'multiSelectModifier',\r\n comment: [\r\n '- `ctrlCmd` refers to a value the setting can take and should not be localized.',\r\n '- `Control` and `Command` refer to the modifier keys Ctrl or Cmd on the keyboard and can be localized.'\r\n ]\r\n }, \"The modifier to be used to add an item in trees and lists to a multi-selection with the mouse (for example in the explorer, open editors and scm view). The 'Open to Side' mouse gestures - if supported - will adapt such that they do not conflict with the multiselect modifier.\")\r\n },\r\n _a[openModeSettingKey] = {\r\n 'type': 'string',\r\n 'enum': ['singleClick', 'doubleClick'],\r\n 'default': 'singleClick',\r\n 'description': localize({\r\n key: 'openModeModifier',\r\n comment: ['`singleClick` and `doubleClick` refers to a value the setting can take and should not be localized.']\r\n }, \"Controls how to open items in trees and lists using the mouse (if supported). For parents with children in trees, this setting will control if a single click expands the parent or a double click. Note that some trees and lists might choose to ignore this setting if it is not applicable. \")\r\n },\r\n _a[horizontalScrollingKey] = {\r\n 'type': 'boolean',\r\n 'default': false,\r\n 'description': localize('horizontalScrolling setting', \"Controls whether lists and trees support horizontal scrolling in the workbench.\")\r\n },\r\n _a['workbench.tree.horizontalScrolling'] = {\r\n 'type': 'boolean',\r\n 'default': false,\r\n 'description': localize('tree horizontalScrolling setting', \"Controls whether trees support horizontal scrolling in the workbench.\"),\r\n 'deprecationMessage': localize('deprecated', \"This setting is deprecated, please use '{0}' instead.\", horizontalScrollingKey)\r\n },\r\n _a[treeIndentKey] = {\r\n 'type': 'number',\r\n 'default': 8,\r\n minimum: 0,\r\n maximum: 40,\r\n 'description': localize('tree indent setting', \"Controls tree indentation in pixels.\")\r\n },\r\n _a[treeRenderIndentGuidesKey] = {\r\n type: 'string',\r\n enum: ['none', 'onHover', 'always'],\r\n default: 'onHover',\r\n description: localize('render tree indent guides', \"Controls whether the tree should render indent guides.\")\r\n },\r\n _a[keyboardNavigationSettingKey] = {\r\n 'type': 'string',\r\n 'enum': ['simple', 'highlight', 'filter'],\r\n 'enumDescriptions': [\r\n localize('keyboardNavigationSettingKey.simple', \"Simple keyboard navigation focuses elements which match the keyboard input. Matching is done only on prefixes.\"),\r\n localize('keyboardNavigationSettingKey.highlight', \"Highlight keyboard navigation highlights elements which match the keyboard input. Further up and down navigation will traverse only the highlighted elements.\"),\r\n localize('keyboardNavigationSettingKey.filter', \"Filter keyboard navigation will filter out and hide all the elements which do not match the keyboard input.\")\r\n ],\r\n 'default': 'highlight',\r\n 'description': localize('keyboardNavigationSettingKey', \"Controls the keyboard navigation style for lists and trees in the workbench. Can be simple, highlight and filter.\")\r\n },\r\n _a[automaticKeyboardNavigationSettingKey] = {\r\n 'type': 'boolean',\r\n 'default': true,\r\n markdownDescription: localize('automatic keyboard navigation setting', \"Controls whether keyboard navigation in lists and trees is automatically triggered simply by typing. If set to `false`, keyboard navigation is only triggered when executing the `list.toggleKeyboardNavigation` command, for which you can assign a keyboard shortcut.\")\r\n },\r\n _a)\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { localize } from '../../../nls.js';\r\nimport Severity from '../../../base/common/severity.js';\r\nexport var MarkerSeverity;\r\n(function (MarkerSeverity) {\r\n MarkerSeverity[MarkerSeverity[\"Hint\"] = 1] = \"Hint\";\r\n MarkerSeverity[MarkerSeverity[\"Info\"] = 2] = \"Info\";\r\n MarkerSeverity[MarkerSeverity[\"Warning\"] = 4] = \"Warning\";\r\n MarkerSeverity[MarkerSeverity[\"Error\"] = 8] = \"Error\";\r\n})(MarkerSeverity || (MarkerSeverity = {}));\r\n(function (MarkerSeverity) {\r\n function compare(a, b) {\r\n return b - a;\r\n }\r\n MarkerSeverity.compare = compare;\r\n var _displayStrings = Object.create(null);\r\n _displayStrings[MarkerSeverity.Error] = localize('sev.error', \"Error\");\r\n _displayStrings[MarkerSeverity.Warning] = localize('sev.warning', \"Warning\");\r\n _displayStrings[MarkerSeverity.Info] = localize('sev.info', \"Info\");\r\n function toString(a) {\r\n return _displayStrings[a] || '';\r\n }\r\n MarkerSeverity.toString = toString;\r\n function fromSeverity(severity) {\r\n switch (severity) {\r\n case Severity.Error: return MarkerSeverity.Error;\r\n case Severity.Warning: return MarkerSeverity.Warning;\r\n case Severity.Info: return MarkerSeverity.Info;\r\n case Severity.Ignore: return MarkerSeverity.Hint;\r\n }\r\n }\r\n MarkerSeverity.fromSeverity = fromSeverity;\r\n function toSeverity(severity) {\r\n switch (severity) {\r\n case MarkerSeverity.Error: return Severity.Error;\r\n case MarkerSeverity.Warning: return Severity.Warning;\r\n case MarkerSeverity.Info: return Severity.Info;\r\n case MarkerSeverity.Hint: return Severity.Ignore;\r\n }\r\n }\r\n MarkerSeverity.toSeverity = toSeverity;\r\n})(MarkerSeverity || (MarkerSeverity = {}));\r\nexport var IMarkerData;\r\n(function (IMarkerData) {\r\n var emptyString = '';\r\n function makeKey(markerData) {\r\n return makeKeyOptionalMessage(markerData, true);\r\n }\r\n IMarkerData.makeKey = makeKey;\r\n function makeKeyOptionalMessage(markerData, useMessage) {\r\n var result = [emptyString];\r\n if (markerData.source) {\r\n result.push(markerData.source.replace('¦', '\\¦'));\r\n }\r\n else {\r\n result.push(emptyString);\r\n }\r\n if (markerData.code) {\r\n result.push(markerData.code.replace('¦', '\\¦'));\r\n }\r\n else {\r\n result.push(emptyString);\r\n }\r\n if (markerData.severity !== undefined && markerData.severity !== null) {\r\n result.push(MarkerSeverity.toString(markerData.severity));\r\n }\r\n else {\r\n result.push(emptyString);\r\n }\r\n // Modifed to not include the message as part of the marker key to work around\r\n // https://github.com/microsoft/vscode/issues/77475\r\n if (markerData.message && useMessage) {\r\n result.push(markerData.message.replace('¦', '\\¦'));\r\n }\r\n else {\r\n result.push(emptyString);\r\n }\r\n if (markerData.startLineNumber !== undefined && markerData.startLineNumber !== null) {\r\n result.push(markerData.startLineNumber.toString());\r\n }\r\n else {\r\n result.push(emptyString);\r\n }\r\n if (markerData.startColumn !== undefined && markerData.startColumn !== null) {\r\n result.push(markerData.startColumn.toString());\r\n }\r\n else {\r\n result.push(emptyString);\r\n }\r\n if (markerData.endLineNumber !== undefined && markerData.endLineNumber !== null) {\r\n result.push(markerData.endLineNumber.toString());\r\n }\r\n else {\r\n result.push(emptyString);\r\n }\r\n if (markerData.endColumn !== undefined && markerData.endColumn !== null) {\r\n result.push(markerData.endColumn.toString());\r\n }\r\n else {\r\n result.push(emptyString);\r\n }\r\n result.push(emptyString);\r\n return result.join('¦');\r\n }\r\n IMarkerData.makeKeyOptionalMessage = makeKeyOptionalMessage;\r\n})(IMarkerData || (IMarkerData = {}));\r\nexport var IMarkerService = createDecorator('markerService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { isFalsyOrEmpty } from '../../../base/common/arrays.js';\r\nimport { Schemas } from '../../../base/common/network.js';\r\nimport { isEmptyObject } from '../../../base/common/types.js';\r\nimport { Event, Emitter } from '../../../base/common/event.js';\r\nimport { MarkerSeverity } from './markers.js';\r\nvar MapMap;\r\n(function (MapMap) {\r\n function get(map, key1, key2) {\r\n if (map[key1]) {\r\n return map[key1][key2];\r\n }\r\n return undefined;\r\n }\r\n MapMap.get = get;\r\n function set(map, key1, key2, value) {\r\n if (!map[key1]) {\r\n map[key1] = Object.create(null);\r\n }\r\n map[key1][key2] = value;\r\n }\r\n MapMap.set = set;\r\n function remove(map, key1, key2) {\r\n if (map[key1] && map[key1][key2]) {\r\n delete map[key1][key2];\r\n if (isEmptyObject(map[key1])) {\r\n delete map[key1];\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n MapMap.remove = remove;\r\n})(MapMap || (MapMap = {}));\r\nvar MarkerStats = /** @class */ (function () {\r\n function MarkerStats(service) {\r\n this.errors = 0;\r\n this.infos = 0;\r\n this.warnings = 0;\r\n this.unknowns = 0;\r\n this._data = Object.create(null);\r\n this._service = service;\r\n this._subscription = service.onMarkerChanged(this._update, this);\r\n }\r\n MarkerStats.prototype.dispose = function () {\r\n this._subscription.dispose();\r\n this._data = undefined;\r\n };\r\n MarkerStats.prototype._update = function (resources) {\r\n if (!this._data) {\r\n return;\r\n }\r\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\r\n var resource = resources_1[_i];\r\n var key = resource.toString();\r\n var oldStats = this._data[key];\r\n if (oldStats) {\r\n this._substract(oldStats);\r\n }\r\n var newStats = this._resourceStats(resource);\r\n this._add(newStats);\r\n this._data[key] = newStats;\r\n }\r\n };\r\n MarkerStats.prototype._resourceStats = function (resource) {\r\n var result = { errors: 0, warnings: 0, infos: 0, unknowns: 0 };\r\n // TODO this is a hack\r\n if (resource.scheme === Schemas.inMemory || resource.scheme === Schemas.walkThrough || resource.scheme === Schemas.walkThroughSnippet) {\r\n return result;\r\n }\r\n for (var _i = 0, _a = this._service.read({ resource: resource }); _i < _a.length; _i++) {\r\n var severity = _a[_i].severity;\r\n if (severity === MarkerSeverity.Error) {\r\n result.errors += 1;\r\n }\r\n else if (severity === MarkerSeverity.Warning) {\r\n result.warnings += 1;\r\n }\r\n else if (severity === MarkerSeverity.Info) {\r\n result.infos += 1;\r\n }\r\n else {\r\n result.unknowns += 1;\r\n }\r\n }\r\n return result;\r\n };\r\n MarkerStats.prototype._substract = function (op) {\r\n this.errors -= op.errors;\r\n this.warnings -= op.warnings;\r\n this.infos -= op.infos;\r\n this.unknowns -= op.unknowns;\r\n };\r\n MarkerStats.prototype._add = function (op) {\r\n this.errors += op.errors;\r\n this.warnings += op.warnings;\r\n this.infos += op.infos;\r\n this.unknowns += op.unknowns;\r\n };\r\n return MarkerStats;\r\n}());\r\nvar MarkerService = /** @class */ (function () {\r\n function MarkerService() {\r\n this._onMarkerChanged = new Emitter();\r\n this._onMarkerChangedEvent = Event.debounce(this._onMarkerChanged.event, MarkerService._debouncer, 0);\r\n this._byResource = Object.create(null);\r\n this._byOwner = Object.create(null);\r\n this._stats = new MarkerStats(this);\r\n }\r\n MarkerService.prototype.dispose = function () {\r\n this._stats.dispose();\r\n };\r\n Object.defineProperty(MarkerService.prototype, \"onMarkerChanged\", {\r\n get: function () {\r\n return this._onMarkerChangedEvent;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n MarkerService.prototype.remove = function (owner, resources) {\r\n for (var _i = 0, _a = resources || []; _i < _a.length; _i++) {\r\n var resource = _a[_i];\r\n this.changeOne(owner, resource, []);\r\n }\r\n };\r\n MarkerService.prototype.changeOne = function (owner, resource, markerData) {\r\n if (isFalsyOrEmpty(markerData)) {\r\n // remove marker for this (owner,resource)-tuple\r\n var a = MapMap.remove(this._byResource, resource.toString(), owner);\r\n var b = MapMap.remove(this._byOwner, owner, resource.toString());\r\n if (a !== b) {\r\n throw new Error('invalid marker service state');\r\n }\r\n if (a && b) {\r\n this._onMarkerChanged.fire([resource]);\r\n }\r\n }\r\n else {\r\n // insert marker for this (owner,resource)-tuple\r\n var markers = [];\r\n for (var _i = 0, markerData_1 = markerData; _i < markerData_1.length; _i++) {\r\n var data = markerData_1[_i];\r\n var marker = MarkerService._toMarker(owner, resource, data);\r\n if (marker) {\r\n markers.push(marker);\r\n }\r\n }\r\n MapMap.set(this._byResource, resource.toString(), owner, markers);\r\n MapMap.set(this._byOwner, owner, resource.toString(), markers);\r\n this._onMarkerChanged.fire([resource]);\r\n }\r\n };\r\n MarkerService._toMarker = function (owner, resource, data) {\r\n var code = data.code, severity = data.severity, message = data.message, source = data.source, startLineNumber = data.startLineNumber, startColumn = data.startColumn, endLineNumber = data.endLineNumber, endColumn = data.endColumn, relatedInformation = data.relatedInformation, tags = data.tags;\r\n if (!message) {\r\n return undefined;\r\n }\r\n // santize data\r\n startLineNumber = startLineNumber > 0 ? startLineNumber : 1;\r\n startColumn = startColumn > 0 ? startColumn : 1;\r\n endLineNumber = endLineNumber >= startLineNumber ? endLineNumber : startLineNumber;\r\n endColumn = endColumn > 0 ? endColumn : startColumn;\r\n return {\r\n resource: resource,\r\n owner: owner,\r\n code: code,\r\n severity: severity,\r\n message: message,\r\n source: source,\r\n startLineNumber: startLineNumber,\r\n startColumn: startColumn,\r\n endLineNumber: endLineNumber,\r\n endColumn: endColumn,\r\n relatedInformation: relatedInformation,\r\n tags: tags,\r\n };\r\n };\r\n MarkerService.prototype.read = function (filter) {\r\n if (filter === void 0) { filter = Object.create(null); }\r\n var owner = filter.owner, resource = filter.resource, severities = filter.severities, take = filter.take;\r\n if (!take || take < 0) {\r\n take = -1;\r\n }\r\n if (owner && resource) {\r\n // exactly one owner AND resource\r\n var data = MapMap.get(this._byResource, resource.toString(), owner);\r\n if (!data) {\r\n return [];\r\n }\r\n else {\r\n var result = [];\r\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\r\n var marker = data_1[_i];\r\n if (MarkerService._accept(marker, severities)) {\r\n var newLen = result.push(marker);\r\n if (take > 0 && newLen === take) {\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n }\r\n else if (!owner && !resource) {\r\n // all\r\n var result = [];\r\n for (var key1 in this._byResource) {\r\n for (var key2 in this._byResource[key1]) {\r\n for (var _a = 0, _b = this._byResource[key1][key2]; _a < _b.length; _a++) {\r\n var data = _b[_a];\r\n if (MarkerService._accept(data, severities)) {\r\n var newLen = result.push(data);\r\n if (take > 0 && newLen === take) {\r\n return result;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n else {\r\n // of one resource OR owner\r\n var map = owner\r\n ? this._byOwner[owner]\r\n : resource ? this._byResource[resource.toString()] : undefined;\r\n if (!map) {\r\n return [];\r\n }\r\n var result = [];\r\n for (var key in map) {\r\n for (var _c = 0, _d = map[key]; _c < _d.length; _c++) {\r\n var data = _d[_c];\r\n if (MarkerService._accept(data, severities)) {\r\n var newLen = result.push(data);\r\n if (take > 0 && newLen === take) {\r\n return result;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n MarkerService._accept = function (marker, severities) {\r\n return severities === undefined || (severities & marker.severity) === marker.severity;\r\n };\r\n MarkerService._debouncer = function (last, event) {\r\n if (!last) {\r\n MarkerService._dedupeMap = Object.create(null);\r\n last = [];\r\n }\r\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\r\n var uri = event_1[_i];\r\n if (MarkerService._dedupeMap[uri.toString()] === undefined) {\r\n MarkerService._dedupeMap[uri.toString()] = true;\r\n last.push(uri);\r\n }\r\n }\r\n return last;\r\n };\r\n return MarkerService;\r\n}());\r\nexport { MarkerService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\r\nimport { Event, Emitter } from '../../../base/common/event.js';\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { isUndefinedOrNull } from '../../../base/common/types.js';\r\nexport var IStorageService = createDecorator('storageService');\r\nexport var WillSaveStateReason;\r\n(function (WillSaveStateReason) {\r\n WillSaveStateReason[WillSaveStateReason[\"NONE\"] = 0] = \"NONE\";\r\n WillSaveStateReason[WillSaveStateReason[\"SHUTDOWN\"] = 1] = \"SHUTDOWN\";\r\n})(WillSaveStateReason || (WillSaveStateReason = {}));\r\nvar InMemoryStorageService = /** @class */ (function (_super) {\r\n __extends(InMemoryStorageService, _super);\r\n function InMemoryStorageService() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this._onDidChangeStorage = _this._register(new Emitter());\r\n _this.onDidChangeStorage = _this._onDidChangeStorage.event;\r\n _this.onWillSaveState = Event.None;\r\n _this.globalCache = new Map();\r\n _this.workspaceCache = new Map();\r\n return _this;\r\n }\r\n InMemoryStorageService.prototype.getCache = function (scope) {\r\n return scope === 0 /* GLOBAL */ ? this.globalCache : this.workspaceCache;\r\n };\r\n InMemoryStorageService.prototype.get = function (key, scope, fallbackValue) {\r\n var value = this.getCache(scope).get(key);\r\n if (isUndefinedOrNull(value)) {\r\n return fallbackValue;\r\n }\r\n return value;\r\n };\r\n InMemoryStorageService.prototype.getBoolean = function (key, scope, fallbackValue) {\r\n var value = this.getCache(scope).get(key);\r\n if (isUndefinedOrNull(value)) {\r\n return fallbackValue;\r\n }\r\n return value === 'true';\r\n };\r\n InMemoryStorageService.prototype.store = function (key, value, scope) {\r\n // We remove the key for undefined/null values\r\n if (isUndefinedOrNull(value)) {\r\n return this.remove(key, scope);\r\n }\r\n // Otherwise, convert to String and store\r\n var valueStr = String(value);\r\n // Return early if value already set\r\n var currentValue = this.getCache(scope).get(key);\r\n if (currentValue === valueStr) {\r\n return Promise.resolve();\r\n }\r\n // Update in cache\r\n this.getCache(scope).set(key, valueStr);\r\n // Events\r\n this._onDidChangeStorage.fire({ scope: scope, key: key });\r\n return Promise.resolve();\r\n };\r\n InMemoryStorageService.prototype.remove = function (key, scope) {\r\n var wasDeleted = this.getCache(scope).delete(key);\r\n if (!wasDeleted) {\r\n return Promise.resolve(); // Return early if value already deleted\r\n }\r\n // Events\r\n this._onDidChangeStorage.fire({ scope: scope, key: key });\r\n return Promise.resolve();\r\n };\r\n return InMemoryStorageService;\r\n}(Disposable));\r\nexport { InMemoryStorageService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport { Emitter, Event } from '../../../base/common/event.js';\r\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\r\nimport { isIMenuItem, MenuItemAction, MenuRegistry, SubmenuItemAction } from './actions.js';\r\nimport { ICommandService } from '../../commands/common/commands.js';\r\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\r\nvar MenuService = /** @class */ (function () {\r\n function MenuService(_commandService) {\r\n this._commandService = _commandService;\r\n //\r\n }\r\n MenuService.prototype.createMenu = function (id, contextKeyService) {\r\n return new Menu(id, this._commandService, contextKeyService);\r\n };\r\n MenuService = __decorate([\r\n __param(0, ICommandService)\r\n ], MenuService);\r\n return MenuService;\r\n}());\r\nexport { MenuService };\r\nvar Menu = /** @class */ (function () {\r\n function Menu(_id, _commandService, _contextKeyService) {\r\n var _this = this;\r\n this._id = _id;\r\n this._commandService = _commandService;\r\n this._contextKeyService = _contextKeyService;\r\n this._onDidChange = new Emitter();\r\n this._dispoables = new DisposableStore();\r\n this._menuGroups = [];\r\n this._contextKeys = new Set();\r\n this._build();\r\n // rebuild this menu whenever the menu registry reports an\r\n // event for this MenuId\r\n this._dispoables.add(Event.debounce(Event.filter(MenuRegistry.onDidChangeMenu, function (menuId) { return menuId === _this._id; }), function () { }, 50)(this._build, this));\r\n // when context keys change we need to check if the menu also\r\n // has changed\r\n this._dispoables.add(Event.debounce(this._contextKeyService.onDidChangeContext, function (last, event) { return last || event.affectsSome(_this._contextKeys); }, 50)(function (e) { return e && _this._onDidChange.fire(undefined); }, this));\r\n }\r\n Menu.prototype.dispose = function () {\r\n this._dispoables.dispose();\r\n this._onDidChange.dispose();\r\n };\r\n Menu.prototype._build = function () {\r\n // reset\r\n this._menuGroups.length = 0;\r\n this._contextKeys.clear();\r\n var menuItems = MenuRegistry.getMenuItems(this._id);\r\n var group;\r\n menuItems.sort(Menu._compareMenuItems);\r\n for (var _i = 0, menuItems_1 = menuItems; _i < menuItems_1.length; _i++) {\r\n var item = menuItems_1[_i];\r\n // group by groupId\r\n var groupName = item.group || '';\r\n if (!group || group[0] !== groupName) {\r\n group = [groupName, []];\r\n this._menuGroups.push(group);\r\n }\r\n group[1].push(item);\r\n // keep keys for eventing\r\n Menu._fillInKbExprKeys(item.when, this._contextKeys);\r\n // keep precondition keys for event if applicable\r\n if (isIMenuItem(item) && item.command.precondition) {\r\n Menu._fillInKbExprKeys(item.command.precondition, this._contextKeys);\r\n }\r\n // keep toggled keys for event if applicable\r\n if (isIMenuItem(item) && item.command.toggled) {\r\n Menu._fillInKbExprKeys(item.command.toggled, this._contextKeys);\r\n }\r\n }\r\n this._onDidChange.fire(this);\r\n };\r\n Menu.prototype.getActions = function (options) {\r\n var result = [];\r\n for (var _i = 0, _a = this._menuGroups; _i < _a.length; _i++) {\r\n var group = _a[_i];\r\n var id = group[0], items = group[1];\r\n var activeActions = [];\r\n for (var _b = 0, items_1 = items; _b < items_1.length; _b++) {\r\n var item = items_1[_b];\r\n if (this._contextKeyService.contextMatchesRules(item.when)) {\r\n var action = isIMenuItem(item)\r\n ? new MenuItemAction(item.command, item.alt, options, this._contextKeyService, this._commandService)\r\n : new SubmenuItemAction(item);\r\n activeActions.push(action);\r\n }\r\n }\r\n if (activeActions.length > 0) {\r\n result.push([id, activeActions]);\r\n }\r\n }\r\n return result;\r\n };\r\n Menu._fillInKbExprKeys = function (exp, set) {\r\n if (exp) {\r\n for (var _i = 0, _a = exp.keys(); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n set.add(key);\r\n }\r\n }\r\n };\r\n Menu._compareMenuItems = function (a, b) {\r\n var aGroup = a.group;\r\n var bGroup = b.group;\r\n if (aGroup !== bGroup) {\r\n // Falsy groups come last\r\n if (!aGroup) {\r\n return 1;\r\n }\r\n else if (!bGroup) {\r\n return -1;\r\n }\r\n // 'navigation' group comes first\r\n if (aGroup === 'navigation') {\r\n return -1;\r\n }\r\n else if (bGroup === 'navigation') {\r\n return 1;\r\n }\r\n // lexical sort for groups\r\n var value = aGroup.localeCompare(bGroup);\r\n if (value !== 0) {\r\n return value;\r\n }\r\n }\r\n // sort on priority - default is 0\r\n var aPrio = a.order || 0;\r\n var bPrio = b.order || 0;\r\n if (aPrio < bPrio) {\r\n return -1;\r\n }\r\n else if (aPrio > bPrio) {\r\n return 1;\r\n }\r\n // sort on titles\r\n return Menu._compareTitles(isIMenuItem(a) ? a.command.title : a.title, isIMenuItem(b) ? b.command.title : b.title);\r\n };\r\n Menu._compareTitles = function (a, b) {\r\n var aStr = typeof a === 'string' ? a : a.value;\r\n var bStr = typeof b === 'string' ? b : b.value;\r\n return aStr.localeCompare(bStr);\r\n };\r\n Menu = __decorate([\r\n __param(1, ICommandService),\r\n __param(2, IContextKeyService)\r\n ], Menu);\r\n return Menu;\r\n}());\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nexport var IMarkerDecorationsService = createDecorator('markerDecorationsService');\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport { IMarkerService, MarkerSeverity } from '../../../platform/markers/common/markers.js';\r\nimport { Disposable, toDisposable } from '../../../base/common/lifecycle.js';\r\nimport { OverviewRulerLane, MinimapPosition } from '../model.js';\r\nimport { themeColorFromId } from '../../../platform/theme/common/themeService.js';\r\nimport { overviewRulerWarning, overviewRulerInfo, overviewRulerError } from '../view/editorColorRegistry.js';\r\nimport { IModelService } from './modelService.js';\r\nimport { Range } from '../core/range.js';\r\nimport { keys } from '../../../base/common/map.js';\r\nimport { Schemas } from '../../../base/common/network.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { withUndefinedAsNull } from '../../../base/common/types.js';\r\nimport { minimapWarning, minimapError } from '../../../platform/theme/common/colorRegistry.js';\r\nfunction MODEL_ID(resource) {\r\n return resource.toString();\r\n}\r\nvar MarkerDecorations = /** @class */ (function (_super) {\r\n __extends(MarkerDecorations, _super);\r\n function MarkerDecorations(model) {\r\n var _this = _super.call(this) || this;\r\n _this.model = model;\r\n _this._markersData = new Map();\r\n _this._register(toDisposable(function () {\r\n _this.model.deltaDecorations(keys(_this._markersData), []);\r\n _this._markersData.clear();\r\n }));\r\n return _this;\r\n }\r\n MarkerDecorations.prototype.update = function (markers, newDecorations) {\r\n var ids = this.model.deltaDecorations(keys(this._markersData), newDecorations);\r\n for (var index = 0; index < ids.length; index++) {\r\n this._markersData.set(ids[index], markers[index]);\r\n }\r\n };\r\n MarkerDecorations.prototype.getMarker = function (decoration) {\r\n return this._markersData.get(decoration.id);\r\n };\r\n return MarkerDecorations;\r\n}(Disposable));\r\nvar MarkerDecorationsService = /** @class */ (function (_super) {\r\n __extends(MarkerDecorationsService, _super);\r\n function MarkerDecorationsService(modelService, _markerService) {\r\n var _this = _super.call(this) || this;\r\n _this._markerService = _markerService;\r\n _this._onDidChangeMarker = _this._register(new Emitter());\r\n _this._markerDecorations = new Map();\r\n modelService.getModels().forEach(function (model) { return _this._onModelAdded(model); });\r\n _this._register(modelService.onModelAdded(_this._onModelAdded, _this));\r\n _this._register(modelService.onModelRemoved(_this._onModelRemoved, _this));\r\n _this._register(_this._markerService.onMarkerChanged(_this._handleMarkerChange, _this));\r\n return _this;\r\n }\r\n MarkerDecorationsService.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this._markerDecorations.forEach(function (value) { return value.dispose(); });\r\n this._markerDecorations.clear();\r\n };\r\n MarkerDecorationsService.prototype.getMarker = function (model, decoration) {\r\n var markerDecorations = this._markerDecorations.get(MODEL_ID(model.uri));\r\n return markerDecorations ? withUndefinedAsNull(markerDecorations.getMarker(decoration)) : null;\r\n };\r\n MarkerDecorationsService.prototype._handleMarkerChange = function (changedResources) {\r\n var _this = this;\r\n changedResources.forEach(function (resource) {\r\n var markerDecorations = _this._markerDecorations.get(MODEL_ID(resource));\r\n if (markerDecorations) {\r\n _this._updateDecorations(markerDecorations);\r\n }\r\n });\r\n };\r\n MarkerDecorationsService.prototype._onModelAdded = function (model) {\r\n var markerDecorations = new MarkerDecorations(model);\r\n this._markerDecorations.set(MODEL_ID(model.uri), markerDecorations);\r\n this._updateDecorations(markerDecorations);\r\n };\r\n MarkerDecorationsService.prototype._onModelRemoved = function (model) {\r\n var _this = this;\r\n var markerDecorations = this._markerDecorations.get(MODEL_ID(model.uri));\r\n if (markerDecorations) {\r\n markerDecorations.dispose();\r\n this._markerDecorations.delete(MODEL_ID(model.uri));\r\n }\r\n // clean up markers for internal, transient models\r\n if (model.uri.scheme === Schemas.inMemory\r\n || model.uri.scheme === Schemas.internal\r\n || model.uri.scheme === Schemas.vscode) {\r\n if (this._markerService) {\r\n this._markerService.read({ resource: model.uri }).map(function (marker) { return marker.owner; }).forEach(function (owner) { return _this._markerService.remove(owner, [model.uri]); });\r\n }\r\n }\r\n };\r\n MarkerDecorationsService.prototype._updateDecorations = function (markerDecorations) {\r\n var _this = this;\r\n // Limit to the first 500 errors/warnings\r\n var markers = this._markerService.read({ resource: markerDecorations.model.uri, take: 500 });\r\n var newModelDecorations = markers.map(function (marker) {\r\n return {\r\n range: _this._createDecorationRange(markerDecorations.model, marker),\r\n options: _this._createDecorationOption(marker)\r\n };\r\n });\r\n markerDecorations.update(markers, newModelDecorations);\r\n this._onDidChangeMarker.fire(markerDecorations.model);\r\n };\r\n MarkerDecorationsService.prototype._createDecorationRange = function (model, rawMarker) {\r\n var ret = Range.lift(rawMarker);\r\n if (rawMarker.severity === MarkerSeverity.Hint) {\r\n if (!rawMarker.tags || rawMarker.tags.indexOf(1 /* Unnecessary */) === -1) {\r\n // * never render hints on multiple lines\r\n // * make enough space for three dots\r\n ret = ret.setEndPosition(ret.startLineNumber, ret.startColumn + 2);\r\n }\r\n }\r\n ret = model.validateRange(ret);\r\n if (ret.isEmpty()) {\r\n var word = model.getWordAtPosition(ret.getStartPosition());\r\n if (word) {\r\n ret = new Range(ret.startLineNumber, word.startColumn, ret.endLineNumber, word.endColumn);\r\n }\r\n else {\r\n var maxColumn = model.getLineLastNonWhitespaceColumn(ret.startLineNumber) ||\r\n model.getLineMaxColumn(ret.startLineNumber);\r\n if (maxColumn === 1) {\r\n // empty line\r\n // console.warn('marker on empty line:', marker);\r\n }\r\n else if (ret.endColumn >= maxColumn) {\r\n // behind eol\r\n ret = new Range(ret.startLineNumber, maxColumn - 1, ret.endLineNumber, maxColumn);\r\n }\r\n else {\r\n // extend marker to width = 1\r\n ret = new Range(ret.startLineNumber, ret.startColumn, ret.endLineNumber, ret.endColumn + 1);\r\n }\r\n }\r\n }\r\n else if (rawMarker.endColumn === Number.MAX_VALUE && rawMarker.startColumn === 1 && ret.startLineNumber === ret.endLineNumber) {\r\n var minColumn = model.getLineFirstNonWhitespaceColumn(rawMarker.startLineNumber);\r\n if (minColumn < ret.endColumn) {\r\n ret = new Range(ret.startLineNumber, minColumn, ret.endLineNumber, ret.endColumn);\r\n rawMarker.startColumn = minColumn;\r\n }\r\n }\r\n return ret;\r\n };\r\n MarkerDecorationsService.prototype._createDecorationOption = function (marker) {\r\n var className;\r\n var color = undefined;\r\n var zIndex;\r\n var inlineClassName = undefined;\r\n var minimap;\r\n switch (marker.severity) {\r\n case MarkerSeverity.Hint:\r\n if (marker.tags && marker.tags.indexOf(1 /* Unnecessary */) >= 0) {\r\n className = \"squiggly-unnecessary\" /* EditorUnnecessaryDecoration */;\r\n }\r\n else {\r\n className = \"squiggly-hint\" /* EditorHintDecoration */;\r\n }\r\n zIndex = 0;\r\n break;\r\n case MarkerSeverity.Warning:\r\n className = \"squiggly-warning\" /* EditorWarningDecoration */;\r\n color = themeColorFromId(overviewRulerWarning);\r\n zIndex = 20;\r\n minimap = {\r\n color: themeColorFromId(minimapWarning),\r\n position: MinimapPosition.Inline\r\n };\r\n break;\r\n case MarkerSeverity.Info:\r\n className = \"squiggly-info\" /* EditorInfoDecoration */;\r\n color = themeColorFromId(overviewRulerInfo);\r\n zIndex = 10;\r\n break;\r\n case MarkerSeverity.Error:\r\n default:\r\n className = \"squiggly-error\" /* EditorErrorDecoration */;\r\n color = themeColorFromId(overviewRulerError);\r\n zIndex = 30;\r\n minimap = {\r\n color: themeColorFromId(minimapError),\r\n position: MinimapPosition.Inline\r\n };\r\n break;\r\n }\r\n if (marker.tags) {\r\n if (marker.tags.indexOf(1 /* Unnecessary */) !== -1) {\r\n inlineClassName = \"squiggly-inline-unnecessary\" /* EditorUnnecessaryInlineDecoration */;\r\n }\r\n if (marker.tags.indexOf(2 /* Deprecated */) !== -1) {\r\n inlineClassName = \"squiggly-inline-deprecated\" /* EditorDeprecatedInlineDecoration */;\r\n }\r\n }\r\n return {\r\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\r\n className: className,\r\n showIfCollapsed: true,\r\n overviewRuler: {\r\n color: color,\r\n position: OverviewRulerLane.Right\r\n },\r\n minimap: minimap,\r\n zIndex: zIndex,\r\n inlineClassName: inlineClassName,\r\n };\r\n };\r\n MarkerDecorationsService = __decorate([\r\n __param(0, IModelService),\r\n __param(1, IMarkerService)\r\n ], MarkerDecorationsService);\r\n return MarkerDecorationsService;\r\n}(Disposable));\r\nexport { MarkerDecorationsService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { IBulkEditService } from '../../browser/services/bulkEditService.js';\r\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\r\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\r\nimport { EditorWorkerServiceImpl } from '../../common/services/editorWorkerServiceImpl.js';\r\nimport { IModeService } from '../../common/services/modeService.js';\r\nimport { ModeServiceImpl } from '../../common/services/modeServiceImpl.js';\r\nimport { IModelService } from '../../common/services/modelService.js';\r\nimport { ModelServiceImpl } from '../../common/services/modelServiceImpl.js';\r\nimport { ITextResourceConfigurationService, ITextResourcePropertiesService } from '../../common/services/resourceConfiguration.js';\r\nimport { SimpleBulkEditService, SimpleConfigurationService, SimpleDialogService, SimpleNotificationService, SimpleEditorProgressService, SimpleResourceConfigurationService, SimpleResourcePropertiesService, SimpleUriLabelService, SimpleWorkspaceContextService, StandaloneCommandService, StandaloneKeybindingService, StandaloneTelemetryService, SimpleLayoutService } from './simpleServices.js';\r\nimport { StandaloneCodeEditorServiceImpl } from './standaloneCodeServiceImpl.js';\r\nimport { StandaloneThemeServiceImpl } from './standaloneThemeServiceImpl.js';\r\nimport { IStandaloneThemeService } from '../common/standaloneThemeService.js';\r\nimport { IMenuService } from '../../../platform/actions/common/actions.js';\r\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\r\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\r\nimport { ContextKeyService } from '../../../platform/contextkey/browser/contextKeyService.js';\r\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\r\nimport { ContextMenuService } from '../../../platform/contextview/browser/contextMenuService.js';\r\nimport { IContextMenuService, IContextViewService } from '../../../platform/contextview/browser/contextView.js';\r\nimport { ContextViewService } from '../../../platform/contextview/browser/contextViewService.js';\r\nimport { IDialogService } from '../../../platform/dialogs/common/dialogs.js';\r\nimport { IInstantiationService, createDecorator } from '../../../platform/instantiation/common/instantiation.js';\r\nimport { InstantiationService } from '../../../platform/instantiation/common/instantiationService.js';\r\nimport { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js';\r\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\r\nimport { ILabelService } from '../../../platform/label/common/label.js';\r\nimport { IListService, ListService } from '../../../platform/list/browser/listService.js';\r\nimport { ILogService, NullLogService } from '../../../platform/log/common/log.js';\r\nimport { MarkerService } from '../../../platform/markers/common/markerService.js';\r\nimport { IMarkerService } from '../../../platform/markers/common/markers.js';\r\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\r\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\r\nimport { IStorageService, InMemoryStorageService } from '../../../platform/storage/common/storage.js';\r\nimport { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js';\r\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\r\nimport { IWorkspaceContextService } from '../../../platform/workspace/common/workspace.js';\r\nimport { MenuService } from '../../../platform/actions/common/menuService.js';\r\nimport { IMarkerDecorationsService } from '../../common/services/markersDecorationService.js';\r\nimport { MarkerDecorationsService } from '../../common/services/markerDecorationsServiceImpl.js';\r\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\r\nimport { BrowserAccessibilityService } from '../../../platform/accessibility/common/accessibilityService.js';\r\nimport { ILayoutService } from '../../../platform/layout/browser/layoutService.js';\r\nimport { getSingletonServiceDescriptors } from '../../../platform/instantiation/common/extensions.js';\r\nexport var StaticServices;\r\n(function (StaticServices) {\r\n var _serviceCollection = new ServiceCollection();\r\n var LazyStaticService = /** @class */ (function () {\r\n function LazyStaticService(serviceId, factory) {\r\n this._serviceId = serviceId;\r\n this._factory = factory;\r\n this._value = null;\r\n }\r\n Object.defineProperty(LazyStaticService.prototype, \"id\", {\r\n get: function () { return this._serviceId; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n LazyStaticService.prototype.get = function (overrides) {\r\n if (!this._value) {\r\n if (overrides) {\r\n this._value = overrides[this._serviceId.toString()];\r\n }\r\n if (!this._value) {\r\n this._value = this._factory(overrides);\r\n }\r\n if (!this._value) {\r\n throw new Error('Service ' + this._serviceId + ' is missing!');\r\n }\r\n _serviceCollection.set(this._serviceId, this._value);\r\n }\r\n return this._value;\r\n };\r\n return LazyStaticService;\r\n }());\r\n StaticServices.LazyStaticService = LazyStaticService;\r\n var _all = [];\r\n function define(serviceId, factory) {\r\n var r = new LazyStaticService(serviceId, factory);\r\n _all.push(r);\r\n return r;\r\n }\r\n function init(overrides) {\r\n // Create a fresh service collection\r\n var result = new ServiceCollection();\r\n // make sure to add all services that use `registerSingleton`\r\n for (var _i = 0, _a = getSingletonServiceDescriptors(); _i < _a.length; _i++) {\r\n var _b = _a[_i], id = _b[0], descriptor = _b[1];\r\n result.set(id, descriptor);\r\n }\r\n // Initialize the service collection with the overrides\r\n for (var serviceId in overrides) {\r\n if (overrides.hasOwnProperty(serviceId)) {\r\n result.set(createDecorator(serviceId), overrides[serviceId]);\r\n }\r\n }\r\n // Make sure the same static services are present in all service collections\r\n _all.forEach(function (service) { return result.set(service.id, service.get(overrides)); });\r\n // Ensure the collection gets the correct instantiation service\r\n var instantiationService = new InstantiationService(result, true);\r\n result.set(IInstantiationService, instantiationService);\r\n return [result, instantiationService];\r\n }\r\n StaticServices.init = init;\r\n StaticServices.instantiationService = define(IInstantiationService, function () { return new InstantiationService(_serviceCollection, true); });\r\n var configurationServiceImpl = new SimpleConfigurationService();\r\n StaticServices.configurationService = define(IConfigurationService, function () { return configurationServiceImpl; });\r\n StaticServices.resourceConfigurationService = define(ITextResourceConfigurationService, function () { return new SimpleResourceConfigurationService(configurationServiceImpl); });\r\n StaticServices.resourcePropertiesService = define(ITextResourcePropertiesService, function () { return new SimpleResourcePropertiesService(configurationServiceImpl); });\r\n StaticServices.contextService = define(IWorkspaceContextService, function () { return new SimpleWorkspaceContextService(); });\r\n StaticServices.labelService = define(ILabelService, function () { return new SimpleUriLabelService(); });\r\n StaticServices.telemetryService = define(ITelemetryService, function () { return new StandaloneTelemetryService(); });\r\n StaticServices.dialogService = define(IDialogService, function () { return new SimpleDialogService(); });\r\n StaticServices.notificationService = define(INotificationService, function () { return new SimpleNotificationService(); });\r\n StaticServices.markerService = define(IMarkerService, function () { return new MarkerService(); });\r\n StaticServices.modeService = define(IModeService, function (o) { return new ModeServiceImpl(); });\r\n StaticServices.standaloneThemeService = define(IStandaloneThemeService, function () { return new StandaloneThemeServiceImpl(); });\r\n StaticServices.modelService = define(IModelService, function (o) { return new ModelServiceImpl(StaticServices.configurationService.get(o), StaticServices.resourcePropertiesService.get(o), StaticServices.standaloneThemeService.get(o)); });\r\n StaticServices.markerDecorationsService = define(IMarkerDecorationsService, function (o) { return new MarkerDecorationsService(StaticServices.modelService.get(o), StaticServices.markerService.get(o)); });\r\n StaticServices.codeEditorService = define(ICodeEditorService, function (o) { return new StandaloneCodeEditorServiceImpl(StaticServices.standaloneThemeService.get(o)); });\r\n StaticServices.editorProgressService = define(IEditorProgressService, function () { return new SimpleEditorProgressService(); });\r\n StaticServices.storageService = define(IStorageService, function () { return new InMemoryStorageService(); });\r\n StaticServices.logService = define(ILogService, function () { return new NullLogService(); });\r\n StaticServices.editorWorkerService = define(IEditorWorkerService, function (o) { return new EditorWorkerServiceImpl(StaticServices.modelService.get(o), StaticServices.resourceConfigurationService.get(o), StaticServices.logService.get(o)); });\r\n})(StaticServices || (StaticServices = {}));\r\nvar DynamicStandaloneServices = /** @class */ (function (_super) {\r\n __extends(DynamicStandaloneServices, _super);\r\n function DynamicStandaloneServices(domElement, overrides) {\r\n var _this = _super.call(this) || this;\r\n var _a = StaticServices.init(overrides), _serviceCollection = _a[0], _instantiationService = _a[1];\r\n _this._serviceCollection = _serviceCollection;\r\n _this._instantiationService = _instantiationService;\r\n var configurationService = _this.get(IConfigurationService);\r\n var notificationService = _this.get(INotificationService);\r\n var telemetryService = _this.get(ITelemetryService);\r\n var themeService = _this.get(IThemeService);\r\n var ensure = function (serviceId, factory) {\r\n var value = null;\r\n if (overrides) {\r\n value = overrides[serviceId.toString()];\r\n }\r\n if (!value) {\r\n value = factory();\r\n }\r\n _this._serviceCollection.set(serviceId, value);\r\n return value;\r\n };\r\n var contextKeyService = ensure(IContextKeyService, function () { return _this._register(new ContextKeyService(configurationService)); });\r\n ensure(IAccessibilityService, function () { return new BrowserAccessibilityService(contextKeyService, configurationService); });\r\n ensure(IListService, function () { return new ListService(themeService); });\r\n var commandService = ensure(ICommandService, function () { return new StandaloneCommandService(_this._instantiationService); });\r\n var keybindingService = ensure(IKeybindingService, function () { return _this._register(new StandaloneKeybindingService(contextKeyService, commandService, telemetryService, notificationService, domElement)); });\r\n var layoutService = ensure(ILayoutService, function () { return new SimpleLayoutService(domElement); });\r\n var contextViewService = ensure(IContextViewService, function () { return _this._register(new ContextViewService(layoutService)); });\r\n ensure(IContextMenuService, function () {\r\n var contextMenuService = new ContextMenuService(telemetryService, notificationService, contextViewService, keybindingService, themeService);\r\n contextMenuService.configure({ blockMouse: false }); // we do not want that in the standalone editor\r\n return _this._register(contextMenuService);\r\n });\r\n ensure(IMenuService, function () { return new MenuService(commandService); });\r\n ensure(IBulkEditService, function () { return new SimpleBulkEditService(StaticServices.modelService.get(IModelService)); });\r\n return _this;\r\n }\r\n DynamicStandaloneServices.prototype.get = function (serviceId) {\r\n var r = this._serviceCollection.get(serviceId);\r\n if (!r) {\r\n throw new Error('Missing service ' + serviceId);\r\n }\r\n return r;\r\n };\r\n DynamicStandaloneServices.prototype.set = function (serviceId, instance) {\r\n this._serviceCollection.set(serviceId, instance);\r\n };\r\n DynamicStandaloneServices.prototype.has = function (serviceId) {\r\n return this._serviceCollection.has(serviceId);\r\n };\r\n return DynamicStandaloneServices;\r\n}(Disposable));\r\nexport { DynamicStandaloneServices };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport { Disposable } from '../../../base/common/lifecycle.js';\r\nimport { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from './accessibility.js';\r\nimport { Emitter } from '../../../base/common/event.js';\r\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\r\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\r\nvar AbstractAccessibilityService = /** @class */ (function (_super) {\r\n __extends(AbstractAccessibilityService, _super);\r\n function AbstractAccessibilityService(_contextKeyService, _configurationService) {\r\n var _this = _super.call(this) || this;\r\n _this._contextKeyService = _contextKeyService;\r\n _this._configurationService = _configurationService;\r\n _this._onDidChangeAccessibilitySupport = new Emitter();\r\n _this.onDidChangeAccessibilitySupport = _this._onDidChangeAccessibilitySupport.event;\r\n _this._accessibilityModeEnabledContext = CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(_this._contextKeyService);\r\n _this._register(_this._configurationService.onDidChangeConfiguration(function (e) {\r\n if (e.affectsConfiguration('editor.accessibilitySupport')) {\r\n _this._updateContextKey();\r\n }\r\n }));\r\n _this._updateContextKey();\r\n _this.onDidChangeAccessibilitySupport(function () { return _this._updateContextKey(); });\r\n return _this;\r\n }\r\n AbstractAccessibilityService.prototype._updateContextKey = function () {\r\n var detected = this.getAccessibilitySupport() === 2 /* Enabled */;\r\n var config = this._configurationService.getValue('editor.accessibilitySupport');\r\n this._accessibilityModeEnabledContext.set(config === 'on' || (config === 'auto' && detected));\r\n };\r\n AbstractAccessibilityService = __decorate([\r\n __param(0, IContextKeyService),\r\n __param(1, IConfigurationService)\r\n ], AbstractAccessibilityService);\r\n return AbstractAccessibilityService;\r\n}(Disposable));\r\nexport { AbstractAccessibilityService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\r\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\r\nimport { AbstractAccessibilityService } from './abstractAccessibilityService.js';\r\nvar BrowserAccessibilityService = /** @class */ (function (_super) {\r\n __extends(BrowserAccessibilityService, _super);\r\n function BrowserAccessibilityService(contextKeyService, configurationService) {\r\n var _this = _super.call(this, contextKeyService, configurationService) || this;\r\n _this.contextKeyService = contextKeyService;\r\n _this.configurationService = configurationService;\r\n _this._accessibilitySupport = 0 /* Unknown */;\r\n return _this;\r\n }\r\n BrowserAccessibilityService.prototype.getAccessibilitySupport = function () {\r\n return this._accessibilitySupport;\r\n };\r\n BrowserAccessibilityService = __decorate([\r\n __param(0, IContextKeyService),\r\n __param(1, IConfigurationService)\r\n ], BrowserAccessibilityService);\r\n return BrowserAccessibilityService;\r\n}(AbstractAccessibilityService));\r\nexport { BrowserAccessibilityService };\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport './standalone-tokens.css';\r\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\r\nimport { OpenerService } from '../../browser/services/openerService.js';\r\nimport { DiffNavigator } from '../../browser/widget/diffNavigator.js';\r\nimport { EditorOptions, ConfigurationChangedEvent } from '../../common/config/editorOptions.js';\r\nimport { BareFontInfo, FontInfo } from '../../common/config/fontInfo.js';\r\nimport * as editorCommon from '../../common/editorCommon.js';\r\nimport { FindMatch, TextModelResolvedOptions } from '../../common/model.js';\r\nimport * as modes from '../../common/modes.js';\r\nimport { NULL_STATE, nullTokenize } from '../../common/modes/nullMode.js';\r\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\r\nimport { ITextModelService } from '../../common/services/resolverService.js';\r\nimport { createWebWorker as actualCreateWebWorker } from '../../common/services/webWorker.js';\r\nimport * as standaloneEnums from '../../common/standalone/standaloneEnums.js';\r\nimport { Colorizer } from './colorizer.js';\r\nimport { SimpleEditorModelResolverService } from './simpleServices.js';\r\nimport { StandaloneDiffEditor, StandaloneEditor } from './standaloneCodeEditor.js';\r\nimport { DynamicStandaloneServices, StaticServices } from './standaloneServices.js';\r\nimport { IStandaloneThemeService } from '../common/standaloneThemeService.js';\r\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\r\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\r\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\r\nimport { IContextViewService, IContextMenuService } from '../../../platform/contextview/browser/contextView.js';\r\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\r\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\r\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\r\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\r\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\r\nimport { clearAllFontInfos } from '../../browser/config/configuration.js';\r\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\r\nfunction withAllStandaloneServices(domElement, override, callback) {\r\n var services = new DynamicStandaloneServices(domElement, override);\r\n var simpleEditorModelResolverService = null;\r\n if (!services.has(ITextModelService)) {\r\n simpleEditorModelResolverService = new SimpleEditorModelResolverService(StaticServices.modelService.get());\r\n services.set(ITextModelService, simpleEditorModelResolverService);\r\n }\r\n if (!services.has(IOpenerService)) {\r\n services.set(IOpenerService, new OpenerService(services.get(ICodeEditorService), services.get(ICommandService)));\r\n }\r\n var result = callback(services);\r\n if (simpleEditorModelResolverService) {\r\n simpleEditorModelResolverService.setEditor(result);\r\n }\r\n return result;\r\n}\r\n/**\r\n * Create a new editor under `domElement`.\r\n * `domElement` should be empty (not contain other dom nodes).\r\n * The editor will read the size of `domElement`.\r\n */\r\nexport function create(domElement, options, override) {\r\n return withAllStandaloneServices(domElement, override || {}, function (services) {\r\n return new StandaloneEditor(domElement, options, services, services.get(IInstantiationService), services.get(ICodeEditorService), services.get(ICommandService), services.get(IContextKeyService), services.get(IKeybindingService), services.get(IContextViewService), services.get(IStandaloneThemeService), services.get(INotificationService), services.get(IConfigurationService), services.get(IAccessibilityService));\r\n });\r\n}\r\n/**\r\n * Emitted when an editor is created.\r\n * Creating a diff editor might cause this listener to be invoked with the two editors.\r\n * @event\r\n */\r\nexport function onDidCreateEditor(listener) {\r\n return StaticServices.codeEditorService.get().onCodeEditorAdd(function (editor) {\r\n listener(editor);\r\n });\r\n}\r\n/**\r\n * Create a new diff editor under `domElement`.\r\n * `domElement` should be empty (not contain other dom nodes).\r\n * The editor will read the size of `domElement`.\r\n */\r\nexport function createDiffEditor(domElement, options, override) {\r\n return withAllStandaloneServices(domElement, override || {}, function (services) {\r\n return new StandaloneDiffEditor(domElement, options, services, services.get(IInstantiationService), services.get(IContextKeyService), services.get(IKeybindingService), services.get(IContextViewService), services.get(IEditorWorkerService), services.get(ICodeEditorService), services.get(IStandaloneThemeService), services.get(INotificationService), services.get(IConfigurationService), services.get(IContextMenuService), services.get(IEditorProgressService), null);\r\n });\r\n}\r\nexport function createDiffNavigator(diffEditor, opts) {\r\n return new DiffNavigator(diffEditor, opts);\r\n}\r\nfunction doCreateModel(value, languageSelection, uri) {\r\n return StaticServices.modelService.get().createModel(value, languageSelection, uri);\r\n}\r\n/**\r\n * Create a new editor model.\r\n * You can specify the language that should be set for this model or let the language be inferred from the `uri`.\r\n */\r\nexport function createModel(value, language, uri) {\r\n value = value || '';\r\n if (!language) {\r\n var firstLF = value.indexOf('\\n');\r\n var firstLine = value;\r\n if (firstLF !== -1) {\r\n firstLine = value.substring(0, firstLF);\r\n }\r\n return doCreateModel(value, StaticServices.modeService.get().createByFilepathOrFirstLine(uri || null, firstLine), uri);\r\n }\r\n return doCreateModel(value, StaticServices.modeService.get().create(language), uri);\r\n}\r\n/**\r\n * Change the language for a model.\r\n */\r\nexport function setModelLanguage(model, languageId) {\r\n StaticServices.modelService.get().setMode(model, StaticServices.modeService.get().create(languageId));\r\n}\r\n/**\r\n * Set the markers for a model.\r\n */\r\nexport function setModelMarkers(model, owner, markers) {\r\n if (model) {\r\n StaticServices.markerService.get().changeOne(owner, model.uri, markers);\r\n }\r\n}\r\n/**\r\n * Get markers for owner and/or resource\r\n *\r\n * @returns list of markers\r\n */\r\nexport function getModelMarkers(filter) {\r\n return StaticServices.markerService.get().read(filter);\r\n}\r\n/**\r\n * Get the model that has `uri` if it exists.\r\n */\r\nexport function getModel(uri) {\r\n return StaticServices.modelService.get().getModel(uri);\r\n}\r\n/**\r\n * Get all the created models.\r\n */\r\nexport function getModels() {\r\n return StaticServices.modelService.get().getModels();\r\n}\r\n/**\r\n * Emitted when a model is created.\r\n * @event\r\n */\r\nexport function onDidCreateModel(listener) {\r\n return StaticServices.modelService.get().onModelAdded(listener);\r\n}\r\n/**\r\n * Emitted right before a model is disposed.\r\n * @event\r\n */\r\nexport function onWillDisposeModel(listener) {\r\n return StaticServices.modelService.get().onModelRemoved(listener);\r\n}\r\n/**\r\n * Emitted when a different language is set to a model.\r\n * @event\r\n */\r\nexport function onDidChangeModelLanguage(listener) {\r\n return StaticServices.modelService.get().onModelModeChanged(function (e) {\r\n listener({\r\n model: e.model,\r\n oldLanguage: e.oldModeId\r\n });\r\n });\r\n}\r\n/**\r\n * Create a new web worker that has model syncing capabilities built in.\r\n * Specify an AMD module to load that will `create` an object that will be proxied.\r\n */\r\nexport function createWebWorker(opts) {\r\n return actualCreateWebWorker(StaticServices.modelService.get(), opts);\r\n}\r\n/**\r\n * Colorize the contents of `domNode` using attribute `data-lang`.\r\n */\r\nexport function colorizeElement(domNode, options) {\r\n return Colorizer.colorizeElement(StaticServices.standaloneThemeService.get(), StaticServices.modeService.get(), domNode, options);\r\n}\r\n/**\r\n * Colorize `text` using language `languageId`.\r\n */\r\nexport function colorize(text, languageId, options) {\r\n return Colorizer.colorize(StaticServices.modeService.get(), text, languageId, options);\r\n}\r\n/**\r\n * Colorize a line in a model.\r\n */\r\nexport function colorizeModelLine(model, lineNumber, tabSize) {\r\n if (tabSize === void 0) { tabSize = 4; }\r\n return Colorizer.colorizeModelLine(model, lineNumber, tabSize);\r\n}\r\n/**\r\n * @internal\r\n */\r\nfunction getSafeTokenizationSupport(language) {\r\n var tokenizationSupport = modes.TokenizationRegistry.get(language);\r\n if (tokenizationSupport) {\r\n return tokenizationSupport;\r\n }\r\n return {\r\n getInitialState: function () { return NULL_STATE; },\r\n tokenize: function (line, state, deltaOffset) { return nullTokenize(language, line, state, deltaOffset); }\r\n };\r\n}\r\n/**\r\n * Tokenize `text` using language `languageId`\r\n */\r\nexport function tokenize(text, languageId) {\r\n var modeService = StaticServices.modeService.get();\r\n // Needed in order to get the mode registered for subsequent look-ups\r\n modeService.triggerMode(languageId);\r\n var tokenizationSupport = getSafeTokenizationSupport(languageId);\r\n var lines = text.split(/\\r\\n|\\r|\\n/);\r\n var result = [];\r\n var state = tokenizationSupport.getInitialState();\r\n for (var i = 0, len = lines.length; i < len; i++) {\r\n var line = lines[i];\r\n var tokenizationResult = tokenizationSupport.tokenize(line, state, 0);\r\n result[i] = tokenizationResult.tokens;\r\n state = tokenizationResult.endState;\r\n }\r\n return result;\r\n}\r\n/**\r\n * Define a new theme or update an existing theme.\r\n */\r\nexport function defineTheme(themeName, themeData) {\r\n StaticServices.standaloneThemeService.get().defineTheme(themeName, themeData);\r\n}\r\n/**\r\n * Switches to a theme.\r\n */\r\nexport function setTheme(themeName) {\r\n StaticServices.standaloneThemeService.get().setTheme(themeName);\r\n}\r\n/**\r\n * Clears all cached font measurements and triggers re-measurement.\r\n */\r\nexport function remeasureFonts() {\r\n clearAllFontInfos();\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport function createMonacoEditorAPI() {\r\n return {\r\n // methods\r\n create: create,\r\n onDidCreateEditor: onDidCreateEditor,\r\n createDiffEditor: createDiffEditor,\r\n createDiffNavigator: createDiffNavigator,\r\n createModel: createModel,\r\n setModelLanguage: setModelLanguage,\r\n setModelMarkers: setModelMarkers,\r\n getModelMarkers: getModelMarkers,\r\n getModels: getModels,\r\n getModel: getModel,\r\n onDidCreateModel: onDidCreateModel,\r\n onWillDisposeModel: onWillDisposeModel,\r\n onDidChangeModelLanguage: onDidChangeModelLanguage,\r\n createWebWorker: createWebWorker,\r\n colorizeElement: colorizeElement,\r\n colorize: colorize,\r\n colorizeModelLine: colorizeModelLine,\r\n tokenize: tokenize,\r\n defineTheme: defineTheme,\r\n setTheme: setTheme,\r\n remeasureFonts: remeasureFonts,\r\n // enums\r\n AccessibilitySupport: standaloneEnums.AccessibilitySupport,\r\n ContentWidgetPositionPreference: standaloneEnums.ContentWidgetPositionPreference,\r\n CursorChangeReason: standaloneEnums.CursorChangeReason,\r\n DefaultEndOfLine: standaloneEnums.DefaultEndOfLine,\r\n EditorAutoIndentStrategy: standaloneEnums.EditorAutoIndentStrategy,\r\n EditorOption: standaloneEnums.EditorOption,\r\n EndOfLinePreference: standaloneEnums.EndOfLinePreference,\r\n EndOfLineSequence: standaloneEnums.EndOfLineSequence,\r\n MinimapPosition: standaloneEnums.MinimapPosition,\r\n MouseTargetType: standaloneEnums.MouseTargetType,\r\n OverlayWidgetPositionPreference: standaloneEnums.OverlayWidgetPositionPreference,\r\n OverviewRulerLane: standaloneEnums.OverviewRulerLane,\r\n RenderLineNumbersType: standaloneEnums.RenderLineNumbersType,\r\n RenderMinimap: standaloneEnums.RenderMinimap,\r\n ScrollbarVisibility: standaloneEnums.ScrollbarVisibility,\r\n ScrollType: standaloneEnums.ScrollType,\r\n TextEditorCursorBlinkingStyle: standaloneEnums.TextEditorCursorBlinkingStyle,\r\n TextEditorCursorStyle: standaloneEnums.TextEditorCursorStyle,\r\n TrackedRangeStickiness: standaloneEnums.TrackedRangeStickiness,\r\n WrappingIndent: standaloneEnums.WrappingIndent,\r\n // classes\r\n ConfigurationChangedEvent: ConfigurationChangedEvent,\r\n BareFontInfo: BareFontInfo,\r\n FontInfo: FontInfo,\r\n TextModelResolvedOptions: TextModelResolvedOptions,\r\n FindMatch: FindMatch,\r\n // vars\r\n EditorType: editorCommon.EditorType,\r\n EditorOptions: EditorOptions\r\n };\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/*\r\n * This module only exports 'compile' which compiles a JSON language definition\r\n * into a typed and checked ILexer definition.\r\n */\r\nimport * as monarchCommon from './monarchCommon.js';\r\n/*\r\n * Type helpers\r\n *\r\n * Note: this is just for sanity checks on the JSON description which is\r\n * helpful for the programmer. No checks are done anymore once the lexer is\r\n * already 'compiled and checked'.\r\n *\r\n */\r\nfunction isArrayOf(elemType, obj) {\r\n if (!obj) {\r\n return false;\r\n }\r\n if (!(Array.isArray(obj))) {\r\n return false;\r\n }\r\n for (var _i = 0, obj_1 = obj; _i < obj_1.length; _i++) {\r\n var el = obj_1[_i];\r\n if (!(elemType(el))) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction bool(prop, defValue) {\r\n if (typeof prop === 'boolean') {\r\n return prop;\r\n }\r\n return defValue;\r\n}\r\nfunction string(prop, defValue) {\r\n if (typeof (prop) === 'string') {\r\n return prop;\r\n }\r\n return defValue;\r\n}\r\nfunction arrayToHash(array) {\r\n var result = {};\r\n for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {\r\n var e = array_1[_i];\r\n result[e] = true;\r\n }\r\n return result;\r\n}\r\nfunction createKeywordMatcher(arr, caseInsensitive) {\r\n if (caseInsensitive === void 0) { caseInsensitive = false; }\r\n if (caseInsensitive) {\r\n arr = arr.map(function (x) { return x.toLowerCase(); });\r\n }\r\n var hash = arrayToHash(arr);\r\n if (caseInsensitive) {\r\n return function (word) {\r\n return hash[word.toLowerCase()] !== undefined && hash.hasOwnProperty(word.toLowerCase());\r\n };\r\n }\r\n else {\r\n return function (word) {\r\n return hash[word] !== undefined && hash.hasOwnProperty(word);\r\n };\r\n }\r\n}\r\n// Lexer helpers\r\n/**\r\n * Compiles a regular expression string, adding the 'i' flag if 'ignoreCase' is set.\r\n * Also replaces @\\w+ or sequences with the content of the specified attribute\r\n */\r\nfunction compileRegExp(lexer, str) {\r\n var n = 0;\r\n while (str.indexOf('@') >= 0 && n < 5) { // at most 5 expansions\r\n n++;\r\n str = str.replace(/@(\\w+)/g, function (s, attr) {\r\n var sub = '';\r\n if (typeof (lexer[attr]) === 'string') {\r\n sub = lexer[attr];\r\n }\r\n else if (lexer[attr] && lexer[attr] instanceof RegExp) {\r\n sub = lexer[attr].source;\r\n }\r\n else {\r\n if (lexer[attr] === undefined) {\r\n throw monarchCommon.createError(lexer, 'language definition does not contain attribute \\'' + attr + '\\', used at: ' + str);\r\n }\r\n else {\r\n throw monarchCommon.createError(lexer, 'attribute reference \\'' + attr + '\\' must be a string, used at: ' + str);\r\n }\r\n }\r\n return (monarchCommon.empty(sub) ? '' : '(?:' + sub + ')');\r\n });\r\n }\r\n return new RegExp(str, (lexer.ignoreCase ? 'i' : ''));\r\n}\r\n/**\r\n * Compiles guard functions for case matches.\r\n * This compiles 'cases' attributes into efficient match functions.\r\n *\r\n */\r\nfunction selectScrutinee(id, matches, state, num) {\r\n if (num < 0) {\r\n return id;\r\n }\r\n if (num < matches.length) {\r\n return matches[num];\r\n }\r\n if (num >= 100) {\r\n num = num - 100;\r\n var parts = state.split('.');\r\n parts.unshift(state);\r\n if (num < parts.length) {\r\n return parts[num];\r\n }\r\n }\r\n return null;\r\n}\r\nfunction createGuard(lexer, ruleName, tkey, val) {\r\n // get the scrutinee and pattern\r\n var scrut = -1; // -1: $!, 0-99: $n, 100+n: $Sn\r\n var oppat = tkey;\r\n var matches = tkey.match(/^\\$(([sS]?)(\\d\\d?)|#)(.*)$/);\r\n if (matches) {\r\n if (matches[3]) { // if digits\r\n scrut = parseInt(matches[3]);\r\n if (matches[2]) {\r\n scrut = scrut + 100; // if [sS] present\r\n }\r\n }\r\n oppat = matches[4];\r\n }\r\n // get operator\r\n var op = '~';\r\n var pat = oppat;\r\n if (!oppat || oppat.length === 0) {\r\n op = '!=';\r\n pat = '';\r\n }\r\n else if (/^\\w*$/.test(pat)) { // just a word\r\n op = '==';\r\n }\r\n else {\r\n matches = oppat.match(/^(@|!@|~|!~|==|!=)(.*)$/);\r\n if (matches) {\r\n op = matches[1];\r\n pat = matches[2];\r\n }\r\n }\r\n // set the tester function\r\n var tester;\r\n // special case a regexp that matches just words\r\n if ((op === '~' || op === '!~') && /^(\\w|\\|)*$/.test(pat)) {\r\n var inWords_1 = createKeywordMatcher(pat.split('|'), lexer.ignoreCase);\r\n tester = function (s) { return (op === '~' ? inWords_1(s) : !inWords_1(s)); };\r\n }\r\n else if (op === '@' || op === '!@') {\r\n var words = lexer[pat];\r\n if (!words) {\r\n throw monarchCommon.createError(lexer, 'the @ match target \\'' + pat + '\\' is not defined, in rule: ' + ruleName);\r\n }\r\n if (!(isArrayOf(function (elem) { return (typeof (elem) === 'string'); }, words))) {\r\n throw monarchCommon.createError(lexer, 'the @ match target \\'' + pat + '\\' must be an array of strings, in rule: ' + ruleName);\r\n }\r\n var inWords_2 = createKeywordMatcher(words, lexer.ignoreCase);\r\n tester = function (s) { return (op === '@' ? inWords_2(s) : !inWords_2(s)); };\r\n }\r\n else if (op === '~' || op === '!~') {\r\n if (pat.indexOf('$') < 0) {\r\n // precompile regular expression\r\n var re_1 = compileRegExp(lexer, '^' + pat + '$');\r\n tester = function (s) { return (op === '~' ? re_1.test(s) : !re_1.test(s)); };\r\n }\r\n else {\r\n tester = function (s, id, matches, state) {\r\n var re = compileRegExp(lexer, '^' + monarchCommon.substituteMatches(lexer, pat, id, matches, state) + '$');\r\n return re.test(s);\r\n };\r\n }\r\n }\r\n else { // if (op==='==' || op==='!=') {\r\n if (pat.indexOf('$') < 0) {\r\n var patx_1 = monarchCommon.fixCase(lexer, pat);\r\n tester = function (s) { return (op === '==' ? s === patx_1 : s !== patx_1); };\r\n }\r\n else {\r\n var patx_2 = monarchCommon.fixCase(lexer, pat);\r\n tester = function (s, id, matches, state, eos) {\r\n var patexp = monarchCommon.substituteMatches(lexer, patx_2, id, matches, state);\r\n return (op === '==' ? s === patexp : s !== patexp);\r\n };\r\n }\r\n }\r\n // return the branch object\r\n if (scrut === -1) {\r\n return {\r\n name: tkey, value: val, test: function (id, matches, state, eos) {\r\n return tester(id, id, matches, state, eos);\r\n }\r\n };\r\n }\r\n else {\r\n return {\r\n name: tkey, value: val, test: function (id, matches, state, eos) {\r\n var scrutinee = selectScrutinee(id, matches, state, scrut);\r\n return tester(!scrutinee ? '' : scrutinee, id, matches, state, eos);\r\n }\r\n };\r\n }\r\n}\r\n/**\r\n * Compiles an action: i.e. optimize regular expressions and case matches\r\n * and do many sanity checks.\r\n *\r\n * This is called only during compilation but if the lexer definition\r\n * contains user functions as actions (which is usually not allowed), then this\r\n * may be called during lexing. It is important therefore to compile common cases efficiently\r\n */\r\nfunction compileAction(lexer, ruleName, action) {\r\n if (!action) {\r\n return { token: '' };\r\n }\r\n else if (typeof (action) === 'string') {\r\n return action; // { token: action };\r\n }\r\n else if (action.token || action.token === '') {\r\n if (typeof (action.token) !== 'string') {\r\n throw monarchCommon.createError(lexer, 'a \\'token\\' attribute must be of type string, in rule: ' + ruleName);\r\n }\r\n else {\r\n // only copy specific typed fields (only happens once during compile Lexer)\r\n var newAction = { token: action.token };\r\n if (action.token.indexOf('$') >= 0) {\r\n newAction.tokenSubst = true;\r\n }\r\n if (typeof (action.bracket) === 'string') {\r\n if (action.bracket === '@open') {\r\n newAction.bracket = 1 /* Open */;\r\n }\r\n else if (action.bracket === '@close') {\r\n newAction.bracket = -1 /* Close */;\r\n }\r\n else {\r\n throw monarchCommon.createError(lexer, 'a \\'bracket\\' attribute must be either \\'@open\\' or \\'@close\\', in rule: ' + ruleName);\r\n }\r\n }\r\n if (action.next) {\r\n if (typeof (action.next) !== 'string') {\r\n throw monarchCommon.createError(lexer, 'the next state must be a string value in rule: ' + ruleName);\r\n }\r\n else {\r\n var next = action.next;\r\n if (!/^(@pop|@push|@popall)$/.test(next)) {\r\n if (next[0] === '@') {\r\n next = next.substr(1); // peel off starting @ sign\r\n }\r\n if (next.indexOf('$') < 0) { // no dollar substitution, we can check if the state exists\r\n if (!monarchCommon.stateExists(lexer, monarchCommon.substituteMatches(lexer, next, '', [], ''))) {\r\n throw monarchCommon.createError(lexer, 'the next state \\'' + action.next + '\\' is not defined in rule: ' + ruleName);\r\n }\r\n }\r\n }\r\n newAction.next = next;\r\n }\r\n }\r\n if (typeof (action.goBack) === 'number') {\r\n newAction.goBack = action.goBack;\r\n }\r\n if (typeof (action.switchTo) === 'string') {\r\n newAction.switchTo = action.switchTo;\r\n }\r\n if (typeof (action.log) === 'string') {\r\n newAction.log = action.log;\r\n }\r\n if (typeof (action.nextEmbedded) === 'string') {\r\n newAction.nextEmbedded = action.nextEmbedded;\r\n lexer.usesEmbedded = true;\r\n }\r\n return newAction;\r\n }\r\n }\r\n else if (Array.isArray(action)) {\r\n var results = [];\r\n for (var i = 0, len = action.length; i < len; i++) {\r\n results[i] = compileAction(lexer, ruleName, action[i]);\r\n }\r\n return { group: results };\r\n }\r\n else if (action.cases) {\r\n // build an array of test cases\r\n var cases_1 = [];\r\n // for each case, push a test function and result value\r\n for (var tkey in action.cases) {\r\n if (action.cases.hasOwnProperty(tkey)) {\r\n var val = compileAction(lexer, ruleName, action.cases[tkey]);\r\n // what kind of case\r\n if (tkey === '@default' || tkey === '@' || tkey === '') {\r\n cases_1.push({ test: undefined, value: val, name: tkey });\r\n }\r\n else if (tkey === '@eos') {\r\n cases_1.push({ test: function (id, matches, state, eos) { return eos; }, value: val, name: tkey });\r\n }\r\n else {\r\n cases_1.push(createGuard(lexer, ruleName, tkey, val)); // call separate function to avoid local variable capture\r\n }\r\n }\r\n }\r\n // create a matching function\r\n var def_1 = lexer.defaultToken;\r\n return {\r\n test: function (id, matches, state, eos) {\r\n for (var _i = 0, cases_2 = cases_1; _i < cases_2.length; _i++) {\r\n var _case = cases_2[_i];\r\n var didmatch = (!_case.test || _case.test(id, matches, state, eos));\r\n if (didmatch) {\r\n return _case.value;\r\n }\r\n }\r\n return def_1;\r\n }\r\n };\r\n }\r\n else {\r\n throw monarchCommon.createError(lexer, 'an action must be a string, an object with a \\'token\\' or \\'cases\\' attribute, or an array of actions; in rule: ' + ruleName);\r\n }\r\n}\r\n/**\r\n * Helper class for creating matching rules\r\n */\r\nvar Rule = /** @class */ (function () {\r\n function Rule(name) {\r\n this.regex = new RegExp('');\r\n this.action = { token: '' };\r\n this.matchOnlyAtLineStart = false;\r\n this.name = '';\r\n this.name = name;\r\n }\r\n Rule.prototype.setRegex = function (lexer, re) {\r\n var sregex;\r\n if (typeof (re) === 'string') {\r\n sregex = re;\r\n }\r\n else if (re instanceof RegExp) {\r\n sregex = re.source;\r\n }\r\n else {\r\n throw monarchCommon.createError(lexer, 'rules must start with a match string or regular expression: ' + this.name);\r\n }\r\n this.matchOnlyAtLineStart = (sregex.length > 0 && sregex[0] === '^');\r\n this.name = this.name + ': ' + sregex;\r\n this.regex = compileRegExp(lexer, '^(?:' + (this.matchOnlyAtLineStart ? sregex.substr(1) : sregex) + ')');\r\n };\r\n Rule.prototype.setAction = function (lexer, act) {\r\n this.action = compileAction(lexer, this.name, act);\r\n };\r\n return Rule;\r\n}());\r\n/**\r\n * Compiles a json description function into json where all regular expressions,\r\n * case matches etc, are compiled and all include rules are expanded.\r\n * We also compile the bracket definitions, supply defaults, and do many sanity checks.\r\n * If the 'jsonStrict' parameter is 'false', we allow at certain locations\r\n * regular expression objects and functions that get called during lexing.\r\n * (Currently we have no samples that need this so perhaps we should always have\r\n * jsonStrict to true).\r\n */\r\nexport function compile(languageId, json) {\r\n if (!json || typeof (json) !== 'object') {\r\n throw new Error('Monarch: expecting a language definition object');\r\n }\r\n // Create our lexer\r\n var lexer = {};\r\n lexer.languageId = languageId;\r\n lexer.noThrow = false; // raise exceptions during compilation\r\n lexer.maxStack = 100;\r\n // Set standard fields: be defensive about types\r\n lexer.start = (typeof json.start === 'string' ? json.start : null);\r\n lexer.ignoreCase = bool(json.ignoreCase, false);\r\n lexer.tokenPostfix = string(json.tokenPostfix, '.' + lexer.languageId);\r\n lexer.defaultToken = string(json.defaultToken, 'source');\r\n lexer.usesEmbedded = false; // becomes true if we find a nextEmbedded action\r\n // For calling compileAction later on\r\n var lexerMin = json;\r\n lexerMin.languageId = languageId;\r\n lexerMin.ignoreCase = lexer.ignoreCase;\r\n lexerMin.noThrow = lexer.noThrow;\r\n lexerMin.usesEmbedded = lexer.usesEmbedded;\r\n lexerMin.stateNames = json.tokenizer;\r\n lexerMin.defaultToken = lexer.defaultToken;\r\n // Compile an array of rules into newrules where RegExp objects are created.\r\n function addRules(state, newrules, rules) {\r\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\r\n var rule = rules_1[_i];\r\n var include = rule.include;\r\n if (include) {\r\n if (typeof (include) !== 'string') {\r\n throw monarchCommon.createError(lexer, 'an \\'include\\' attribute must be a string at: ' + state);\r\n }\r\n if (include[0] === '@') {\r\n include = include.substr(1); // peel off starting @\r\n }\r\n if (!json.tokenizer[include]) {\r\n throw monarchCommon.createError(lexer, 'include target \\'' + include + '\\' is not defined at: ' + state);\r\n }\r\n addRules(state + '.' + include, newrules, json.tokenizer[include]);\r\n }\r\n else {\r\n var newrule = new Rule(state);\r\n // Set up new rule attributes\r\n if (Array.isArray(rule) && rule.length >= 1 && rule.length <= 3) {\r\n newrule.setRegex(lexerMin, rule[0]);\r\n if (rule.length >= 3) {\r\n if (typeof (rule[1]) === 'string') {\r\n newrule.setAction(lexerMin, { token: rule[1], next: rule[2] });\r\n }\r\n else if (typeof (rule[1]) === 'object') {\r\n var rule1 = rule[1];\r\n rule1.next = rule[2];\r\n newrule.setAction(lexerMin, rule1);\r\n }\r\n else {\r\n throw monarchCommon.createError(lexer, 'a next state as the last element of a rule can only be given if the action is either an object or a string, at: ' + state);\r\n }\r\n }\r\n else {\r\n newrule.setAction(lexerMin, rule[1]);\r\n }\r\n }\r\n else {\r\n if (!rule.regex) {\r\n throw monarchCommon.createError(lexer, 'a rule must either be an array, or an object with a \\'regex\\' or \\'include\\' field at: ' + state);\r\n }\r\n if (rule.name) {\r\n if (typeof rule.name === 'string') {\r\n newrule.name = rule.name;\r\n }\r\n }\r\n if (rule.matchOnlyAtStart) {\r\n newrule.matchOnlyAtLineStart = bool(rule.matchOnlyAtLineStart, false);\r\n }\r\n newrule.setRegex(lexerMin, rule.regex);\r\n newrule.setAction(lexerMin, rule.action);\r\n }\r\n newrules.push(newrule);\r\n }\r\n }\r\n }\r\n // compile the tokenizer rules\r\n if (!json.tokenizer || typeof (json.tokenizer) !== 'object') {\r\n throw monarchCommon.createError(lexer, 'a language definition must define the \\'tokenizer\\' attribute as an object');\r\n }\r\n lexer.tokenizer = [];\r\n for (var key in json.tokenizer) {\r\n if (json.tokenizer.hasOwnProperty(key)) {\r\n if (!lexer.start) {\r\n lexer.start = key;\r\n }\r\n var rules = json.tokenizer[key];\r\n lexer.tokenizer[key] = new Array();\r\n addRules('tokenizer.' + key, lexer.tokenizer[key], rules);\r\n }\r\n }\r\n lexer.usesEmbedded = lexerMin.usesEmbedded; // can be set during compileAction\r\n // Set simple brackets\r\n if (json.brackets) {\r\n if (!(Array.isArray(json.brackets))) {\r\n throw monarchCommon.createError(lexer, 'the \\'brackets\\' attribute must be defined as an array');\r\n }\r\n }\r\n else {\r\n json.brackets = [\r\n { open: '{', close: '}', token: 'delimiter.curly' },\r\n { open: '[', close: ']', token: 'delimiter.square' },\r\n { open: '(', close: ')', token: 'delimiter.parenthesis' },\r\n { open: '<', close: '>', token: 'delimiter.angle' }\r\n ];\r\n }\r\n var brackets = [];\r\n for (var _i = 0, _a = json.brackets; _i < _a.length; _i++) {\r\n var el = _a[_i];\r\n var desc = el;\r\n if (desc && Array.isArray(desc) && desc.length === 3) {\r\n desc = { token: desc[2], open: desc[0], close: desc[1] };\r\n }\r\n if (desc.open === desc.close) {\r\n throw monarchCommon.createError(lexer, 'open and close brackets in a \\'brackets\\' attribute must be different: ' + desc.open +\r\n '\\n hint: use the \\'bracket\\' attribute if matching on equal brackets is required.');\r\n }\r\n if (typeof desc.open === 'string' && typeof desc.token === 'string' && typeof desc.close === 'string') {\r\n brackets.push({\r\n token: desc.token + lexer.tokenPostfix,\r\n open: monarchCommon.fixCase(lexer, desc.open),\r\n close: monarchCommon.fixCase(lexer, desc.close)\r\n });\r\n }\r\n else {\r\n throw monarchCommon.createError(lexer, 'every element in the \\'brackets\\' array must be a \\'{open,close,token}\\' object or array');\r\n }\r\n }\r\n lexer.brackets = brackets;\r\n // Disable throw so the syntax highlighter goes, no matter what\r\n lexer.noThrow = true;\r\n return lexer;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Range } from '../../common/core/range.js';\r\nimport { Token, TokenizationResult, TokenizationResult2 } from '../../common/core/token.js';\r\nimport * as modes from '../../common/modes.js';\r\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\r\nimport { ModesRegistry } from '../../common/modes/modesRegistry.js';\r\nimport * as standaloneEnums from '../../common/standalone/standaloneEnums.js';\r\nimport { StaticServices } from './standaloneServices.js';\r\nimport { compile } from '../common/monarch/monarchCompile.js';\r\nimport { createTokenizationSupport } from '../common/monarch/monarchLexer.js';\r\n/**\r\n * Register information about a new language.\r\n */\r\nexport function register(language) {\r\n ModesRegistry.registerLanguage(language);\r\n}\r\n/**\r\n * Get the information of all the registered languages.\r\n */\r\nexport function getLanguages() {\r\n var result = [];\r\n result = result.concat(ModesRegistry.getLanguages());\r\n return result;\r\n}\r\nexport function getEncodedLanguageId(languageId) {\r\n var lid = StaticServices.modeService.get().getLanguageIdentifier(languageId);\r\n return lid ? lid.id : 0;\r\n}\r\n/**\r\n * An event emitted when a language is first time needed (e.g. a model has it set).\r\n * @event\r\n */\r\nexport function onLanguage(languageId, callback) {\r\n var disposable = StaticServices.modeService.get().onDidCreateMode(function (mode) {\r\n if (mode.getId() === languageId) {\r\n // stop listening\r\n disposable.dispose();\r\n // invoke actual listener\r\n callback();\r\n }\r\n });\r\n return disposable;\r\n}\r\n/**\r\n * Set the editing configuration for a language.\r\n */\r\nexport function setLanguageConfiguration(languageId, configuration) {\r\n var languageIdentifier = StaticServices.modeService.get().getLanguageIdentifier(languageId);\r\n if (!languageIdentifier) {\r\n throw new Error(\"Cannot set configuration for unknown language \" + languageId);\r\n }\r\n return LanguageConfigurationRegistry.register(languageIdentifier, configuration);\r\n}\r\n/**\r\n * @internal\r\n */\r\nvar EncodedTokenizationSupport2Adapter = /** @class */ (function () {\r\n function EncodedTokenizationSupport2Adapter(actual) {\r\n this._actual = actual;\r\n }\r\n EncodedTokenizationSupport2Adapter.prototype.getInitialState = function () {\r\n return this._actual.getInitialState();\r\n };\r\n EncodedTokenizationSupport2Adapter.prototype.tokenize = function (line, state, offsetDelta) {\r\n throw new Error('Not supported!');\r\n };\r\n EncodedTokenizationSupport2Adapter.prototype.tokenize2 = function (line, state) {\r\n var result = this._actual.tokenizeEncoded(line, state);\r\n return new TokenizationResult2(result.tokens, result.endState);\r\n };\r\n return EncodedTokenizationSupport2Adapter;\r\n}());\r\nexport { EncodedTokenizationSupport2Adapter };\r\n/**\r\n * @internal\r\n */\r\nvar TokenizationSupport2Adapter = /** @class */ (function () {\r\n function TokenizationSupport2Adapter(standaloneThemeService, languageIdentifier, actual) {\r\n this._standaloneThemeService = standaloneThemeService;\r\n this._languageIdentifier = languageIdentifier;\r\n this._actual = actual;\r\n }\r\n TokenizationSupport2Adapter.prototype.getInitialState = function () {\r\n return this._actual.getInitialState();\r\n };\r\n TokenizationSupport2Adapter.prototype._toClassicTokens = function (tokens, language, offsetDelta) {\r\n var result = [];\r\n var previousStartIndex = 0;\r\n for (var i = 0, len = tokens.length; i < len; i++) {\r\n var t = tokens[i];\r\n var startIndex = t.startIndex;\r\n // Prevent issues stemming from a buggy external tokenizer.\r\n if (i === 0) {\r\n // Force first token to start at first index!\r\n startIndex = 0;\r\n }\r\n else if (startIndex < previousStartIndex) {\r\n // Force tokens to be after one another!\r\n startIndex = previousStartIndex;\r\n }\r\n result[i] = new Token(startIndex + offsetDelta, t.scopes, language);\r\n previousStartIndex = startIndex;\r\n }\r\n return result;\r\n };\r\n TokenizationSupport2Adapter.prototype.tokenize = function (line, state, offsetDelta) {\r\n var actualResult = this._actual.tokenize(line, state);\r\n var tokens = this._toClassicTokens(actualResult.tokens, this._languageIdentifier.language, offsetDelta);\r\n var endState;\r\n // try to save an object if possible\r\n if (actualResult.endState.equals(state)) {\r\n endState = state;\r\n }\r\n else {\r\n endState = actualResult.endState;\r\n }\r\n return new TokenizationResult(tokens, endState);\r\n };\r\n TokenizationSupport2Adapter.prototype._toBinaryTokens = function (tokens, offsetDelta) {\r\n var languageId = this._languageIdentifier.id;\r\n var tokenTheme = this._standaloneThemeService.getTheme().tokenTheme;\r\n var result = [], resultLen = 0;\r\n var previousStartIndex = 0;\r\n for (var i = 0, len = tokens.length; i < len; i++) {\r\n var t = tokens[i];\r\n var metadata = tokenTheme.match(languageId, t.scopes);\r\n if (resultLen > 0 && result[resultLen - 1] === metadata) {\r\n // same metadata\r\n continue;\r\n }\r\n var startIndex = t.startIndex;\r\n // Prevent issues stemming from a buggy external tokenizer.\r\n if (i === 0) {\r\n // Force first token to start at first index!\r\n startIndex = 0;\r\n }\r\n else if (startIndex < previousStartIndex) {\r\n // Force tokens to be after one another!\r\n startIndex = previousStartIndex;\r\n }\r\n result[resultLen++] = startIndex + offsetDelta;\r\n result[resultLen++] = metadata;\r\n previousStartIndex = startIndex;\r\n }\r\n var actualResult = new Uint32Array(resultLen);\r\n for (var i = 0; i < resultLen; i++) {\r\n actualResult[i] = result[i];\r\n }\r\n return actualResult;\r\n };\r\n TokenizationSupport2Adapter.prototype.tokenize2 = function (line, state, offsetDelta) {\r\n var actualResult = this._actual.tokenize(line, state);\r\n var tokens = this._toBinaryTokens(actualResult.tokens, offsetDelta);\r\n var endState;\r\n // try to save an object if possible\r\n if (actualResult.endState.equals(state)) {\r\n endState = state;\r\n }\r\n else {\r\n endState = actualResult.endState;\r\n }\r\n return new TokenizationResult2(tokens, endState);\r\n };\r\n return TokenizationSupport2Adapter;\r\n}());\r\nexport { TokenizationSupport2Adapter };\r\nfunction isEncodedTokensProvider(provider) {\r\n return 'tokenizeEncoded' in provider;\r\n}\r\nfunction isThenable(obj) {\r\n return obj && typeof obj.then === 'function';\r\n}\r\n/**\r\n * Set the tokens provider for a language (manual implementation).\r\n */\r\nexport function setTokensProvider(languageId, provider) {\r\n var languageIdentifier = StaticServices.modeService.get().getLanguageIdentifier(languageId);\r\n if (!languageIdentifier) {\r\n throw new Error(\"Cannot set tokens provider for unknown language \" + languageId);\r\n }\r\n var create = function (provider) {\r\n if (isEncodedTokensProvider(provider)) {\r\n return new EncodedTokenizationSupport2Adapter(provider);\r\n }\r\n else {\r\n return new TokenizationSupport2Adapter(StaticServices.standaloneThemeService.get(), languageIdentifier, provider);\r\n }\r\n };\r\n if (isThenable(provider)) {\r\n return modes.TokenizationRegistry.registerPromise(languageId, provider.then(function (provider) { return create(provider); }));\r\n }\r\n return modes.TokenizationRegistry.register(languageId, create(provider));\r\n}\r\n/**\r\n * Set the tokens provider for a language (monarch implementation).\r\n */\r\nexport function setMonarchTokensProvider(languageId, languageDef) {\r\n var create = function (languageDef) {\r\n return createTokenizationSupport(StaticServices.modeService.get(), StaticServices.standaloneThemeService.get(), languageId, compile(languageId, languageDef));\r\n };\r\n if (isThenable(languageDef)) {\r\n return modes.TokenizationRegistry.registerPromise(languageId, languageDef.then(function (languageDef) { return create(languageDef); }));\r\n }\r\n return modes.TokenizationRegistry.register(languageId, create(languageDef));\r\n}\r\n/**\r\n * Register a reference provider (used by e.g. reference search).\r\n */\r\nexport function registerReferenceProvider(languageId, provider) {\r\n return modes.ReferenceProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a rename provider (used by e.g. rename symbol).\r\n */\r\nexport function registerRenameProvider(languageId, provider) {\r\n return modes.RenameProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a signature help provider (used by e.g. parameter hints).\r\n */\r\nexport function registerSignatureHelpProvider(languageId, provider) {\r\n return modes.SignatureHelpProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a hover provider (used by e.g. editor hover).\r\n */\r\nexport function registerHoverProvider(languageId, provider) {\r\n return modes.HoverProviderRegistry.register(languageId, {\r\n provideHover: function (model, position, token) {\r\n var word = model.getWordAtPosition(position);\r\n return Promise.resolve(provider.provideHover(model, position, token)).then(function (value) {\r\n if (!value) {\r\n return undefined;\r\n }\r\n if (!value.range && word) {\r\n value.range = new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);\r\n }\r\n if (!value.range) {\r\n value.range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);\r\n }\r\n return value;\r\n });\r\n }\r\n });\r\n}\r\n/**\r\n * Register a document symbol provider (used by e.g. outline).\r\n */\r\nexport function registerDocumentSymbolProvider(languageId, provider) {\r\n return modes.DocumentSymbolProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a document highlight provider (used by e.g. highlight occurrences).\r\n */\r\nexport function registerDocumentHighlightProvider(languageId, provider) {\r\n return modes.DocumentHighlightProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a definition provider (used by e.g. go to definition).\r\n */\r\nexport function registerDefinitionProvider(languageId, provider) {\r\n return modes.DefinitionProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a implementation provider (used by e.g. go to implementation).\r\n */\r\nexport function registerImplementationProvider(languageId, provider) {\r\n return modes.ImplementationProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a type definition provider (used by e.g. go to type definition).\r\n */\r\nexport function registerTypeDefinitionProvider(languageId, provider) {\r\n return modes.TypeDefinitionProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a code lens provider (used by e.g. inline code lenses).\r\n */\r\nexport function registerCodeLensProvider(languageId, provider) {\r\n return modes.CodeLensProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a code action provider (used by e.g. quick fix).\r\n */\r\nexport function registerCodeActionProvider(languageId, provider) {\r\n return modes.CodeActionProviderRegistry.register(languageId, {\r\n provideCodeActions: function (model, range, context, token) {\r\n var markers = StaticServices.markerService.get().read({ resource: model.uri }).filter(function (m) {\r\n return Range.areIntersectingOrTouching(m, range);\r\n });\r\n return provider.provideCodeActions(model, range, { markers: markers, only: context.only }, token);\r\n }\r\n });\r\n}\r\n/**\r\n * Register a formatter that can handle only entire models.\r\n */\r\nexport function registerDocumentFormattingEditProvider(languageId, provider) {\r\n return modes.DocumentFormattingEditProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a formatter that can handle a range inside a model.\r\n */\r\nexport function registerDocumentRangeFormattingEditProvider(languageId, provider) {\r\n return modes.DocumentRangeFormattingEditProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a formatter than can do formatting as the user types.\r\n */\r\nexport function registerOnTypeFormattingEditProvider(languageId, provider) {\r\n return modes.OnTypeFormattingEditProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a link provider that can find links in text.\r\n */\r\nexport function registerLinkProvider(languageId, provider) {\r\n return modes.LinkProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a completion item provider (use by e.g. suggestions).\r\n */\r\nexport function registerCompletionItemProvider(languageId, provider) {\r\n return modes.CompletionProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a document color provider (used by Color Picker, Color Decorator).\r\n */\r\nexport function registerColorProvider(languageId, provider) {\r\n return modes.ColorProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a folding range provider\r\n */\r\nexport function registerFoldingRangeProvider(languageId, provider) {\r\n return modes.FoldingRangeProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a declaration provider\r\n */\r\nexport function registerDeclarationProvider(languageId, provider) {\r\n return modes.DeclarationProviderRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * Register a selection range provider\r\n */\r\nexport function registerSelectionRangeProvider(languageId, provider) {\r\n return modes.SelectionRangeRegistry.register(languageId, provider);\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport function createMonacoLanguagesAPI() {\r\n return {\r\n register: register,\r\n getLanguages: getLanguages,\r\n onLanguage: onLanguage,\r\n getEncodedLanguageId: getEncodedLanguageId,\r\n // provider methods\r\n setLanguageConfiguration: setLanguageConfiguration,\r\n setTokensProvider: setTokensProvider,\r\n setMonarchTokensProvider: setMonarchTokensProvider,\r\n registerReferenceProvider: registerReferenceProvider,\r\n registerRenameProvider: registerRenameProvider,\r\n registerCompletionItemProvider: registerCompletionItemProvider,\r\n registerSignatureHelpProvider: registerSignatureHelpProvider,\r\n registerHoverProvider: registerHoverProvider,\r\n registerDocumentSymbolProvider: registerDocumentSymbolProvider,\r\n registerDocumentHighlightProvider: registerDocumentHighlightProvider,\r\n registerDefinitionProvider: registerDefinitionProvider,\r\n registerImplementationProvider: registerImplementationProvider,\r\n registerTypeDefinitionProvider: registerTypeDefinitionProvider,\r\n registerCodeLensProvider: registerCodeLensProvider,\r\n registerCodeActionProvider: registerCodeActionProvider,\r\n registerDocumentFormattingEditProvider: registerDocumentFormattingEditProvider,\r\n registerDocumentRangeFormattingEditProvider: registerDocumentRangeFormattingEditProvider,\r\n registerOnTypeFormattingEditProvider: registerOnTypeFormattingEditProvider,\r\n registerLinkProvider: registerLinkProvider,\r\n registerColorProvider: registerColorProvider,\r\n registerFoldingRangeProvider: registerFoldingRangeProvider,\r\n registerDeclarationProvider: registerDeclarationProvider,\r\n registerSelectionRangeProvider: registerSelectionRangeProvider,\r\n // enums\r\n DocumentHighlightKind: standaloneEnums.DocumentHighlightKind,\r\n CompletionItemKind: standaloneEnums.CompletionItemKind,\r\n CompletionItemTag: standaloneEnums.CompletionItemTag,\r\n CompletionItemInsertTextRule: standaloneEnums.CompletionItemInsertTextRule,\r\n SymbolKind: standaloneEnums.SymbolKind,\r\n SymbolTag: standaloneEnums.SymbolTag,\r\n IndentAction: standaloneEnums.IndentAction,\r\n CompletionTriggerKind: standaloneEnums.CompletionTriggerKind,\r\n SignatureHelpTriggerKind: standaloneEnums.SignatureHelpTriggerKind,\r\n // classes\r\n FoldingRangeKind: modes.FoldingRangeKind,\r\n };\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { EditorOptions } from './common/config/editorOptions.js';\r\nimport { createMonacoBaseAPI } from './common/standalone/standaloneBase.js';\r\nimport { createMonacoEditorAPI } from './standalone/browser/standaloneEditor.js';\r\nimport { createMonacoLanguagesAPI } from './standalone/browser/standaloneLanguages.js';\r\nvar global = self;\r\n// Set defaults for standalone editor\r\nEditorOptions.wrappingIndent.defaultValue = 0 /* None */;\r\nEditorOptions.glyphMargin.defaultValue = false;\r\nEditorOptions.autoIndent.defaultValue = 3 /* Advanced */;\r\nEditorOptions.overviewRulerLanes.defaultValue = 2;\r\nvar api = createMonacoBaseAPI();\r\napi.editor = createMonacoEditorAPI();\r\napi.languages = createMonacoLanguagesAPI();\r\nexport var CancellationTokenSource = api.CancellationTokenSource;\r\nexport var Emitter = api.Emitter;\r\nexport var KeyCode = api.KeyCode;\r\nexport var KeyMod = api.KeyMod;\r\nexport var Position = api.Position;\r\nexport var Range = api.Range;\r\nexport var Selection = api.Selection;\r\nexport var SelectionDirection = api.SelectionDirection;\r\nexport var MarkerSeverity = api.MarkerSeverity;\r\nexport var MarkerTag = api.MarkerTag;\r\nexport var Uri = api.Uri;\r\nexport var Token = api.Token;\r\nexport var editor = api.editor;\r\nexport var languages = api.languages;\r\nglobal.monaco = api;\r\nif (typeof global.require !== 'undefined' && typeof global.require.config === 'function') {\r\n global.require.config({\r\n ignoreDuplicateModules: [\r\n 'vscode-languageserver-types',\r\n 'vscode-languageserver-types/main',\r\n 'vscode-nls',\r\n 'vscode-nls/vscode-nls',\r\n 'jsonc-parser',\r\n 'jsonc-parser/main',\r\n 'vscode-uri',\r\n 'vscode-uri/index',\r\n 'vs/basic-languages/typescript/typescript'\r\n ]\r\n });\r\n}\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass Node {\n constructor(element) {\n this.element = element;\n this.next = Node.Undefined;\n this.prev = Node.Undefined;\n }\n}\nNode.Undefined = new Node(undefined);\nexport class LinkedList {\n constructor() {\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n get size() {\n return this._size;\n }\n isEmpty() {\n return this._first === Node.Undefined;\n }\n clear() {\n let node = this._first;\n while (node !== Node.Undefined) {\n const next = node.next;\n node.prev = Node.Undefined;\n node.next = Node.Undefined;\n node = next;\n }\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n unshift(element) {\n return this._insert(element, false);\n }\n push(element) {\n return this._insert(element, true);\n }\n _insert(element, atTheEnd) {\n const newNode = new Node(element);\n if (this._first === Node.Undefined) {\n this._first = newNode;\n this._last = newNode;\n }\n else if (atTheEnd) {\n // push\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n }\n else {\n // unshift\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n this._size += 1;\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n shift() {\n if (this._first === Node.Undefined) {\n return undefined;\n }\n else {\n const res = this._first.element;\n this._remove(this._first);\n return res;\n }\n }\n pop() {\n if (this._last === Node.Undefined) {\n return undefined;\n }\n else {\n const res = this._last.element;\n this._remove(this._last);\n return res;\n }\n }\n _remove(node) {\n if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\n // middle\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n }\n else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\n // only node\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n }\n else if (node.next === Node.Undefined) {\n // last\n this._last = this._last.prev;\n this._last.next = Node.Undefined;\n }\n else if (node.prev === Node.Undefined) {\n // first\n this._first = this._first.next;\n this._first.prev = Node.Undefined;\n }\n // done\n this._size -= 1;\n }\n *[Symbol.iterator]() {\n let node = this._first;\n while (node !== Node.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport * as platform from '../../registry/common/platform.js';\nexport const Extensions = {\n JSONContribution: 'base.contributions.json'\n};\nfunction normalizeId(id) {\n if (id.length > 0 && id.charAt(id.length - 1) === '#') {\n return id.substring(0, id.length - 1);\n }\n return id;\n}\nclass JSONContributionRegistry {\n constructor() {\n this._onDidChangeSchema = new Emitter();\n this.schemasById = {};\n }\n registerSchema(uri, unresolvedSchemaContent) {\n this.schemasById[normalizeId(uri)] = unresolvedSchemaContent;\n this._onDidChangeSchema.fire(uri);\n }\n notifySchemaChanged(uri) {\n this._onDidChangeSchema.fire(uri);\n }\n}\nconst jsonContributionRegistry = new JSONContributionRegistry();\nplatform.Registry.add(Extensions.JSONContribution, jsonContributionRegistry);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction _format(message, args) {\n let result;\n if (args.length === 0) {\n result = message;\n }\n else {\n result = message.replace(/\\{(\\d+)\\}/g, function (match, rest) {\n const index = rest[0];\n return typeof args[index] !== 'undefined' ? args[index] : match;\n });\n }\n return result;\n}\nexport function localize(data, message, ...args) {\n return _format(message, args);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { TokenMetadata } from '../modes.js';\nexport class LineTokens {\n constructor(tokens, text, decoder) {\n this._lineTokensBrand = undefined;\n this._tokens = tokens;\n this._tokensCount = (this._tokens.length >>> 1);\n this._text = text;\n this._languageIdCodec = decoder;\n }\n static createEmpty(lineContent, decoder) {\n const defaultMetadata = LineTokens.defaultTokenMetadata;\n const tokens = new Uint32Array(2);\n tokens[0] = lineContent.length;\n tokens[1] = defaultMetadata;\n return new LineTokens(tokens, lineContent, decoder);\n }\n equals(other) {\n if (other instanceof LineTokens) {\n return this.slicedEquals(other, 0, this._tokensCount);\n }\n return false;\n }\n slicedEquals(other, sliceFromTokenIndex, sliceTokenCount) {\n if (this._text !== other._text) {\n return false;\n }\n if (this._tokensCount !== other._tokensCount) {\n return false;\n }\n const from = (sliceFromTokenIndex << 1);\n const to = from + (sliceTokenCount << 1);\n for (let i = from; i < to; i++) {\n if (this._tokens[i] !== other._tokens[i]) {\n return false;\n }\n }\n return true;\n }\n getLineContent() {\n return this._text;\n }\n getCount() {\n return this._tokensCount;\n }\n getStartOffset(tokenIndex) {\n if (tokenIndex > 0) {\n return this._tokens[(tokenIndex - 1) << 1];\n }\n return 0;\n }\n getMetadata(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return metadata;\n }\n getLanguageId(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n const languageId = TokenMetadata.getLanguageId(metadata);\n return this._languageIdCodec.decodeLanguageId(languageId);\n }\n getStandardTokenType(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return TokenMetadata.getTokenType(metadata);\n }\n getForeground(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return TokenMetadata.getForeground(metadata);\n }\n getClassName(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return TokenMetadata.getClassNameFromMetadata(metadata);\n }\n getInlineStyle(tokenIndex, colorMap) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return TokenMetadata.getInlineStyleFromMetadata(metadata, colorMap);\n }\n getEndOffset(tokenIndex) {\n return this._tokens[tokenIndex << 1];\n }\n /**\n * Find the token containing offset `offset`.\n * @param offset The search offset\n * @return The index of the token containing the offset.\n */\n findTokenIndexAtOffset(offset) {\n return LineTokens.findIndexInTokensArray(this._tokens, offset);\n }\n inflate() {\n return this;\n }\n sliceAndInflate(startOffset, endOffset, deltaOffset) {\n return new SlicedLineTokens(this, startOffset, endOffset, deltaOffset);\n }\n static convertToEndOffset(tokens, lineTextLength) {\n const tokenCount = (tokens.length >>> 1);\n const lastTokenIndex = tokenCount - 1;\n for (let tokenIndex = 0; tokenIndex < lastTokenIndex; tokenIndex++) {\n tokens[tokenIndex << 1] = tokens[(tokenIndex + 1) << 1];\n }\n tokens[lastTokenIndex << 1] = lineTextLength;\n }\n static findIndexInTokensArray(tokens, desiredIndex) {\n if (tokens.length <= 2) {\n return 0;\n }\n let low = 0;\n let high = (tokens.length >>> 1) - 1;\n while (low < high) {\n const mid = low + Math.floor((high - low) / 2);\n const endOffset = tokens[(mid << 1)];\n if (endOffset === desiredIndex) {\n return mid + 1;\n }\n else if (endOffset < desiredIndex) {\n low = mid + 1;\n }\n else if (endOffset > desiredIndex) {\n high = mid;\n }\n }\n return low;\n }\n /**\n * @pure\n * @param insertTokens Must be sorted by offset.\n */\n withInserted(insertTokens) {\n if (insertTokens.length === 0) {\n return this;\n }\n let nextOriginalTokenIdx = 0;\n let nextInsertTokenIdx = 0;\n let text = '';\n const newTokens = new Array();\n let originalEndOffset = 0;\n while (true) {\n let nextOriginalTokenEndOffset = nextOriginalTokenIdx < this._tokensCount ? this._tokens[nextOriginalTokenIdx << 1] : -1;\n let nextInsertToken = nextInsertTokenIdx < insertTokens.length ? insertTokens[nextInsertTokenIdx] : null;\n if (nextOriginalTokenEndOffset !== -1 && (nextInsertToken === null || nextOriginalTokenEndOffset <= nextInsertToken.offset)) {\n // original token ends before next insert token\n text += this._text.substring(originalEndOffset, nextOriginalTokenEndOffset);\n const metadata = this._tokens[(nextOriginalTokenIdx << 1) + 1];\n newTokens.push(text.length, metadata);\n nextOriginalTokenIdx++;\n originalEndOffset = nextOriginalTokenEndOffset;\n }\n else if (nextInsertToken) {\n if (nextInsertToken.offset > originalEndOffset) {\n // insert token is in the middle of the next token.\n text += this._text.substring(originalEndOffset, nextInsertToken.offset);\n const metadata = this._tokens[(nextOriginalTokenIdx << 1) + 1];\n newTokens.push(text.length, metadata);\n originalEndOffset = nextInsertToken.offset;\n }\n text += nextInsertToken.text;\n newTokens.push(text.length, nextInsertToken.tokenMetadata);\n nextInsertTokenIdx++;\n }\n else {\n break;\n }\n }\n return new LineTokens(new Uint32Array(newTokens), text, this._languageIdCodec);\n }\n}\nLineTokens.defaultTokenMetadata = ((0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\nexport class SlicedLineTokens {\n constructor(source, startOffset, endOffset, deltaOffset) {\n this._source = source;\n this._startOffset = startOffset;\n this._endOffset = endOffset;\n this._deltaOffset = deltaOffset;\n this._firstTokenIndex = source.findTokenIndexAtOffset(startOffset);\n this._tokensCount = 0;\n for (let i = this._firstTokenIndex, len = source.getCount(); i < len; i++) {\n const tokenStartOffset = source.getStartOffset(i);\n if (tokenStartOffset >= endOffset) {\n break;\n }\n this._tokensCount++;\n }\n }\n equals(other) {\n if (other instanceof SlicedLineTokens) {\n return (this._startOffset === other._startOffset\n && this._endOffset === other._endOffset\n && this._deltaOffset === other._deltaOffset\n && this._source.slicedEquals(other._source, this._firstTokenIndex, this._tokensCount));\n }\n return false;\n }\n getCount() {\n return this._tokensCount;\n }\n getForeground(tokenIndex) {\n return this._source.getForeground(this._firstTokenIndex + tokenIndex);\n }\n getEndOffset(tokenIndex) {\n const tokenEndOffset = this._source.getEndOffset(this._firstTokenIndex + tokenIndex);\n return Math.min(this._endOffset, tokenEndOffset) - this._startOffset + this._deltaOffset;\n }\n getClassName(tokenIndex) {\n return this._source.getClassName(this._firstTokenIndex + tokenIndex);\n }\n getInlineStyle(tokenIndex, colorMap) {\n return this._source.getInlineStyle(this._firstTokenIndex + tokenIndex, colorMap);\n }\n findTokenIndexAtOffset(offset) {\n return this._source.findTokenIndexAtOffset(offset + this._startOffset - this._deltaOffset) - this._firstTokenIndex;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../common/event.js';\nexport class DomEmitter {\n constructor(element, type, useCapture) {\n const fn = (e) => this.emitter.fire(e);\n this.emitter = new Emitter({\n onFirstListenerAdd: () => element.addEventListener(type, fn, useCapture),\n onLastListenerRemove: () => element.removeEventListener(type, fn, useCapture)\n });\n }\n get event() {\n return this.emitter.event;\n }\n dispose() {\n this.emitter.dispose();\n }\n}\nexport function stopEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n return event;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { globals } from './platform.js';\nconst hasPerformanceNow = (globals.performance && typeof globals.performance.now === 'function');\nexport class StopWatch {\n constructor(highResolution) {\n this._highResolution = hasPerformanceNow && highResolution;\n this._startTime = this._now();\n this._stopTime = -1;\n }\n static create(highResolution = true) {\n return new StopWatch(highResolution);\n }\n stop() {\n this._stopTime = this._now();\n }\n elapsed() {\n if (this._stopTime !== -1) {\n return this._stopTime - this._startTime;\n }\n return this._now() - this._startTime;\n }\n _now() {\n return this._highResolution ? globals.performance.now() : Date.now();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as buffer from '../../../base/common/buffer.js';\nimport { decodeUTF16LE } from '../core/stringBuilder.js';\nfunction escapeNewLine(str) {\n return (str\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r'));\n}\nexport class TextChange {\n constructor(oldPosition, oldText, newPosition, newText) {\n this.oldPosition = oldPosition;\n this.oldText = oldText;\n this.newPosition = newPosition;\n this.newText = newText;\n }\n get oldLength() {\n return this.oldText.length;\n }\n get oldEnd() {\n return this.oldPosition + this.oldText.length;\n }\n get newLength() {\n return this.newText.length;\n }\n get newEnd() {\n return this.newPosition + this.newText.length;\n }\n toString() {\n if (this.oldText.length === 0) {\n return `(insert@${this.oldPosition} \"${escapeNewLine(this.newText)}\")`;\n }\n if (this.newText.length === 0) {\n return `(delete@${this.oldPosition} \"${escapeNewLine(this.oldText)}\")`;\n }\n return `(replace@${this.oldPosition} \"${escapeNewLine(this.oldText)}\" with \"${escapeNewLine(this.newText)}\")`;\n }\n static _writeStringSize(str) {\n return (4 + 2 * str.length);\n }\n static _writeString(b, str, offset) {\n const len = str.length;\n buffer.writeUInt32BE(b, len, offset);\n offset += 4;\n for (let i = 0; i < len; i++) {\n buffer.writeUInt16LE(b, str.charCodeAt(i), offset);\n offset += 2;\n }\n return offset;\n }\n static _readString(b, offset) {\n const len = buffer.readUInt32BE(b, offset);\n offset += 4;\n return decodeUTF16LE(b, offset, len);\n }\n writeSize() {\n return (+4 // oldPosition\n + 4 // newPosition\n + TextChange._writeStringSize(this.oldText)\n + TextChange._writeStringSize(this.newText));\n }\n write(b, offset) {\n buffer.writeUInt32BE(b, this.oldPosition, offset);\n offset += 4;\n buffer.writeUInt32BE(b, this.newPosition, offset);\n offset += 4;\n offset = TextChange._writeString(b, this.oldText, offset);\n offset = TextChange._writeString(b, this.newText, offset);\n return offset;\n }\n static read(b, offset, dest) {\n const oldPosition = buffer.readUInt32BE(b, offset);\n offset += 4;\n const newPosition = buffer.readUInt32BE(b, offset);\n offset += 4;\n const oldText = TextChange._readString(b, offset);\n offset += TextChange._writeStringSize(oldText);\n const newText = TextChange._readString(b, offset);\n offset += TextChange._writeStringSize(newText);\n dest.push(new TextChange(oldPosition, oldText, newPosition, newText));\n return offset;\n }\n}\nexport function compressConsecutiveTextChanges(prevEdits, currEdits) {\n if (prevEdits === null || prevEdits.length === 0) {\n return currEdits;\n }\n const compressor = new TextChangeCompressor(prevEdits, currEdits);\n return compressor.compress();\n}\nclass TextChangeCompressor {\n constructor(prevEdits, currEdits) {\n this._prevEdits = prevEdits;\n this._currEdits = currEdits;\n this._result = [];\n this._resultLen = 0;\n this._prevLen = this._prevEdits.length;\n this._prevDeltaOffset = 0;\n this._currLen = this._currEdits.length;\n this._currDeltaOffset = 0;\n }\n compress() {\n let prevIndex = 0;\n let currIndex = 0;\n let prevEdit = this._getPrev(prevIndex);\n let currEdit = this._getCurr(currIndex);\n while (prevIndex < this._prevLen || currIndex < this._currLen) {\n if (prevEdit === null) {\n this._acceptCurr(currEdit);\n currEdit = this._getCurr(++currIndex);\n continue;\n }\n if (currEdit === null) {\n this._acceptPrev(prevEdit);\n prevEdit = this._getPrev(++prevIndex);\n continue;\n }\n if (currEdit.oldEnd <= prevEdit.newPosition) {\n this._acceptCurr(currEdit);\n currEdit = this._getCurr(++currIndex);\n continue;\n }\n if (prevEdit.newEnd <= currEdit.oldPosition) {\n this._acceptPrev(prevEdit);\n prevEdit = this._getPrev(++prevIndex);\n continue;\n }\n if (currEdit.oldPosition < prevEdit.newPosition) {\n const [e1, e2] = TextChangeCompressor._splitCurr(currEdit, prevEdit.newPosition - currEdit.oldPosition);\n this._acceptCurr(e1);\n currEdit = e2;\n continue;\n }\n if (prevEdit.newPosition < currEdit.oldPosition) {\n const [e1, e2] = TextChangeCompressor._splitPrev(prevEdit, currEdit.oldPosition - prevEdit.newPosition);\n this._acceptPrev(e1);\n prevEdit = e2;\n continue;\n }\n // At this point, currEdit.oldPosition === prevEdit.newPosition\n let mergePrev;\n let mergeCurr;\n if (currEdit.oldEnd === prevEdit.newEnd) {\n mergePrev = prevEdit;\n mergeCurr = currEdit;\n prevEdit = this._getPrev(++prevIndex);\n currEdit = this._getCurr(++currIndex);\n }\n else if (currEdit.oldEnd < prevEdit.newEnd) {\n const [e1, e2] = TextChangeCompressor._splitPrev(prevEdit, currEdit.oldLength);\n mergePrev = e1;\n mergeCurr = currEdit;\n prevEdit = e2;\n currEdit = this._getCurr(++currIndex);\n }\n else {\n const [e1, e2] = TextChangeCompressor._splitCurr(currEdit, prevEdit.newLength);\n mergePrev = prevEdit;\n mergeCurr = e1;\n prevEdit = this._getPrev(++prevIndex);\n currEdit = e2;\n }\n this._result[this._resultLen++] = new TextChange(mergePrev.oldPosition, mergePrev.oldText, mergeCurr.newPosition, mergeCurr.newText);\n this._prevDeltaOffset += mergePrev.newLength - mergePrev.oldLength;\n this._currDeltaOffset += mergeCurr.newLength - mergeCurr.oldLength;\n }\n const merged = TextChangeCompressor._merge(this._result);\n const cleaned = TextChangeCompressor._removeNoOps(merged);\n return cleaned;\n }\n _acceptCurr(currEdit) {\n this._result[this._resultLen++] = TextChangeCompressor._rebaseCurr(this._prevDeltaOffset, currEdit);\n this._currDeltaOffset += currEdit.newLength - currEdit.oldLength;\n }\n _getCurr(currIndex) {\n return (currIndex < this._currLen ? this._currEdits[currIndex] : null);\n }\n _acceptPrev(prevEdit) {\n this._result[this._resultLen++] = TextChangeCompressor._rebasePrev(this._currDeltaOffset, prevEdit);\n this._prevDeltaOffset += prevEdit.newLength - prevEdit.oldLength;\n }\n _getPrev(prevIndex) {\n return (prevIndex < this._prevLen ? this._prevEdits[prevIndex] : null);\n }\n static _rebaseCurr(prevDeltaOffset, currEdit) {\n return new TextChange(currEdit.oldPosition - prevDeltaOffset, currEdit.oldText, currEdit.newPosition, currEdit.newText);\n }\n static _rebasePrev(currDeltaOffset, prevEdit) {\n return new TextChange(prevEdit.oldPosition, prevEdit.oldText, prevEdit.newPosition + currDeltaOffset, prevEdit.newText);\n }\n static _splitPrev(edit, offset) {\n const preText = edit.newText.substr(0, offset);\n const postText = edit.newText.substr(offset);\n return [\n new TextChange(edit.oldPosition, edit.oldText, edit.newPosition, preText),\n new TextChange(edit.oldEnd, '', edit.newPosition + offset, postText)\n ];\n }\n static _splitCurr(edit, offset) {\n const preText = edit.oldText.substr(0, offset);\n const postText = edit.oldText.substr(offset);\n return [\n new TextChange(edit.oldPosition, preText, edit.newPosition, edit.newText),\n new TextChange(edit.oldPosition + offset, postText, edit.newEnd, '')\n ];\n }\n static _merge(edits) {\n if (edits.length === 0) {\n return edits;\n }\n let result = [], resultLen = 0;\n let prev = edits[0];\n for (let i = 1; i < edits.length; i++) {\n const curr = edits[i];\n if (prev.oldEnd === curr.oldPosition) {\n // Merge into `prev`\n prev = new TextChange(prev.oldPosition, prev.oldText + curr.oldText, prev.newPosition, prev.newText + curr.newText);\n }\n else {\n result[resultLen++] = prev;\n prev = curr;\n }\n }\n result[resultLen++] = prev;\n return result;\n }\n static _removeNoOps(edits) {\n if (edits.length === 0) {\n return edits;\n }\n let result = [], resultLen = 0;\n for (let i = 0; i < edits.length; i++) {\n const edit = edits[i];\n if (edit.oldText === edit.newText) {\n continue;\n }\n result[resultLen++] = edit;\n }\n return result;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { CharacterClassifier } from '../core/characterClassifier.js';\nexport class WordCharacterClassifier extends CharacterClassifier {\n constructor(wordSeparators) {\n super(0 /* Regular */);\n for (let i = 0, len = wordSeparators.length; i < len; i++) {\n this.set(wordSeparators.charCodeAt(i), 2 /* WordSeparator */);\n }\n this.set(32 /* Space */, 1 /* Whitespace */);\n this.set(9 /* Tab */, 1 /* Whitespace */);\n }\n}\nfunction once(computeFn) {\n let cache = {}; // TODO@Alex unbounded cache\n return (input) => {\n if (!cache.hasOwnProperty(input)) {\n cache[input] = computeFn(input);\n }\n return cache[input];\n };\n}\nexport const getMapForWordSeparators = once((input) => new WordCharacterClassifier(input));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nlet hasDifferentOriginAncestorFlag = false;\nlet sameOriginWindowChainCache = null;\nfunction getParentWindowIfSameOrigin(w) {\n if (!w.parent || w.parent === w) {\n return null;\n }\n // Cannot really tell if we have access to the parent window unless we try to access something in it\n try {\n let location = w.location;\n let parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n hasDifferentOriginAncestorFlag = true;\n return null;\n }\n }\n catch (e) {\n hasDifferentOriginAncestorFlag = true;\n return null;\n }\n return w.parent;\n}\nexport class IframeUtils {\n /**\n * Returns a chain of embedded windows with the same origin (which can be accessed programmatically).\n * Having a chain of length 1 might mean that the current execution environment is running outside of an iframe or inside an iframe embedded in a window with a different origin.\n * To distinguish if at one point the current execution environment is running inside a window with a different origin, see hasDifferentOriginAncestor()\n */\n static getSameOriginWindowChain() {\n if (!sameOriginWindowChainCache) {\n sameOriginWindowChainCache = [];\n let w = window;\n let parent;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n sameOriginWindowChainCache.push({\n window: w,\n iframeElement: w.frameElement || null\n });\n }\n else {\n sameOriginWindowChainCache.push({\n window: w,\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return sameOriginWindowChainCache.slice(0);\n }\n /**\n * Returns true if the current execution environment is chained in a list of iframes which at one point ends in a window with a different origin.\n * Returns false if the current execution environment is not running inside an iframe or if the entire chain of iframes have the same origin.\n */\n static hasDifferentOriginAncestor() {\n if (!sameOriginWindowChainCache) {\n this.getSameOriginWindowChain();\n }\n return hasDifferentOriginAncestorFlag;\n }\n /**\n * Returns the position of `childWindow` relative to `ancestorWindow`\n */\n static getPositionOfChildWindowRelativeToAncestorWindow(childWindow, ancestorWindow) {\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n let top = 0, left = 0;\n let windowChain = this.getSameOriginWindowChain();\n for (const windowChainEl of windowChain) {\n top += windowChainEl.window.scrollY;\n left += windowChainEl.window.scrollX;\n if (windowChainEl.window === ancestorWindow) {\n break;\n }\n if (!windowChainEl.iframeElement) {\n break;\n }\n let boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n return {\n top: top,\n left: left\n };\n }\n}\n","/**\n * Returns the last element of an array.\n * @param array The array.\n * @param n Which element from the end (default is zero).\n */\nexport function tail(array, n = 0) {\n return array[array.length - (1 + n)];\n}\nexport function tail2(arr) {\n if (arr.length === 0) {\n throw new Error('Invalid tail call');\n }\n return [arr.slice(0, arr.length - 1), arr[arr.length - 1]];\n}\nexport function equals(one, other, itemEquals = (a, b) => a === b) {\n if (one === other) {\n return true;\n }\n if (!one || !other) {\n return false;\n }\n if (one.length !== other.length) {\n return false;\n }\n for (let i = 0, len = one.length; i < len; i++) {\n if (!itemEquals(one[i], other[i])) {\n return false;\n }\n }\n return true;\n}\nexport function binarySearch(array, key, comparator) {\n let low = 0, high = array.length - 1;\n while (low <= high) {\n const mid = ((low + high) / 2) | 0;\n const comp = comparator(array[mid], key);\n if (comp < 0) {\n low = mid + 1;\n }\n else if (comp > 0) {\n high = mid - 1;\n }\n else {\n return mid;\n }\n }\n return -(low + 1);\n}\n/**\n * Takes a sorted array and a function p. The array is sorted in such a way that all elements where p(x) is false\n * are located before all elements where p(x) is true.\n * @returns the least x for which p(x) is true or array.length if no element fullfills the given function.\n */\nexport function findFirstInSorted(array, p) {\n let low = 0, high = array.length;\n if (high === 0) {\n return 0; // no children\n }\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (p(array[mid])) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n return low;\n}\nexport function quickSelect(nth, data, compare) {\n nth = nth | 0;\n if (nth >= data.length) {\n throw new TypeError('invalid index');\n }\n let pivotValue = data[Math.floor(data.length * Math.random())];\n let lower = [];\n let higher = [];\n let pivots = [];\n for (let value of data) {\n const val = compare(value, pivotValue);\n if (val < 0) {\n lower.push(value);\n }\n else if (val > 0) {\n higher.push(value);\n }\n else {\n pivots.push(value);\n }\n }\n if (nth < lower.length) {\n return quickSelect(nth, lower, compare);\n }\n else if (nth < lower.length + pivots.length) {\n return pivots[0];\n }\n else {\n return quickSelect(nth - (lower.length + pivots.length), higher, compare);\n }\n}\nexport function groupBy(data, compare) {\n const result = [];\n let currentGroup = undefined;\n for (const element of data.slice(0).sort(compare)) {\n if (!currentGroup || compare(currentGroup[0], element) !== 0) {\n currentGroup = [element];\n result.push(currentGroup);\n }\n else {\n currentGroup.push(element);\n }\n }\n return result;\n}\n/**\n * @returns New array with all falsy values removed. The original array IS NOT modified.\n */\nexport function coalesce(array) {\n return array.filter(e => !!e);\n}\n/**\n * @returns false if the provided object is an array and not empty.\n */\nexport function isFalsyOrEmpty(obj) {\n return !Array.isArray(obj) || obj.length === 0;\n}\nexport function isNonEmptyArray(obj) {\n return Array.isArray(obj) && obj.length > 0;\n}\n/**\n * Removes duplicates from the given array. The optional keyFn allows to specify\n * how elements are checked for equality by returning an alternate value for each.\n */\nexport function distinct(array, keyFn = value => value) {\n const seen = new Set();\n return array.filter(element => {\n const key = keyFn(element);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n}\nexport function findLast(arr, predicate) {\n const idx = lastIndex(arr, predicate);\n if (idx === -1) {\n return undefined;\n }\n return arr[idx];\n}\nexport function lastIndex(array, fn) {\n for (let i = array.length - 1; i >= 0; i--) {\n const element = array[i];\n if (fn(element)) {\n return i;\n }\n }\n return -1;\n}\nexport function firstOrDefault(array, notFoundValue) {\n return array.length > 0 ? array[0] : notFoundValue;\n}\nexport function flatten(arr) {\n return [].concat(...arr);\n}\nexport function range(arg, to) {\n let from = typeof to === 'number' ? arg : 0;\n if (typeof to === 'number') {\n from = arg;\n }\n else {\n from = 0;\n to = arg;\n }\n const result = [];\n if (from <= to) {\n for (let i = from; i < to; i++) {\n result.push(i);\n }\n }\n else {\n for (let i = from; i > to; i--) {\n result.push(i);\n }\n }\n return result;\n}\n/**\n * Insert `insertArr` inside `target` at `insertIndex`.\n * Please don't touch unless you understand https://jsperf.com/inserting-an-array-within-an-array\n */\nexport function arrayInsert(target, insertIndex, insertArr) {\n const before = target.slice(0, insertIndex);\n const after = target.slice(insertIndex);\n return before.concat(insertArr, after);\n}\n/**\n * Pushes an element to the start of the array, if found.\n */\nexport function pushToStart(arr, value) {\n const index = arr.indexOf(value);\n if (index > -1) {\n arr.splice(index, 1);\n arr.unshift(value);\n }\n}\n/**\n * Pushes an element to the end of the array, if found.\n */\nexport function pushToEnd(arr, value) {\n const index = arr.indexOf(value);\n if (index > -1) {\n arr.splice(index, 1);\n arr.push(value);\n }\n}\nexport function asArray(x) {\n return Array.isArray(x) ? x : [x];\n}\n/**\n * Insert the new items in the array.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start inserting elements.\n * @param newItems The items to be inserted\n */\nexport function insertInto(array, start, newItems) {\n const startIdx = getActualStartIndex(array, start);\n const originalLength = array.length;\n const newItemsLength = newItems.length;\n array.length = originalLength + newItemsLength;\n // Move the items after the start index, start from the end so that we don't overwrite any value.\n for (let i = originalLength - 1; i >= startIdx; i--) {\n array[i + newItemsLength] = array[i];\n }\n for (let i = 0; i < newItemsLength; i++) {\n array[i + startIdx] = newItems[i];\n }\n}\n/**\n * Removes elements from an array and inserts new elements in their place, returning the deleted elements. Alternative to the native Array.splice method, it\n * can only support limited number of items due to the maximum call stack size limit.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @returns An array containing the elements that were deleted.\n */\nexport function splice(array, start, deleteCount, newItems) {\n const index = getActualStartIndex(array, start);\n const result = array.splice(index, deleteCount);\n insertInto(array, index, newItems);\n return result;\n}\n/**\n * Determine the actual start index (same logic as the native splice() or slice())\n * If greater than the length of the array, start will be set to the length of the array. In this case, no element will be deleted but the method will behave as an adding function, adding as many element as item[n*] provided.\n * If negative, it will begin that many elements from the end of the array. (In this case, the origin -1, meaning -n is the index of the nth last element, and is therefore equivalent to the index of array.length - n.) If array.length + start is less than 0, it will begin from index 0.\n * @param array The target array.\n * @param start The operation index.\n */\nfunction getActualStartIndex(array, start) {\n return start < 0 ? Math.max(start + array.length, 0) : Math.min(start, array.length);\n}\nexport class ArrayQueue {\n /**\n * Constructs a queue that is backed by the given array. Runtime is O(1).\n */\n constructor(items) {\n this.items = items;\n this.firstIdx = 0;\n this.lastIdx = this.items.length - 1;\n }\n /**\n * Consumes elements from the beginning of the queue as long as the predicate returns true.\n * If no elements were consumed, `null` is returned. Has a runtime of O(result.length).\n */\n takeWhile(predicate) {\n // P(k) := k <= this.lastIdx && predicate(this.items[k])\n // Find s := min { k | k >= this.firstIdx && !P(k) } and return this.data[this.firstIdx...s)\n let startIdx = this.firstIdx;\n while (startIdx < this.items.length && predicate(this.items[startIdx])) {\n startIdx++;\n }\n const result = startIdx === this.firstIdx ? null : this.items.slice(this.firstIdx, startIdx);\n this.firstIdx = startIdx;\n return result;\n }\n /**\n * Consumes elements from the end of the queue as long as the predicate returns true.\n * If no elements were consumed, `null` is returned.\n * The result has the same order as the underlying array!\n */\n takeFromEndWhile(predicate) {\n // P(k) := this.firstIdx >= k && predicate(this.items[k])\n // Find s := max { k | k <= this.lastIdx && !P(k) } and return this.data(s...this.lastIdx]\n let endIdx = this.lastIdx;\n while (endIdx >= 0 && predicate(this.items[endIdx])) {\n endIdx--;\n }\n const result = endIdx === this.lastIdx ? null : this.items.slice(endIdx + 1, this.lastIdx + 1);\n this.lastIdx = endIdx;\n return result;\n }\n peek() {\n return this.items[this.firstIdx];\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from './strings.js';\n/**\n * Return a hash value for an object.\n */\nexport function hash(obj) {\n return doHash(obj, 0);\n}\nexport function doHash(obj, hashVal) {\n switch (typeof obj) {\n case 'object':\n if (obj === null) {\n return numberHash(349, hashVal);\n }\n else if (Array.isArray(obj)) {\n return arrayHash(obj, hashVal);\n }\n return objectHash(obj, hashVal);\n case 'string':\n return stringHash(obj, hashVal);\n case 'boolean':\n return booleanHash(obj, hashVal);\n case 'number':\n return numberHash(obj, hashVal);\n case 'undefined':\n return numberHash(937, hashVal);\n default:\n return numberHash(617, hashVal);\n }\n}\nexport function numberHash(val, initialHashVal) {\n return (((initialHashVal << 5) - initialHashVal) + val) | 0; // hashVal * 31 + ch, keep as int32\n}\nfunction booleanHash(b, initialHashVal) {\n return numberHash(b ? 433 : 863, initialHashVal);\n}\nexport function stringHash(s, hashVal) {\n hashVal = numberHash(149417, hashVal);\n for (let i = 0, length = s.length; i < length; i++) {\n hashVal = numberHash(s.charCodeAt(i), hashVal);\n }\n return hashVal;\n}\nfunction arrayHash(arr, initialHashVal) {\n initialHashVal = numberHash(104579, initialHashVal);\n return arr.reduce((hashVal, item) => doHash(item, hashVal), initialHashVal);\n}\nfunction objectHash(obj, initialHashVal) {\n initialHashVal = numberHash(181387, initialHashVal);\n return Object.keys(obj).sort().reduce((hashVal, key) => {\n hashVal = stringHash(key, hashVal);\n return doHash(obj[key], hashVal);\n }, initialHashVal);\n}\nfunction leftRotate(value, bits, totalBits = 32) {\n // delta + bits = totalBits\n const delta = totalBits - bits;\n // All ones, expect `delta` zeros aligned to the right\n const mask = ~((1 << delta) - 1);\n // Join (value left-shifted `bits` bits) with (masked value right-shifted `delta` bits)\n return ((value << bits) | ((mask & value) >>> delta)) >>> 0;\n}\nfunction fill(dest, index = 0, count = dest.byteLength, value = 0) {\n for (let i = 0; i < count; i++) {\n dest[index + i] = value;\n }\n}\nfunction leftPad(value, length, char = '0') {\n while (value.length < length) {\n value = char + value;\n }\n return value;\n}\nexport function toHexString(bufferOrValue, bitsize = 32) {\n if (bufferOrValue instanceof ArrayBuffer) {\n return Array.from(new Uint8Array(bufferOrValue)).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n return leftPad((bufferOrValue >>> 0).toString(16), bitsize / 4);\n}\n/**\n * A SHA1 implementation that works with strings and does not allocate.\n */\nexport class StringSHA1 {\n constructor() {\n this._h0 = 0x67452301;\n this._h1 = 0xEFCDAB89;\n this._h2 = 0x98BADCFE;\n this._h3 = 0x10325476;\n this._h4 = 0xC3D2E1F0;\n this._buff = new Uint8Array(64 /* BLOCK_SIZE */ + 3 /* to fit any utf-8 */);\n this._buffDV = new DataView(this._buff.buffer);\n this._buffLen = 0;\n this._totalLen = 0;\n this._leftoverHighSurrogate = 0;\n this._finished = false;\n }\n update(str) {\n const strLen = str.length;\n if (strLen === 0) {\n return;\n }\n const buff = this._buff;\n let buffLen = this._buffLen;\n let leftoverHighSurrogate = this._leftoverHighSurrogate;\n let charCode;\n let offset;\n if (leftoverHighSurrogate !== 0) {\n charCode = leftoverHighSurrogate;\n offset = -1;\n leftoverHighSurrogate = 0;\n }\n else {\n charCode = str.charCodeAt(0);\n offset = 0;\n }\n while (true) {\n let codePoint = charCode;\n if (strings.isHighSurrogate(charCode)) {\n if (offset + 1 < strLen) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (strings.isLowSurrogate(nextCharCode)) {\n offset++;\n codePoint = strings.computeCodePoint(charCode, nextCharCode);\n }\n else {\n // illegal => unicode replacement character\n codePoint = 65533 /* UNICODE_REPLACEMENT */;\n }\n }\n else {\n // last character is a surrogate pair\n leftoverHighSurrogate = charCode;\n break;\n }\n }\n else if (strings.isLowSurrogate(charCode)) {\n // illegal => unicode replacement character\n codePoint = 65533 /* UNICODE_REPLACEMENT */;\n }\n buffLen = this._push(buff, buffLen, codePoint);\n offset++;\n if (offset < strLen) {\n charCode = str.charCodeAt(offset);\n }\n else {\n break;\n }\n }\n this._buffLen = buffLen;\n this._leftoverHighSurrogate = leftoverHighSurrogate;\n }\n _push(buff, buffLen, codePoint) {\n if (codePoint < 0x0080) {\n buff[buffLen++] = codePoint;\n }\n else if (codePoint < 0x0800) {\n buff[buffLen++] = 0b11000000 | ((codePoint & 0b00000000000000000000011111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n else if (codePoint < 0x10000) {\n buff[buffLen++] = 0b11100000 | ((codePoint & 0b00000000000000001111000000000000) >>> 12);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000111111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n else {\n buff[buffLen++] = 0b11110000 | ((codePoint & 0b00000000000111000000000000000000) >>> 18);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000111111000000000000) >>> 12);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000111111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n if (buffLen >= 64 /* BLOCK_SIZE */) {\n this._step();\n buffLen -= 64 /* BLOCK_SIZE */;\n this._totalLen += 64 /* BLOCK_SIZE */;\n // take last 3 in case of UTF8 overflow\n buff[0] = buff[64 /* BLOCK_SIZE */ + 0];\n buff[1] = buff[64 /* BLOCK_SIZE */ + 1];\n buff[2] = buff[64 /* BLOCK_SIZE */ + 2];\n }\n return buffLen;\n }\n digest() {\n if (!this._finished) {\n this._finished = true;\n if (this._leftoverHighSurrogate) {\n // illegal => unicode replacement character\n this._leftoverHighSurrogate = 0;\n this._buffLen = this._push(this._buff, this._buffLen, 65533 /* UNICODE_REPLACEMENT */);\n }\n this._totalLen += this._buffLen;\n this._wrapUp();\n }\n return toHexString(this._h0) + toHexString(this._h1) + toHexString(this._h2) + toHexString(this._h3) + toHexString(this._h4);\n }\n _wrapUp() {\n this._buff[this._buffLen++] = 0x80;\n fill(this._buff, this._buffLen);\n if (this._buffLen > 56) {\n this._step();\n fill(this._buff);\n }\n // this will fit because the mantissa can cover up to 52 bits\n const ml = 8 * this._totalLen;\n this._buffDV.setUint32(56, Math.floor(ml / 4294967296), false);\n this._buffDV.setUint32(60, ml % 4294967296, false);\n this._step();\n }\n _step() {\n const bigBlock32 = StringSHA1._bigBlock32;\n const data = this._buffDV;\n for (let j = 0; j < 64 /* 16*4 */; j += 4) {\n bigBlock32.setUint32(j, data.getUint32(j, false), false);\n }\n for (let j = 64; j < 320 /* 80*4 */; j += 4) {\n bigBlock32.setUint32(j, leftRotate((bigBlock32.getUint32(j - 12, false) ^ bigBlock32.getUint32(j - 32, false) ^ bigBlock32.getUint32(j - 56, false) ^ bigBlock32.getUint32(j - 64, false)), 1), false);\n }\n let a = this._h0;\n let b = this._h1;\n let c = this._h2;\n let d = this._h3;\n let e = this._h4;\n let f, k;\n let temp;\n for (let j = 0; j < 80; j++) {\n if (j < 20) {\n f = (b & c) | ((~b) & d);\n k = 0x5A827999;\n }\n else if (j < 40) {\n f = b ^ c ^ d;\n k = 0x6ED9EBA1;\n }\n else if (j < 60) {\n f = (b & c) | (b & d) | (c & d);\n k = 0x8F1BBCDC;\n }\n else {\n f = b ^ c ^ d;\n k = 0xCA62C1D6;\n }\n temp = (leftRotate(a, 5) + f + e + k + bigBlock32.getUint32(j * 4, false)) & 0xffffffff;\n e = d;\n d = c;\n c = leftRotate(b, 30);\n b = a;\n a = temp;\n }\n this._h0 = (this._h0 + a) & 0xffffffff;\n this._h1 = (this._h1 + b) & 0xffffffff;\n this._h2 = (this._h2 + c) & 0xffffffff;\n this._h3 = (this._h3 + d) & 0xffffffff;\n this._h4 = (this._h4 + e) & 0xffffffff;\n }\n}\nStringSHA1._bigBlock32 = new DataView(new ArrayBuffer(320)); // 80 * 4 = 320\n","/**\n * @returns whether the provided parameter is a JavaScript Array or not.\n */\nexport function isArray(array) {\n return Array.isArray(array);\n}\n/**\n * @returns whether the provided parameter is a JavaScript String or not.\n */\nexport function isString(str) {\n return (typeof str === 'string');\n}\n/**\n *\n * @returns whether the provided parameter is of type `object` but **not**\n *\t`null`, an `array`, a `regexp`, nor a `date`.\n */\nexport function isObject(obj) {\n // The method can't do a type cast since there are type (like strings) which\n // are subclasses of any put not positvely matched by the function. Hence type\n // narrowing results in wrong results.\n return typeof obj === 'object'\n && obj !== null\n && !Array.isArray(obj)\n && !(obj instanceof RegExp)\n && !(obj instanceof Date);\n}\n/**\n * In **contrast** to just checking `typeof` this will return `false` for `NaN`.\n * @returns whether the provided parameter is a JavaScript Number or not.\n */\nexport function isNumber(obj) {\n return (typeof obj === 'number' && !isNaN(obj));\n}\n/**\n * @returns whether the provided parameter is a JavaScript Boolean or not.\n */\nexport function isBoolean(obj) {\n return (obj === true || obj === false);\n}\n/**\n * @returns whether the provided parameter is undefined.\n */\nexport function isUndefined(obj) {\n return (typeof obj === 'undefined');\n}\n/**\n * @returns whether the provided parameter is defined.\n */\nexport function isDefined(arg) {\n return !isUndefinedOrNull(arg);\n}\n/**\n * @returns whether the provided parameter is undefined or null.\n */\nexport function isUndefinedOrNull(obj) {\n return (isUndefined(obj) || obj === null);\n}\nexport function assertType(condition, type) {\n if (!condition) {\n throw new Error(type ? `Unexpected type, expected '${type}'` : 'Unexpected type');\n }\n}\n/**\n * Asserts that the argument passed in is neither undefined nor null.\n */\nexport function assertIsDefined(arg) {\n if (isUndefinedOrNull(arg)) {\n throw new Error('Assertion Failed: argument is undefined or null');\n }\n return arg;\n}\n/**\n * @returns whether the provided parameter is a JavaScript Function or not.\n */\nexport function isFunction(obj) {\n return (typeof obj === 'function');\n}\nexport function validateConstraints(args, constraints) {\n const len = Math.min(args.length, constraints.length);\n for (let i = 0; i < len; i++) {\n validateConstraint(args[i], constraints[i]);\n }\n}\nexport function validateConstraint(arg, constraint) {\n if (isString(constraint)) {\n if (typeof arg !== constraint) {\n throw new Error(`argument does not match constraint: typeof ${constraint}`);\n }\n }\n else if (isFunction(constraint)) {\n try {\n if (arg instanceof constraint) {\n return;\n }\n }\n catch (_a) {\n // ignore\n }\n if (!isUndefinedOrNull(arg) && arg.constructor === constraint) {\n return;\n }\n if (constraint.length === 1 && constraint.call(undefined, arg) === true) {\n return;\n }\n throw new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`);\n }\n}\nexport function getAllPropertyNames(obj) {\n let res = [];\n let proto = Object.getPrototypeOf(obj);\n while (Object.prototype !== proto) {\n res = res.concat(Object.getOwnPropertyNames(proto));\n proto = Object.getPrototypeOf(proto);\n }\n return res;\n}\nexport function getAllMethodNames(obj) {\n const methods = [];\n for (const prop of getAllPropertyNames(obj)) {\n if (typeof obj[prop] === 'function') {\n methods.push(prop);\n }\n }\n return methods;\n}\nexport function createProxyObject(methodNames, invoke) {\n const createProxyMethod = (method) => {\n return function () {\n const args = Array.prototype.slice.call(arguments, 0);\n return invoke(method, args);\n };\n };\n let result = {};\n for (const methodName of methodNames) {\n result[methodName] = createProxyMethod(methodName);\n }\n return result;\n}\n/**\n * Converts null to undefined, passes all other values through.\n */\nexport function withNullAsUndefined(x) {\n return x === null ? undefined : x;\n}\nexport function assertNever(value, message = 'Unreachable') {\n throw new Error(message);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isFirefox } from '../../browser.js';\nimport { DataTransfers } from '../../dnd.js';\nimport { $, addDisposableListener, append, EventHelper, EventType } from '../../dom.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { Action, ActionRunner, Separator } from '../../../common/actions.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport * as types from '../../../common/types.js';\nimport './actionbar.css';\nimport * as nls from '../../../../nls.js';\nexport class BaseActionViewItem extends Disposable {\n constructor(context, action, options = {}) {\n super();\n this.options = options;\n this._context = context || this;\n this._action = action;\n if (action instanceof Action) {\n this._register(action.onDidChange(event => {\n if (!this.element) {\n // we have not been rendered yet, so there\n // is no point in updating the UI\n return;\n }\n this.handleActionChangeEvent(event);\n }));\n }\n }\n handleActionChangeEvent(event) {\n if (event.enabled !== undefined) {\n this.updateEnabled();\n }\n if (event.checked !== undefined) {\n this.updateChecked();\n }\n if (event.class !== undefined) {\n this.updateClass();\n }\n if (event.label !== undefined) {\n this.updateLabel();\n this.updateTooltip();\n }\n if (event.tooltip !== undefined) {\n this.updateTooltip();\n }\n }\n get actionRunner() {\n if (!this._actionRunner) {\n this._actionRunner = this._register(new ActionRunner());\n }\n return this._actionRunner;\n }\n set actionRunner(actionRunner) {\n this._actionRunner = actionRunner;\n }\n getAction() {\n return this._action;\n }\n isEnabled() {\n return this._action.enabled;\n }\n setActionContext(newContext) {\n this._context = newContext;\n }\n render(container) {\n const element = this.element = container;\n this._register(Gesture.addTarget(container));\n const enableDragging = this.options && this.options.draggable;\n if (enableDragging) {\n container.draggable = true;\n if (isFirefox) {\n // Firefox: requires to set a text data transfer to get going\n this._register(addDisposableListener(container, EventType.DRAG_START, e => { var _a; return (_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.setData(DataTransfers.TEXT, this._action.label); }));\n }\n }\n this._register(addDisposableListener(element, TouchEventType.Tap, e => this.onClick(e, true))); // Preserve focus on tap #125470\n this._register(addDisposableListener(element, EventType.MOUSE_DOWN, e => {\n if (!enableDragging) {\n EventHelper.stop(e, true); // do not run when dragging is on because that would disable it\n }\n if (this._action.enabled && e.button === 0) {\n element.classList.add('active');\n }\n }));\n if (platform.isMacintosh) {\n // macOS: allow to trigger the button when holding Ctrl+key and pressing the\n // main mouse button. This is for scenarios where e.g. some interaction forces\n // the Ctrl+key to be pressed and hold but the user still wants to interact\n // with the actions (for example quick access in quick navigation mode).\n this._register(addDisposableListener(element, EventType.CONTEXT_MENU, e => {\n if (e.button === 0 && e.ctrlKey === true) {\n this.onClick(e);\n }\n }));\n }\n this._register(addDisposableListener(element, EventType.CLICK, e => {\n EventHelper.stop(e, true);\n // menus do not use the click event\n if (!(this.options && this.options.isMenu)) {\n this.onClick(e);\n }\n }));\n this._register(addDisposableListener(element, EventType.DBLCLICK, e => {\n EventHelper.stop(e, true);\n }));\n [EventType.MOUSE_UP, EventType.MOUSE_OUT].forEach(event => {\n this._register(addDisposableListener(element, event, e => {\n EventHelper.stop(e);\n element.classList.remove('active');\n }));\n });\n }\n onClick(event, preserveFocus = false) {\n var _a;\n EventHelper.stop(event, true);\n const context = types.isUndefinedOrNull(this._context) ? ((_a = this.options) === null || _a === void 0 ? void 0 : _a.useEventAsContext) ? event : { preserveFocus } : this._context;\n this.actionRunner.run(this._action, context);\n }\n // Only set the tabIndex on the element once it is about to get focused\n // That way this element wont be a tab stop when it is not needed #106441\n focus() {\n if (this.element) {\n this.element.tabIndex = 0;\n this.element.focus();\n this.element.classList.add('focused');\n }\n }\n blur() {\n if (this.element) {\n this.element.blur();\n this.element.tabIndex = -1;\n this.element.classList.remove('focused');\n }\n }\n setFocusable(focusable) {\n if (this.element) {\n this.element.tabIndex = focusable ? 0 : -1;\n }\n }\n get trapsArrowNavigation() {\n return false;\n }\n updateEnabled() {\n // implement in subclass\n }\n updateLabel() {\n // implement in subclass\n }\n updateTooltip() {\n // implement in subclass\n }\n updateClass() {\n // implement in subclass\n }\n updateChecked() {\n // implement in subclass\n }\n dispose() {\n if (this.element) {\n this.element.remove();\n this.element = undefined;\n }\n super.dispose();\n }\n}\nexport class ActionViewItem extends BaseActionViewItem {\n constructor(context, action, options = {}) {\n super(context, action, options);\n this.options = options;\n this.options.icon = options.icon !== undefined ? options.icon : false;\n this.options.label = options.label !== undefined ? options.label : true;\n this.cssClass = '';\n }\n render(container) {\n super.render(container);\n if (this.element) {\n this.label = append(this.element, $('a.action-label'));\n }\n if (this.label) {\n if (this._action.id === Separator.ID) {\n this.label.setAttribute('role', 'presentation'); // A separator is a presentation item\n }\n else {\n if (this.options.isMenu) {\n this.label.setAttribute('role', 'menuitem');\n }\n else {\n this.label.setAttribute('role', 'button');\n }\n }\n }\n if (this.options.label && this.options.keybinding && this.element) {\n append(this.element, $('span.keybinding')).textContent = this.options.keybinding;\n }\n this.updateClass();\n this.updateLabel();\n this.updateTooltip();\n this.updateEnabled();\n this.updateChecked();\n }\n // Only set the tabIndex on the element once it is about to get focused\n // That way this element wont be a tab stop when it is not needed #106441\n focus() {\n if (this.label) {\n this.label.tabIndex = 0;\n this.label.focus();\n }\n }\n blur() {\n if (this.label) {\n this.label.tabIndex = -1;\n }\n }\n setFocusable(focusable) {\n if (this.label) {\n this.label.tabIndex = focusable ? 0 : -1;\n }\n }\n updateLabel() {\n if (this.options.label && this.label) {\n this.label.textContent = this.getAction().label;\n }\n }\n updateTooltip() {\n let title = null;\n if (this.getAction().tooltip) {\n title = this.getAction().tooltip;\n }\n else if (!this.options.label && this.getAction().label && this.options.icon) {\n title = this.getAction().label;\n if (this.options.keybinding) {\n title = nls.localize({ key: 'titleLabel', comment: ['action title', 'action keybinding'] }, \"{0} ({1})\", title, this.options.keybinding);\n }\n }\n if (title && this.label) {\n this.label.title = title;\n }\n }\n updateClass() {\n if (this.cssClass && this.label) {\n this.label.classList.remove(...this.cssClass.split(' '));\n }\n if (this.options.icon) {\n this.cssClass = this.getAction().class;\n if (this.label) {\n this.label.classList.add('codicon');\n if (this.cssClass) {\n this.label.classList.add(...this.cssClass.split(' '));\n }\n }\n this.updateEnabled();\n }\n else {\n if (this.label) {\n this.label.classList.remove('codicon');\n }\n }\n }\n updateEnabled() {\n if (this.getAction().enabled) {\n if (this.label) {\n this.label.removeAttribute('aria-disabled');\n this.label.classList.remove('disabled');\n }\n if (this.element) {\n this.element.classList.remove('disabled');\n }\n }\n else {\n if (this.label) {\n this.label.setAttribute('aria-disabled', 'true');\n this.label.classList.add('disabled');\n }\n if (this.element) {\n this.element.classList.add('disabled');\n }\n }\n }\n updateChecked() {\n if (this.label) {\n if (this.getAction().checked) {\n this.label.classList.add('checked');\n }\n else {\n this.label.classList.remove('checked');\n }\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Emitter } from './event.js';\nimport { Disposable } from './lifecycle.js';\nimport * as nls from '../../nls.js';\nexport class Action extends Disposable {\n constructor(id, label = '', cssClass = '', enabled = true, actionCallback) {\n super();\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._enabled = true;\n this._id = id;\n this._label = label;\n this._cssClass = cssClass;\n this._enabled = enabled;\n this._actionCallback = actionCallback;\n }\n get id() {\n return this._id;\n }\n get label() {\n return this._label;\n }\n set label(value) {\n this._setLabel(value);\n }\n _setLabel(value) {\n if (this._label !== value) {\n this._label = value;\n this._onDidChange.fire({ label: value });\n }\n }\n get tooltip() {\n return this._tooltip || '';\n }\n set tooltip(value) {\n this._setTooltip(value);\n }\n _setTooltip(value) {\n if (this._tooltip !== value) {\n this._tooltip = value;\n this._onDidChange.fire({ tooltip: value });\n }\n }\n get class() {\n return this._cssClass;\n }\n set class(value) {\n this._setClass(value);\n }\n _setClass(value) {\n if (this._cssClass !== value) {\n this._cssClass = value;\n this._onDidChange.fire({ class: value });\n }\n }\n get enabled() {\n return this._enabled;\n }\n set enabled(value) {\n this._setEnabled(value);\n }\n _setEnabled(value) {\n if (this._enabled !== value) {\n this._enabled = value;\n this._onDidChange.fire({ enabled: value });\n }\n }\n get checked() {\n return this._checked;\n }\n set checked(value) {\n this._setChecked(value);\n }\n _setChecked(value) {\n if (this._checked !== value) {\n this._checked = value;\n this._onDidChange.fire({ checked: value });\n }\n }\n run(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._actionCallback) {\n yield this._actionCallback(event);\n }\n });\n }\n}\nexport class ActionRunner extends Disposable {\n constructor() {\n super(...arguments);\n this._onBeforeRun = this._register(new Emitter());\n this.onBeforeRun = this._onBeforeRun.event;\n this._onDidRun = this._register(new Emitter());\n this.onDidRun = this._onDidRun.event;\n }\n run(action, context) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!action.enabled) {\n return;\n }\n this._onBeforeRun.fire({ action });\n let error = undefined;\n try {\n yield this.runAction(action, context);\n }\n catch (e) {\n error = e;\n }\n this._onDidRun.fire({ action, error });\n });\n }\n runAction(action, context) {\n return __awaiter(this, void 0, void 0, function* () {\n yield action.run(context);\n });\n }\n}\nexport class Separator extends Action {\n constructor(label) {\n super(Separator.ID, label, label ? 'separator text' : 'separator');\n this.checked = false;\n this.enabled = false;\n }\n}\nSeparator.ID = 'vs.actions.separator';\nexport class SubmenuAction {\n constructor(id, label, actions, cssClass) {\n this.tooltip = '';\n this.enabled = true;\n this.checked = false;\n this.id = id;\n this.label = label;\n this.class = cssClass;\n this._actions = actions;\n }\n get actions() { return this._actions; }\n dispose() {\n // there is NOTHING to dispose and the SubmenuAction should\n // never have anything to dispose as it is a convenience type\n // to bridge into the rendering world.\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () { });\n }\n}\nexport class EmptySubmenuAction extends Action {\n constructor() {\n super(EmptySubmenuAction.ID, nls.localize('submenu.empty', '(empty)'), undefined, false);\n }\n}\nEmptySubmenuAction.ID = 'vs.actions.empty';\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.\nexport var AccessibilitySupport;\n(function (AccessibilitySupport) {\n /**\n * This should be the browser case where it is not known if a screen reader is attached or no.\n */\n AccessibilitySupport[AccessibilitySupport[\"Unknown\"] = 0] = \"Unknown\";\n AccessibilitySupport[AccessibilitySupport[\"Disabled\"] = 1] = \"Disabled\";\n AccessibilitySupport[AccessibilitySupport[\"Enabled\"] = 2] = \"Enabled\";\n})(AccessibilitySupport || (AccessibilitySupport = {}));\nexport var CompletionItemInsertTextRule;\n(function (CompletionItemInsertTextRule) {\n /**\n * Adjust whitespace/indentation of multiline insert texts to\n * match the current line indentation.\n */\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"KeepWhitespace\"] = 1] = \"KeepWhitespace\";\n /**\n * `insertText` is a snippet.\n */\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"InsertAsSnippet\"] = 4] = \"InsertAsSnippet\";\n})(CompletionItemInsertTextRule || (CompletionItemInsertTextRule = {}));\nexport var CompletionItemKind;\n(function (CompletionItemKind) {\n CompletionItemKind[CompletionItemKind[\"Method\"] = 0] = \"Method\";\n CompletionItemKind[CompletionItemKind[\"Function\"] = 1] = \"Function\";\n CompletionItemKind[CompletionItemKind[\"Constructor\"] = 2] = \"Constructor\";\n CompletionItemKind[CompletionItemKind[\"Field\"] = 3] = \"Field\";\n CompletionItemKind[CompletionItemKind[\"Variable\"] = 4] = \"Variable\";\n CompletionItemKind[CompletionItemKind[\"Class\"] = 5] = \"Class\";\n CompletionItemKind[CompletionItemKind[\"Struct\"] = 6] = \"Struct\";\n CompletionItemKind[CompletionItemKind[\"Interface\"] = 7] = \"Interface\";\n CompletionItemKind[CompletionItemKind[\"Module\"] = 8] = \"Module\";\n CompletionItemKind[CompletionItemKind[\"Property\"] = 9] = \"Property\";\n CompletionItemKind[CompletionItemKind[\"Event\"] = 10] = \"Event\";\n CompletionItemKind[CompletionItemKind[\"Operator\"] = 11] = \"Operator\";\n CompletionItemKind[CompletionItemKind[\"Unit\"] = 12] = \"Unit\";\n CompletionItemKind[CompletionItemKind[\"Value\"] = 13] = \"Value\";\n CompletionItemKind[CompletionItemKind[\"Constant\"] = 14] = \"Constant\";\n CompletionItemKind[CompletionItemKind[\"Enum\"] = 15] = \"Enum\";\n CompletionItemKind[CompletionItemKind[\"EnumMember\"] = 16] = \"EnumMember\";\n CompletionItemKind[CompletionItemKind[\"Keyword\"] = 17] = \"Keyword\";\n CompletionItemKind[CompletionItemKind[\"Text\"] = 18] = \"Text\";\n CompletionItemKind[CompletionItemKind[\"Color\"] = 19] = \"Color\";\n CompletionItemKind[CompletionItemKind[\"File\"] = 20] = \"File\";\n CompletionItemKind[CompletionItemKind[\"Reference\"] = 21] = \"Reference\";\n CompletionItemKind[CompletionItemKind[\"Customcolor\"] = 22] = \"Customcolor\";\n CompletionItemKind[CompletionItemKind[\"Folder\"] = 23] = \"Folder\";\n CompletionItemKind[CompletionItemKind[\"TypeParameter\"] = 24] = \"TypeParameter\";\n CompletionItemKind[CompletionItemKind[\"User\"] = 25] = \"User\";\n CompletionItemKind[CompletionItemKind[\"Issue\"] = 26] = \"Issue\";\n CompletionItemKind[CompletionItemKind[\"Snippet\"] = 27] = \"Snippet\";\n})(CompletionItemKind || (CompletionItemKind = {}));\nexport var CompletionItemTag;\n(function (CompletionItemTag) {\n CompletionItemTag[CompletionItemTag[\"Deprecated\"] = 1] = \"Deprecated\";\n})(CompletionItemTag || (CompletionItemTag = {}));\n/**\n * How a suggest provider was triggered.\n */\nexport var CompletionTriggerKind;\n(function (CompletionTriggerKind) {\n CompletionTriggerKind[CompletionTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerCharacter\"] = 1] = \"TriggerCharacter\";\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerForIncompleteCompletions\"] = 2] = \"TriggerForIncompleteCompletions\";\n})(CompletionTriggerKind || (CompletionTriggerKind = {}));\n/**\n * A positioning preference for rendering content widgets.\n */\nexport var ContentWidgetPositionPreference;\n(function (ContentWidgetPositionPreference) {\n /**\n * Place the content widget exactly at a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"EXACT\"] = 0] = \"EXACT\";\n /**\n * Place the content widget above a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"ABOVE\"] = 1] = \"ABOVE\";\n /**\n * Place the content widget below a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"BELOW\"] = 2] = \"BELOW\";\n})(ContentWidgetPositionPreference || (ContentWidgetPositionPreference = {}));\n/**\n * Describes the reason the cursor has changed its position.\n */\nexport var CursorChangeReason;\n(function (CursorChangeReason) {\n /**\n * Unknown or not set.\n */\n CursorChangeReason[CursorChangeReason[\"NotSet\"] = 0] = \"NotSet\";\n /**\n * A `model.setValue()` was called.\n */\n CursorChangeReason[CursorChangeReason[\"ContentFlush\"] = 1] = \"ContentFlush\";\n /**\n * The `model` has been changed outside of this cursor and the cursor recovers its position from associated markers.\n */\n CursorChangeReason[CursorChangeReason[\"RecoverFromMarkers\"] = 2] = \"RecoverFromMarkers\";\n /**\n * There was an explicit user gesture.\n */\n CursorChangeReason[CursorChangeReason[\"Explicit\"] = 3] = \"Explicit\";\n /**\n * There was a Paste.\n */\n CursorChangeReason[CursorChangeReason[\"Paste\"] = 4] = \"Paste\";\n /**\n * There was an Undo.\n */\n CursorChangeReason[CursorChangeReason[\"Undo\"] = 5] = \"Undo\";\n /**\n * There was a Redo.\n */\n CursorChangeReason[CursorChangeReason[\"Redo\"] = 6] = \"Redo\";\n})(CursorChangeReason || (CursorChangeReason = {}));\n/**\n * The default end of line to use when instantiating models.\n */\nexport var DefaultEndOfLine;\n(function (DefaultEndOfLine) {\n /**\n * Use line feed (\\n) as the end of line character.\n */\n DefaultEndOfLine[DefaultEndOfLine[\"LF\"] = 1] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n DefaultEndOfLine[DefaultEndOfLine[\"CRLF\"] = 2] = \"CRLF\";\n})(DefaultEndOfLine || (DefaultEndOfLine = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Text\"] = 0] = \"Text\";\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Read\"] = 1] = \"Read\";\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Write\"] = 2] = \"Write\";\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * Configuration options for auto indentation in the editor\n */\nexport var EditorAutoIndentStrategy;\n(function (EditorAutoIndentStrategy) {\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"None\"] = 0] = \"None\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Keep\"] = 1] = \"Keep\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Brackets\"] = 2] = \"Brackets\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Advanced\"] = 3] = \"Advanced\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Full\"] = 4] = \"Full\";\n})(EditorAutoIndentStrategy || (EditorAutoIndentStrategy = {}));\nexport var EditorOption;\n(function (EditorOption) {\n EditorOption[EditorOption[\"acceptSuggestionOnCommitCharacter\"] = 0] = \"acceptSuggestionOnCommitCharacter\";\n EditorOption[EditorOption[\"acceptSuggestionOnEnter\"] = 1] = \"acceptSuggestionOnEnter\";\n EditorOption[EditorOption[\"accessibilitySupport\"] = 2] = \"accessibilitySupport\";\n EditorOption[EditorOption[\"accessibilityPageSize\"] = 3] = \"accessibilityPageSize\";\n EditorOption[EditorOption[\"ariaLabel\"] = 4] = \"ariaLabel\";\n EditorOption[EditorOption[\"autoClosingBrackets\"] = 5] = \"autoClosingBrackets\";\n EditorOption[EditorOption[\"autoClosingDelete\"] = 6] = \"autoClosingDelete\";\n EditorOption[EditorOption[\"autoClosingOvertype\"] = 7] = \"autoClosingOvertype\";\n EditorOption[EditorOption[\"autoClosingQuotes\"] = 8] = \"autoClosingQuotes\";\n EditorOption[EditorOption[\"autoIndent\"] = 9] = \"autoIndent\";\n EditorOption[EditorOption[\"automaticLayout\"] = 10] = \"automaticLayout\";\n EditorOption[EditorOption[\"autoSurround\"] = 11] = \"autoSurround\";\n EditorOption[EditorOption[\"bracketPairColorization\"] = 12] = \"bracketPairColorization\";\n EditorOption[EditorOption[\"guides\"] = 13] = \"guides\";\n EditorOption[EditorOption[\"codeLens\"] = 14] = \"codeLens\";\n EditorOption[EditorOption[\"codeLensFontFamily\"] = 15] = \"codeLensFontFamily\";\n EditorOption[EditorOption[\"codeLensFontSize\"] = 16] = \"codeLensFontSize\";\n EditorOption[EditorOption[\"colorDecorators\"] = 17] = \"colorDecorators\";\n EditorOption[EditorOption[\"columnSelection\"] = 18] = \"columnSelection\";\n EditorOption[EditorOption[\"comments\"] = 19] = \"comments\";\n EditorOption[EditorOption[\"contextmenu\"] = 20] = \"contextmenu\";\n EditorOption[EditorOption[\"copyWithSyntaxHighlighting\"] = 21] = \"copyWithSyntaxHighlighting\";\n EditorOption[EditorOption[\"cursorBlinking\"] = 22] = \"cursorBlinking\";\n EditorOption[EditorOption[\"cursorSmoothCaretAnimation\"] = 23] = \"cursorSmoothCaretAnimation\";\n EditorOption[EditorOption[\"cursorStyle\"] = 24] = \"cursorStyle\";\n EditorOption[EditorOption[\"cursorSurroundingLines\"] = 25] = \"cursorSurroundingLines\";\n EditorOption[EditorOption[\"cursorSurroundingLinesStyle\"] = 26] = \"cursorSurroundingLinesStyle\";\n EditorOption[EditorOption[\"cursorWidth\"] = 27] = \"cursorWidth\";\n EditorOption[EditorOption[\"disableLayerHinting\"] = 28] = \"disableLayerHinting\";\n EditorOption[EditorOption[\"disableMonospaceOptimizations\"] = 29] = \"disableMonospaceOptimizations\";\n EditorOption[EditorOption[\"domReadOnly\"] = 30] = \"domReadOnly\";\n EditorOption[EditorOption[\"dragAndDrop\"] = 31] = \"dragAndDrop\";\n EditorOption[EditorOption[\"emptySelectionClipboard\"] = 32] = \"emptySelectionClipboard\";\n EditorOption[EditorOption[\"extraEditorClassName\"] = 33] = \"extraEditorClassName\";\n EditorOption[EditorOption[\"fastScrollSensitivity\"] = 34] = \"fastScrollSensitivity\";\n EditorOption[EditorOption[\"find\"] = 35] = \"find\";\n EditorOption[EditorOption[\"fixedOverflowWidgets\"] = 36] = \"fixedOverflowWidgets\";\n EditorOption[EditorOption[\"folding\"] = 37] = \"folding\";\n EditorOption[EditorOption[\"foldingStrategy\"] = 38] = \"foldingStrategy\";\n EditorOption[EditorOption[\"foldingHighlight\"] = 39] = \"foldingHighlight\";\n EditorOption[EditorOption[\"foldingImportsByDefault\"] = 40] = \"foldingImportsByDefault\";\n EditorOption[EditorOption[\"unfoldOnClickAfterEndOfLine\"] = 41] = \"unfoldOnClickAfterEndOfLine\";\n EditorOption[EditorOption[\"fontFamily\"] = 42] = \"fontFamily\";\n EditorOption[EditorOption[\"fontInfo\"] = 43] = \"fontInfo\";\n EditorOption[EditorOption[\"fontLigatures\"] = 44] = \"fontLigatures\";\n EditorOption[EditorOption[\"fontSize\"] = 45] = \"fontSize\";\n EditorOption[EditorOption[\"fontWeight\"] = 46] = \"fontWeight\";\n EditorOption[EditorOption[\"formatOnPaste\"] = 47] = \"formatOnPaste\";\n EditorOption[EditorOption[\"formatOnType\"] = 48] = \"formatOnType\";\n EditorOption[EditorOption[\"glyphMargin\"] = 49] = \"glyphMargin\";\n EditorOption[EditorOption[\"gotoLocation\"] = 50] = \"gotoLocation\";\n EditorOption[EditorOption[\"hideCursorInOverviewRuler\"] = 51] = \"hideCursorInOverviewRuler\";\n EditorOption[EditorOption[\"hover\"] = 52] = \"hover\";\n EditorOption[EditorOption[\"inDiffEditor\"] = 53] = \"inDiffEditor\";\n EditorOption[EditorOption[\"inlineSuggest\"] = 54] = \"inlineSuggest\";\n EditorOption[EditorOption[\"letterSpacing\"] = 55] = \"letterSpacing\";\n EditorOption[EditorOption[\"lightbulb\"] = 56] = \"lightbulb\";\n EditorOption[EditorOption[\"lineDecorationsWidth\"] = 57] = \"lineDecorationsWidth\";\n EditorOption[EditorOption[\"lineHeight\"] = 58] = \"lineHeight\";\n EditorOption[EditorOption[\"lineNumbers\"] = 59] = \"lineNumbers\";\n EditorOption[EditorOption[\"lineNumbersMinChars\"] = 60] = \"lineNumbersMinChars\";\n EditorOption[EditorOption[\"linkedEditing\"] = 61] = \"linkedEditing\";\n EditorOption[EditorOption[\"links\"] = 62] = \"links\";\n EditorOption[EditorOption[\"matchBrackets\"] = 63] = \"matchBrackets\";\n EditorOption[EditorOption[\"minimap\"] = 64] = \"minimap\";\n EditorOption[EditorOption[\"mouseStyle\"] = 65] = \"mouseStyle\";\n EditorOption[EditorOption[\"mouseWheelScrollSensitivity\"] = 66] = \"mouseWheelScrollSensitivity\";\n EditorOption[EditorOption[\"mouseWheelZoom\"] = 67] = \"mouseWheelZoom\";\n EditorOption[EditorOption[\"multiCursorMergeOverlapping\"] = 68] = \"multiCursorMergeOverlapping\";\n EditorOption[EditorOption[\"multiCursorModifier\"] = 69] = \"multiCursorModifier\";\n EditorOption[EditorOption[\"multiCursorPaste\"] = 70] = \"multiCursorPaste\";\n EditorOption[EditorOption[\"occurrencesHighlight\"] = 71] = \"occurrencesHighlight\";\n EditorOption[EditorOption[\"overviewRulerBorder\"] = 72] = \"overviewRulerBorder\";\n EditorOption[EditorOption[\"overviewRulerLanes\"] = 73] = \"overviewRulerLanes\";\n EditorOption[EditorOption[\"padding\"] = 74] = \"padding\";\n EditorOption[EditorOption[\"parameterHints\"] = 75] = \"parameterHints\";\n EditorOption[EditorOption[\"peekWidgetDefaultFocus\"] = 76] = \"peekWidgetDefaultFocus\";\n EditorOption[EditorOption[\"definitionLinkOpensInPeek\"] = 77] = \"definitionLinkOpensInPeek\";\n EditorOption[EditorOption[\"quickSuggestions\"] = 78] = \"quickSuggestions\";\n EditorOption[EditorOption[\"quickSuggestionsDelay\"] = 79] = \"quickSuggestionsDelay\";\n EditorOption[EditorOption[\"readOnly\"] = 80] = \"readOnly\";\n EditorOption[EditorOption[\"renameOnType\"] = 81] = \"renameOnType\";\n EditorOption[EditorOption[\"renderControlCharacters\"] = 82] = \"renderControlCharacters\";\n EditorOption[EditorOption[\"renderFinalNewline\"] = 83] = \"renderFinalNewline\";\n EditorOption[EditorOption[\"renderLineHighlight\"] = 84] = \"renderLineHighlight\";\n EditorOption[EditorOption[\"renderLineHighlightOnlyWhenFocus\"] = 85] = \"renderLineHighlightOnlyWhenFocus\";\n EditorOption[EditorOption[\"renderValidationDecorations\"] = 86] = \"renderValidationDecorations\";\n EditorOption[EditorOption[\"renderWhitespace\"] = 87] = \"renderWhitespace\";\n EditorOption[EditorOption[\"revealHorizontalRightPadding\"] = 88] = \"revealHorizontalRightPadding\";\n EditorOption[EditorOption[\"roundedSelection\"] = 89] = \"roundedSelection\";\n EditorOption[EditorOption[\"rulers\"] = 90] = \"rulers\";\n EditorOption[EditorOption[\"scrollbar\"] = 91] = \"scrollbar\";\n EditorOption[EditorOption[\"scrollBeyondLastColumn\"] = 92] = \"scrollBeyondLastColumn\";\n EditorOption[EditorOption[\"scrollBeyondLastLine\"] = 93] = \"scrollBeyondLastLine\";\n EditorOption[EditorOption[\"scrollPredominantAxis\"] = 94] = \"scrollPredominantAxis\";\n EditorOption[EditorOption[\"selectionClipboard\"] = 95] = \"selectionClipboard\";\n EditorOption[EditorOption[\"selectionHighlight\"] = 96] = \"selectionHighlight\";\n EditorOption[EditorOption[\"selectOnLineNumbers\"] = 97] = \"selectOnLineNumbers\";\n EditorOption[EditorOption[\"showFoldingControls\"] = 98] = \"showFoldingControls\";\n EditorOption[EditorOption[\"showUnused\"] = 99] = \"showUnused\";\n EditorOption[EditorOption[\"snippetSuggestions\"] = 100] = \"snippetSuggestions\";\n EditorOption[EditorOption[\"smartSelect\"] = 101] = \"smartSelect\";\n EditorOption[EditorOption[\"smoothScrolling\"] = 102] = \"smoothScrolling\";\n EditorOption[EditorOption[\"stickyTabStops\"] = 103] = \"stickyTabStops\";\n EditorOption[EditorOption[\"stopRenderingLineAfter\"] = 104] = \"stopRenderingLineAfter\";\n EditorOption[EditorOption[\"suggest\"] = 105] = \"suggest\";\n EditorOption[EditorOption[\"suggestFontSize\"] = 106] = \"suggestFontSize\";\n EditorOption[EditorOption[\"suggestLineHeight\"] = 107] = \"suggestLineHeight\";\n EditorOption[EditorOption[\"suggestOnTriggerCharacters\"] = 108] = \"suggestOnTriggerCharacters\";\n EditorOption[EditorOption[\"suggestSelection\"] = 109] = \"suggestSelection\";\n EditorOption[EditorOption[\"tabCompletion\"] = 110] = \"tabCompletion\";\n EditorOption[EditorOption[\"tabIndex\"] = 111] = \"tabIndex\";\n EditorOption[EditorOption[\"unusualLineTerminators\"] = 112] = \"unusualLineTerminators\";\n EditorOption[EditorOption[\"useShadowDOM\"] = 113] = \"useShadowDOM\";\n EditorOption[EditorOption[\"useTabStops\"] = 114] = \"useTabStops\";\n EditorOption[EditorOption[\"wordSeparators\"] = 115] = \"wordSeparators\";\n EditorOption[EditorOption[\"wordWrap\"] = 116] = \"wordWrap\";\n EditorOption[EditorOption[\"wordWrapBreakAfterCharacters\"] = 117] = \"wordWrapBreakAfterCharacters\";\n EditorOption[EditorOption[\"wordWrapBreakBeforeCharacters\"] = 118] = \"wordWrapBreakBeforeCharacters\";\n EditorOption[EditorOption[\"wordWrapColumn\"] = 119] = \"wordWrapColumn\";\n EditorOption[EditorOption[\"wordWrapOverride1\"] = 120] = \"wordWrapOverride1\";\n EditorOption[EditorOption[\"wordWrapOverride2\"] = 121] = \"wordWrapOverride2\";\n EditorOption[EditorOption[\"wrappingIndent\"] = 122] = \"wrappingIndent\";\n EditorOption[EditorOption[\"wrappingStrategy\"] = 123] = \"wrappingStrategy\";\n EditorOption[EditorOption[\"showDeprecated\"] = 124] = \"showDeprecated\";\n EditorOption[EditorOption[\"inlayHints\"] = 125] = \"inlayHints\";\n EditorOption[EditorOption[\"editorClassName\"] = 126] = \"editorClassName\";\n EditorOption[EditorOption[\"pixelRatio\"] = 127] = \"pixelRatio\";\n EditorOption[EditorOption[\"tabFocusMode\"] = 128] = \"tabFocusMode\";\n EditorOption[EditorOption[\"layoutInfo\"] = 129] = \"layoutInfo\";\n EditorOption[EditorOption[\"wrappingInfo\"] = 130] = \"wrappingInfo\";\n})(EditorOption || (EditorOption = {}));\n/**\n * End of line character preference.\n */\nexport var EndOfLinePreference;\n(function (EndOfLinePreference) {\n /**\n * Use the end of line character identified in the text buffer.\n */\n EndOfLinePreference[EndOfLinePreference[\"TextDefined\"] = 0] = \"TextDefined\";\n /**\n * Use line feed (\\n) as the end of line character.\n */\n EndOfLinePreference[EndOfLinePreference[\"LF\"] = 1] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n EndOfLinePreference[EndOfLinePreference[\"CRLF\"] = 2] = \"CRLF\";\n})(EndOfLinePreference || (EndOfLinePreference = {}));\n/**\n * End of line character preference.\n */\nexport var EndOfLineSequence;\n(function (EndOfLineSequence) {\n /**\n * Use line feed (\\n) as the end of line character.\n */\n EndOfLineSequence[EndOfLineSequence[\"LF\"] = 0] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n EndOfLineSequence[EndOfLineSequence[\"CRLF\"] = 1] = \"CRLF\";\n})(EndOfLineSequence || (EndOfLineSequence = {}));\n/**\n * Describes what to do with the indentation when pressing Enter.\n */\nexport var IndentAction;\n(function (IndentAction) {\n /**\n * Insert new line and copy the previous line's indentation.\n */\n IndentAction[IndentAction[\"None\"] = 0] = \"None\";\n /**\n * Insert new line and indent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Indent\"] = 1] = \"Indent\";\n /**\n * Insert two new lines:\n * - the first one indented which will hold the cursor\n * - the second one at the same indentation level\n */\n IndentAction[IndentAction[\"IndentOutdent\"] = 2] = \"IndentOutdent\";\n /**\n * Insert new line and outdent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Outdent\"] = 3] = \"Outdent\";\n})(IndentAction || (IndentAction = {}));\nexport var InlayHintKind;\n(function (InlayHintKind) {\n InlayHintKind[InlayHintKind[\"Other\"] = 0] = \"Other\";\n InlayHintKind[InlayHintKind[\"Type\"] = 1] = \"Type\";\n InlayHintKind[InlayHintKind[\"Parameter\"] = 2] = \"Parameter\";\n})(InlayHintKind || (InlayHintKind = {}));\n/**\n * How an {@link InlineCompletionsProvider inline completion provider} was triggered.\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n /**\n * Completion was triggered automatically while editing.\n * It is sufficient to return a single completion item in this case.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Automatic\"] = 0] = \"Automatic\";\n /**\n * Completion was triggered explicitly by a user gesture.\n * Return multiple completion items to enable cycling through them.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Explicit\"] = 1] = \"Explicit\";\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\n/**\n * Virtual Key Codes, the value does not hold any inherent meaning.\n * Inspired somewhat from https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx\n * But these are \"more general\", as they should work across browsers & OS`s.\n */\nexport var KeyCode;\n(function (KeyCode) {\n KeyCode[KeyCode[\"DependsOnKbLayout\"] = -1] = \"DependsOnKbLayout\";\n /**\n * Placed first to cover the 0 value of the enum.\n */\n KeyCode[KeyCode[\"Unknown\"] = 0] = \"Unknown\";\n KeyCode[KeyCode[\"Backspace\"] = 1] = \"Backspace\";\n KeyCode[KeyCode[\"Tab\"] = 2] = \"Tab\";\n KeyCode[KeyCode[\"Enter\"] = 3] = \"Enter\";\n KeyCode[KeyCode[\"Shift\"] = 4] = \"Shift\";\n KeyCode[KeyCode[\"Ctrl\"] = 5] = \"Ctrl\";\n KeyCode[KeyCode[\"Alt\"] = 6] = \"Alt\";\n KeyCode[KeyCode[\"PauseBreak\"] = 7] = \"PauseBreak\";\n KeyCode[KeyCode[\"CapsLock\"] = 8] = \"CapsLock\";\n KeyCode[KeyCode[\"Escape\"] = 9] = \"Escape\";\n KeyCode[KeyCode[\"Space\"] = 10] = \"Space\";\n KeyCode[KeyCode[\"PageUp\"] = 11] = \"PageUp\";\n KeyCode[KeyCode[\"PageDown\"] = 12] = \"PageDown\";\n KeyCode[KeyCode[\"End\"] = 13] = \"End\";\n KeyCode[KeyCode[\"Home\"] = 14] = \"Home\";\n KeyCode[KeyCode[\"LeftArrow\"] = 15] = \"LeftArrow\";\n KeyCode[KeyCode[\"UpArrow\"] = 16] = \"UpArrow\";\n KeyCode[KeyCode[\"RightArrow\"] = 17] = \"RightArrow\";\n KeyCode[KeyCode[\"DownArrow\"] = 18] = \"DownArrow\";\n KeyCode[KeyCode[\"Insert\"] = 19] = \"Insert\";\n KeyCode[KeyCode[\"Delete\"] = 20] = \"Delete\";\n KeyCode[KeyCode[\"Digit0\"] = 21] = \"Digit0\";\n KeyCode[KeyCode[\"Digit1\"] = 22] = \"Digit1\";\n KeyCode[KeyCode[\"Digit2\"] = 23] = \"Digit2\";\n KeyCode[KeyCode[\"Digit3\"] = 24] = \"Digit3\";\n KeyCode[KeyCode[\"Digit4\"] = 25] = \"Digit4\";\n KeyCode[KeyCode[\"Digit5\"] = 26] = \"Digit5\";\n KeyCode[KeyCode[\"Digit6\"] = 27] = \"Digit6\";\n KeyCode[KeyCode[\"Digit7\"] = 28] = \"Digit7\";\n KeyCode[KeyCode[\"Digit8\"] = 29] = \"Digit8\";\n KeyCode[KeyCode[\"Digit9\"] = 30] = \"Digit9\";\n KeyCode[KeyCode[\"KeyA\"] = 31] = \"KeyA\";\n KeyCode[KeyCode[\"KeyB\"] = 32] = \"KeyB\";\n KeyCode[KeyCode[\"KeyC\"] = 33] = \"KeyC\";\n KeyCode[KeyCode[\"KeyD\"] = 34] = \"KeyD\";\n KeyCode[KeyCode[\"KeyE\"] = 35] = \"KeyE\";\n KeyCode[KeyCode[\"KeyF\"] = 36] = \"KeyF\";\n KeyCode[KeyCode[\"KeyG\"] = 37] = \"KeyG\";\n KeyCode[KeyCode[\"KeyH\"] = 38] = \"KeyH\";\n KeyCode[KeyCode[\"KeyI\"] = 39] = \"KeyI\";\n KeyCode[KeyCode[\"KeyJ\"] = 40] = \"KeyJ\";\n KeyCode[KeyCode[\"KeyK\"] = 41] = \"KeyK\";\n KeyCode[KeyCode[\"KeyL\"] = 42] = \"KeyL\";\n KeyCode[KeyCode[\"KeyM\"] = 43] = \"KeyM\";\n KeyCode[KeyCode[\"KeyN\"] = 44] = \"KeyN\";\n KeyCode[KeyCode[\"KeyO\"] = 45] = \"KeyO\";\n KeyCode[KeyCode[\"KeyP\"] = 46] = \"KeyP\";\n KeyCode[KeyCode[\"KeyQ\"] = 47] = \"KeyQ\";\n KeyCode[KeyCode[\"KeyR\"] = 48] = \"KeyR\";\n KeyCode[KeyCode[\"KeyS\"] = 49] = \"KeyS\";\n KeyCode[KeyCode[\"KeyT\"] = 50] = \"KeyT\";\n KeyCode[KeyCode[\"KeyU\"] = 51] = \"KeyU\";\n KeyCode[KeyCode[\"KeyV\"] = 52] = \"KeyV\";\n KeyCode[KeyCode[\"KeyW\"] = 53] = \"KeyW\";\n KeyCode[KeyCode[\"KeyX\"] = 54] = \"KeyX\";\n KeyCode[KeyCode[\"KeyY\"] = 55] = \"KeyY\";\n KeyCode[KeyCode[\"KeyZ\"] = 56] = \"KeyZ\";\n KeyCode[KeyCode[\"Meta\"] = 57] = \"Meta\";\n KeyCode[KeyCode[\"ContextMenu\"] = 58] = \"ContextMenu\";\n KeyCode[KeyCode[\"F1\"] = 59] = \"F1\";\n KeyCode[KeyCode[\"F2\"] = 60] = \"F2\";\n KeyCode[KeyCode[\"F3\"] = 61] = \"F3\";\n KeyCode[KeyCode[\"F4\"] = 62] = \"F4\";\n KeyCode[KeyCode[\"F5\"] = 63] = \"F5\";\n KeyCode[KeyCode[\"F6\"] = 64] = \"F6\";\n KeyCode[KeyCode[\"F7\"] = 65] = \"F7\";\n KeyCode[KeyCode[\"F8\"] = 66] = \"F8\";\n KeyCode[KeyCode[\"F9\"] = 67] = \"F9\";\n KeyCode[KeyCode[\"F10\"] = 68] = \"F10\";\n KeyCode[KeyCode[\"F11\"] = 69] = \"F11\";\n KeyCode[KeyCode[\"F12\"] = 70] = \"F12\";\n KeyCode[KeyCode[\"F13\"] = 71] = \"F13\";\n KeyCode[KeyCode[\"F14\"] = 72] = \"F14\";\n KeyCode[KeyCode[\"F15\"] = 73] = \"F15\";\n KeyCode[KeyCode[\"F16\"] = 74] = \"F16\";\n KeyCode[KeyCode[\"F17\"] = 75] = \"F17\";\n KeyCode[KeyCode[\"F18\"] = 76] = \"F18\";\n KeyCode[KeyCode[\"F19\"] = 77] = \"F19\";\n KeyCode[KeyCode[\"NumLock\"] = 78] = \"NumLock\";\n KeyCode[KeyCode[\"ScrollLock\"] = 79] = \"ScrollLock\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ';:' key\n */\n KeyCode[KeyCode[\"Semicolon\"] = 80] = \"Semicolon\";\n /**\n * For any country/region, the '+' key\n * For the US standard keyboard, the '=+' key\n */\n KeyCode[KeyCode[\"Equal\"] = 81] = \"Equal\";\n /**\n * For any country/region, the ',' key\n * For the US standard keyboard, the ',<' key\n */\n KeyCode[KeyCode[\"Comma\"] = 82] = \"Comma\";\n /**\n * For any country/region, the '-' key\n * For the US standard keyboard, the '-_' key\n */\n KeyCode[KeyCode[\"Minus\"] = 83] = \"Minus\";\n /**\n * For any country/region, the '.' key\n * For the US standard keyboard, the '.>' key\n */\n KeyCode[KeyCode[\"Period\"] = 84] = \"Period\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '/?' key\n */\n KeyCode[KeyCode[\"Slash\"] = 85] = \"Slash\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '`~' key\n */\n KeyCode[KeyCode[\"Backquote\"] = 86] = \"Backquote\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '[{' key\n */\n KeyCode[KeyCode[\"BracketLeft\"] = 87] = \"BracketLeft\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '\\|' key\n */\n KeyCode[KeyCode[\"Backslash\"] = 88] = \"Backslash\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ']}' key\n */\n KeyCode[KeyCode[\"BracketRight\"] = 89] = \"BracketRight\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ''\"' key\n */\n KeyCode[KeyCode[\"Quote\"] = 90] = \"Quote\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n */\n KeyCode[KeyCode[\"OEM_8\"] = 91] = \"OEM_8\";\n /**\n * Either the angle bracket key or the backslash key on the RT 102-key keyboard.\n */\n KeyCode[KeyCode[\"IntlBackslash\"] = 92] = \"IntlBackslash\";\n KeyCode[KeyCode[\"Numpad0\"] = 93] = \"Numpad0\";\n KeyCode[KeyCode[\"Numpad1\"] = 94] = \"Numpad1\";\n KeyCode[KeyCode[\"Numpad2\"] = 95] = \"Numpad2\";\n KeyCode[KeyCode[\"Numpad3\"] = 96] = \"Numpad3\";\n KeyCode[KeyCode[\"Numpad4\"] = 97] = \"Numpad4\";\n KeyCode[KeyCode[\"Numpad5\"] = 98] = \"Numpad5\";\n KeyCode[KeyCode[\"Numpad6\"] = 99] = \"Numpad6\";\n KeyCode[KeyCode[\"Numpad7\"] = 100] = \"Numpad7\";\n KeyCode[KeyCode[\"Numpad8\"] = 101] = \"Numpad8\";\n KeyCode[KeyCode[\"Numpad9\"] = 102] = \"Numpad9\";\n KeyCode[KeyCode[\"NumpadMultiply\"] = 103] = \"NumpadMultiply\";\n KeyCode[KeyCode[\"NumpadAdd\"] = 104] = \"NumpadAdd\";\n KeyCode[KeyCode[\"NUMPAD_SEPARATOR\"] = 105] = \"NUMPAD_SEPARATOR\";\n KeyCode[KeyCode[\"NumpadSubtract\"] = 106] = \"NumpadSubtract\";\n KeyCode[KeyCode[\"NumpadDecimal\"] = 107] = \"NumpadDecimal\";\n KeyCode[KeyCode[\"NumpadDivide\"] = 108] = \"NumpadDivide\";\n /**\n * Cover all key codes when IME is processing input.\n */\n KeyCode[KeyCode[\"KEY_IN_COMPOSITION\"] = 109] = \"KEY_IN_COMPOSITION\";\n KeyCode[KeyCode[\"ABNT_C1\"] = 110] = \"ABNT_C1\";\n KeyCode[KeyCode[\"ABNT_C2\"] = 111] = \"ABNT_C2\";\n KeyCode[KeyCode[\"AudioVolumeMute\"] = 112] = \"AudioVolumeMute\";\n KeyCode[KeyCode[\"AudioVolumeUp\"] = 113] = \"AudioVolumeUp\";\n KeyCode[KeyCode[\"AudioVolumeDown\"] = 114] = \"AudioVolumeDown\";\n KeyCode[KeyCode[\"BrowserSearch\"] = 115] = \"BrowserSearch\";\n KeyCode[KeyCode[\"BrowserHome\"] = 116] = \"BrowserHome\";\n KeyCode[KeyCode[\"BrowserBack\"] = 117] = \"BrowserBack\";\n KeyCode[KeyCode[\"BrowserForward\"] = 118] = \"BrowserForward\";\n KeyCode[KeyCode[\"MediaTrackNext\"] = 119] = \"MediaTrackNext\";\n KeyCode[KeyCode[\"MediaTrackPrevious\"] = 120] = \"MediaTrackPrevious\";\n KeyCode[KeyCode[\"MediaStop\"] = 121] = \"MediaStop\";\n KeyCode[KeyCode[\"MediaPlayPause\"] = 122] = \"MediaPlayPause\";\n KeyCode[KeyCode[\"LaunchMediaPlayer\"] = 123] = \"LaunchMediaPlayer\";\n KeyCode[KeyCode[\"LaunchMail\"] = 124] = \"LaunchMail\";\n KeyCode[KeyCode[\"LaunchApp2\"] = 125] = \"LaunchApp2\";\n /**\n * Placed last to cover the length of the enum.\n * Please do not depend on this value!\n */\n KeyCode[KeyCode[\"MAX_VALUE\"] = 126] = \"MAX_VALUE\";\n})(KeyCode || (KeyCode = {}));\nexport var MarkerSeverity;\n(function (MarkerSeverity) {\n MarkerSeverity[MarkerSeverity[\"Hint\"] = 1] = \"Hint\";\n MarkerSeverity[MarkerSeverity[\"Info\"] = 2] = \"Info\";\n MarkerSeverity[MarkerSeverity[\"Warning\"] = 4] = \"Warning\";\n MarkerSeverity[MarkerSeverity[\"Error\"] = 8] = \"Error\";\n})(MarkerSeverity || (MarkerSeverity = {}));\nexport var MarkerTag;\n(function (MarkerTag) {\n MarkerTag[MarkerTag[\"Unnecessary\"] = 1] = \"Unnecessary\";\n MarkerTag[MarkerTag[\"Deprecated\"] = 2] = \"Deprecated\";\n})(MarkerTag || (MarkerTag = {}));\n/**\n * Position in the minimap to render the decoration.\n */\nexport var MinimapPosition;\n(function (MinimapPosition) {\n MinimapPosition[MinimapPosition[\"Inline\"] = 1] = \"Inline\";\n MinimapPosition[MinimapPosition[\"Gutter\"] = 2] = \"Gutter\";\n})(MinimapPosition || (MinimapPosition = {}));\n/**\n * Type of hit element with the mouse in the editor.\n */\nexport var MouseTargetType;\n(function (MouseTargetType) {\n /**\n * Mouse is on top of an unknown element.\n */\n MouseTargetType[MouseTargetType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n /**\n * Mouse is on top of the textarea used for input.\n */\n MouseTargetType[MouseTargetType[\"TEXTAREA\"] = 1] = \"TEXTAREA\";\n /**\n * Mouse is on top of the glyph margin\n */\n MouseTargetType[MouseTargetType[\"GUTTER_GLYPH_MARGIN\"] = 2] = \"GUTTER_GLYPH_MARGIN\";\n /**\n * Mouse is on top of the line numbers\n */\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_NUMBERS\"] = 3] = \"GUTTER_LINE_NUMBERS\";\n /**\n * Mouse is on top of the line decorations\n */\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_DECORATIONS\"] = 4] = \"GUTTER_LINE_DECORATIONS\";\n /**\n * Mouse is on top of the whitespace left in the gutter by a view zone.\n */\n MouseTargetType[MouseTargetType[\"GUTTER_VIEW_ZONE\"] = 5] = \"GUTTER_VIEW_ZONE\";\n /**\n * Mouse is on top of text in the content.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_TEXT\"] = 6] = \"CONTENT_TEXT\";\n /**\n * Mouse is on top of empty space in the content (e.g. after line text or below last line)\n */\n MouseTargetType[MouseTargetType[\"CONTENT_EMPTY\"] = 7] = \"CONTENT_EMPTY\";\n /**\n * Mouse is on top of a view zone in the content.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_VIEW_ZONE\"] = 8] = \"CONTENT_VIEW_ZONE\";\n /**\n * Mouse is on top of a content widget.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_WIDGET\"] = 9] = \"CONTENT_WIDGET\";\n /**\n * Mouse is on top of the decorations overview ruler.\n */\n MouseTargetType[MouseTargetType[\"OVERVIEW_RULER\"] = 10] = \"OVERVIEW_RULER\";\n /**\n * Mouse is on top of a scrollbar.\n */\n MouseTargetType[MouseTargetType[\"SCROLLBAR\"] = 11] = \"SCROLLBAR\";\n /**\n * Mouse is on top of an overlay widget.\n */\n MouseTargetType[MouseTargetType[\"OVERLAY_WIDGET\"] = 12] = \"OVERLAY_WIDGET\";\n /**\n * Mouse is outside of the editor.\n */\n MouseTargetType[MouseTargetType[\"OUTSIDE_EDITOR\"] = 13] = \"OUTSIDE_EDITOR\";\n})(MouseTargetType || (MouseTargetType = {}));\n/**\n * A positioning preference for rendering overlay widgets.\n */\nexport var OverlayWidgetPositionPreference;\n(function (OverlayWidgetPositionPreference) {\n /**\n * Position the overlay widget in the top right corner\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_RIGHT_CORNER\"] = 0] = \"TOP_RIGHT_CORNER\";\n /**\n * Position the overlay widget in the bottom right corner\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"BOTTOM_RIGHT_CORNER\"] = 1] = \"BOTTOM_RIGHT_CORNER\";\n /**\n * Position the overlay widget in the top center\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_CENTER\"] = 2] = \"TOP_CENTER\";\n})(OverlayWidgetPositionPreference || (OverlayWidgetPositionPreference = {}));\n/**\n * Vertical Lane in the overview ruler of the editor.\n */\nexport var OverviewRulerLane;\n(function (OverviewRulerLane) {\n OverviewRulerLane[OverviewRulerLane[\"Left\"] = 1] = \"Left\";\n OverviewRulerLane[OverviewRulerLane[\"Center\"] = 2] = \"Center\";\n OverviewRulerLane[OverviewRulerLane[\"Right\"] = 4] = \"Right\";\n OverviewRulerLane[OverviewRulerLane[\"Full\"] = 7] = \"Full\";\n})(OverviewRulerLane || (OverviewRulerLane = {}));\nexport var RenderLineNumbersType;\n(function (RenderLineNumbersType) {\n RenderLineNumbersType[RenderLineNumbersType[\"Off\"] = 0] = \"Off\";\n RenderLineNumbersType[RenderLineNumbersType[\"On\"] = 1] = \"On\";\n RenderLineNumbersType[RenderLineNumbersType[\"Relative\"] = 2] = \"Relative\";\n RenderLineNumbersType[RenderLineNumbersType[\"Interval\"] = 3] = \"Interval\";\n RenderLineNumbersType[RenderLineNumbersType[\"Custom\"] = 4] = \"Custom\";\n})(RenderLineNumbersType || (RenderLineNumbersType = {}));\nexport var RenderMinimap;\n(function (RenderMinimap) {\n RenderMinimap[RenderMinimap[\"None\"] = 0] = \"None\";\n RenderMinimap[RenderMinimap[\"Text\"] = 1] = \"Text\";\n RenderMinimap[RenderMinimap[\"Blocks\"] = 2] = \"Blocks\";\n})(RenderMinimap || (RenderMinimap = {}));\nexport var ScrollType;\n(function (ScrollType) {\n ScrollType[ScrollType[\"Smooth\"] = 0] = \"Smooth\";\n ScrollType[ScrollType[\"Immediate\"] = 1] = \"Immediate\";\n})(ScrollType || (ScrollType = {}));\nexport var ScrollbarVisibility;\n(function (ScrollbarVisibility) {\n ScrollbarVisibility[ScrollbarVisibility[\"Auto\"] = 1] = \"Auto\";\n ScrollbarVisibility[ScrollbarVisibility[\"Hidden\"] = 2] = \"Hidden\";\n ScrollbarVisibility[ScrollbarVisibility[\"Visible\"] = 3] = \"Visible\";\n})(ScrollbarVisibility || (ScrollbarVisibility = {}));\n/**\n * The direction of a selection.\n */\nexport var SelectionDirection;\n(function (SelectionDirection) {\n /**\n * The selection starts above where it ends.\n */\n SelectionDirection[SelectionDirection[\"LTR\"] = 0] = \"LTR\";\n /**\n * The selection starts below where it ends.\n */\n SelectionDirection[SelectionDirection[\"RTL\"] = 1] = \"RTL\";\n})(SelectionDirection || (SelectionDirection = {}));\nexport var SignatureHelpTriggerKind;\n(function (SignatureHelpTriggerKind) {\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"Invoke\"] = 1] = \"Invoke\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"ContentChange\"] = 3] = \"ContentChange\";\n})(SignatureHelpTriggerKind || (SignatureHelpTriggerKind = {}));\n/**\n * A symbol kind.\n */\nexport var SymbolKind;\n(function (SymbolKind) {\n SymbolKind[SymbolKind[\"File\"] = 0] = \"File\";\n SymbolKind[SymbolKind[\"Module\"] = 1] = \"Module\";\n SymbolKind[SymbolKind[\"Namespace\"] = 2] = \"Namespace\";\n SymbolKind[SymbolKind[\"Package\"] = 3] = \"Package\";\n SymbolKind[SymbolKind[\"Class\"] = 4] = \"Class\";\n SymbolKind[SymbolKind[\"Method\"] = 5] = \"Method\";\n SymbolKind[SymbolKind[\"Property\"] = 6] = \"Property\";\n SymbolKind[SymbolKind[\"Field\"] = 7] = \"Field\";\n SymbolKind[SymbolKind[\"Constructor\"] = 8] = \"Constructor\";\n SymbolKind[SymbolKind[\"Enum\"] = 9] = \"Enum\";\n SymbolKind[SymbolKind[\"Interface\"] = 10] = \"Interface\";\n SymbolKind[SymbolKind[\"Function\"] = 11] = \"Function\";\n SymbolKind[SymbolKind[\"Variable\"] = 12] = \"Variable\";\n SymbolKind[SymbolKind[\"Constant\"] = 13] = \"Constant\";\n SymbolKind[SymbolKind[\"String\"] = 14] = \"String\";\n SymbolKind[SymbolKind[\"Number\"] = 15] = \"Number\";\n SymbolKind[SymbolKind[\"Boolean\"] = 16] = \"Boolean\";\n SymbolKind[SymbolKind[\"Array\"] = 17] = \"Array\";\n SymbolKind[SymbolKind[\"Object\"] = 18] = \"Object\";\n SymbolKind[SymbolKind[\"Key\"] = 19] = \"Key\";\n SymbolKind[SymbolKind[\"Null\"] = 20] = \"Null\";\n SymbolKind[SymbolKind[\"EnumMember\"] = 21] = \"EnumMember\";\n SymbolKind[SymbolKind[\"Struct\"] = 22] = \"Struct\";\n SymbolKind[SymbolKind[\"Event\"] = 23] = \"Event\";\n SymbolKind[SymbolKind[\"Operator\"] = 24] = \"Operator\";\n SymbolKind[SymbolKind[\"TypeParameter\"] = 25] = \"TypeParameter\";\n})(SymbolKind || (SymbolKind = {}));\nexport var SymbolTag;\n(function (SymbolTag) {\n SymbolTag[SymbolTag[\"Deprecated\"] = 1] = \"Deprecated\";\n})(SymbolTag || (SymbolTag = {}));\n/**\n * The kind of animation in which the editor's cursor should be rendered.\n */\nexport var TextEditorCursorBlinkingStyle;\n(function (TextEditorCursorBlinkingStyle) {\n /**\n * Hidden\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Hidden\"] = 0] = \"Hidden\";\n /**\n * Blinking\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Blink\"] = 1] = \"Blink\";\n /**\n * Blinking with smooth fading\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Smooth\"] = 2] = \"Smooth\";\n /**\n * Blinking with prolonged filled state and smooth fading\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Phase\"] = 3] = \"Phase\";\n /**\n * Expand collapse animation on the y axis\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Expand\"] = 4] = \"Expand\";\n /**\n * No-Blinking\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Solid\"] = 5] = \"Solid\";\n})(TextEditorCursorBlinkingStyle || (TextEditorCursorBlinkingStyle = {}));\n/**\n * The style in which the editor's cursor should be rendered.\n */\nexport var TextEditorCursorStyle;\n(function (TextEditorCursorStyle) {\n /**\n * As a vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Line\"] = 1] = \"Line\";\n /**\n * As a block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Block\"] = 2] = \"Block\";\n /**\n * As a horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Underline\"] = 3] = \"Underline\";\n /**\n * As a thin vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"LineThin\"] = 4] = \"LineThin\";\n /**\n * As an outlined block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"BlockOutline\"] = 5] = \"BlockOutline\";\n /**\n * As a thin horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"UnderlineThin\"] = 6] = \"UnderlineThin\";\n})(TextEditorCursorStyle || (TextEditorCursorStyle = {}));\n/**\n * Describes the behavior of decorations when typing/editing near their edges.\n * Note: Please do not edit the values, as they very carefully match `DecorationRangeBehavior`\n */\nexport var TrackedRangeStickiness;\n(function (TrackedRangeStickiness) {\n TrackedRangeStickiness[TrackedRangeStickiness[\"AlwaysGrowsWhenTypingAtEdges\"] = 0] = \"AlwaysGrowsWhenTypingAtEdges\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"NeverGrowsWhenTypingAtEdges\"] = 1] = \"NeverGrowsWhenTypingAtEdges\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingBefore\"] = 2] = \"GrowsOnlyWhenTypingBefore\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingAfter\"] = 3] = \"GrowsOnlyWhenTypingAfter\";\n})(TrackedRangeStickiness || (TrackedRangeStickiness = {}));\n/**\n * Describes how to indent wrapped lines.\n */\nexport var WrappingIndent;\n(function (WrappingIndent) {\n /**\n * No indentation => wrapped lines begin at column 1.\n */\n WrappingIndent[WrappingIndent[\"None\"] = 0] = \"None\";\n /**\n * Same => wrapped lines get the same indentation as the parent.\n */\n WrappingIndent[WrappingIndent[\"Same\"] = 1] = \"Same\";\n /**\n * Indent => wrapped lines get +1 indentation toward the parent.\n */\n WrappingIndent[WrappingIndent[\"Indent\"] = 2] = \"Indent\";\n /**\n * DeepIndent => wrapped lines get +2 indentation toward the parent.\n */\n WrappingIndent[WrappingIndent[\"DeepIndent\"] = 3] = \"DeepIndent\";\n})(WrappingIndent || (WrappingIndent = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { Token } from '../core/token.js';\nimport * as standaloneEnums from './standaloneEnums.js';\nexport class KeyMod {\n static chord(firstPart, secondPart) {\n return KeyChord(firstPart, secondPart);\n }\n}\nKeyMod.CtrlCmd = 2048 /* CtrlCmd */;\nKeyMod.Shift = 1024 /* Shift */;\nKeyMod.Alt = 512 /* Alt */;\nKeyMod.WinCtrl = 256 /* WinCtrl */;\nexport function createMonacoBaseAPI() {\n return {\n editor: undefined,\n languages: undefined,\n CancellationTokenSource: CancellationTokenSource,\n Emitter: Emitter,\n KeyCode: standaloneEnums.KeyCode,\n KeyMod: KeyMod,\n Position: Position,\n Range: Range,\n Selection: Selection,\n SelectionDirection: standaloneEnums.SelectionDirection,\n MarkerSeverity: standaloneEnums.MarkerSeverity,\n MarkerTag: standaloneEnums.MarkerTag,\n Uri: URI,\n Token: Token\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { VSBuffer } from './buffer.js';\nimport { URI } from './uri.js';\nexport function parse(text) {\n let data = JSON.parse(text);\n data = revive(data);\n return data;\n}\nexport function revive(obj, depth = 0) {\n if (!obj || depth > 200) {\n return obj;\n }\n if (typeof obj === 'object') {\n switch (obj.$mid) {\n case 1 /* Uri */: return URI.revive(obj);\n case 2 /* Regexp */: return new RegExp(obj.source, obj.flags);\n }\n if (obj instanceof VSBuffer\n || obj instanceof Uint8Array) {\n return obj;\n }\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; ++i) {\n obj[i] = revive(obj[i], depth + 1);\n }\n }\n else {\n // walk object\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n obj[key] = revive(obj[key], depth + 1);\n }\n }\n }\n }\n return obj;\n}\n","export var EditorOpenContext;\n(function (EditorOpenContext) {\n /**\n * Default: the editor is opening via a programmatic call\n * to the editor service API.\n */\n EditorOpenContext[EditorOpenContext[\"API\"] = 0] = \"API\";\n /**\n * Indicates that a user action triggered the opening, e.g.\n * via mouse or keyboard use.\n */\n EditorOpenContext[EditorOpenContext[\"USER\"] = 1] = \"USER\";\n})(EditorOpenContext || (EditorOpenContext = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { equalsIgnoreCase, startsWithIgnoreCase } from '../../../base/common/strings.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IOpenerService = createDecorator('openerService');\nexport const NullOpenerService = Object.freeze({\n _serviceBrand: undefined,\n registerOpener() { return Disposable.None; },\n registerValidator() { return Disposable.None; },\n registerExternalUriResolver() { return Disposable.None; },\n setDefaultExternalOpener() { },\n registerExternalOpener() { return Disposable.None; },\n open() {\n return __awaiter(this, void 0, void 0, function* () { return false; });\n },\n resolveExternalUri(uri) {\n return __awaiter(this, void 0, void 0, function* () { return { resolved: uri, dispose() { } }; });\n },\n});\nexport function matchesScheme(target, scheme) {\n if (URI.isUri(target)) {\n return equalsIgnoreCase(target.scheme, scheme);\n }\n else {\n return startsWithIgnoreCase(target, scheme + ':');\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as dom from '../../../base/browser/dom.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { ResourceMap } from '../../../base/common/map.js';\nimport { parse } from '../../../base/common/marshalling.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { normalizePath } from '../../../base/common/resources.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { ICodeEditorService } from './codeEditorService.js';\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\nimport { EditorOpenContext } from '../../../platform/editor/common/editor.js';\nimport { matchesScheme } from '../../../platform/opener/common/opener.js';\nlet CommandOpener = class CommandOpener {\n constructor(_commandService) {\n this._commandService = _commandService;\n }\n open(target, options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!matchesScheme(target, Schemas.command)) {\n return false;\n }\n if (!(options === null || options === void 0 ? void 0 : options.allowCommands)) {\n // silently ignore commands when command-links are disabled, also\n // surpress other openers by returning TRUE\n return true;\n }\n // run command or bail out if command isn't known\n if (typeof target === 'string') {\n target = URI.parse(target);\n }\n // execute as command\n let args = [];\n try {\n args = parse(decodeURIComponent(target.query));\n }\n catch (_a) {\n // ignore and retry\n try {\n args = parse(target.query);\n }\n catch (_b) {\n // ignore error\n }\n }\n if (!Array.isArray(args)) {\n args = [args];\n }\n yield this._commandService.executeCommand(target.path, ...args);\n return true;\n });\n }\n};\nCommandOpener = __decorate([\n __param(0, ICommandService)\n], CommandOpener);\nlet EditorOpener = class EditorOpener {\n constructor(_editorService) {\n this._editorService = _editorService;\n }\n open(target, options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof target === 'string') {\n target = URI.parse(target);\n }\n let selection = undefined;\n const match = /^L?(\\d+)(?:,(\\d+))?/.exec(target.fragment);\n if (match) {\n // support file:///some/file.js#73,84\n // support file:///some/file.js#L73\n selection = {\n startLineNumber: parseInt(match[1]),\n startColumn: match[2] ? parseInt(match[2]) : 1\n };\n // remove fragment\n target = target.with({ fragment: '' });\n }\n if (target.scheme === Schemas.file) {\n target = normalizePath(target); // workaround for non-normalized paths (https://github.com/microsoft/vscode/issues/12954)\n }\n yield this._editorService.openCodeEditor({\n resource: target,\n options: Object.assign({ selection, context: (options === null || options === void 0 ? void 0 : options.fromUserGesture) ? EditorOpenContext.USER : EditorOpenContext.API }, options === null || options === void 0 ? void 0 : options.editorOptions)\n }, this._editorService.getFocusedCodeEditor(), options === null || options === void 0 ? void 0 : options.openToSide);\n return true;\n });\n }\n};\nEditorOpener = __decorate([\n __param(0, ICodeEditorService)\n], EditorOpener);\nlet OpenerService = class OpenerService {\n constructor(editorService, commandService) {\n this._openers = new LinkedList();\n this._validators = new LinkedList();\n this._resolvers = new LinkedList();\n this._resolvedUriTargets = new ResourceMap(uri => uri.with({ path: null, fragment: null, query: null }).toString());\n this._externalOpeners = new LinkedList();\n // Default external opener is going through window.open()\n this._defaultExternalOpener = {\n openExternal: (href) => __awaiter(this, void 0, void 0, function* () {\n // ensure to open HTTP/HTTPS links into new windows\n // to not trigger a navigation. Any other link is\n // safe to be set as HREF to prevent a blank window\n // from opening.\n if (matchesScheme(href, Schemas.http) || matchesScheme(href, Schemas.https)) {\n dom.windowOpenNoOpener(href);\n }\n else {\n window.location.href = href;\n }\n return true;\n })\n };\n // Default opener: any external, maito, http(s), command, and catch-all-editors\n this._openers.push({\n open: (target, options) => __awaiter(this, void 0, void 0, function* () {\n if ((options === null || options === void 0 ? void 0 : options.openExternal) || matchesScheme(target, Schemas.mailto) || matchesScheme(target, Schemas.http) || matchesScheme(target, Schemas.https)) {\n // open externally\n yield this._doOpenExternal(target, options);\n return true;\n }\n return false;\n })\n });\n this._openers.push(new CommandOpener(commandService));\n this._openers.push(new EditorOpener(editorService));\n }\n registerOpener(opener) {\n const remove = this._openers.unshift(opener);\n return { dispose: remove };\n }\n registerValidator(validator) {\n const remove = this._validators.push(validator);\n return { dispose: remove };\n }\n registerExternalUriResolver(resolver) {\n const remove = this._resolvers.push(resolver);\n return { dispose: remove };\n }\n setDefaultExternalOpener(externalOpener) {\n this._defaultExternalOpener = externalOpener;\n }\n registerExternalOpener(opener) {\n const remove = this._externalOpeners.push(opener);\n return { dispose: remove };\n }\n open(target, options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n // check with contributed validators\n const targetURI = typeof target === 'string' ? URI.parse(target) : target;\n // validate against the original URI that this URI resolves to, if one exists\n const validationTarget = (_a = this._resolvedUriTargets.get(targetURI)) !== null && _a !== void 0 ? _a : target;\n for (const validator of this._validators) {\n if (!(yield validator.shouldOpen(validationTarget))) {\n return false;\n }\n }\n // check with contributed openers\n for (const opener of this._openers) {\n const handled = yield opener.open(target, options);\n if (handled) {\n return true;\n }\n }\n return false;\n });\n }\n resolveExternalUri(resource, options) {\n return __awaiter(this, void 0, void 0, function* () {\n for (const resolver of this._resolvers) {\n try {\n const result = yield resolver.resolveExternalUri(resource, options);\n if (result) {\n if (!this._resolvedUriTargets.has(result.resolved)) {\n this._resolvedUriTargets.set(result.resolved, resource);\n }\n return result;\n }\n }\n catch (_a) {\n // noop\n }\n }\n throw new Error('Could not resolve external URI: ' + resource.toString());\n });\n }\n _doOpenExternal(resource, options) {\n return __awaiter(this, void 0, void 0, function* () {\n //todo@jrieken IExternalUriResolver should support `uri: URI | string`\n const uri = typeof resource === 'string' ? URI.parse(resource) : resource;\n let externalUri;\n try {\n externalUri = (yield this.resolveExternalUri(uri, options)).resolved;\n }\n catch (_a) {\n externalUri = uri;\n }\n let href;\n if (typeof resource === 'string' && uri.toString() === externalUri.toString()) {\n // open the url-string AS IS\n href = resource;\n }\n else {\n // open URI using the toString(noEncode)+encodeURI-trick\n href = encodeURI(externalUri.toString(true));\n }\n if (options === null || options === void 0 ? void 0 : options.allowContributedOpeners) {\n const preferredOpenerId = typeof (options === null || options === void 0 ? void 0 : options.allowContributedOpeners) === 'string' ? options === null || options === void 0 ? void 0 : options.allowContributedOpeners : undefined;\n for (const opener of this._externalOpeners) {\n const didOpen = yield opener.openExternal(href, {\n sourceUri: uri,\n preferredOpenerId,\n }, CancellationToken.None);\n if (didOpen) {\n return true;\n }\n }\n }\n return this._defaultExternalOpener.openExternal(href, { sourceUri: uri }, CancellationToken.None);\n });\n }\n dispose() {\n this._validators.clear();\n }\n};\nOpenerService = __decorate([\n __param(0, ICodeEditorService),\n __param(1, ICommandService)\n], OpenerService);\nexport { OpenerService };\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as assert from '../../../base/common/assert.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as objects from '../../../base/common/objects.js';\nimport { Range } from '../../common/core/range.js';\nconst defaultOptions = {\n followsCaret: true,\n ignoreCharChanges: true,\n alwaysRevealFirst: true\n};\n/**\n * Create a new diff navigator for the provided diff editor.\n */\nexport class DiffNavigator extends Disposable {\n constructor(editor, options = {}) {\n super();\n this._onDidUpdate = this._register(new Emitter());\n this._editor = editor;\n this._options = objects.mixin(options, defaultOptions, false);\n this.disposed = false;\n this.nextIdx = -1;\n this.ranges = [];\n this.ignoreSelectionChange = false;\n this.revealFirst = Boolean(this._options.alwaysRevealFirst);\n // hook up to diff editor for diff, disposal, and caret move\n this._register(this._editor.onDidDispose(() => this.dispose()));\n this._register(this._editor.onDidUpdateDiff(() => this._onDiffUpdated()));\n if (this._options.followsCaret) {\n this._register(this._editor.getModifiedEditor().onDidChangeCursorPosition((e) => {\n if (this.ignoreSelectionChange) {\n return;\n }\n this.nextIdx = -1;\n }));\n }\n if (this._options.alwaysRevealFirst) {\n this._register(this._editor.getModifiedEditor().onDidChangeModel((e) => {\n this.revealFirst = true;\n }));\n }\n // init things\n this._init();\n }\n _init() {\n let changes = this._editor.getLineChanges();\n if (!changes) {\n return;\n }\n }\n _onDiffUpdated() {\n this._init();\n this._compute(this._editor.getLineChanges());\n if (this.revealFirst) {\n // Only reveal first on first non-null changes\n if (this._editor.getLineChanges() !== null) {\n this.revealFirst = false;\n this.nextIdx = -1;\n this.next(1 /* Immediate */);\n }\n }\n }\n _compute(lineChanges) {\n // new ranges\n this.ranges = [];\n if (lineChanges) {\n // create ranges from changes\n lineChanges.forEach((lineChange) => {\n if (!this._options.ignoreCharChanges && lineChange.charChanges) {\n lineChange.charChanges.forEach((charChange) => {\n this.ranges.push({\n rhs: true,\n range: new Range(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn)\n });\n });\n }\n else {\n if (lineChange.modifiedEndLineNumber === 0) {\n // a deletion\n this.ranges.push({\n rhs: true,\n range: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedStartLineNumber + 1, 1)\n });\n }\n else {\n // an insertion or modification\n this.ranges.push({\n rhs: true,\n range: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber + 1, 1)\n });\n }\n }\n });\n }\n // sort\n this.ranges.sort((left, right) => Range.compareRangesUsingStarts(left.range, right.range));\n this._onDidUpdate.fire(this);\n }\n _initIdx(fwd) {\n let found = false;\n let position = this._editor.getPosition();\n if (!position) {\n this.nextIdx = 0;\n return;\n }\n for (let i = 0, len = this.ranges.length; i < len && !found; i++) {\n let range = this.ranges[i].range;\n if (position.isBeforeOrEqual(range.getStartPosition())) {\n this.nextIdx = i + (fwd ? 0 : -1);\n found = true;\n }\n }\n if (!found) {\n // after the last change\n this.nextIdx = fwd ? 0 : this.ranges.length - 1;\n }\n if (this.nextIdx < 0) {\n this.nextIdx = this.ranges.length - 1;\n }\n }\n _move(fwd, scrollType) {\n assert.ok(!this.disposed, 'Illegal State - diff navigator has been disposed');\n if (!this.canNavigate()) {\n return;\n }\n if (this.nextIdx === -1) {\n this._initIdx(fwd);\n }\n else if (fwd) {\n this.nextIdx += 1;\n if (this.nextIdx >= this.ranges.length) {\n this.nextIdx = 0;\n }\n }\n else {\n this.nextIdx -= 1;\n if (this.nextIdx < 0) {\n this.nextIdx = this.ranges.length - 1;\n }\n }\n let info = this.ranges[this.nextIdx];\n this.ignoreSelectionChange = true;\n try {\n let pos = info.range.getStartPosition();\n this._editor.setPosition(pos);\n this._editor.revealRangeInCenter(info.range, scrollType);\n }\n finally {\n this.ignoreSelectionChange = false;\n }\n }\n canNavigate() {\n return this.ranges && this.ranges.length > 0;\n }\n next(scrollType = 0 /* Smooth */) {\n this._move(true, scrollType);\n }\n previous(scrollType = 0 /* Smooth */) {\n this._move(false, scrollType);\n }\n dispose() {\n super.dispose();\n this.ranges = [];\n this.disposed = true;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nexport const EditorZoom = new class {\n constructor() {\n this._zoomLevel = 0;\n this._onDidChangeZoomLevel = new Emitter();\n this.onDidChangeZoomLevel = this._onDidChangeZoomLevel.event;\n }\n getZoomLevel() {\n return this._zoomLevel;\n }\n setZoomLevel(zoomLevel) {\n zoomLevel = Math.min(Math.max(-5, zoomLevel), 20);\n if (this._zoomLevel === zoomLevel) {\n return;\n }\n this._zoomLevel = zoomLevel;\n this._onDidChangeZoomLevel.fire(this._zoomLevel);\n }\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as platform from '../../../base/common/platform.js';\nimport { EditorZoom } from './editorZoom.js';\n/**\n * Determined from empirical observations.\n * @internal\n */\nconst GOLDEN_LINE_HEIGHT_RATIO = platform.isMacintosh ? 1.5 : 1.35;\n/**\n * @internal\n */\nconst MINIMUM_LINE_HEIGHT = 8;\nexport class BareFontInfo {\n /**\n * @internal\n */\n constructor(opts) {\n this._bareFontInfoBrand = undefined;\n this.zoomLevel = opts.zoomLevel;\n this.pixelRatio = opts.pixelRatio;\n this.fontFamily = String(opts.fontFamily);\n this.fontWeight = String(opts.fontWeight);\n this.fontSize = opts.fontSize;\n this.fontFeatureSettings = opts.fontFeatureSettings;\n this.lineHeight = opts.lineHeight | 0;\n this.letterSpacing = opts.letterSpacing;\n }\n /**\n * @internal\n */\n static createFromValidatedSettings(options, zoomLevel, pixelRatio, ignoreEditorZoom) {\n const fontFamily = options.get(42 /* fontFamily */);\n const fontWeight = options.get(46 /* fontWeight */);\n const fontSize = options.get(45 /* fontSize */);\n const fontFeatureSettings = options.get(44 /* fontLigatures */);\n const lineHeight = options.get(58 /* lineHeight */);\n const letterSpacing = options.get(55 /* letterSpacing */);\n return BareFontInfo._create(fontFamily, fontWeight, fontSize, fontFeatureSettings, lineHeight, letterSpacing, zoomLevel, pixelRatio, ignoreEditorZoom);\n }\n /**\n * @internal\n */\n static _create(fontFamily, fontWeight, fontSize, fontFeatureSettings, lineHeight, letterSpacing, zoomLevel, pixelRatio, ignoreEditorZoom) {\n if (lineHeight === 0) {\n lineHeight = GOLDEN_LINE_HEIGHT_RATIO * fontSize;\n }\n else if (lineHeight < MINIMUM_LINE_HEIGHT) {\n // Values too small to be line heights in pixels are probably in ems. Accept them gracefully.\n lineHeight = lineHeight * fontSize;\n }\n // Enforce integer, minimum constraints\n lineHeight = Math.round(lineHeight);\n if (lineHeight < MINIMUM_LINE_HEIGHT) {\n lineHeight = MINIMUM_LINE_HEIGHT;\n }\n const editorZoomLevelMultiplier = 1 + (ignoreEditorZoom ? 0 : EditorZoom.getZoomLevel() * 0.1);\n fontSize *= editorZoomLevelMultiplier;\n lineHeight *= editorZoomLevelMultiplier;\n return new BareFontInfo({\n zoomLevel: zoomLevel,\n pixelRatio: pixelRatio,\n fontFamily: fontFamily,\n fontWeight: fontWeight,\n fontSize: fontSize,\n fontFeatureSettings: fontFeatureSettings,\n lineHeight: lineHeight,\n letterSpacing: letterSpacing\n });\n }\n /**\n * @internal\n */\n getId() {\n return this.zoomLevel + '-' + this.pixelRatio + '-' + this.fontFamily + '-' + this.fontWeight + '-' + this.fontSize + '-' + this.fontFeatureSettings + '-' + this.lineHeight + '-' + this.letterSpacing;\n }\n /**\n * @internal\n */\n getMassagedFontFamily(fallbackFontFamily) {\n const fontFamily = BareFontInfo._wrapInQuotes(this.fontFamily);\n if (fallbackFontFamily && this.fontFamily !== fallbackFontFamily) {\n return `${fontFamily}, ${fallbackFontFamily}`;\n }\n return fontFamily;\n }\n static _wrapInQuotes(fontFamily) {\n if (/[,\"']/.test(fontFamily)) {\n // Looks like the font family might be already escaped\n return fontFamily;\n }\n if (/[+ ]/.test(fontFamily)) {\n // Wrap a font family using + or with quotes\n return `\"${fontFamily}\"`;\n }\n return fontFamily;\n }\n}\n// change this whenever `FontInfo` members are changed\nexport const SERIALIZED_FONT_INFO_VERSION = 1;\nexport class FontInfo extends BareFontInfo {\n /**\n * @internal\n */\n constructor(opts, isTrusted) {\n super(opts);\n this._editorStylingBrand = undefined;\n this.version = SERIALIZED_FONT_INFO_VERSION;\n this.isTrusted = isTrusted;\n this.isMonospace = opts.isMonospace;\n this.typicalHalfwidthCharacterWidth = opts.typicalHalfwidthCharacterWidth;\n this.typicalFullwidthCharacterWidth = opts.typicalFullwidthCharacterWidth;\n this.canUseHalfwidthRightwardsArrow = opts.canUseHalfwidthRightwardsArrow;\n this.spaceWidth = opts.spaceWidth;\n this.middotWidth = opts.middotWidth;\n this.wsmiddotWidth = opts.wsmiddotWidth;\n this.maxDigitWidth = opts.maxDigitWidth;\n }\n /**\n * @internal\n */\n equals(other) {\n return (this.fontFamily === other.fontFamily\n && this.fontWeight === other.fontWeight\n && this.fontSize === other.fontSize\n && this.fontFeatureSettings === other.fontFeatureSettings\n && this.lineHeight === other.lineHeight\n && this.letterSpacing === other.letterSpacing\n && this.typicalHalfwidthCharacterWidth === other.typicalHalfwidthCharacterWidth\n && this.typicalFullwidthCharacterWidth === other.typicalFullwidthCharacterWidth\n && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n && this.spaceWidth === other.spaceWidth\n && this.middotWidth === other.middotWidth\n && this.wsmiddotWidth === other.wsmiddotWidth\n && this.maxDigitWidth === other.maxDigitWidth);\n }\n}\n","/**\n * @internal\n */\nexport function isThemeColor(o) {\n return o && typeof o.id === 'string';\n}\n/**\n * The type of the `IEditor`.\n */\nexport const EditorType = {\n ICodeEditor: 'vs.editor.ICodeEditor',\n IDiffEditor: 'vs.editor.IDiffEditor'\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ID_EDITOR_WORKER_SERVICE = 'editorWorkerService';\nexport const IEditorWorkerService = createDecorator(ID_EDITOR_WORKER_SERVICE);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { transformErrorForSerialization } from '../errors.js';\nimport { Emitter } from '../event.js';\nimport { Disposable } from '../lifecycle.js';\nimport { globals, isWeb } from '../platform.js';\nimport * as types from '../types.js';\nimport * as strings from '../strings.js';\nconst INITIALIZE = '$initialize';\nlet webWorkerWarningLogged = false;\nexport function logOnceWebWorkerWarning(err) {\n if (!isWeb) {\n // running tests\n return;\n }\n if (!webWorkerWarningLogged) {\n webWorkerWarningLogged = true;\n console.warn('Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq');\n }\n console.warn(err.message);\n}\nclass RequestMessage {\n constructor(vsWorker, req, method, args) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.method = method;\n this.args = args;\n this.type = 0 /* Request */;\n }\n}\nclass ReplyMessage {\n constructor(vsWorker, seq, res, err) {\n this.vsWorker = vsWorker;\n this.seq = seq;\n this.res = res;\n this.err = err;\n this.type = 1 /* Reply */;\n }\n}\nclass SubscribeEventMessage {\n constructor(vsWorker, req, eventName, arg) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.eventName = eventName;\n this.arg = arg;\n this.type = 2 /* SubscribeEvent */;\n }\n}\nclass EventMessage {\n constructor(vsWorker, req, event) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.event = event;\n this.type = 3 /* Event */;\n }\n}\nclass UnsubscribeEventMessage {\n constructor(vsWorker, req) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.type = 4 /* UnsubscribeEvent */;\n }\n}\nclass SimpleWorkerProtocol {\n constructor(handler) {\n this._workerId = -1;\n this._handler = handler;\n this._lastSentReq = 0;\n this._pendingReplies = Object.create(null);\n this._pendingEmitters = new Map();\n this._pendingEvents = new Map();\n }\n setWorkerId(workerId) {\n this._workerId = workerId;\n }\n sendMessage(method, args) {\n const req = String(++this._lastSentReq);\n return new Promise((resolve, reject) => {\n this._pendingReplies[req] = {\n resolve: resolve,\n reject: reject\n };\n this._send(new RequestMessage(this._workerId, req, method, args));\n });\n }\n listen(eventName, arg) {\n let req = null;\n const emitter = new Emitter({\n onFirstListenerAdd: () => {\n req = String(++this._lastSentReq);\n this._pendingEmitters.set(req, emitter);\n this._send(new SubscribeEventMessage(this._workerId, req, eventName, arg));\n },\n onLastListenerRemove: () => {\n this._pendingEmitters.delete(req);\n this._send(new UnsubscribeEventMessage(this._workerId, req));\n req = null;\n }\n });\n return emitter.event;\n }\n handleMessage(message) {\n if (!message || !message.vsWorker) {\n return;\n }\n if (this._workerId !== -1 && message.vsWorker !== this._workerId) {\n return;\n }\n this._handleMessage(message);\n }\n _handleMessage(msg) {\n switch (msg.type) {\n case 1 /* Reply */:\n return this._handleReplyMessage(msg);\n case 0 /* Request */:\n return this._handleRequestMessage(msg);\n case 2 /* SubscribeEvent */:\n return this._handleSubscribeEventMessage(msg);\n case 3 /* Event */:\n return this._handleEventMessage(msg);\n case 4 /* UnsubscribeEvent */:\n return this._handleUnsubscribeEventMessage(msg);\n }\n }\n _handleReplyMessage(replyMessage) {\n if (!this._pendingReplies[replyMessage.seq]) {\n console.warn('Got reply to unknown seq');\n return;\n }\n let reply = this._pendingReplies[replyMessage.seq];\n delete this._pendingReplies[replyMessage.seq];\n if (replyMessage.err) {\n let err = replyMessage.err;\n if (replyMessage.err.$isError) {\n err = new Error();\n err.name = replyMessage.err.name;\n err.message = replyMessage.err.message;\n err.stack = replyMessage.err.stack;\n }\n reply.reject(err);\n return;\n }\n reply.resolve(replyMessage.res);\n }\n _handleRequestMessage(requestMessage) {\n let req = requestMessage.req;\n let result = this._handler.handleMessage(requestMessage.method, requestMessage.args);\n result.then((r) => {\n this._send(new ReplyMessage(this._workerId, req, r, undefined));\n }, (e) => {\n if (e.detail instanceof Error) {\n // Loading errors have a detail property that points to the actual error\n e.detail = transformErrorForSerialization(e.detail);\n }\n this._send(new ReplyMessage(this._workerId, req, undefined, transformErrorForSerialization(e)));\n });\n }\n _handleSubscribeEventMessage(msg) {\n const req = msg.req;\n const disposable = this._handler.handleEvent(msg.eventName, msg.arg)((event) => {\n this._send(new EventMessage(this._workerId, req, event));\n });\n this._pendingEvents.set(req, disposable);\n }\n _handleEventMessage(msg) {\n if (!this._pendingEmitters.has(msg.req)) {\n console.warn('Got event for unknown req');\n return;\n }\n this._pendingEmitters.get(msg.req).fire(msg.event);\n }\n _handleUnsubscribeEventMessage(msg) {\n if (!this._pendingEvents.has(msg.req)) {\n console.warn('Got unsubscribe for unknown req');\n return;\n }\n this._pendingEvents.get(msg.req).dispose();\n this._pendingEvents.delete(msg.req);\n }\n _send(msg) {\n let transfer = [];\n if (msg.type === 0 /* Request */) {\n for (let i = 0; i < msg.args.length; i++) {\n if (msg.args[i] instanceof ArrayBuffer) {\n transfer.push(msg.args[i]);\n }\n }\n }\n else if (msg.type === 1 /* Reply */) {\n if (msg.res instanceof ArrayBuffer) {\n transfer.push(msg.res);\n }\n }\n this._handler.sendMessage(msg, transfer);\n }\n}\n/**\n * Main thread side\n */\nexport class SimpleWorkerClient extends Disposable {\n constructor(workerFactory, moduleId, host) {\n super();\n let lazyProxyReject = null;\n this._worker = this._register(workerFactory.create('vs/base/common/worker/simpleWorker', (msg) => {\n this._protocol.handleMessage(msg);\n }, (err) => {\n // in Firefox, web workers fail lazily :(\n // we will reject the proxy\n if (lazyProxyReject) {\n lazyProxyReject(err);\n }\n }));\n this._protocol = new SimpleWorkerProtocol({\n sendMessage: (msg, transfer) => {\n this._worker.postMessage(msg, transfer);\n },\n handleMessage: (method, args) => {\n if (typeof host[method] !== 'function') {\n return Promise.reject(new Error('Missing method ' + method + ' on main thread host.'));\n }\n try {\n return Promise.resolve(host[method].apply(host, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n },\n handleEvent: (eventName, arg) => {\n if (propertyIsDynamicEvent(eventName)) {\n const event = host[eventName].call(host, arg);\n if (typeof event !== 'function') {\n throw new Error(`Missing dynamic event ${eventName} on main thread host.`);\n }\n return event;\n }\n if (propertyIsEvent(eventName)) {\n const event = host[eventName];\n if (typeof event !== 'function') {\n throw new Error(`Missing event ${eventName} on main thread host.`);\n }\n return event;\n }\n throw new Error(`Malformed event name ${eventName}`);\n }\n });\n this._protocol.setWorkerId(this._worker.getId());\n // Gather loader configuration\n let loaderConfiguration = null;\n if (typeof globals.require !== 'undefined' && typeof globals.require.getConfig === 'function') {\n // Get the configuration from the Monaco AMD Loader\n loaderConfiguration = globals.require.getConfig();\n }\n else if (typeof globals.requirejs !== 'undefined') {\n // Get the configuration from requirejs\n loaderConfiguration = globals.requirejs.s.contexts._.config;\n }\n const hostMethods = types.getAllMethodNames(host);\n // Send initialize message\n this._onModuleLoaded = this._protocol.sendMessage(INITIALIZE, [\n this._worker.getId(),\n JSON.parse(JSON.stringify(loaderConfiguration)),\n moduleId,\n hostMethods,\n ]);\n // Create proxy to loaded code\n const proxyMethodRequest = (method, args) => {\n return this._request(method, args);\n };\n const proxyListen = (eventName, arg) => {\n return this._protocol.listen(eventName, arg);\n };\n this._lazyProxy = new Promise((resolve, reject) => {\n lazyProxyReject = reject;\n this._onModuleLoaded.then((availableMethods) => {\n resolve(createProxyObject(availableMethods, proxyMethodRequest, proxyListen));\n }, (e) => {\n reject(e);\n this._onError('Worker failed to load ' + moduleId, e);\n });\n });\n }\n getProxyObject() {\n return this._lazyProxy;\n }\n _request(method, args) {\n return new Promise((resolve, reject) => {\n this._onModuleLoaded.then(() => {\n this._protocol.sendMessage(method, args).then(resolve, reject);\n }, reject);\n });\n }\n _onError(message, error) {\n console.error(message);\n console.info(error);\n }\n}\nfunction propertyIsEvent(name) {\n // Assume a property is an event if it has a form of \"onSomething\"\n return name[0] === 'o' && name[1] === 'n' && strings.isUpperAsciiLetter(name.charCodeAt(2));\n}\nfunction propertyIsDynamicEvent(name) {\n // Assume a property is a dynamic event (a method that returns an event) if it has a form of \"onDynamicSomething\"\n return /^onDynamic/.test(name) && strings.isUpperAsciiLetter(name.charCodeAt(9));\n}\nfunction createProxyObject(methodNames, invoke, proxyListen) {\n const createProxyMethod = (method) => {\n return function () {\n const args = Array.prototype.slice.call(arguments, 0);\n return invoke(method, args);\n };\n };\n const createProxyDynamicEvent = (eventName) => {\n return function (arg) {\n return proxyListen(eventName, arg);\n };\n };\n let result = {};\n for (const methodName of methodNames) {\n if (propertyIsDynamicEvent(methodName)) {\n result[methodName] = createProxyDynamicEvent(methodName);\n continue;\n }\n if (propertyIsEvent(methodName)) {\n result[methodName] = proxyListen(methodName, undefined);\n continue;\n }\n result[methodName] = createProxyMethod(methodName);\n }\n return result;\n}\n/**\n * Worker side\n */\nexport class SimpleWorkerServer {\n constructor(postMessage, requestHandlerFactory) {\n this._requestHandlerFactory = requestHandlerFactory;\n this._requestHandler = null;\n this._protocol = new SimpleWorkerProtocol({\n sendMessage: (msg, transfer) => {\n postMessage(msg, transfer);\n },\n handleMessage: (method, args) => this._handleMessage(method, args),\n handleEvent: (eventName, arg) => this._handleEvent(eventName, arg)\n });\n }\n onmessage(msg) {\n this._protocol.handleMessage(msg);\n }\n _handleMessage(method, args) {\n if (method === INITIALIZE) {\n return this.initialize(args[0], args[1], args[2], args[3]);\n }\n if (!this._requestHandler || typeof this._requestHandler[method] !== 'function') {\n return Promise.reject(new Error('Missing requestHandler or method: ' + method));\n }\n try {\n return Promise.resolve(this._requestHandler[method].apply(this._requestHandler, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n }\n _handleEvent(eventName, arg) {\n if (!this._requestHandler) {\n throw new Error(`Missing requestHandler`);\n }\n if (propertyIsDynamicEvent(eventName)) {\n const event = this._requestHandler[eventName].call(this._requestHandler, arg);\n if (typeof event !== 'function') {\n throw new Error(`Missing dynamic event ${eventName} on request handler.`);\n }\n return event;\n }\n if (propertyIsEvent(eventName)) {\n const event = this._requestHandler[eventName];\n if (typeof event !== 'function') {\n throw new Error(`Missing event ${eventName} on request handler.`);\n }\n return event;\n }\n throw new Error(`Malformed event name ${eventName}`);\n }\n initialize(workerId, loaderConfig, moduleId, hostMethods) {\n this._protocol.setWorkerId(workerId);\n const proxyMethodRequest = (method, args) => {\n return this._protocol.sendMessage(method, args);\n };\n const proxyListen = (eventName, arg) => {\n return this._protocol.listen(eventName, arg);\n };\n const hostProxy = createProxyObject(hostMethods, proxyMethodRequest, proxyListen);\n if (this._requestHandlerFactory) {\n // static request handler\n this._requestHandler = this._requestHandlerFactory(hostProxy);\n return Promise.resolve(types.getAllMethodNames(this._requestHandler));\n }\n if (loaderConfig) {\n // Remove 'baseUrl', handling it is beyond scope for now\n if (typeof loaderConfig.baseUrl !== 'undefined') {\n delete loaderConfig['baseUrl'];\n }\n if (typeof loaderConfig.paths !== 'undefined') {\n if (typeof loaderConfig.paths.vs !== 'undefined') {\n delete loaderConfig.paths['vs'];\n }\n }\n if (typeof loaderConfig.trustedTypesPolicy !== undefined) {\n // don't use, it has been destroyed during serialize\n delete loaderConfig['trustedTypesPolicy'];\n }\n // Since this is in a web worker, enable catching errors\n loaderConfig.catchError = true;\n globals.require.config(loaderConfig);\n }\n return new Promise((resolve, reject) => {\n // Use the global require to be sure to get the global config\n // ESM-comment-begin\n // \t\t\tconst req = (globals.require || require);\n // ESM-comment-end\n // ESM-uncomment-begin\n const req = globals.require;\n // ESM-uncomment-end\n req([moduleId], (module) => {\n this._requestHandler = module.create(hostProxy);\n if (!this._requestHandler) {\n reject(new Error(`No RequestHandler!`));\n return;\n }\n resolve(types.getAllMethodNames(this._requestHandler));\n }, reject);\n });\n }\n}\n/**\n * Called on the worker side\n */\nexport function create(postMessage) {\n return new SimpleWorkerServer(postMessage, null);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar _a;\nimport { globals } from '../common/platform.js';\nimport { logOnceWebWorkerWarning } from '../common/worker/simpleWorker.js';\nconst ttPolicy = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('defaultWorkerFactory', { createScriptURL: value => value });\nfunction getWorker(workerId, label) {\n // Option for hosts to overwrite the worker script (used in the standalone editor)\n if (globals.MonacoEnvironment) {\n if (typeof globals.MonacoEnvironment.getWorker === 'function') {\n return globals.MonacoEnvironment.getWorker(workerId, label);\n }\n if (typeof globals.MonacoEnvironment.getWorkerUrl === 'function') {\n const workerUrl = globals.MonacoEnvironment.getWorkerUrl(workerId, label);\n return new Worker(ttPolicy ? ttPolicy.createScriptURL(workerUrl) : workerUrl, { name: label });\n }\n }\n // ESM-comment-begin\n // \tif (typeof require === 'function') {\n // \t\t// check if the JS lives on a different origin\n // \t\tconst workerMain = require.toUrl('./' + workerId); // explicitly using require.toUrl(), see https://github.com/microsoft/vscode/issues/107440#issuecomment-698982321\n // \t\tconst workerUrl = getWorkerBootstrapUrl(workerMain, label);\n // \t\treturn new Worker(ttPolicy ? ttPolicy.createScriptURL(workerUrl) as unknown as string : workerUrl, { name: label });\n // \t}\n // ESM-comment-end\n throw new Error(`You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker`);\n}\n// ESM-comment-begin\n// export function getWorkerBootstrapUrl(scriptPath: string, label: string): string {\n// \tif (/^((http:)|(https:)|(file:))/.test(scriptPath) && scriptPath.substring(0, self.origin.length) !== self.origin) {\n// \t\t// this is the cross-origin case\n// \t\t// i.e. the webpage is running at a different origin than where the scripts are loaded from\n// \t\tconst myPath = 'vs/base/worker/defaultWorkerFactory.js';\n// \t\tconst workerBaseUrl = require.toUrl(myPath).slice(0, -myPath.length); // explicitly using require.toUrl(), see https://github.com/microsoft/vscode/issues/107440#issuecomment-698982321\n// \t\tconst js = `/*${label}*/self.MonacoEnvironment={baseUrl: '${workerBaseUrl}'};const ttPolicy = self.trustedTypes?.createPolicy('defaultWorkerFactory', { createScriptURL: value => value });importScripts(ttPolicy?.createScriptURL('${scriptPath}') ?? '${scriptPath}');/*${label}*/`;\n// \t\tconst blob = new Blob([js], { type: 'application/javascript' });\n// \t\treturn URL.createObjectURL(blob);\n// \t}\n// \treturn scriptPath + '#' + label;\n// }\n// ESM-comment-end\nfunction isPromiseLike(obj) {\n if (typeof obj.then === 'function') {\n return true;\n }\n return false;\n}\n/**\n * A worker that uses HTML5 web workers so that is has\n * its own global scope and its own thread.\n */\nclass WebWorker {\n constructor(moduleId, id, label, onMessageCallback, onErrorCallback) {\n this.id = id;\n const workerOrPromise = getWorker('workerMain.js', label);\n if (isPromiseLike(workerOrPromise)) {\n this.worker = workerOrPromise;\n }\n else {\n this.worker = Promise.resolve(workerOrPromise);\n }\n this.postMessage(moduleId, []);\n this.worker.then((w) => {\n w.onmessage = function (ev) {\n onMessageCallback(ev.data);\n };\n w.onmessageerror = onErrorCallback;\n if (typeof w.addEventListener === 'function') {\n w.addEventListener('error', onErrorCallback);\n }\n });\n }\n getId() {\n return this.id;\n }\n postMessage(message, transfer) {\n if (this.worker) {\n this.worker.then(w => w.postMessage(message, transfer));\n }\n }\n dispose() {\n if (this.worker) {\n this.worker.then(w => w.terminate());\n }\n this.worker = null;\n }\n}\nexport class DefaultWorkerFactory {\n constructor(label) {\n this._label = label;\n this._webWorkerFailedBeforeError = false;\n }\n create(moduleId, onMessageCallback, onErrorCallback) {\n let workerId = (++DefaultWorkerFactory.LAST_WORKER_ID);\n if (this._webWorkerFailedBeforeError) {\n throw this._webWorkerFailedBeforeError;\n }\n return new WebWorker(moduleId, workerId, this._label || 'anonymous' + workerId, onMessageCallback, (err) => {\n logOnceWebWorkerWarning(err);\n this._webWorkerFailedBeforeError = err;\n onErrorCallback(err);\n });\n }\n}\nDefaultWorkerFactory.LAST_WORKER_ID = 0;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Represents information about a specific difference between two sequences.\n */\nexport class DiffChange {\n /**\n * Constructs a new DiffChange with the given sequence information\n * and content.\n */\n constructor(originalStart, originalLength, modifiedStart, modifiedLength) {\n //Debug.Assert(originalLength > 0 || modifiedLength > 0, \"originalLength and modifiedLength cannot both be <= 0\");\n this.originalStart = originalStart;\n this.originalLength = originalLength;\n this.modifiedStart = modifiedStart;\n this.modifiedLength = modifiedLength;\n }\n /**\n * The end point (exclusive) of the change in the original sequence.\n */\n getOriginalEnd() {\n return this.originalStart + this.originalLength;\n }\n /**\n * The end point (exclusive) of the change in the modified sequence.\n */\n getModifiedEnd() {\n return this.modifiedStart + this.modifiedLength;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { DiffChange } from './diffChange.js';\nimport { stringHash } from '../hash.js';\nexport class StringDiffSequence {\n constructor(source) {\n this.source = source;\n }\n getElements() {\n const source = this.source;\n const characters = new Int32Array(source.length);\n for (let i = 0, len = source.length; i < len; i++) {\n characters[i] = source.charCodeAt(i);\n }\n return characters;\n }\n}\nexport function stringDiff(original, modified, pretty) {\n return new LcsDiff(new StringDiffSequence(original), new StringDiffSequence(modified)).ComputeDiff(pretty).changes;\n}\n//\n// The code below has been ported from a C# implementation in VS\n//\nexport class Debug {\n static Assert(condition, message) {\n if (!condition) {\n throw new Error(message);\n }\n }\n}\nexport class MyArray {\n /**\n * Copies a range of elements from an Array starting at the specified source index and pastes\n * them to another Array starting at the specified destination index. The length and the indexes\n * are specified as 64-bit integers.\n * sourceArray:\n *\t\tThe Array that contains the data to copy.\n * sourceIndex:\n *\t\tA 64-bit integer that represents the index in the sourceArray at which copying begins.\n * destinationArray:\n *\t\tThe Array that receives the data.\n * destinationIndex:\n *\t\tA 64-bit integer that represents the index in the destinationArray at which storing begins.\n * length:\n *\t\tA 64-bit integer that represents the number of elements to copy.\n */\n static Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\n for (let i = 0; i < length; i++) {\n destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\n }\n }\n static Copy2(sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\n for (let i = 0; i < length; i++) {\n destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\n }\n }\n}\n/**\n * A utility class which helps to create the set of DiffChanges from\n * a difference operation. This class accepts original DiffElements and\n * modified DiffElements that are involved in a particular change. The\n * MarkNextChange() method can be called to mark the separation between\n * distinct changes. At the end, the Changes property can be called to retrieve\n * the constructed changes.\n */\nclass DiffChangeHelper {\n /**\n * Constructs a new DiffChangeHelper for the given DiffSequences.\n */\n constructor() {\n this.m_changes = [];\n this.m_originalStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n this.m_modifiedStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n this.m_originalCount = 0;\n this.m_modifiedCount = 0;\n }\n /**\n * Marks the beginning of the next change in the set of differences.\n */\n MarkNextChange() {\n // Only add to the list if there is something to add\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n // Add the new change to our list\n this.m_changes.push(new DiffChange(this.m_originalStart, this.m_originalCount, this.m_modifiedStart, this.m_modifiedCount));\n }\n // Reset for the next change\n this.m_originalCount = 0;\n this.m_modifiedCount = 0;\n this.m_originalStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n this.m_modifiedStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n }\n /**\n * Adds the original element at the given position to the elements\n * affected by the current change. The modified index gives context\n * to the change position with respect to the original sequence.\n * @param originalIndex The index of the original element to add.\n * @param modifiedIndex The index of the modified element that provides corresponding position in the modified sequence.\n */\n AddOriginalElement(originalIndex, modifiedIndex) {\n // The 'true' start index is the smallest of the ones we've seen\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n this.m_originalCount++;\n }\n /**\n * Adds the modified element at the given position to the elements\n * affected by the current change. The original index gives context\n * to the change position with respect to the modified sequence.\n * @param originalIndex The index of the original element that provides corresponding position in the original sequence.\n * @param modifiedIndex The index of the modified element to add.\n */\n AddModifiedElement(originalIndex, modifiedIndex) {\n // The 'true' start index is the smallest of the ones we've seen\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n this.m_modifiedCount++;\n }\n /**\n * Retrieves all of the changes marked by the class.\n */\n getChanges() {\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n // Finish up on whatever is left\n this.MarkNextChange();\n }\n return this.m_changes;\n }\n /**\n * Retrieves all of the changes marked by the class in the reverse order\n */\n getReverseChanges() {\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n // Finish up on whatever is left\n this.MarkNextChange();\n }\n this.m_changes.reverse();\n return this.m_changes;\n }\n}\n/**\n * An implementation of the difference algorithm described in\n * \"An O(ND) Difference Algorithm and its variations\" by Eugene W. Myers\n */\nexport class LcsDiff {\n /**\n * Constructs the DiffFinder\n */\n constructor(originalSequence, modifiedSequence, continueProcessingPredicate = null) {\n this.ContinueProcessingPredicate = continueProcessingPredicate;\n this._originalSequence = originalSequence;\n this._modifiedSequence = modifiedSequence;\n const [originalStringElements, originalElementsOrHash, originalHasStrings] = LcsDiff._getElements(originalSequence);\n const [modifiedStringElements, modifiedElementsOrHash, modifiedHasStrings] = LcsDiff._getElements(modifiedSequence);\n this._hasStrings = (originalHasStrings && modifiedHasStrings);\n this._originalStringElements = originalStringElements;\n this._originalElementsOrHash = originalElementsOrHash;\n this._modifiedStringElements = modifiedStringElements;\n this._modifiedElementsOrHash = modifiedElementsOrHash;\n this.m_forwardHistory = [];\n this.m_reverseHistory = [];\n }\n static _isStringArray(arr) {\n return (arr.length > 0 && typeof arr[0] === 'string');\n }\n static _getElements(sequence) {\n const elements = sequence.getElements();\n if (LcsDiff._isStringArray(elements)) {\n const hashes = new Int32Array(elements.length);\n for (let i = 0, len = elements.length; i < len; i++) {\n hashes[i] = stringHash(elements[i], 0);\n }\n return [elements, hashes, true];\n }\n if (elements instanceof Int32Array) {\n return [[], elements, false];\n }\n return [[], new Int32Array(elements), false];\n }\n ElementsAreEqual(originalIndex, newIndex) {\n if (this._originalElementsOrHash[originalIndex] !== this._modifiedElementsOrHash[newIndex]) {\n return false;\n }\n return (this._hasStrings ? this._originalStringElements[originalIndex] === this._modifiedStringElements[newIndex] : true);\n }\n ElementsAreStrictEqual(originalIndex, newIndex) {\n if (!this.ElementsAreEqual(originalIndex, newIndex)) {\n return false;\n }\n const originalElement = LcsDiff._getStrictElement(this._originalSequence, originalIndex);\n const modifiedElement = LcsDiff._getStrictElement(this._modifiedSequence, newIndex);\n return (originalElement === modifiedElement);\n }\n static _getStrictElement(sequence, index) {\n if (typeof sequence.getStrictElement === 'function') {\n return sequence.getStrictElement(index);\n }\n return null;\n }\n OriginalElementsAreEqual(index1, index2) {\n if (this._originalElementsOrHash[index1] !== this._originalElementsOrHash[index2]) {\n return false;\n }\n return (this._hasStrings ? this._originalStringElements[index1] === this._originalStringElements[index2] : true);\n }\n ModifiedElementsAreEqual(index1, index2) {\n if (this._modifiedElementsOrHash[index1] !== this._modifiedElementsOrHash[index2]) {\n return false;\n }\n return (this._hasStrings ? this._modifiedStringElements[index1] === this._modifiedStringElements[index2] : true);\n }\n ComputeDiff(pretty) {\n return this._ComputeDiff(0, this._originalElementsOrHash.length - 1, 0, this._modifiedElementsOrHash.length - 1, pretty);\n }\n /**\n * Computes the differences between the original and modified input\n * sequences on the bounded range.\n * @returns An array of the differences between the two input sequences.\n */\n _ComputeDiff(originalStart, originalEnd, modifiedStart, modifiedEnd, pretty) {\n const quitEarlyArr = [false];\n let changes = this.ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr);\n if (pretty) {\n // We have to clean up the computed diff to be more intuitive\n // but it turns out this cannot be done correctly until the entire set\n // of diffs have been computed\n changes = this.PrettifyChanges(changes);\n }\n return {\n quitEarly: quitEarlyArr[0],\n changes: changes\n };\n }\n /**\n * Private helper method which computes the differences on the bounded range\n * recursively.\n * @returns An array of the differences between the two input sequences.\n */\n ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr) {\n quitEarlyArr[0] = false;\n // Find the start of the differences\n while (originalStart <= originalEnd && modifiedStart <= modifiedEnd && this.ElementsAreEqual(originalStart, modifiedStart)) {\n originalStart++;\n modifiedStart++;\n }\n // Find the end of the differences\n while (originalEnd >= originalStart && modifiedEnd >= modifiedStart && this.ElementsAreEqual(originalEnd, modifiedEnd)) {\n originalEnd--;\n modifiedEnd--;\n }\n // In the special case where we either have all insertions or all deletions or the sequences are identical\n if (originalStart > originalEnd || modifiedStart > modifiedEnd) {\n let changes;\n if (modifiedStart <= modifiedEnd) {\n Debug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\n // All insertions\n changes = [\n new DiffChange(originalStart, 0, modifiedStart, modifiedEnd - modifiedStart + 1)\n ];\n }\n else if (originalStart <= originalEnd) {\n Debug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\n // All deletions\n changes = [\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, 0)\n ];\n }\n else {\n Debug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\n Debug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\n // Identical sequences - No differences\n changes = [];\n }\n return changes;\n }\n // This problem can be solved using the Divide-And-Conquer technique.\n const midOriginalArr = [0];\n const midModifiedArr = [0];\n const result = this.ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr);\n const midOriginal = midOriginalArr[0];\n const midModified = midModifiedArr[0];\n if (result !== null) {\n // Result is not-null when there was enough memory to compute the changes while\n // searching for the recursion point\n return result;\n }\n else if (!quitEarlyArr[0]) {\n // We can break the problem down recursively by finding the changes in the\n // First Half: (originalStart, modifiedStart) to (midOriginal, midModified)\n // Second Half: (midOriginal + 1, minModified + 1) to (originalEnd, modifiedEnd)\n // NOTE: ComputeDiff() is inclusive, therefore the second range starts on the next point\n const leftChanges = this.ComputeDiffRecursive(originalStart, midOriginal, modifiedStart, midModified, quitEarlyArr);\n let rightChanges = [];\n if (!quitEarlyArr[0]) {\n rightChanges = this.ComputeDiffRecursive(midOriginal + 1, originalEnd, midModified + 1, modifiedEnd, quitEarlyArr);\n }\n else {\n // We didn't have time to finish the first half, so we don't have time to compute this half.\n // Consider the entire rest of the sequence different.\n rightChanges = [\n new DiffChange(midOriginal + 1, originalEnd - (midOriginal + 1) + 1, midModified + 1, modifiedEnd - (midModified + 1) + 1)\n ];\n }\n return this.ConcatenateChanges(leftChanges, rightChanges);\n }\n // If we hit here, we quit early, and so can't return anything meaningful\n return [\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)\n ];\n }\n WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr) {\n let forwardChanges = null;\n let reverseChanges = null;\n // First, walk backward through the forward diagonals history\n let changeHelper = new DiffChangeHelper();\n let diagonalMin = diagonalForwardStart;\n let diagonalMax = diagonalForwardEnd;\n let diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalForwardOffset;\n let lastOriginalIndex = -1073741824 /* MIN_SAFE_SMALL_INTEGER */;\n let historyIndex = this.m_forwardHistory.length - 1;\n do {\n // Get the diagonal index from the relative diagonal number\n const diagonal = diagonalRelative + diagonalForwardBase;\n // Figure out where we came from\n if (diagonal === diagonalMin || (diagonal < diagonalMax && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\n // Vertical line (the element is an insert)\n originalIndex = forwardPoints[diagonal + 1];\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n if (originalIndex < lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex;\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex);\n diagonalRelative = (diagonal + 1) - diagonalForwardBase; //Setup for the next iteration\n }\n else {\n // Horizontal line (the element is a deletion)\n originalIndex = forwardPoints[diagonal - 1] + 1;\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n if (originalIndex < lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex - 1;\n changeHelper.AddOriginalElement(originalIndex, modifiedIndex + 1);\n diagonalRelative = (diagonal - 1) - diagonalForwardBase; //Setup for the next iteration\n }\n if (historyIndex >= 0) {\n forwardPoints = this.m_forwardHistory[historyIndex];\n diagonalForwardBase = forwardPoints[0]; //We stored this in the first spot\n diagonalMin = 1;\n diagonalMax = forwardPoints.length - 1;\n }\n } while (--historyIndex >= -1);\n // Ironically, we get the forward changes as the reverse of the\n // order we added them since we technically added them backwards\n forwardChanges = changeHelper.getReverseChanges();\n if (quitEarlyArr[0]) {\n // TODO: Calculate a partial from the reverse diagonals.\n // For now, just assume everything after the midOriginal/midModified point is a diff\n let originalStartPoint = midOriginalArr[0] + 1;\n let modifiedStartPoint = midModifiedArr[0] + 1;\n if (forwardChanges !== null && forwardChanges.length > 0) {\n const lastForwardChange = forwardChanges[forwardChanges.length - 1];\n originalStartPoint = Math.max(originalStartPoint, lastForwardChange.getOriginalEnd());\n modifiedStartPoint = Math.max(modifiedStartPoint, lastForwardChange.getModifiedEnd());\n }\n reverseChanges = [\n new DiffChange(originalStartPoint, originalEnd - originalStartPoint + 1, modifiedStartPoint, modifiedEnd - modifiedStartPoint + 1)\n ];\n }\n else {\n // Now walk backward through the reverse diagonals history\n changeHelper = new DiffChangeHelper();\n diagonalMin = diagonalReverseStart;\n diagonalMax = diagonalReverseEnd;\n diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalReverseOffset;\n lastOriginalIndex = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n historyIndex = (deltaIsEven) ? this.m_reverseHistory.length - 1 : this.m_reverseHistory.length - 2;\n do {\n // Get the diagonal index from the relative diagonal number\n const diagonal = diagonalRelative + diagonalReverseBase;\n // Figure out where we came from\n if (diagonal === diagonalMin || (diagonal < diagonalMax && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\n // Horizontal line (the element is a deletion))\n originalIndex = reversePoints[diagonal + 1] - 1;\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n if (originalIndex > lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex + 1;\n changeHelper.AddOriginalElement(originalIndex + 1, modifiedIndex + 1);\n diagonalRelative = (diagonal + 1) - diagonalReverseBase; //Setup for the next iteration\n }\n else {\n // Vertical line (the element is an insertion)\n originalIndex = reversePoints[diagonal - 1];\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n if (originalIndex > lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex;\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex + 1);\n diagonalRelative = (diagonal - 1) - diagonalReverseBase; //Setup for the next iteration\n }\n if (historyIndex >= 0) {\n reversePoints = this.m_reverseHistory[historyIndex];\n diagonalReverseBase = reversePoints[0]; //We stored this in the first spot\n diagonalMin = 1;\n diagonalMax = reversePoints.length - 1;\n }\n } while (--historyIndex >= -1);\n // There are cases where the reverse history will find diffs that\n // are correct, but not intuitive, so we need shift them.\n reverseChanges = changeHelper.getChanges();\n }\n return this.ConcatenateChanges(forwardChanges, reverseChanges);\n }\n /**\n * Given the range to compute the diff on, this method finds the point:\n * (midOriginal, midModified)\n * that exists in the middle of the LCS of the two sequences and\n * is the point at which the LCS problem may be broken down recursively.\n * This method will try to keep the LCS trace in memory. If the LCS recursion\n * point is calculated and the full trace is available in memory, then this method\n * will return the change list.\n * @param originalStart The start bound of the original sequence range\n * @param originalEnd The end bound of the original sequence range\n * @param modifiedStart The start bound of the modified sequence range\n * @param modifiedEnd The end bound of the modified sequence range\n * @param midOriginal The middle point of the original sequence range\n * @param midModified The middle point of the modified sequence range\n * @returns The diff changes, if available, otherwise null\n */\n ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr) {\n let originalIndex = 0, modifiedIndex = 0;\n let diagonalForwardStart = 0, diagonalForwardEnd = 0;\n let diagonalReverseStart = 0, diagonalReverseEnd = 0;\n // To traverse the edit graph and produce the proper LCS, our actual\n // start position is just outside the given boundary\n originalStart--;\n modifiedStart--;\n // We set these up to make the compiler happy, but they will\n // be replaced before we return with the actual recursion point\n midOriginalArr[0] = 0;\n midModifiedArr[0] = 0;\n // Clear out the history\n this.m_forwardHistory = [];\n this.m_reverseHistory = [];\n // Each cell in the two arrays corresponds to a diagonal in the edit graph.\n // The integer value in the cell represents the originalIndex of the furthest\n // reaching point found so far that ends in that diagonal.\n // The modifiedIndex can be computed mathematically from the originalIndex and the diagonal number.\n const maxDifferences = (originalEnd - originalStart) + (modifiedEnd - modifiedStart);\n const numDiagonals = maxDifferences + 1;\n const forwardPoints = new Int32Array(numDiagonals);\n const reversePoints = new Int32Array(numDiagonals);\n // diagonalForwardBase: Index into forwardPoints of the diagonal which passes through (originalStart, modifiedStart)\n // diagonalReverseBase: Index into reversePoints of the diagonal which passes through (originalEnd, modifiedEnd)\n const diagonalForwardBase = (modifiedEnd - modifiedStart);\n const diagonalReverseBase = (originalEnd - originalStart);\n // diagonalForwardOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\n // diagonal number (relative to diagonalForwardBase)\n // diagonalReverseOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\n // diagonal number (relative to diagonalReverseBase)\n const diagonalForwardOffset = (originalStart - modifiedStart);\n const diagonalReverseOffset = (originalEnd - modifiedEnd);\n // delta: The difference between the end diagonal and the start diagonal. This is used to relate diagonal numbers\n // relative to the start diagonal with diagonal numbers relative to the end diagonal.\n // The Even/Oddn-ness of this delta is important for determining when we should check for overlap\n const delta = diagonalReverseBase - diagonalForwardBase;\n const deltaIsEven = (delta % 2 === 0);\n // Here we set up the start and end points as the furthest points found so far\n // in both the forward and reverse directions, respectively\n forwardPoints[diagonalForwardBase] = originalStart;\n reversePoints[diagonalReverseBase] = originalEnd;\n // Remember if we quit early, and thus need to do a best-effort result instead of a real result.\n quitEarlyArr[0] = false;\n // A couple of points:\n // --With this method, we iterate on the number of differences between the two sequences.\n // The more differences there actually are, the longer this will take.\n // --Also, as the number of differences increases, we have to search on diagonals further\n // away from the reference diagonal (which is diagonalForwardBase for forward, diagonalReverseBase for reverse).\n // --We extend on even diagonals (relative to the reference diagonal) only when numDifferences\n // is even and odd diagonals only when numDifferences is odd.\n for (let numDifferences = 1; numDifferences <= (maxDifferences / 2) + 1; numDifferences++) {\n let furthestOriginalIndex = 0;\n let furthestModifiedIndex = 0;\n // Run the algorithm in the forward direction\n diagonalForwardStart = this.ClipDiagonalBound(diagonalForwardBase - numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n diagonalForwardEnd = this.ClipDiagonalBound(diagonalForwardBase + numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n for (let diagonal = diagonalForwardStart; diagonal <= diagonalForwardEnd; diagonal += 2) {\n // STEP 1: We extend the furthest reaching point in the present diagonal\n // by looking at the diagonals above and below and picking the one whose point\n // is further away from the start point (originalStart, modifiedStart)\n if (diagonal === diagonalForwardStart || (diagonal < diagonalForwardEnd && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\n originalIndex = forwardPoints[diagonal + 1];\n }\n else {\n originalIndex = forwardPoints[diagonal - 1] + 1;\n }\n modifiedIndex = originalIndex - (diagonal - diagonalForwardBase) - diagonalForwardOffset;\n // Save the current originalIndex so we can test for false overlap in step 3\n const tempOriginalIndex = originalIndex;\n // STEP 2: We can continue to extend the furthest reaching point in the present diagonal\n // so long as the elements are equal.\n while (originalIndex < originalEnd && modifiedIndex < modifiedEnd && this.ElementsAreEqual(originalIndex + 1, modifiedIndex + 1)) {\n originalIndex++;\n modifiedIndex++;\n }\n forwardPoints[diagonal] = originalIndex;\n if (originalIndex + modifiedIndex > furthestOriginalIndex + furthestModifiedIndex) {\n furthestOriginalIndex = originalIndex;\n furthestModifiedIndex = modifiedIndex;\n }\n // STEP 3: If delta is odd (overlap first happens on forward when delta is odd)\n // and diagonal is in the range of reverse diagonals computed for numDifferences-1\n // (the previous iteration; we haven't computed reverse diagonals for numDifferences yet)\n // then check for overlap.\n if (!deltaIsEven && Math.abs(diagonal - diagonalReverseBase) <= (numDifferences - 1)) {\n if (originalIndex >= reversePoints[diagonal]) {\n midOriginalArr[0] = originalIndex;\n midModifiedArr[0] = modifiedIndex;\n if (tempOriginalIndex <= reversePoints[diagonal] && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\n // BINGO! We overlapped, and we have the full trace in memory!\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n else {\n // Either false overlap, or we didn't have enough memory for the full trace\n // Just return the recursion point\n return null;\n }\n }\n }\n }\n // Check to see if we should be quitting early, before moving on to the next iteration.\n const matchLengthOfLongest = ((furthestOriginalIndex - originalStart) + (furthestModifiedIndex - modifiedStart) - numDifferences) / 2;\n if (this.ContinueProcessingPredicate !== null && !this.ContinueProcessingPredicate(furthestOriginalIndex, matchLengthOfLongest)) {\n // We can't finish, so skip ahead to generating a result from what we have.\n quitEarlyArr[0] = true;\n // Use the furthest distance we got in the forward direction.\n midOriginalArr[0] = furthestOriginalIndex;\n midModifiedArr[0] = furthestModifiedIndex;\n if (matchLengthOfLongest > 0 && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\n // Enough of the history is in memory to walk it backwards\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n else {\n // We didn't actually remember enough of the history.\n //Since we are quitting the diff early, we need to shift back the originalStart and modified start\n //back into the boundary limits since we decremented their value above beyond the boundary limit.\n originalStart++;\n modifiedStart++;\n return [\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)\n ];\n }\n }\n // Run the algorithm in the reverse direction\n diagonalReverseStart = this.ClipDiagonalBound(diagonalReverseBase - numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n diagonalReverseEnd = this.ClipDiagonalBound(diagonalReverseBase + numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n for (let diagonal = diagonalReverseStart; diagonal <= diagonalReverseEnd; diagonal += 2) {\n // STEP 1: We extend the furthest reaching point in the present diagonal\n // by looking at the diagonals above and below and picking the one whose point\n // is further away from the start point (originalEnd, modifiedEnd)\n if (diagonal === diagonalReverseStart || (diagonal < diagonalReverseEnd && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\n originalIndex = reversePoints[diagonal + 1] - 1;\n }\n else {\n originalIndex = reversePoints[diagonal - 1];\n }\n modifiedIndex = originalIndex - (diagonal - diagonalReverseBase) - diagonalReverseOffset;\n // Save the current originalIndex so we can test for false overlap\n const tempOriginalIndex = originalIndex;\n // STEP 2: We can continue to extend the furthest reaching point in the present diagonal\n // as long as the elements are equal.\n while (originalIndex > originalStart && modifiedIndex > modifiedStart && this.ElementsAreEqual(originalIndex, modifiedIndex)) {\n originalIndex--;\n modifiedIndex--;\n }\n reversePoints[diagonal] = originalIndex;\n // STEP 4: If delta is even (overlap first happens on reverse when delta is even)\n // and diagonal is in the range of forward diagonals computed for numDifferences\n // then check for overlap.\n if (deltaIsEven && Math.abs(diagonal - diagonalForwardBase) <= numDifferences) {\n if (originalIndex <= forwardPoints[diagonal]) {\n midOriginalArr[0] = originalIndex;\n midModifiedArr[0] = modifiedIndex;\n if (tempOriginalIndex >= forwardPoints[diagonal] && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\n // BINGO! We overlapped, and we have the full trace in memory!\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n else {\n // Either false overlap, or we didn't have enough memory for the full trace\n // Just return the recursion point\n return null;\n }\n }\n }\n }\n // Save current vectors to history before the next iteration\n if (numDifferences <= 1447 /* MaxDifferencesHistory */) {\n // We are allocating space for one extra int, which we fill with\n // the index of the diagonal base index\n let temp = new Int32Array(diagonalForwardEnd - diagonalForwardStart + 2);\n temp[0] = diagonalForwardBase - diagonalForwardStart + 1;\n MyArray.Copy2(forwardPoints, diagonalForwardStart, temp, 1, diagonalForwardEnd - diagonalForwardStart + 1);\n this.m_forwardHistory.push(temp);\n temp = new Int32Array(diagonalReverseEnd - diagonalReverseStart + 2);\n temp[0] = diagonalReverseBase - diagonalReverseStart + 1;\n MyArray.Copy2(reversePoints, diagonalReverseStart, temp, 1, diagonalReverseEnd - diagonalReverseStart + 1);\n this.m_reverseHistory.push(temp);\n }\n }\n // If we got here, then we have the full trace in history. We just have to convert it to a change list\n // NOTE: This part is a bit messy\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n /**\n * Shifts the given changes to provide a more intuitive diff.\n * While the first element in a diff matches the first element after the diff,\n * we shift the diff down.\n *\n * @param changes The list of changes to shift\n * @returns The shifted changes\n */\n PrettifyChanges(changes) {\n // Shift all the changes down first\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const originalStop = (i < changes.length - 1) ? changes[i + 1].originalStart : this._originalElementsOrHash.length;\n const modifiedStop = (i < changes.length - 1) ? changes[i + 1].modifiedStart : this._modifiedElementsOrHash.length;\n const checkOriginal = change.originalLength > 0;\n const checkModified = change.modifiedLength > 0;\n while (change.originalStart + change.originalLength < originalStop\n && change.modifiedStart + change.modifiedLength < modifiedStop\n && (!checkOriginal || this.OriginalElementsAreEqual(change.originalStart, change.originalStart + change.originalLength))\n && (!checkModified || this.ModifiedElementsAreEqual(change.modifiedStart, change.modifiedStart + change.modifiedLength))) {\n const startStrictEqual = this.ElementsAreStrictEqual(change.originalStart, change.modifiedStart);\n const endStrictEqual = this.ElementsAreStrictEqual(change.originalStart + change.originalLength, change.modifiedStart + change.modifiedLength);\n if (endStrictEqual && !startStrictEqual) {\n // moving the change down would create an equal change, but the elements are not strict equal\n break;\n }\n change.originalStart++;\n change.modifiedStart++;\n }\n let mergedChangeArr = [null];\n if (i < changes.length - 1 && this.ChangesOverlap(changes[i], changes[i + 1], mergedChangeArr)) {\n changes[i] = mergedChangeArr[0];\n changes.splice(i + 1, 1);\n i--;\n continue;\n }\n }\n // Shift changes back up until we hit empty or whitespace-only lines\n for (let i = changes.length - 1; i >= 0; i--) {\n const change = changes[i];\n let originalStop = 0;\n let modifiedStop = 0;\n if (i > 0) {\n const prevChange = changes[i - 1];\n originalStop = prevChange.originalStart + prevChange.originalLength;\n modifiedStop = prevChange.modifiedStart + prevChange.modifiedLength;\n }\n const checkOriginal = change.originalLength > 0;\n const checkModified = change.modifiedLength > 0;\n let bestDelta = 0;\n let bestScore = this._boundaryScore(change.originalStart, change.originalLength, change.modifiedStart, change.modifiedLength);\n for (let delta = 1;; delta++) {\n const originalStart = change.originalStart - delta;\n const modifiedStart = change.modifiedStart - delta;\n if (originalStart < originalStop || modifiedStart < modifiedStop) {\n break;\n }\n if (checkOriginal && !this.OriginalElementsAreEqual(originalStart, originalStart + change.originalLength)) {\n break;\n }\n if (checkModified && !this.ModifiedElementsAreEqual(modifiedStart, modifiedStart + change.modifiedLength)) {\n break;\n }\n const touchingPreviousChange = (originalStart === originalStop && modifiedStart === modifiedStop);\n const score = ((touchingPreviousChange ? 5 : 0)\n + this._boundaryScore(originalStart, change.originalLength, modifiedStart, change.modifiedLength));\n if (score > bestScore) {\n bestScore = score;\n bestDelta = delta;\n }\n }\n change.originalStart -= bestDelta;\n change.modifiedStart -= bestDelta;\n const mergedChangeArr = [null];\n if (i > 0 && this.ChangesOverlap(changes[i - 1], changes[i], mergedChangeArr)) {\n changes[i - 1] = mergedChangeArr[0];\n changes.splice(i, 1);\n i++;\n continue;\n }\n }\n // There could be multiple longest common substrings.\n // Give preference to the ones containing longer lines\n if (this._hasStrings) {\n for (let i = 1, len = changes.length; i < len; i++) {\n const aChange = changes[i - 1];\n const bChange = changes[i];\n const matchedLength = bChange.originalStart - aChange.originalStart - aChange.originalLength;\n const aOriginalStart = aChange.originalStart;\n const bOriginalEnd = bChange.originalStart + bChange.originalLength;\n const abOriginalLength = bOriginalEnd - aOriginalStart;\n const aModifiedStart = aChange.modifiedStart;\n const bModifiedEnd = bChange.modifiedStart + bChange.modifiedLength;\n const abModifiedLength = bModifiedEnd - aModifiedStart;\n // Avoid wasting a lot of time with these searches\n if (matchedLength < 5 && abOriginalLength < 20 && abModifiedLength < 20) {\n const t = this._findBetterContiguousSequence(aOriginalStart, abOriginalLength, aModifiedStart, abModifiedLength, matchedLength);\n if (t) {\n const [originalMatchStart, modifiedMatchStart] = t;\n if (originalMatchStart !== aChange.originalStart + aChange.originalLength || modifiedMatchStart !== aChange.modifiedStart + aChange.modifiedLength) {\n // switch to another sequence that has a better score\n aChange.originalLength = originalMatchStart - aChange.originalStart;\n aChange.modifiedLength = modifiedMatchStart - aChange.modifiedStart;\n bChange.originalStart = originalMatchStart + matchedLength;\n bChange.modifiedStart = modifiedMatchStart + matchedLength;\n bChange.originalLength = bOriginalEnd - bChange.originalStart;\n bChange.modifiedLength = bModifiedEnd - bChange.modifiedStart;\n }\n }\n }\n }\n }\n return changes;\n }\n _findBetterContiguousSequence(originalStart, originalLength, modifiedStart, modifiedLength, desiredLength) {\n if (originalLength < desiredLength || modifiedLength < desiredLength) {\n return null;\n }\n const originalMax = originalStart + originalLength - desiredLength + 1;\n const modifiedMax = modifiedStart + modifiedLength - desiredLength + 1;\n let bestScore = 0;\n let bestOriginalStart = 0;\n let bestModifiedStart = 0;\n for (let i = originalStart; i < originalMax; i++) {\n for (let j = modifiedStart; j < modifiedMax; j++) {\n const score = this._contiguousSequenceScore(i, j, desiredLength);\n if (score > 0 && score > bestScore) {\n bestScore = score;\n bestOriginalStart = i;\n bestModifiedStart = j;\n }\n }\n }\n if (bestScore > 0) {\n return [bestOriginalStart, bestModifiedStart];\n }\n return null;\n }\n _contiguousSequenceScore(originalStart, modifiedStart, length) {\n let score = 0;\n for (let l = 0; l < length; l++) {\n if (!this.ElementsAreEqual(originalStart + l, modifiedStart + l)) {\n return 0;\n }\n score += this._originalStringElements[originalStart + l].length;\n }\n return score;\n }\n _OriginalIsBoundary(index) {\n if (index <= 0 || index >= this._originalElementsOrHash.length - 1) {\n return true;\n }\n return (this._hasStrings && /^\\s*$/.test(this._originalStringElements[index]));\n }\n _OriginalRegionIsBoundary(originalStart, originalLength) {\n if (this._OriginalIsBoundary(originalStart) || this._OriginalIsBoundary(originalStart - 1)) {\n return true;\n }\n if (originalLength > 0) {\n const originalEnd = originalStart + originalLength;\n if (this._OriginalIsBoundary(originalEnd - 1) || this._OriginalIsBoundary(originalEnd)) {\n return true;\n }\n }\n return false;\n }\n _ModifiedIsBoundary(index) {\n if (index <= 0 || index >= this._modifiedElementsOrHash.length - 1) {\n return true;\n }\n return (this._hasStrings && /^\\s*$/.test(this._modifiedStringElements[index]));\n }\n _ModifiedRegionIsBoundary(modifiedStart, modifiedLength) {\n if (this._ModifiedIsBoundary(modifiedStart) || this._ModifiedIsBoundary(modifiedStart - 1)) {\n return true;\n }\n if (modifiedLength > 0) {\n const modifiedEnd = modifiedStart + modifiedLength;\n if (this._ModifiedIsBoundary(modifiedEnd - 1) || this._ModifiedIsBoundary(modifiedEnd)) {\n return true;\n }\n }\n return false;\n }\n _boundaryScore(originalStart, originalLength, modifiedStart, modifiedLength) {\n const originalScore = (this._OriginalRegionIsBoundary(originalStart, originalLength) ? 1 : 0);\n const modifiedScore = (this._ModifiedRegionIsBoundary(modifiedStart, modifiedLength) ? 1 : 0);\n return (originalScore + modifiedScore);\n }\n /**\n * Concatenates the two input DiffChange lists and returns the resulting\n * list.\n * @param The left changes\n * @param The right changes\n * @returns The concatenated list\n */\n ConcatenateChanges(left, right) {\n let mergedChangeArr = [];\n if (left.length === 0 || right.length === 0) {\n return (right.length > 0) ? right : left;\n }\n else if (this.ChangesOverlap(left[left.length - 1], right[0], mergedChangeArr)) {\n // Since we break the problem down recursively, it is possible that we\n // might recurse in the middle of a change thereby splitting it into\n // two changes. Here in the combining stage, we detect and fuse those\n // changes back together\n const result = new Array(left.length + right.length - 1);\n MyArray.Copy(left, 0, result, 0, left.length - 1);\n result[left.length - 1] = mergedChangeArr[0];\n MyArray.Copy(right, 1, result, left.length, right.length - 1);\n return result;\n }\n else {\n const result = new Array(left.length + right.length);\n MyArray.Copy(left, 0, result, 0, left.length);\n MyArray.Copy(right, 0, result, left.length, right.length);\n return result;\n }\n }\n /**\n * Returns true if the two changes overlap and can be merged into a single\n * change\n * @param left The left change\n * @param right The right change\n * @param mergedChange The merged change if the two overlap, null otherwise\n * @returns True if the two changes overlap\n */\n ChangesOverlap(left, right, mergedChangeArr) {\n Debug.Assert(left.originalStart <= right.originalStart, 'Left change is not less than or equal to right change');\n Debug.Assert(left.modifiedStart <= right.modifiedStart, 'Left change is not less than or equal to right change');\n if (left.originalStart + left.originalLength >= right.originalStart || left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\n const originalStart = left.originalStart;\n let originalLength = left.originalLength;\n const modifiedStart = left.modifiedStart;\n let modifiedLength = left.modifiedLength;\n if (left.originalStart + left.originalLength >= right.originalStart) {\n originalLength = right.originalStart + right.originalLength - left.originalStart;\n }\n if (left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\n modifiedLength = right.modifiedStart + right.modifiedLength - left.modifiedStart;\n }\n mergedChangeArr[0] = new DiffChange(originalStart, originalLength, modifiedStart, modifiedLength);\n return true;\n }\n else {\n mergedChangeArr[0] = null;\n return false;\n }\n }\n /**\n * Helper method used to clip a diagonal index to the range of valid\n * diagonals. This also decides whether or not the diagonal index,\n * if it exceeds the boundary, should be clipped to the boundary or clipped\n * one inside the boundary depending on the Even/Odd status of the boundary\n * and numDifferences.\n * @param diagonal The index of the diagonal to clip.\n * @param numDifferences The current number of differences being iterated upon.\n * @param diagonalBaseIndex The base reference diagonal.\n * @param numDiagonals The total number of diagonals.\n * @returns The clipped diagonal index.\n */\n ClipDiagonalBound(diagonal, numDifferences, diagonalBaseIndex, numDiagonals) {\n if (diagonal >= 0 && diagonal < numDiagonals) {\n // Nothing to clip, its in range\n return diagonal;\n }\n // diagonalsBelow: The number of diagonals below the reference diagonal\n // diagonalsAbove: The number of diagonals above the reference diagonal\n const diagonalsBelow = diagonalBaseIndex;\n const diagonalsAbove = numDiagonals - diagonalBaseIndex - 1;\n const diffEven = (numDifferences % 2 === 0);\n if (diagonal < 0) {\n const lowerBoundEven = (diagonalsBelow % 2 === 0);\n return (diffEven === lowerBoundEven) ? 0 : 1;\n }\n else {\n const upperBoundEven = (diagonalsAbove % 2 === 0);\n return (diffEven === upperBoundEven) ? numDiagonals - 1 : numDiagonals - 2;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { LcsDiff } from '../../../base/common/diff/diff.js';\nimport * as strings from '../../../base/common/strings.js';\nconst MINIMUM_MATCHING_CHARACTER_LENGTH = 3;\nfunction computeDiff(originalSequence, modifiedSequence, continueProcessingPredicate, pretty) {\n const diffAlgo = new LcsDiff(originalSequence, modifiedSequence, continueProcessingPredicate);\n return diffAlgo.ComputeDiff(pretty);\n}\nclass LineSequence {\n constructor(lines) {\n const startColumns = [];\n const endColumns = [];\n for (let i = 0, length = lines.length; i < length; i++) {\n startColumns[i] = getFirstNonBlankColumn(lines[i], 1);\n endColumns[i] = getLastNonBlankColumn(lines[i], 1);\n }\n this.lines = lines;\n this._startColumns = startColumns;\n this._endColumns = endColumns;\n }\n getElements() {\n const elements = [];\n for (let i = 0, len = this.lines.length; i < len; i++) {\n elements[i] = this.lines[i].substring(this._startColumns[i] - 1, this._endColumns[i] - 1);\n }\n return elements;\n }\n getStrictElement(index) {\n return this.lines[index];\n }\n getStartLineNumber(i) {\n return i + 1;\n }\n getEndLineNumber(i) {\n return i + 1;\n }\n createCharSequence(shouldIgnoreTrimWhitespace, startIndex, endIndex) {\n const charCodes = [];\n const lineNumbers = [];\n const columns = [];\n let len = 0;\n for (let index = startIndex; index <= endIndex; index++) {\n const lineContent = this.lines[index];\n const startColumn = (shouldIgnoreTrimWhitespace ? this._startColumns[index] : 1);\n const endColumn = (shouldIgnoreTrimWhitespace ? this._endColumns[index] : lineContent.length + 1);\n for (let col = startColumn; col < endColumn; col++) {\n charCodes[len] = lineContent.charCodeAt(col - 1);\n lineNumbers[len] = index + 1;\n columns[len] = col;\n len++;\n }\n }\n return new CharSequence(charCodes, lineNumbers, columns);\n }\n}\nclass CharSequence {\n constructor(charCodes, lineNumbers, columns) {\n this._charCodes = charCodes;\n this._lineNumbers = lineNumbers;\n this._columns = columns;\n }\n getElements() {\n return this._charCodes;\n }\n getStartLineNumber(i) {\n return this._lineNumbers[i];\n }\n getStartColumn(i) {\n return this._columns[i];\n }\n getEndLineNumber(i) {\n return this._lineNumbers[i];\n }\n getEndColumn(i) {\n return this._columns[i] + 1;\n }\n}\nclass CharChange {\n constructor(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn) {\n this.originalStartLineNumber = originalStartLineNumber;\n this.originalStartColumn = originalStartColumn;\n this.originalEndLineNumber = originalEndLineNumber;\n this.originalEndColumn = originalEndColumn;\n this.modifiedStartLineNumber = modifiedStartLineNumber;\n this.modifiedStartColumn = modifiedStartColumn;\n this.modifiedEndLineNumber = modifiedEndLineNumber;\n this.modifiedEndColumn = modifiedEndColumn;\n }\n static createFromDiffChange(diffChange, originalCharSequence, modifiedCharSequence) {\n let originalStartLineNumber;\n let originalStartColumn;\n let originalEndLineNumber;\n let originalEndColumn;\n let modifiedStartLineNumber;\n let modifiedStartColumn;\n let modifiedEndLineNumber;\n let modifiedEndColumn;\n if (diffChange.originalLength === 0) {\n originalStartLineNumber = 0;\n originalStartColumn = 0;\n originalEndLineNumber = 0;\n originalEndColumn = 0;\n }\n else {\n originalStartLineNumber = originalCharSequence.getStartLineNumber(diffChange.originalStart);\n originalStartColumn = originalCharSequence.getStartColumn(diffChange.originalStart);\n originalEndLineNumber = originalCharSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n originalEndColumn = originalCharSequence.getEndColumn(diffChange.originalStart + diffChange.originalLength - 1);\n }\n if (diffChange.modifiedLength === 0) {\n modifiedStartLineNumber = 0;\n modifiedStartColumn = 0;\n modifiedEndLineNumber = 0;\n modifiedEndColumn = 0;\n }\n else {\n modifiedStartLineNumber = modifiedCharSequence.getStartLineNumber(diffChange.modifiedStart);\n modifiedStartColumn = modifiedCharSequence.getStartColumn(diffChange.modifiedStart);\n modifiedEndLineNumber = modifiedCharSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n modifiedEndColumn = modifiedCharSequence.getEndColumn(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n }\n return new CharChange(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn);\n }\n}\nfunction postProcessCharChanges(rawChanges) {\n if (rawChanges.length <= 1) {\n return rawChanges;\n }\n const result = [rawChanges[0]];\n let prevChange = result[0];\n for (let i = 1, len = rawChanges.length; i < len; i++) {\n const currChange = rawChanges[i];\n const originalMatchingLength = currChange.originalStart - (prevChange.originalStart + prevChange.originalLength);\n const modifiedMatchingLength = currChange.modifiedStart - (prevChange.modifiedStart + prevChange.modifiedLength);\n // Both of the above should be equal, but the continueProcessingPredicate may prevent this from being true\n const matchingLength = Math.min(originalMatchingLength, modifiedMatchingLength);\n if (matchingLength < MINIMUM_MATCHING_CHARACTER_LENGTH) {\n // Merge the current change into the previous one\n prevChange.originalLength = (currChange.originalStart + currChange.originalLength) - prevChange.originalStart;\n prevChange.modifiedLength = (currChange.modifiedStart + currChange.modifiedLength) - prevChange.modifiedStart;\n }\n else {\n // Add the current change\n result.push(currChange);\n prevChange = currChange;\n }\n }\n return result;\n}\nclass LineChange {\n constructor(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges) {\n this.originalStartLineNumber = originalStartLineNumber;\n this.originalEndLineNumber = originalEndLineNumber;\n this.modifiedStartLineNumber = modifiedStartLineNumber;\n this.modifiedEndLineNumber = modifiedEndLineNumber;\n this.charChanges = charChanges;\n }\n static createFromDiffResult(shouldIgnoreTrimWhitespace, diffChange, originalLineSequence, modifiedLineSequence, continueCharDiff, shouldComputeCharChanges, shouldPostProcessCharChanges) {\n let originalStartLineNumber;\n let originalEndLineNumber;\n let modifiedStartLineNumber;\n let modifiedEndLineNumber;\n let charChanges = undefined;\n if (diffChange.originalLength === 0) {\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart) - 1;\n originalEndLineNumber = 0;\n }\n else {\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart);\n originalEndLineNumber = originalLineSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n }\n if (diffChange.modifiedLength === 0) {\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart) - 1;\n modifiedEndLineNumber = 0;\n }\n else {\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart);\n modifiedEndLineNumber = modifiedLineSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n }\n if (shouldComputeCharChanges && diffChange.originalLength > 0 && diffChange.originalLength < 20 && diffChange.modifiedLength > 0 && diffChange.modifiedLength < 20 && continueCharDiff()) {\n // Compute character changes for diff chunks of at most 20 lines...\n const originalCharSequence = originalLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.originalStart, diffChange.originalStart + diffChange.originalLength - 1);\n const modifiedCharSequence = modifiedLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.modifiedStart, diffChange.modifiedStart + diffChange.modifiedLength - 1);\n let rawChanges = computeDiff(originalCharSequence, modifiedCharSequence, continueCharDiff, true).changes;\n if (shouldPostProcessCharChanges) {\n rawChanges = postProcessCharChanges(rawChanges);\n }\n charChanges = [];\n for (let i = 0, length = rawChanges.length; i < length; i++) {\n charChanges.push(CharChange.createFromDiffChange(rawChanges[i], originalCharSequence, modifiedCharSequence));\n }\n }\n return new LineChange(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges);\n }\n}\nexport class DiffComputer {\n constructor(originalLines, modifiedLines, opts) {\n this.shouldComputeCharChanges = opts.shouldComputeCharChanges;\n this.shouldPostProcessCharChanges = opts.shouldPostProcessCharChanges;\n this.shouldIgnoreTrimWhitespace = opts.shouldIgnoreTrimWhitespace;\n this.shouldMakePrettyDiff = opts.shouldMakePrettyDiff;\n this.originalLines = originalLines;\n this.modifiedLines = modifiedLines;\n this.original = new LineSequence(originalLines);\n this.modified = new LineSequence(modifiedLines);\n this.continueLineDiff = createContinueProcessingPredicate(opts.maxComputationTime);\n this.continueCharDiff = createContinueProcessingPredicate(opts.maxComputationTime === 0 ? 0 : Math.min(opts.maxComputationTime, 5000)); // never run after 5s for character changes...\n }\n computeDiff() {\n if (this.original.lines.length === 1 && this.original.lines[0].length === 0) {\n // empty original => fast path\n if (this.modified.lines.length === 1 && this.modified.lines[0].length === 0) {\n return {\n quitEarly: false,\n changes: []\n };\n }\n return {\n quitEarly: false,\n changes: [{\n originalStartLineNumber: 1,\n originalEndLineNumber: 1,\n modifiedStartLineNumber: 1,\n modifiedEndLineNumber: this.modified.lines.length,\n charChanges: [{\n modifiedEndColumn: 0,\n modifiedEndLineNumber: 0,\n modifiedStartColumn: 0,\n modifiedStartLineNumber: 0,\n originalEndColumn: 0,\n originalEndLineNumber: 0,\n originalStartColumn: 0,\n originalStartLineNumber: 0\n }]\n }]\n };\n }\n if (this.modified.lines.length === 1 && this.modified.lines[0].length === 0) {\n // empty modified => fast path\n return {\n quitEarly: false,\n changes: [{\n originalStartLineNumber: 1,\n originalEndLineNumber: this.original.lines.length,\n modifiedStartLineNumber: 1,\n modifiedEndLineNumber: 1,\n charChanges: [{\n modifiedEndColumn: 0,\n modifiedEndLineNumber: 0,\n modifiedStartColumn: 0,\n modifiedStartLineNumber: 0,\n originalEndColumn: 0,\n originalEndLineNumber: 0,\n originalStartColumn: 0,\n originalStartLineNumber: 0\n }]\n }]\n };\n }\n const diffResult = computeDiff(this.original, this.modified, this.continueLineDiff, this.shouldMakePrettyDiff);\n const rawChanges = diffResult.changes;\n const quitEarly = diffResult.quitEarly;\n // The diff is always computed with ignoring trim whitespace\n // This ensures we get the prettiest diff\n if (this.shouldIgnoreTrimWhitespace) {\n const lineChanges = [];\n for (let i = 0, length = rawChanges.length; i < length; i++) {\n lineChanges.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, rawChanges[i], this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\n }\n return {\n quitEarly: quitEarly,\n changes: lineChanges\n };\n }\n // Need to post-process and introduce changes where the trim whitespace is different\n // Note that we are looping starting at -1 to also cover the lines before the first change\n const result = [];\n let originalLineIndex = 0;\n let modifiedLineIndex = 0;\n for (let i = -1 /* !!!! */, len = rawChanges.length; i < len; i++) {\n const nextChange = (i + 1 < len ? rawChanges[i + 1] : null);\n const originalStop = (nextChange ? nextChange.originalStart : this.originalLines.length);\n const modifiedStop = (nextChange ? nextChange.modifiedStart : this.modifiedLines.length);\n while (originalLineIndex < originalStop && modifiedLineIndex < modifiedStop) {\n const originalLine = this.originalLines[originalLineIndex];\n const modifiedLine = this.modifiedLines[modifiedLineIndex];\n if (originalLine !== modifiedLine) {\n // These lines differ only in trim whitespace\n // Check the leading whitespace\n {\n let originalStartColumn = getFirstNonBlankColumn(originalLine, 1);\n let modifiedStartColumn = getFirstNonBlankColumn(modifiedLine, 1);\n while (originalStartColumn > 1 && modifiedStartColumn > 1) {\n const originalChar = originalLine.charCodeAt(originalStartColumn - 2);\n const modifiedChar = modifiedLine.charCodeAt(modifiedStartColumn - 2);\n if (originalChar !== modifiedChar) {\n break;\n }\n originalStartColumn--;\n modifiedStartColumn--;\n }\n if (originalStartColumn > 1 || modifiedStartColumn > 1) {\n this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, 1, originalStartColumn, modifiedLineIndex + 1, 1, modifiedStartColumn);\n }\n }\n // Check the trailing whitespace\n {\n let originalEndColumn = getLastNonBlankColumn(originalLine, 1);\n let modifiedEndColumn = getLastNonBlankColumn(modifiedLine, 1);\n const originalMaxColumn = originalLine.length + 1;\n const modifiedMaxColumn = modifiedLine.length + 1;\n while (originalEndColumn < originalMaxColumn && modifiedEndColumn < modifiedMaxColumn) {\n const originalChar = originalLine.charCodeAt(originalEndColumn - 1);\n const modifiedChar = originalLine.charCodeAt(modifiedEndColumn - 1);\n if (originalChar !== modifiedChar) {\n break;\n }\n originalEndColumn++;\n modifiedEndColumn++;\n }\n if (originalEndColumn < originalMaxColumn || modifiedEndColumn < modifiedMaxColumn) {\n this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, originalEndColumn, originalMaxColumn, modifiedLineIndex + 1, modifiedEndColumn, modifiedMaxColumn);\n }\n }\n }\n originalLineIndex++;\n modifiedLineIndex++;\n }\n if (nextChange) {\n // Emit the actual change\n result.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, nextChange, this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\n originalLineIndex += nextChange.originalLength;\n modifiedLineIndex += nextChange.modifiedLength;\n }\n }\n return {\n quitEarly: quitEarly,\n changes: result\n };\n }\n _pushTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\n if (this._mergeTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn)) {\n // Merged into previous\n return;\n }\n let charChanges = undefined;\n if (this.shouldComputeCharChanges) {\n charChanges = [new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn)];\n }\n result.push(new LineChange(originalLineNumber, originalLineNumber, modifiedLineNumber, modifiedLineNumber, charChanges));\n }\n _mergeTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\n const len = result.length;\n if (len === 0) {\n return false;\n }\n const prevChange = result[len - 1];\n if (prevChange.originalEndLineNumber === 0 || prevChange.modifiedEndLineNumber === 0) {\n // Don't merge with inserts/deletes\n return false;\n }\n if (prevChange.originalEndLineNumber + 1 === originalLineNumber && prevChange.modifiedEndLineNumber + 1 === modifiedLineNumber) {\n prevChange.originalEndLineNumber = originalLineNumber;\n prevChange.modifiedEndLineNumber = modifiedLineNumber;\n if (this.shouldComputeCharChanges && prevChange.charChanges) {\n prevChange.charChanges.push(new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn));\n }\n return true;\n }\n return false;\n }\n}\nfunction getFirstNonBlankColumn(txt, defaultValue) {\n const r = strings.firstNonWhitespaceIndex(txt);\n if (r === -1) {\n return defaultValue;\n }\n return r + 1;\n}\nfunction getLastNonBlankColumn(txt, defaultValue) {\n const r = strings.lastNonWhitespaceIndex(txt);\n if (r === -1) {\n return defaultValue;\n }\n return r + 2;\n}\nfunction createContinueProcessingPredicate(maximumRuntime) {\n if (maximumRuntime === 0) {\n return () => true;\n }\n const startTime = Date.now();\n return () => {\n return Date.now() - startTime < maximumRuntime;\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { toUint32 } from '../../../base/common/uint.js';\nexport class PrefixSumIndexOfResult {\n constructor(index, remainder) {\n this._prefixSumIndexOfResultBrand = undefined;\n this.index = index;\n this.remainder = remainder;\n }\n}\nexport class PrefixSumComputer {\n constructor(values) {\n this.values = values;\n this.prefixSum = new Uint32Array(values.length);\n this.prefixSumValidIndex = new Int32Array(1);\n this.prefixSumValidIndex[0] = -1;\n }\n insertValues(insertIndex, insertValues) {\n insertIndex = toUint32(insertIndex);\n const oldValues = this.values;\n const oldPrefixSum = this.prefixSum;\n const insertValuesLen = insertValues.length;\n if (insertValuesLen === 0) {\n return false;\n }\n this.values = new Uint32Array(oldValues.length + insertValuesLen);\n this.values.set(oldValues.subarray(0, insertIndex), 0);\n this.values.set(oldValues.subarray(insertIndex), insertIndex + insertValuesLen);\n this.values.set(insertValues, insertIndex);\n if (insertIndex - 1 < this.prefixSumValidIndex[0]) {\n this.prefixSumValidIndex[0] = insertIndex - 1;\n }\n this.prefixSum = new Uint32Array(this.values.length);\n if (this.prefixSumValidIndex[0] >= 0) {\n this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n }\n return true;\n }\n changeValue(index, value) {\n index = toUint32(index);\n value = toUint32(value);\n if (this.values[index] === value) {\n return false;\n }\n this.values[index] = value;\n if (index - 1 < this.prefixSumValidIndex[0]) {\n this.prefixSumValidIndex[0] = index - 1;\n }\n return true;\n }\n removeValues(startIndex, count) {\n startIndex = toUint32(startIndex);\n count = toUint32(count);\n const oldValues = this.values;\n const oldPrefixSum = this.prefixSum;\n if (startIndex >= oldValues.length) {\n return false;\n }\n let maxCount = oldValues.length - startIndex;\n if (count >= maxCount) {\n count = maxCount;\n }\n if (count === 0) {\n return false;\n }\n this.values = new Uint32Array(oldValues.length - count);\n this.values.set(oldValues.subarray(0, startIndex), 0);\n this.values.set(oldValues.subarray(startIndex + count), startIndex);\n this.prefixSum = new Uint32Array(this.values.length);\n if (startIndex - 1 < this.prefixSumValidIndex[0]) {\n this.prefixSumValidIndex[0] = startIndex - 1;\n }\n if (this.prefixSumValidIndex[0] >= 0) {\n this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n }\n return true;\n }\n getTotalSum() {\n if (this.values.length === 0) {\n return 0;\n }\n return this._getPrefixSum(this.values.length - 1);\n }\n getPrefixSum(index) {\n if (index < 0) {\n return 0;\n }\n index = toUint32(index);\n return this._getPrefixSum(index);\n }\n _getPrefixSum(index) {\n if (index <= this.prefixSumValidIndex[0]) {\n return this.prefixSum[index];\n }\n let startIndex = this.prefixSumValidIndex[0] + 1;\n if (startIndex === 0) {\n this.prefixSum[0] = this.values[0];\n startIndex++;\n }\n if (index >= this.values.length) {\n index = this.values.length - 1;\n }\n for (let i = startIndex; i <= index; i++) {\n this.prefixSum[i] = this.prefixSum[i - 1] + this.values[i];\n }\n this.prefixSumValidIndex[0] = Math.max(this.prefixSumValidIndex[0], index);\n return this.prefixSum[index];\n }\n getIndexOf(sum) {\n sum = Math.floor(sum); //@perf\n // Compute all sums (to get a fully valid prefixSum)\n this.getTotalSum();\n let low = 0;\n let high = this.values.length - 1;\n let mid = 0;\n let midStop = 0;\n let midStart = 0;\n while (low <= high) {\n mid = low + ((high - low) / 2) | 0;\n midStop = this.prefixSum[mid];\n midStart = midStop - this.values[mid];\n if (sum < midStart) {\n high = mid - 1;\n }\n else if (sum >= midStop) {\n low = mid + 1;\n }\n else {\n break;\n }\n }\n return new PrefixSumIndexOfResult(mid, sum - midStart);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { splitLines } from '../../../base/common/strings.js';\nimport { Position } from '../core/position.js';\nimport { PrefixSumComputer } from '../viewModel/prefixSumComputer.js';\nexport class MirrorTextModel {\n constructor(uri, lines, eol, versionId) {\n this._uri = uri;\n this._lines = lines;\n this._eol = eol;\n this._versionId = versionId;\n this._lineStarts = null;\n this._cachedTextValue = null;\n }\n dispose() {\n this._lines.length = 0;\n }\n get version() {\n return this._versionId;\n }\n getText() {\n if (this._cachedTextValue === null) {\n this._cachedTextValue = this._lines.join(this._eol);\n }\n return this._cachedTextValue;\n }\n onEvents(e) {\n if (e.eol && e.eol !== this._eol) {\n this._eol = e.eol;\n this._lineStarts = null;\n }\n // Update my lines\n const changes = e.changes;\n for (const change of changes) {\n this._acceptDeleteRange(change.range);\n this._acceptInsertText(new Position(change.range.startLineNumber, change.range.startColumn), change.text);\n }\n this._versionId = e.versionId;\n this._cachedTextValue = null;\n }\n _ensureLineStarts() {\n if (!this._lineStarts) {\n const eolLength = this._eol.length;\n const linesLength = this._lines.length;\n const lineStartValues = new Uint32Array(linesLength);\n for (let i = 0; i < linesLength; i++) {\n lineStartValues[i] = this._lines[i].length + eolLength;\n }\n this._lineStarts = new PrefixSumComputer(lineStartValues);\n }\n }\n /**\n * All changes to a line's text go through this method\n */\n _setLineText(lineIndex, newValue) {\n this._lines[lineIndex] = newValue;\n if (this._lineStarts) {\n // update prefix sum\n this._lineStarts.changeValue(lineIndex, this._lines[lineIndex].length + this._eol.length);\n }\n }\n _acceptDeleteRange(range) {\n if (range.startLineNumber === range.endLineNumber) {\n if (range.startColumn === range.endColumn) {\n // Nothing to delete\n return;\n }\n // Delete text on the affected line\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\n + this._lines[range.startLineNumber - 1].substring(range.endColumn - 1));\n return;\n }\n // Take remaining text on last line and append it to remaining text on first line\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\n + this._lines[range.endLineNumber - 1].substring(range.endColumn - 1));\n // Delete middle lines\n this._lines.splice(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n if (this._lineStarts) {\n // update prefix sum\n this._lineStarts.removeValues(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n }\n }\n _acceptInsertText(position, insertText) {\n if (insertText.length === 0) {\n // Nothing to insert\n return;\n }\n let insertLines = splitLines(insertText);\n if (insertLines.length === 1) {\n // Inserting text on one line\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1)\n + insertLines[0]\n + this._lines[position.lineNumber - 1].substring(position.column - 1));\n return;\n }\n // Append overflowing text from first line to the end of text to insert\n insertLines[insertLines.length - 1] += this._lines[position.lineNumber - 1].substring(position.column - 1);\n // Delete overflowing text from first line and insert text on first line\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1)\n + insertLines[0]);\n // Insert new lines & store lengths\n let newLengths = new Uint32Array(insertLines.length - 1);\n for (let i = 1; i < insertLines.length; i++) {\n this._lines.splice(position.lineNumber + i - 1, 0, insertLines[i]);\n newLengths[i - 1] = insertLines[i].length + this._eol.length;\n }\n if (this._lineStarts) {\n // update prefix sum\n this._lineStarts.insertValues(position.lineNumber, newLengths);\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { CharacterClassifier } from '../core/characterClassifier.js';\nexport class Uint8Matrix {\n constructor(rows, cols, defaultValue) {\n const data = new Uint8Array(rows * cols);\n for (let i = 0, len = rows * cols; i < len; i++) {\n data[i] = defaultValue;\n }\n this._data = data;\n this.rows = rows;\n this.cols = cols;\n }\n get(row, col) {\n return this._data[row * this.cols + col];\n }\n set(row, col, value) {\n this._data[row * this.cols + col] = value;\n }\n}\nexport class StateMachine {\n constructor(edges) {\n let maxCharCode = 0;\n let maxState = 0 /* Invalid */;\n for (let i = 0, len = edges.length; i < len; i++) {\n let [from, chCode, to] = edges[i];\n if (chCode > maxCharCode) {\n maxCharCode = chCode;\n }\n if (from > maxState) {\n maxState = from;\n }\n if (to > maxState) {\n maxState = to;\n }\n }\n maxCharCode++;\n maxState++;\n let states = new Uint8Matrix(maxState, maxCharCode, 0 /* Invalid */);\n for (let i = 0, len = edges.length; i < len; i++) {\n let [from, chCode, to] = edges[i];\n states.set(from, chCode, to);\n }\n this._states = states;\n this._maxCharCode = maxCharCode;\n }\n nextState(currentState, chCode) {\n if (chCode < 0 || chCode >= this._maxCharCode) {\n return 0 /* Invalid */;\n }\n return this._states.get(currentState, chCode);\n }\n}\n// State machine for http:// or https:// or file://\nlet _stateMachine = null;\nfunction getStateMachine() {\n if (_stateMachine === null) {\n _stateMachine = new StateMachine([\n [1 /* Start */, 104 /* h */, 2 /* H */],\n [1 /* Start */, 72 /* H */, 2 /* H */],\n [1 /* Start */, 102 /* f */, 6 /* F */],\n [1 /* Start */, 70 /* F */, 6 /* F */],\n [2 /* H */, 116 /* t */, 3 /* HT */],\n [2 /* H */, 84 /* T */, 3 /* HT */],\n [3 /* HT */, 116 /* t */, 4 /* HTT */],\n [3 /* HT */, 84 /* T */, 4 /* HTT */],\n [4 /* HTT */, 112 /* p */, 5 /* HTTP */],\n [4 /* HTT */, 80 /* P */, 5 /* HTTP */],\n [5 /* HTTP */, 115 /* s */, 9 /* BeforeColon */],\n [5 /* HTTP */, 83 /* S */, 9 /* BeforeColon */],\n [5 /* HTTP */, 58 /* Colon */, 10 /* AfterColon */],\n [6 /* F */, 105 /* i */, 7 /* FI */],\n [6 /* F */, 73 /* I */, 7 /* FI */],\n [7 /* FI */, 108 /* l */, 8 /* FIL */],\n [7 /* FI */, 76 /* L */, 8 /* FIL */],\n [8 /* FIL */, 101 /* e */, 9 /* BeforeColon */],\n [8 /* FIL */, 69 /* E */, 9 /* BeforeColon */],\n [9 /* BeforeColon */, 58 /* Colon */, 10 /* AfterColon */],\n [10 /* AfterColon */, 47 /* Slash */, 11 /* AlmostThere */],\n [11 /* AlmostThere */, 47 /* Slash */, 12 /* End */],\n ]);\n }\n return _stateMachine;\n}\nlet _classifier = null;\nfunction getClassifier() {\n if (_classifier === null) {\n _classifier = new CharacterClassifier(0 /* None */);\n const FORCE_TERMINATION_CHARACTERS = ' \\t<>\\'\\\"、。。、,.:;‘〈「『〔([{「」}])〕』」〉’`~…';\n for (let i = 0; i < FORCE_TERMINATION_CHARACTERS.length; i++) {\n _classifier.set(FORCE_TERMINATION_CHARACTERS.charCodeAt(i), 1 /* ForceTermination */);\n }\n const CANNOT_END_WITH_CHARACTERS = '.,;';\n for (let i = 0; i < CANNOT_END_WITH_CHARACTERS.length; i++) {\n _classifier.set(CANNOT_END_WITH_CHARACTERS.charCodeAt(i), 2 /* CannotEndIn */);\n }\n }\n return _classifier;\n}\nexport class LinkComputer {\n static _createLink(classifier, line, lineNumber, linkBeginIndex, linkEndIndex) {\n // Do not allow to end link in certain characters...\n let lastIncludedCharIndex = linkEndIndex - 1;\n do {\n const chCode = line.charCodeAt(lastIncludedCharIndex);\n const chClass = classifier.get(chCode);\n if (chClass !== 2 /* CannotEndIn */) {\n break;\n }\n lastIncludedCharIndex--;\n } while (lastIncludedCharIndex > linkBeginIndex);\n // Handle links enclosed in parens, square brackets and curlys.\n if (linkBeginIndex > 0) {\n const charCodeBeforeLink = line.charCodeAt(linkBeginIndex - 1);\n const lastCharCodeInLink = line.charCodeAt(lastIncludedCharIndex);\n if ((charCodeBeforeLink === 40 /* OpenParen */ && lastCharCodeInLink === 41 /* CloseParen */)\n || (charCodeBeforeLink === 91 /* OpenSquareBracket */ && lastCharCodeInLink === 93 /* CloseSquareBracket */)\n || (charCodeBeforeLink === 123 /* OpenCurlyBrace */ && lastCharCodeInLink === 125 /* CloseCurlyBrace */)) {\n // Do not end in ) if ( is before the link start\n // Do not end in ] if [ is before the link start\n // Do not end in } if { is before the link start\n lastIncludedCharIndex--;\n }\n }\n return {\n range: {\n startLineNumber: lineNumber,\n startColumn: linkBeginIndex + 1,\n endLineNumber: lineNumber,\n endColumn: lastIncludedCharIndex + 2\n },\n url: line.substring(linkBeginIndex, lastIncludedCharIndex + 1)\n };\n }\n static computeLinks(model, stateMachine = getStateMachine()) {\n const classifier = getClassifier();\n let result = [];\n for (let i = 1, lineCount = model.getLineCount(); i <= lineCount; i++) {\n const line = model.getLineContent(i);\n const len = line.length;\n let j = 0;\n let linkBeginIndex = 0;\n let linkBeginChCode = 0;\n let state = 1 /* Start */;\n let hasOpenParens = false;\n let hasOpenSquareBracket = false;\n let inSquareBrackets = false;\n let hasOpenCurlyBracket = false;\n while (j < len) {\n let resetStateMachine = false;\n const chCode = line.charCodeAt(j);\n if (state === 13 /* Accept */) {\n let chClass;\n switch (chCode) {\n case 40 /* OpenParen */:\n hasOpenParens = true;\n chClass = 0 /* None */;\n break;\n case 41 /* CloseParen */:\n chClass = (hasOpenParens ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n case 91 /* OpenSquareBracket */:\n inSquareBrackets = true;\n hasOpenSquareBracket = true;\n chClass = 0 /* None */;\n break;\n case 93 /* CloseSquareBracket */:\n inSquareBrackets = false;\n chClass = (hasOpenSquareBracket ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n case 123 /* OpenCurlyBrace */:\n hasOpenCurlyBracket = true;\n chClass = 0 /* None */;\n break;\n case 125 /* CloseCurlyBrace */:\n chClass = (hasOpenCurlyBracket ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n /* The following three rules make it that ' or \" or ` are allowed inside links if the link began with a different one */\n case 39 /* SingleQuote */:\n chClass = (linkBeginChCode === 34 /* DoubleQuote */ || linkBeginChCode === 96 /* BackTick */) ? 0 /* None */ : 1 /* ForceTermination */;\n break;\n case 34 /* DoubleQuote */:\n chClass = (linkBeginChCode === 39 /* SingleQuote */ || linkBeginChCode === 96 /* BackTick */) ? 0 /* None */ : 1 /* ForceTermination */;\n break;\n case 96 /* BackTick */:\n chClass = (linkBeginChCode === 39 /* SingleQuote */ || linkBeginChCode === 34 /* DoubleQuote */) ? 0 /* None */ : 1 /* ForceTermination */;\n break;\n case 42 /* Asterisk */:\n // `*` terminates a link if the link began with `*`\n chClass = (linkBeginChCode === 42 /* Asterisk */) ? 1 /* ForceTermination */ : 0 /* None */;\n break;\n case 124 /* Pipe */:\n // `|` terminates a link if the link began with `|`\n chClass = (linkBeginChCode === 124 /* Pipe */) ? 1 /* ForceTermination */ : 0 /* None */;\n break;\n case 32 /* Space */:\n // ` ` allow space in between [ and ]\n chClass = (inSquareBrackets ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n default:\n chClass = classifier.get(chCode);\n }\n // Check if character terminates link\n if (chClass === 1 /* ForceTermination */) {\n result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, j));\n resetStateMachine = true;\n }\n }\n else if (state === 12 /* End */) {\n let chClass;\n if (chCode === 91 /* OpenSquareBracket */) {\n // Allow for the authority part to contain ipv6 addresses which contain [ and ]\n hasOpenSquareBracket = true;\n chClass = 0 /* None */;\n }\n else {\n chClass = classifier.get(chCode);\n }\n // Check if character terminates link\n if (chClass === 1 /* ForceTermination */) {\n resetStateMachine = true;\n }\n else {\n state = 13 /* Accept */;\n }\n }\n else {\n state = stateMachine.nextState(state, chCode);\n if (state === 0 /* Invalid */) {\n resetStateMachine = true;\n }\n }\n if (resetStateMachine) {\n state = 1 /* Start */;\n hasOpenParens = false;\n hasOpenSquareBracket = false;\n hasOpenCurlyBracket = false;\n // Record where the link started\n linkBeginIndex = j + 1;\n linkBeginChCode = chCode;\n }\n j++;\n }\n if (state === 13 /* Accept */) {\n result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, len));\n }\n }\n return result;\n }\n}\n/**\n * Returns an array of all links contains in the provided\n * document. *Note* that this operation is computational\n * expensive and should not run in the UI thread.\n */\nexport function computeLinks(model) {\n if (!model || typeof model.getLineCount !== 'function' || typeof model.getLineContent !== 'function') {\n // Unknown caller!\n return [];\n }\n return LinkComputer.computeLinks(model);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class BasicInplaceReplace {\n constructor() {\n this._defaultValueSet = [\n ['true', 'false'],\n ['True', 'False'],\n ['Private', 'Public', 'Friend', 'ReadOnly', 'Partial', 'Protected', 'WriteOnly'],\n ['public', 'protected', 'private'],\n ];\n }\n navigateValueSet(range1, text1, range2, text2, up) {\n if (range1 && text1) {\n let result = this.doNavigateValueSet(text1, up);\n if (result) {\n return {\n range: range1,\n value: result\n };\n }\n }\n if (range2 && text2) {\n let result = this.doNavigateValueSet(text2, up);\n if (result) {\n return {\n range: range2,\n value: result\n };\n }\n }\n return null;\n }\n doNavigateValueSet(text, up) {\n let numberResult = this.numberReplace(text, up);\n if (numberResult !== null) {\n return numberResult;\n }\n return this.textReplace(text, up);\n }\n numberReplace(value, up) {\n let precision = Math.pow(10, value.length - (value.lastIndexOf('.') + 1));\n let n1 = Number(value);\n let n2 = parseFloat(value);\n if (!isNaN(n1) && !isNaN(n2) && n1 === n2) {\n if (n1 === 0 && !up) {\n return null; // don't do negative\n //\t\t\t} else if(n1 === 9 && up) {\n //\t\t\t\treturn null; // don't insert 10 into a number\n }\n else {\n n1 = Math.floor(n1 * precision);\n n1 += up ? precision : -precision;\n return String(n1 / precision);\n }\n }\n return null;\n }\n textReplace(value, up) {\n return this.valueSetsReplace(this._defaultValueSet, value, up);\n }\n valueSetsReplace(valueSets, value, up) {\n let result = null;\n for (let i = 0, len = valueSets.length; result === null && i < len; i++) {\n result = this.valueSetReplace(valueSets[i], value, up);\n }\n return result;\n }\n valueSetReplace(valueSet, value, up) {\n let idx = valueSet.indexOf(value);\n if (idx >= 0) {\n idx += up ? +1 : -1;\n if (idx < 0) {\n idx = valueSet.length - 1;\n }\n else {\n idx %= valueSet.length;\n }\n return valueSet[idx];\n }\n return null;\n }\n}\nBasicInplaceReplace.INSTANCE = new BasicInplaceReplace();\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { stringDiff } from '../../../base/common/diff/diff.js';\nimport { globals } from '../../../base/common/platform.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { DiffComputer } from '../diff/diffComputer.js';\nimport { MirrorTextModel as BaseMirrorModel } from '../model/mirrorTextModel.js';\nimport { ensureValidWordDefinition, getWordAtText } from '../model/wordHelper.js';\nimport { computeLinks } from '../modes/linkComputer.js';\nimport { BasicInplaceReplace } from '../modes/supports/inplaceReplaceSupport.js';\nimport { createMonacoBaseAPI } from '../standalone/standaloneBase.js';\nimport * as types from '../../../base/common/types.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\n/**\n * @internal\n */\nexport class MirrorModel extends BaseMirrorModel {\n get uri() {\n return this._uri;\n }\n get eol() {\n return this._eol;\n }\n getValue() {\n return this.getText();\n }\n getLinesContent() {\n return this._lines.slice(0);\n }\n getLineCount() {\n return this._lines.length;\n }\n getLineContent(lineNumber) {\n return this._lines[lineNumber - 1];\n }\n getWordAtPosition(position, wordDefinition) {\n let wordAtText = getWordAtText(position.column, ensureValidWordDefinition(wordDefinition), this._lines[position.lineNumber - 1], 0);\n if (wordAtText) {\n return new Range(position.lineNumber, wordAtText.startColumn, position.lineNumber, wordAtText.endColumn);\n }\n return null;\n }\n words(wordDefinition) {\n const lines = this._lines;\n const wordenize = this._wordenize.bind(this);\n let lineNumber = 0;\n let lineText = '';\n let wordRangesIdx = 0;\n let wordRanges = [];\n return {\n *[Symbol.iterator]() {\n while (true) {\n if (wordRangesIdx < wordRanges.length) {\n const value = lineText.substring(wordRanges[wordRangesIdx].start, wordRanges[wordRangesIdx].end);\n wordRangesIdx += 1;\n yield value;\n }\n else {\n if (lineNumber < lines.length) {\n lineText = lines[lineNumber];\n wordRanges = wordenize(lineText, wordDefinition);\n wordRangesIdx = 0;\n lineNumber += 1;\n }\n else {\n break;\n }\n }\n }\n }\n };\n }\n getLineWords(lineNumber, wordDefinition) {\n let content = this._lines[lineNumber - 1];\n let ranges = this._wordenize(content, wordDefinition);\n let words = [];\n for (const range of ranges) {\n words.push({\n word: content.substring(range.start, range.end),\n startColumn: range.start + 1,\n endColumn: range.end + 1\n });\n }\n return words;\n }\n _wordenize(content, wordDefinition) {\n const result = [];\n let match;\n wordDefinition.lastIndex = 0; // reset lastIndex just to be sure\n while (match = wordDefinition.exec(content)) {\n if (match[0].length === 0) {\n // it did match the empty string\n break;\n }\n result.push({ start: match.index, end: match.index + match[0].length });\n }\n return result;\n }\n getValueInRange(range) {\n range = this._validateRange(range);\n if (range.startLineNumber === range.endLineNumber) {\n return this._lines[range.startLineNumber - 1].substring(range.startColumn - 1, range.endColumn - 1);\n }\n let lineEnding = this._eol;\n let startLineIndex = range.startLineNumber - 1;\n let endLineIndex = range.endLineNumber - 1;\n let resultLines = [];\n resultLines.push(this._lines[startLineIndex].substring(range.startColumn - 1));\n for (let i = startLineIndex + 1; i < endLineIndex; i++) {\n resultLines.push(this._lines[i]);\n }\n resultLines.push(this._lines[endLineIndex].substring(0, range.endColumn - 1));\n return resultLines.join(lineEnding);\n }\n offsetAt(position) {\n position = this._validatePosition(position);\n this._ensureLineStarts();\n return this._lineStarts.getPrefixSum(position.lineNumber - 2) + (position.column - 1);\n }\n positionAt(offset) {\n offset = Math.floor(offset);\n offset = Math.max(0, offset);\n this._ensureLineStarts();\n let out = this._lineStarts.getIndexOf(offset);\n let lineLength = this._lines[out.index].length;\n // Ensure we return a valid position\n return {\n lineNumber: 1 + out.index,\n column: 1 + Math.min(out.remainder, lineLength)\n };\n }\n _validateRange(range) {\n const start = this._validatePosition({ lineNumber: range.startLineNumber, column: range.startColumn });\n const end = this._validatePosition({ lineNumber: range.endLineNumber, column: range.endColumn });\n if (start.lineNumber !== range.startLineNumber\n || start.column !== range.startColumn\n || end.lineNumber !== range.endLineNumber\n || end.column !== range.endColumn) {\n return {\n startLineNumber: start.lineNumber,\n startColumn: start.column,\n endLineNumber: end.lineNumber,\n endColumn: end.column\n };\n }\n return range;\n }\n _validatePosition(position) {\n if (!Position.isIPosition(position)) {\n throw new Error('bad position');\n }\n let { lineNumber, column } = position;\n let hasChanged = false;\n if (lineNumber < 1) {\n lineNumber = 1;\n column = 1;\n hasChanged = true;\n }\n else if (lineNumber > this._lines.length) {\n lineNumber = this._lines.length;\n column = this._lines[lineNumber - 1].length + 1;\n hasChanged = true;\n }\n else {\n let maxCharacter = this._lines[lineNumber - 1].length + 1;\n if (column < 1) {\n column = 1;\n hasChanged = true;\n }\n else if (column > maxCharacter) {\n column = maxCharacter;\n hasChanged = true;\n }\n }\n if (!hasChanged) {\n return position;\n }\n else {\n return { lineNumber, column };\n }\n }\n}\n/**\n * @internal\n */\nexport class EditorSimpleWorker {\n constructor(host, foreignModuleFactory) {\n this._host = host;\n this._models = Object.create(null);\n this._foreignModuleFactory = foreignModuleFactory;\n this._foreignModule = null;\n }\n dispose() {\n this._models = Object.create(null);\n }\n _getModel(uri) {\n return this._models[uri];\n }\n _getModels() {\n let all = [];\n Object.keys(this._models).forEach((key) => all.push(this._models[key]));\n return all;\n }\n acceptNewModel(data) {\n this._models[data.url] = new MirrorModel(URI.parse(data.url), data.lines, data.EOL, data.versionId);\n }\n acceptModelChanged(strURL, e) {\n if (!this._models[strURL]) {\n return;\n }\n let model = this._models[strURL];\n model.onEvents(e);\n }\n acceptRemovedModel(strURL) {\n if (!this._models[strURL]) {\n return;\n }\n delete this._models[strURL];\n }\n // ---- BEGIN diff --------------------------------------------------------------------------\n computeDiff(originalUrl, modifiedUrl, ignoreTrimWhitespace, maxComputationTime) {\n return __awaiter(this, void 0, void 0, function* () {\n const original = this._getModel(originalUrl);\n const modified = this._getModel(modifiedUrl);\n if (!original || !modified) {\n return null;\n }\n const originalLines = original.getLinesContent();\n const modifiedLines = modified.getLinesContent();\n const diffComputer = new DiffComputer(originalLines, modifiedLines, {\n shouldComputeCharChanges: true,\n shouldPostProcessCharChanges: true,\n shouldIgnoreTrimWhitespace: ignoreTrimWhitespace,\n shouldMakePrettyDiff: true,\n maxComputationTime: maxComputationTime\n });\n const diffResult = diffComputer.computeDiff();\n const identical = (diffResult.changes.length > 0 ? false : this._modelsAreIdentical(original, modified));\n return {\n quitEarly: diffResult.quitEarly,\n identical: identical,\n changes: diffResult.changes\n };\n });\n }\n _modelsAreIdentical(original, modified) {\n const originalLineCount = original.getLineCount();\n const modifiedLineCount = modified.getLineCount();\n if (originalLineCount !== modifiedLineCount) {\n return false;\n }\n for (let line = 1; line <= originalLineCount; line++) {\n const originalLine = original.getLineContent(line);\n const modifiedLine = modified.getLineContent(line);\n if (originalLine !== modifiedLine) {\n return false;\n }\n }\n return true;\n }\n computeMoreMinimalEdits(modelUrl, edits) {\n return __awaiter(this, void 0, void 0, function* () {\n const model = this._getModel(modelUrl);\n if (!model) {\n return edits;\n }\n const result = [];\n let lastEol = undefined;\n edits = edits.slice(0).sort((a, b) => {\n if (a.range && b.range) {\n return Range.compareRangesUsingStarts(a.range, b.range);\n }\n // eol only changes should go to the end\n let aRng = a.range ? 0 : 1;\n let bRng = b.range ? 0 : 1;\n return aRng - bRng;\n });\n for (let { range, text, eol } of edits) {\n if (typeof eol === 'number') {\n lastEol = eol;\n }\n if (Range.isEmpty(range) && !text) {\n // empty change\n continue;\n }\n const original = model.getValueInRange(range);\n text = text.replace(/\\r\\n|\\n|\\r/g, model.eol);\n if (original === text) {\n // noop\n continue;\n }\n // make sure diff won't take too long\n if (Math.max(text.length, original.length) > EditorSimpleWorker._diffLimit) {\n result.push({ range, text });\n continue;\n }\n // compute diff between original and edit.text\n const changes = stringDiff(original, text, false);\n const editOffset = model.offsetAt(Range.lift(range).getStartPosition());\n for (const change of changes) {\n const start = model.positionAt(editOffset + change.originalStart);\n const end = model.positionAt(editOffset + change.originalStart + change.originalLength);\n const newEdit = {\n text: text.substr(change.modifiedStart, change.modifiedLength),\n range: { startLineNumber: start.lineNumber, startColumn: start.column, endLineNumber: end.lineNumber, endColumn: end.column }\n };\n if (model.getValueInRange(newEdit.range) !== newEdit.text) {\n result.push(newEdit);\n }\n }\n }\n if (typeof lastEol === 'number') {\n result.push({ eol: lastEol, text: '', range: { startLineNumber: 0, startColumn: 0, endLineNumber: 0, endColumn: 0 } });\n }\n return result;\n });\n }\n // ---- END minimal edits ---------------------------------------------------------------\n computeLinks(modelUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n let model = this._getModel(modelUrl);\n if (!model) {\n return null;\n }\n return computeLinks(model);\n });\n }\n textualSuggest(modelUrls, leadingWord, wordDef, wordDefFlags) {\n return __awaiter(this, void 0, void 0, function* () {\n const sw = new StopWatch(true);\n const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n const seen = new Set();\n outer: for (let url of modelUrls) {\n const model = this._getModel(url);\n if (!model) {\n continue;\n }\n for (let word of model.words(wordDefRegExp)) {\n if (word === leadingWord || !isNaN(Number(word))) {\n continue;\n }\n seen.add(word);\n if (seen.size > EditorSimpleWorker._suggestionsLimit) {\n break outer;\n }\n }\n }\n return { words: Array.from(seen), duration: sw.elapsed() };\n });\n }\n // ---- END suggest --------------------------------------------------------------------------\n //#region -- word ranges --\n computeWordRanges(modelUrl, range, wordDef, wordDefFlags) {\n return __awaiter(this, void 0, void 0, function* () {\n let model = this._getModel(modelUrl);\n if (!model) {\n return Object.create(null);\n }\n const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n const result = Object.create(null);\n for (let line = range.startLineNumber; line < range.endLineNumber; line++) {\n let words = model.getLineWords(line, wordDefRegExp);\n for (const word of words) {\n if (!isNaN(Number(word.word))) {\n continue;\n }\n let array = result[word.word];\n if (!array) {\n array = [];\n result[word.word] = array;\n }\n array.push({\n startLineNumber: line,\n startColumn: word.startColumn,\n endLineNumber: line,\n endColumn: word.endColumn\n });\n }\n }\n return result;\n });\n }\n //#endregion\n navigateValueSet(modelUrl, range, up, wordDef, wordDefFlags) {\n return __awaiter(this, void 0, void 0, function* () {\n let model = this._getModel(modelUrl);\n if (!model) {\n return null;\n }\n let wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n if (range.startColumn === range.endColumn) {\n range = {\n startLineNumber: range.startLineNumber,\n startColumn: range.startColumn,\n endLineNumber: range.endLineNumber,\n endColumn: range.endColumn + 1\n };\n }\n let selectionText = model.getValueInRange(range);\n let wordRange = model.getWordAtPosition({ lineNumber: range.startLineNumber, column: range.startColumn }, wordDefRegExp);\n if (!wordRange) {\n return null;\n }\n let word = model.getValueInRange(wordRange);\n let result = BasicInplaceReplace.INSTANCE.navigateValueSet(range, selectionText, wordRange, word, up);\n return result;\n });\n }\n // ---- BEGIN foreign module support --------------------------------------------------------------------------\n loadForeignModule(moduleId, createData, foreignHostMethods) {\n const proxyMethodRequest = (method, args) => {\n return this._host.fhr(method, args);\n };\n const foreignHost = types.createProxyObject(foreignHostMethods, proxyMethodRequest);\n let ctx = {\n host: foreignHost,\n getMirrorModels: () => {\n return this._getModels();\n }\n };\n if (this._foreignModuleFactory) {\n this._foreignModule = this._foreignModuleFactory(ctx, createData);\n // static foreing module\n return Promise.resolve(types.getAllMethodNames(this._foreignModule));\n }\n // ESM-comment-begin\n // \t\treturn new Promise((resolve, reject) => {\n // \t\t\trequire([moduleId], (foreignModule: { create: IForeignModuleFactory }) => {\n // \t\t\t\tthis._foreignModule = foreignModule.create(ctx, createData);\n // \n // \t\t\t\tresolve(types.getAllMethodNames(this._foreignModule));\n // \n // \t\t\t}, reject);\n // \t\t});\n // ESM-comment-end\n // ESM-uncomment-begin\n return Promise.reject(new Error(`Unexpected usage`));\n // ESM-uncomment-end\n }\n // foreign method request\n fmr(method, args) {\n if (!this._foreignModule || typeof this._foreignModule[method] !== 'function') {\n return Promise.reject(new Error('Missing requestHandler or method: ' + method));\n }\n try {\n return Promise.resolve(this._foreignModule[method].apply(this._foreignModule, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n }\n}\n// ---- END diff --------------------------------------------------------------------------\n// ---- BEGIN minimal edits ---------------------------------------------------------------\nEditorSimpleWorker._diffLimit = 100000;\n// ---- BEGIN suggest --------------------------------------------------------------------------\nEditorSimpleWorker._suggestionsLimit = 10000;\n/**\n * Called on the worker side\n * @internal\n */\nexport function create(host) {\n return new EditorSimpleWorker(host, null);\n}\nif (typeof importScripts === 'function') {\n // Running in a web worker\n globals.monaco = createMonacoBaseAPI();\n}\n","import { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ITextResourceConfigurationService = createDecorator('textResourceConfigurationService');\nexport const ITextResourcePropertiesService = createDecorator('textResourcePropertiesService');\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { IntervalTimer, timeout } from '../../../base/common/async.js';\nimport { Disposable, dispose, toDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { SimpleWorkerClient, logOnceWebWorkerWarning } from '../../../base/common/worker/simpleWorker.js';\nimport { DefaultWorkerFactory } from '../../../base/worker/defaultWorkerFactory.js';\nimport { Range } from '../core/range.js';\nimport * as modes from '../modes.js';\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\nimport { EditorSimpleWorker } from './editorSimpleWorker.js';\nimport { IModelService } from './modelService.js';\nimport { ITextResourceConfigurationService } from './textResourceConfigurationService.js';\nimport { regExpFlags } from '../../../base/common/strings.js';\nimport { isNonEmptyArray } from '../../../base/common/arrays.js';\nimport { ILogService } from '../../../platform/log/common/log.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\nimport { canceled } from '../../../base/common/errors.js';\n/**\n * Stop syncing a model to the worker if it was not needed for 1 min.\n */\nconst STOP_SYNC_MODEL_DELTA_TIME_MS = 60 * 1000;\n/**\n * Stop the worker if it was not needed for 5 min.\n */\nconst STOP_WORKER_DELTA_TIME_MS = 5 * 60 * 1000;\nfunction canSyncModel(modelService, resource) {\n let model = modelService.getModel(resource);\n if (!model) {\n return false;\n }\n if (model.isTooLargeForSyncing()) {\n return false;\n }\n return true;\n}\nlet EditorWorkerServiceImpl = class EditorWorkerServiceImpl extends Disposable {\n constructor(modelService, configurationService, logService) {\n super();\n this._modelService = modelService;\n this._workerManager = this._register(new WorkerManager(this._modelService));\n this._logService = logService;\n // register default link-provider and default completions-provider\n this._register(modes.LinkProviderRegistry.register({ language: '*', hasAccessToAllModels: true }, {\n provideLinks: (model, token) => {\n if (!canSyncModel(this._modelService, model.uri)) {\n return Promise.resolve({ links: [] }); // File too large\n }\n return this._workerManager.withWorker().then(client => client.computeLinks(model.uri)).then(links => {\n return links && { links };\n });\n }\n }));\n this._register(modes.CompletionProviderRegistry.register('*', new WordBasedCompletionItemProvider(this._workerManager, configurationService, this._modelService)));\n }\n dispose() {\n super.dispose();\n }\n computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime) {\n return this._workerManager.withWorker().then(client => client.computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime));\n }\n computeMoreMinimalEdits(resource, edits) {\n if (isNonEmptyArray(edits)) {\n if (!canSyncModel(this._modelService, resource)) {\n return Promise.resolve(edits); // File too large\n }\n const sw = StopWatch.create(true);\n const result = this._workerManager.withWorker().then(client => client.computeMoreMinimalEdits(resource, edits));\n result.finally(() => this._logService.trace('FORMAT#computeMoreMinimalEdits', resource.toString(true), sw.elapsed()));\n return Promise.race([result, timeout(1000).then(() => edits)]);\n }\n else {\n return Promise.resolve(undefined);\n }\n }\n canNavigateValueSet(resource) {\n return (canSyncModel(this._modelService, resource));\n }\n navigateValueSet(resource, range, up) {\n return this._workerManager.withWorker().then(client => client.navigateValueSet(resource, range, up));\n }\n canComputeWordRanges(resource) {\n return canSyncModel(this._modelService, resource);\n }\n computeWordRanges(resource, range) {\n return this._workerManager.withWorker().then(client => client.computeWordRanges(resource, range));\n }\n};\nEditorWorkerServiceImpl = __decorate([\n __param(0, IModelService),\n __param(1, ITextResourceConfigurationService),\n __param(2, ILogService)\n], EditorWorkerServiceImpl);\nexport { EditorWorkerServiceImpl };\nclass WordBasedCompletionItemProvider {\n constructor(workerManager, configurationService, modelService) {\n this._debugDisplayName = 'wordbasedCompletions';\n this._workerManager = workerManager;\n this._configurationService = configurationService;\n this._modelService = modelService;\n }\n provideCompletionItems(model, position) {\n return __awaiter(this, void 0, void 0, function* () {\n const config = this._configurationService.getValue(model.uri, position, 'editor');\n if (!config.wordBasedSuggestions) {\n return undefined;\n }\n const models = [];\n if (config.wordBasedSuggestionsMode === 'currentDocument') {\n // only current file and only if not too large\n if (canSyncModel(this._modelService, model.uri)) {\n models.push(model.uri);\n }\n }\n else {\n // either all files or files of same language\n for (const candidate of this._modelService.getModels()) {\n if (!canSyncModel(this._modelService, candidate.uri)) {\n continue;\n }\n if (candidate === model) {\n models.unshift(candidate.uri);\n }\n else if (config.wordBasedSuggestionsMode === 'allDocuments' || candidate.getLanguageId() === model.getLanguageId()) {\n models.push(candidate.uri);\n }\n }\n }\n if (models.length === 0) {\n return undefined; // File too large, no other files\n }\n const wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageId());\n const word = model.getWordAtPosition(position);\n const replace = !word ? Range.fromPositions(position) : new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);\n const insert = replace.setEndPosition(position.lineNumber, position.column);\n const client = yield this._workerManager.withWorker();\n const data = yield client.textualSuggest(models, word === null || word === void 0 ? void 0 : word.word, wordDefRegExp);\n if (!data) {\n return undefined;\n }\n return {\n duration: data.duration,\n suggestions: data.words.map((word) => {\n return {\n kind: 18 /* Text */,\n label: word,\n insertText: word,\n range: { insert, replace }\n };\n }),\n };\n });\n }\n}\nclass WorkerManager extends Disposable {\n constructor(modelService) {\n super();\n this._modelService = modelService;\n this._editorWorkerClient = null;\n this._lastWorkerUsedTime = (new Date()).getTime();\n let stopWorkerInterval = this._register(new IntervalTimer());\n stopWorkerInterval.cancelAndSet(() => this._checkStopIdleWorker(), Math.round(STOP_WORKER_DELTA_TIME_MS / 2));\n this._register(this._modelService.onModelRemoved(_ => this._checkStopEmptyWorker()));\n }\n dispose() {\n if (this._editorWorkerClient) {\n this._editorWorkerClient.dispose();\n this._editorWorkerClient = null;\n }\n super.dispose();\n }\n /**\n * Check if the model service has no more models and stop the worker if that is the case.\n */\n _checkStopEmptyWorker() {\n if (!this._editorWorkerClient) {\n return;\n }\n let models = this._modelService.getModels();\n if (models.length === 0) {\n // There are no more models => nothing possible for me to do\n this._editorWorkerClient.dispose();\n this._editorWorkerClient = null;\n }\n }\n /**\n * Check if the worker has been idle for a while and then stop it.\n */\n _checkStopIdleWorker() {\n if (!this._editorWorkerClient) {\n return;\n }\n let timeSinceLastWorkerUsedTime = (new Date()).getTime() - this._lastWorkerUsedTime;\n if (timeSinceLastWorkerUsedTime > STOP_WORKER_DELTA_TIME_MS) {\n this._editorWorkerClient.dispose();\n this._editorWorkerClient = null;\n }\n }\n withWorker() {\n this._lastWorkerUsedTime = (new Date()).getTime();\n if (!this._editorWorkerClient) {\n this._editorWorkerClient = new EditorWorkerClient(this._modelService, false, 'editorWorkerService');\n }\n return Promise.resolve(this._editorWorkerClient);\n }\n}\nclass EditorModelManager extends Disposable {\n constructor(proxy, modelService, keepIdleModels) {\n super();\n this._syncedModels = Object.create(null);\n this._syncedModelsLastUsedTime = Object.create(null);\n this._proxy = proxy;\n this._modelService = modelService;\n if (!keepIdleModels) {\n let timer = new IntervalTimer();\n timer.cancelAndSet(() => this._checkStopModelSync(), Math.round(STOP_SYNC_MODEL_DELTA_TIME_MS / 2));\n this._register(timer);\n }\n }\n dispose() {\n for (let modelUrl in this._syncedModels) {\n dispose(this._syncedModels[modelUrl]);\n }\n this._syncedModels = Object.create(null);\n this._syncedModelsLastUsedTime = Object.create(null);\n super.dispose();\n }\n ensureSyncedResources(resources, forceLargeModels) {\n for (const resource of resources) {\n let resourceStr = resource.toString();\n if (!this._syncedModels[resourceStr]) {\n this._beginModelSync(resource, forceLargeModels);\n }\n if (this._syncedModels[resourceStr]) {\n this._syncedModelsLastUsedTime[resourceStr] = (new Date()).getTime();\n }\n }\n }\n _checkStopModelSync() {\n let currentTime = (new Date()).getTime();\n let toRemove = [];\n for (let modelUrl in this._syncedModelsLastUsedTime) {\n let elapsedTime = currentTime - this._syncedModelsLastUsedTime[modelUrl];\n if (elapsedTime > STOP_SYNC_MODEL_DELTA_TIME_MS) {\n toRemove.push(modelUrl);\n }\n }\n for (const e of toRemove) {\n this._stopModelSync(e);\n }\n }\n _beginModelSync(resource, forceLargeModels) {\n let model = this._modelService.getModel(resource);\n if (!model) {\n return;\n }\n if (!forceLargeModels && model.isTooLargeForSyncing()) {\n return;\n }\n let modelUrl = resource.toString();\n this._proxy.acceptNewModel({\n url: model.uri.toString(),\n lines: model.getLinesContent(),\n EOL: model.getEOL(),\n versionId: model.getVersionId()\n });\n const toDispose = new DisposableStore();\n toDispose.add(model.onDidChangeContent((e) => {\n this._proxy.acceptModelChanged(modelUrl.toString(), e);\n }));\n toDispose.add(model.onWillDispose(() => {\n this._stopModelSync(modelUrl);\n }));\n toDispose.add(toDisposable(() => {\n this._proxy.acceptRemovedModel(modelUrl);\n }));\n this._syncedModels[modelUrl] = toDispose;\n }\n _stopModelSync(modelUrl) {\n let toDispose = this._syncedModels[modelUrl];\n delete this._syncedModels[modelUrl];\n delete this._syncedModelsLastUsedTime[modelUrl];\n dispose(toDispose);\n }\n}\nclass SynchronousWorkerClient {\n constructor(instance) {\n this._instance = instance;\n this._proxyObj = Promise.resolve(this._instance);\n }\n dispose() {\n this._instance.dispose();\n }\n getProxyObject() {\n return this._proxyObj;\n }\n}\nexport class EditorWorkerHost {\n constructor(workerClient) {\n this._workerClient = workerClient;\n }\n // foreign host request\n fhr(method, args) {\n return this._workerClient.fhr(method, args);\n }\n}\nexport class EditorWorkerClient extends Disposable {\n constructor(modelService, keepIdleModels, label) {\n super();\n this._disposed = false;\n this._modelService = modelService;\n this._keepIdleModels = keepIdleModels;\n this._workerFactory = new DefaultWorkerFactory(label);\n this._worker = null;\n this._modelManager = null;\n }\n // foreign host request\n fhr(method, args) {\n throw new Error(`Not implemented!`);\n }\n _getOrCreateWorker() {\n if (!this._worker) {\n try {\n this._worker = this._register(new SimpleWorkerClient(this._workerFactory, 'vs/editor/common/services/editorSimpleWorker', new EditorWorkerHost(this)));\n }\n catch (err) {\n logOnceWebWorkerWarning(err);\n this._worker = new SynchronousWorkerClient(new EditorSimpleWorker(new EditorWorkerHost(this), null));\n }\n }\n return this._worker;\n }\n _getProxy() {\n return this._getOrCreateWorker().getProxyObject().then(undefined, (err) => {\n logOnceWebWorkerWarning(err);\n this._worker = new SynchronousWorkerClient(new EditorSimpleWorker(new EditorWorkerHost(this), null));\n return this._getOrCreateWorker().getProxyObject();\n });\n }\n _getOrCreateModelManager(proxy) {\n if (!this._modelManager) {\n this._modelManager = this._register(new EditorModelManager(proxy, this._modelService, this._keepIdleModels));\n }\n return this._modelManager;\n }\n _withSyncedResources(resources, forceLargeModels = false) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._disposed) {\n return Promise.reject(canceled());\n }\n return this._getProxy().then((proxy) => {\n this._getOrCreateModelManager(proxy).ensureSyncedResources(resources, forceLargeModels);\n return proxy;\n });\n });\n }\n computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime) {\n return this._withSyncedResources([original, modified], /* forceLargeModels */ true).then(proxy => {\n return proxy.computeDiff(original.toString(), modified.toString(), ignoreTrimWhitespace, maxComputationTime);\n });\n }\n computeMoreMinimalEdits(resource, edits) {\n return this._withSyncedResources([resource]).then(proxy => {\n return proxy.computeMoreMinimalEdits(resource.toString(), edits);\n });\n }\n computeLinks(resource) {\n return this._withSyncedResources([resource]).then(proxy => {\n return proxy.computeLinks(resource.toString());\n });\n }\n textualSuggest(resources, leadingWord, wordDefRegExp) {\n return __awaiter(this, void 0, void 0, function* () {\n const proxy = yield this._withSyncedResources(resources);\n const wordDef = wordDefRegExp.source;\n const wordDefFlags = regExpFlags(wordDefRegExp);\n return proxy.textualSuggest(resources.map(r => r.toString()), leadingWord, wordDef, wordDefFlags);\n });\n }\n computeWordRanges(resource, range) {\n return this._withSyncedResources([resource]).then(proxy => {\n let model = this._modelService.getModel(resource);\n if (!model) {\n return Promise.resolve(null);\n }\n let wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageId());\n let wordDef = wordDefRegExp.source;\n let wordDefFlags = regExpFlags(wordDefRegExp);\n return proxy.computeWordRanges(resource.toString(), range, wordDef, wordDefFlags);\n });\n }\n navigateValueSet(resource, range, up) {\n return this._withSyncedResources([resource]).then(proxy => {\n let model = this._modelService.getModel(resource);\n if (!model) {\n return null;\n }\n let wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageId());\n let wordDef = wordDefRegExp.source;\n let wordDefFlags = regExpFlags(wordDefRegExp);\n return proxy.navigateValueSet(resource.toString(), range, up, wordDef, wordDefFlags);\n });\n }\n dispose() {\n super.dispose();\n this._disposed = true;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { EditorWorkerClient } from './editorWorkerServiceImpl.js';\nimport * as types from '../../../base/common/types.js';\n/**\n * Create a new web worker that has model syncing capabilities built in.\n * Specify an AMD module to load that will `create` an object that will be proxied.\n */\nexport function createWebWorker(modelService, opts) {\n return new MonacoWebWorkerImpl(modelService, opts);\n}\nclass MonacoWebWorkerImpl extends EditorWorkerClient {\n constructor(modelService, opts) {\n super(modelService, opts.keepIdleModels || false, opts.label);\n this._foreignModuleId = opts.moduleId;\n this._foreignModuleCreateData = opts.createData || null;\n this._foreignModuleHost = opts.host || null;\n this._foreignProxy = null;\n }\n // foreign host request\n fhr(method, args) {\n if (!this._foreignModuleHost || typeof this._foreignModuleHost[method] !== 'function') {\n return Promise.reject(new Error('Missing method ' + method + ' or missing main thread foreign host.'));\n }\n try {\n return Promise.resolve(this._foreignModuleHost[method].apply(this._foreignModuleHost, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n }\n _getForeignProxy() {\n if (!this._foreignProxy) {\n this._foreignProxy = this._getProxy().then((proxy) => {\n const foreignHostMethods = this._foreignModuleHost ? types.getAllMethodNames(this._foreignModuleHost) : [];\n return proxy.loadForeignModule(this._foreignModuleId, this._foreignModuleCreateData, foreignHostMethods).then((foreignMethods) => {\n this._foreignModuleCreateData = null;\n const proxyMethodRequest = (method, args) => {\n return proxy.fmr(method, args);\n };\n const createProxyMethod = (method, proxyMethodRequest) => {\n return function () {\n const args = Array.prototype.slice.call(arguments, 0);\n return proxyMethodRequest(method, args);\n };\n };\n let foreignProxy = {};\n for (const foreignMethod of foreignMethods) {\n foreignProxy[foreignMethod] = createProxyMethod(foreignMethod, proxyMethodRequest);\n }\n return foreignProxy;\n });\n });\n }\n return this._foreignProxy;\n }\n getProxy() {\n return this._getForeignProxy();\n }\n withSyncedResources(resources) {\n return this._withSyncedResources(resources).then(_ => this.getProxy());\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nexport class LineDecoration {\n constructor(startColumn, endColumn, className, type) {\n this.startColumn = startColumn;\n this.endColumn = endColumn;\n this.className = className;\n this.type = type;\n this._lineDecorationBrand = undefined;\n }\n static _equals(a, b) {\n return (a.startColumn === b.startColumn\n && a.endColumn === b.endColumn\n && a.className === b.className\n && a.type === b.type);\n }\n static equalsArr(a, b) {\n const aLen = a.length;\n const bLen = b.length;\n if (aLen !== bLen) {\n return false;\n }\n for (let i = 0; i < aLen; i++) {\n if (!LineDecoration._equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n static extractWrapped(arr, startOffset, endOffset) {\n if (arr.length === 0) {\n return arr;\n }\n const startColumn = startOffset + 1;\n const endColumn = endOffset + 1;\n const lineLength = endOffset - startOffset;\n const r = [];\n let rLength = 0;\n for (const dec of arr) {\n if (dec.endColumn <= startColumn || dec.startColumn >= endColumn) {\n continue;\n }\n r[rLength++] = new LineDecoration(Math.max(1, dec.startColumn - startColumn + 1), Math.min(lineLength + 1, dec.endColumn - startColumn + 1), dec.className, dec.type);\n }\n return r;\n }\n static filter(lineDecorations, lineNumber, minLineColumn, maxLineColumn) {\n if (lineDecorations.length === 0) {\n return [];\n }\n let result = [], resultLen = 0;\n for (let i = 0, len = lineDecorations.length; i < len; i++) {\n const d = lineDecorations[i];\n const range = d.range;\n if (range.endLineNumber < lineNumber || range.startLineNumber > lineNumber) {\n // Ignore decorations that sit outside this line\n continue;\n }\n if (range.isEmpty() && (d.type === 0 /* Regular */ || d.type === 3 /* RegularAffectingLetterSpacing */)) {\n // Ignore empty range decorations\n continue;\n }\n const startColumn = (range.startLineNumber === lineNumber ? range.startColumn : minLineColumn);\n const endColumn = (range.endLineNumber === lineNumber ? range.endColumn : maxLineColumn);\n result[resultLen++] = new LineDecoration(startColumn, endColumn, d.inlineClassName, d.type);\n }\n return result;\n }\n static _typeCompare(a, b) {\n const ORDER = [2, 0, 1, 3];\n return ORDER[a] - ORDER[b];\n }\n static compare(a, b) {\n if (a.startColumn !== b.startColumn) {\n return a.startColumn - b.startColumn;\n }\n if (a.endColumn !== b.endColumn) {\n return a.endColumn - b.endColumn;\n }\n const typeCmp = LineDecoration._typeCompare(a.type, b.type);\n if (typeCmp !== 0) {\n return typeCmp;\n }\n if (a.className !== b.className) {\n return a.className < b.className ? -1 : 1;\n }\n return 0;\n }\n}\nexport class DecorationSegment {\n constructor(startOffset, endOffset, className, metadata) {\n this.startOffset = startOffset;\n this.endOffset = endOffset;\n this.className = className;\n this.metadata = metadata;\n }\n}\nclass Stack {\n constructor() {\n this.stopOffsets = [];\n this.classNames = [];\n this.metadata = [];\n this.count = 0;\n }\n static _metadata(metadata) {\n let result = 0;\n for (let i = 0, len = metadata.length; i < len; i++) {\n result |= metadata[i];\n }\n return result;\n }\n consumeLowerThan(maxStopOffset, nextStartOffset, result) {\n while (this.count > 0 && this.stopOffsets[0] < maxStopOffset) {\n let i = 0;\n // Take all equal stopping offsets\n while (i + 1 < this.count && this.stopOffsets[i] === this.stopOffsets[i + 1]) {\n i++;\n }\n // Basically we are consuming the first i + 1 elements of the stack\n result.push(new DecorationSegment(nextStartOffset, this.stopOffsets[i], this.classNames.join(' '), Stack._metadata(this.metadata)));\n nextStartOffset = this.stopOffsets[i] + 1;\n // Consume them\n this.stopOffsets.splice(0, i + 1);\n this.classNames.splice(0, i + 1);\n this.metadata.splice(0, i + 1);\n this.count -= (i + 1);\n }\n if (this.count > 0 && nextStartOffset < maxStopOffset) {\n result.push(new DecorationSegment(nextStartOffset, maxStopOffset - 1, this.classNames.join(' '), Stack._metadata(this.metadata)));\n nextStartOffset = maxStopOffset;\n }\n return nextStartOffset;\n }\n insert(stopOffset, className, metadata) {\n if (this.count === 0 || this.stopOffsets[this.count - 1] <= stopOffset) {\n // Insert at the end\n this.stopOffsets.push(stopOffset);\n this.classNames.push(className);\n this.metadata.push(metadata);\n }\n else {\n // Find the insertion position for `stopOffset`\n for (let i = 0; i < this.count; i++) {\n if (this.stopOffsets[i] >= stopOffset) {\n this.stopOffsets.splice(i, 0, stopOffset);\n this.classNames.splice(i, 0, className);\n this.metadata.splice(i, 0, metadata);\n break;\n }\n }\n }\n this.count++;\n return;\n }\n}\nexport class LineDecorationsNormalizer {\n /**\n * Normalize line decorations. Overlapping decorations will generate multiple segments\n */\n static normalize(lineContent, lineDecorations) {\n if (lineDecorations.length === 0) {\n return [];\n }\n let result = [];\n const stack = new Stack();\n let nextStartOffset = 0;\n for (let i = 0, len = lineDecorations.length; i < len; i++) {\n const d = lineDecorations[i];\n let startColumn = d.startColumn;\n let endColumn = d.endColumn;\n const className = d.className;\n const metadata = (d.type === 1 /* Before */\n ? 2 /* PSEUDO_BEFORE */\n : d.type === 2 /* After */\n ? 4 /* PSEUDO_AFTER */\n : 0);\n // If the position would end up in the middle of a high-low surrogate pair, we move it to before the pair\n if (startColumn > 1) {\n const charCodeBefore = lineContent.charCodeAt(startColumn - 2);\n if (strings.isHighSurrogate(charCodeBefore)) {\n startColumn--;\n }\n }\n if (endColumn > 1) {\n const charCodeBefore = lineContent.charCodeAt(endColumn - 2);\n if (strings.isHighSurrogate(charCodeBefore)) {\n endColumn--;\n }\n }\n const currentStartOffset = startColumn - 1;\n const currentEndOffset = endColumn - 2;\n nextStartOffset = stack.consumeLowerThan(currentStartOffset, nextStartOffset, result);\n if (stack.count === 0) {\n nextStartOffset = currentStartOffset;\n }\n stack.insert(currentEndOffset, className, metadata);\n }\n stack.consumeLowerThan(1073741824 /* MAX_SAFE_SMALL_INTEGER */, nextStartOffset, result);\n return result;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { createStringBuilder } from '../core/stringBuilder.js';\nimport { LineDecoration, LineDecorationsNormalizer } from './lineDecorations.js';\nclass LinePart {\n constructor(endIndex, type, metadata) {\n this._linePartBrand = undefined;\n this.endIndex = endIndex;\n this.type = type;\n this.metadata = metadata;\n }\n isWhitespace() {\n return (this.metadata & 1 /* IS_WHITESPACE_MASK */ ? true : false);\n }\n isPseudoAfter() {\n return (this.metadata & 4 /* PSEUDO_AFTER_MASK */ ? true : false);\n }\n}\nexport class LineRange {\n constructor(startIndex, endIndex) {\n this.startOffset = startIndex;\n this.endOffset = endIndex;\n }\n equals(otherLineRange) {\n return this.startOffset === otherLineRange.startOffset\n && this.endOffset === otherLineRange.endOffset;\n }\n}\nexport class RenderLineInput {\n constructor(useMonospaceOptimizations, canUseHalfwidthRightwardsArrow, lineContent, continuesWithWrappedLine, isBasicASCII, containsRTL, fauxIndentLength, lineTokens, lineDecorations, tabSize, startVisibleColumn, spaceWidth, middotWidth, wsmiddotWidth, stopRenderingLineAfter, renderWhitespace, renderControlCharacters, fontLigatures, selectionsOnLine) {\n this.useMonospaceOptimizations = useMonospaceOptimizations;\n this.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\n this.lineContent = lineContent;\n this.continuesWithWrappedLine = continuesWithWrappedLine;\n this.isBasicASCII = isBasicASCII;\n this.containsRTL = containsRTL;\n this.fauxIndentLength = fauxIndentLength;\n this.lineTokens = lineTokens;\n this.lineDecorations = lineDecorations.sort(LineDecoration.compare);\n this.tabSize = tabSize;\n this.startVisibleColumn = startVisibleColumn;\n this.spaceWidth = spaceWidth;\n this.stopRenderingLineAfter = stopRenderingLineAfter;\n this.renderWhitespace = (renderWhitespace === 'all'\n ? 4 /* All */\n : renderWhitespace === 'boundary'\n ? 1 /* Boundary */\n : renderWhitespace === 'selection'\n ? 2 /* Selection */\n : renderWhitespace === 'trailing'\n ? 3 /* Trailing */\n : 0 /* None */);\n this.renderControlCharacters = renderControlCharacters;\n this.fontLigatures = fontLigatures;\n this.selectionsOnLine = selectionsOnLine && selectionsOnLine.sort((a, b) => a.startOffset < b.startOffset ? -1 : 1);\n const wsmiddotDiff = Math.abs(wsmiddotWidth - spaceWidth);\n const middotDiff = Math.abs(middotWidth - spaceWidth);\n if (wsmiddotDiff < middotDiff) {\n this.renderSpaceWidth = wsmiddotWidth;\n this.renderSpaceCharCode = 0x2E31; // U+2E31 - WORD SEPARATOR MIDDLE DOT\n }\n else {\n this.renderSpaceWidth = middotWidth;\n this.renderSpaceCharCode = 0xB7; // U+00B7 - MIDDLE DOT\n }\n }\n sameSelection(otherSelections) {\n if (this.selectionsOnLine === null) {\n return otherSelections === null;\n }\n if (otherSelections === null) {\n return false;\n }\n if (otherSelections.length !== this.selectionsOnLine.length) {\n return false;\n }\n for (let i = 0; i < this.selectionsOnLine.length; i++) {\n if (!this.selectionsOnLine[i].equals(otherSelections[i])) {\n return false;\n }\n }\n return true;\n }\n equals(other) {\n return (this.useMonospaceOptimizations === other.useMonospaceOptimizations\n && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n && this.lineContent === other.lineContent\n && this.continuesWithWrappedLine === other.continuesWithWrappedLine\n && this.isBasicASCII === other.isBasicASCII\n && this.containsRTL === other.containsRTL\n && this.fauxIndentLength === other.fauxIndentLength\n && this.tabSize === other.tabSize\n && this.startVisibleColumn === other.startVisibleColumn\n && this.spaceWidth === other.spaceWidth\n && this.renderSpaceWidth === other.renderSpaceWidth\n && this.renderSpaceCharCode === other.renderSpaceCharCode\n && this.stopRenderingLineAfter === other.stopRenderingLineAfter\n && this.renderWhitespace === other.renderWhitespace\n && this.renderControlCharacters === other.renderControlCharacters\n && this.fontLigatures === other.fontLigatures\n && LineDecoration.equalsArr(this.lineDecorations, other.lineDecorations)\n && this.lineTokens.equals(other.lineTokens)\n && this.sameSelection(other.selectionsOnLine));\n }\n}\nexport class DomPosition {\n constructor(partIndex, charIndex) {\n this.partIndex = partIndex;\n this.charIndex = charIndex;\n }\n}\n/**\n * Provides a both direction mapping between a line's character and its rendered position.\n */\nexport class CharacterMapping {\n constructor(length, partCount) {\n this.length = length;\n this._data = new Uint32Array(this.length);\n this._absoluteOffsets = new Uint32Array(this.length);\n }\n static getPartIndex(partData) {\n return (partData & 4294901760 /* PART_INDEX_MASK */) >>> 16 /* PART_INDEX_OFFSET */;\n }\n static getCharIndex(partData) {\n return (partData & 65535 /* CHAR_INDEX_MASK */) >>> 0 /* CHAR_INDEX_OFFSET */;\n }\n setColumnInfo(column, partIndex, charIndex, partAbsoluteOffset) {\n const partData = ((partIndex << 16 /* PART_INDEX_OFFSET */)\n | (charIndex << 0 /* CHAR_INDEX_OFFSET */)) >>> 0;\n this._data[column - 1] = partData;\n this._absoluteOffsets[column - 1] = partAbsoluteOffset + charIndex;\n }\n getAbsoluteOffset(column) {\n if (this._absoluteOffsets.length === 0) {\n // No characters on this line\n return 0;\n }\n return this._absoluteOffsets[column - 1];\n }\n charOffsetToPartData(charOffset) {\n if (this.length === 0) {\n return 0;\n }\n if (charOffset < 0) {\n return this._data[0];\n }\n if (charOffset >= this.length) {\n return this._data[this.length - 1];\n }\n return this._data[charOffset];\n }\n getDomPosition(column) {\n const partData = this.charOffsetToPartData(column - 1);\n const partIndex = CharacterMapping.getPartIndex(partData);\n const charIndex = CharacterMapping.getCharIndex(partData);\n return new DomPosition(partIndex, charIndex);\n }\n getColumn(domPosition, partLength) {\n const charOffset = this.partDataToCharOffset(domPosition.partIndex, partLength, domPosition.charIndex);\n return charOffset + 1;\n }\n partDataToCharOffset(partIndex, partLength, charIndex) {\n if (this.length === 0) {\n return 0;\n }\n let searchEntry = ((partIndex << 16 /* PART_INDEX_OFFSET */)\n | (charIndex << 0 /* CHAR_INDEX_OFFSET */)) >>> 0;\n let min = 0;\n let max = this.length - 1;\n while (min + 1 < max) {\n let mid = ((min + max) >>> 1);\n let midEntry = this._data[mid];\n if (midEntry === searchEntry) {\n return mid;\n }\n else if (midEntry > searchEntry) {\n max = mid;\n }\n else {\n min = mid;\n }\n }\n if (min === max) {\n return min;\n }\n let minEntry = this._data[min];\n let maxEntry = this._data[max];\n if (minEntry === searchEntry) {\n return min;\n }\n if (maxEntry === searchEntry) {\n return max;\n }\n let minPartIndex = CharacterMapping.getPartIndex(minEntry);\n let minCharIndex = CharacterMapping.getCharIndex(minEntry);\n let maxPartIndex = CharacterMapping.getPartIndex(maxEntry);\n let maxCharIndex;\n if (minPartIndex !== maxPartIndex) {\n // sitting between parts\n maxCharIndex = partLength;\n }\n else {\n maxCharIndex = CharacterMapping.getCharIndex(maxEntry);\n }\n let minEntryDistance = charIndex - minCharIndex;\n let maxEntryDistance = maxCharIndex - charIndex;\n if (minEntryDistance <= maxEntryDistance) {\n return min;\n }\n return max;\n }\n}\nexport class RenderLineOutput {\n constructor(characterMapping, containsRTL, containsForeignElements) {\n this._renderLineOutputBrand = undefined;\n this.characterMapping = characterMapping;\n this.containsRTL = containsRTL;\n this.containsForeignElements = containsForeignElements;\n }\n}\nexport function renderViewLine(input, sb) {\n if (input.lineContent.length === 0) {\n if (input.lineDecorations.length > 0) {\n // This line is empty, but it contains inline decorations\n sb.appendASCIIString(``);\n let beforeCount = 0;\n let afterCount = 0;\n let containsForeignElements = 0 /* None */;\n for (const lineDecoration of input.lineDecorations) {\n if (lineDecoration.type === 1 /* Before */ || lineDecoration.type === 2 /* After */) {\n sb.appendASCIIString(``);\n if (lineDecoration.type === 1 /* Before */) {\n containsForeignElements |= 1 /* Before */;\n beforeCount++;\n }\n if (lineDecoration.type === 2 /* After */) {\n containsForeignElements |= 2 /* After */;\n afterCount++;\n }\n }\n }\n sb.appendASCIIString(``);\n const characterMapping = new CharacterMapping(1, beforeCount + afterCount);\n characterMapping.setColumnInfo(1, beforeCount, 0, 0);\n return new RenderLineOutput(characterMapping, false, containsForeignElements);\n }\n // completely empty line\n sb.appendASCIIString('');\n return new RenderLineOutput(new CharacterMapping(0, 0), false, 0 /* None */);\n }\n return _renderLine(resolveRenderLineInput(input), sb);\n}\nexport class RenderLineOutput2 {\n constructor(characterMapping, html, containsRTL, containsForeignElements) {\n this.characterMapping = characterMapping;\n this.html = html;\n this.containsRTL = containsRTL;\n this.containsForeignElements = containsForeignElements;\n }\n}\nexport function renderViewLine2(input) {\n let sb = createStringBuilder(10000);\n let out = renderViewLine(input, sb);\n return new RenderLineOutput2(out.characterMapping, sb.build(), out.containsRTL, out.containsForeignElements);\n}\nclass ResolvedRenderLineInput {\n constructor(fontIsMonospace, canUseHalfwidthRightwardsArrow, lineContent, len, isOverflowing, parts, containsForeignElements, fauxIndentLength, tabSize, startVisibleColumn, containsRTL, spaceWidth, renderSpaceCharCode, renderWhitespace, renderControlCharacters) {\n this.fontIsMonospace = fontIsMonospace;\n this.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\n this.lineContent = lineContent;\n this.len = len;\n this.isOverflowing = isOverflowing;\n this.parts = parts;\n this.containsForeignElements = containsForeignElements;\n this.fauxIndentLength = fauxIndentLength;\n this.tabSize = tabSize;\n this.startVisibleColumn = startVisibleColumn;\n this.containsRTL = containsRTL;\n this.spaceWidth = spaceWidth;\n this.renderSpaceCharCode = renderSpaceCharCode;\n this.renderWhitespace = renderWhitespace;\n this.renderControlCharacters = renderControlCharacters;\n //\n }\n}\nfunction resolveRenderLineInput(input) {\n const lineContent = input.lineContent;\n let isOverflowing;\n let len;\n if (input.stopRenderingLineAfter !== -1 && input.stopRenderingLineAfter < lineContent.length) {\n isOverflowing = true;\n len = input.stopRenderingLineAfter;\n }\n else {\n isOverflowing = false;\n len = lineContent.length;\n }\n let tokens = transformAndRemoveOverflowing(input.lineTokens, input.fauxIndentLength, len);\n if (input.renderWhitespace === 4 /* All */ ||\n input.renderWhitespace === 1 /* Boundary */ ||\n (input.renderWhitespace === 2 /* Selection */ && !!input.selectionsOnLine) ||\n input.renderWhitespace === 3 /* Trailing */) {\n tokens = _applyRenderWhitespace(input, lineContent, len, tokens);\n }\n let containsForeignElements = 0 /* None */;\n if (input.lineDecorations.length > 0) {\n for (let i = 0, len = input.lineDecorations.length; i < len; i++) {\n const lineDecoration = input.lineDecorations[i];\n if (lineDecoration.type === 3 /* RegularAffectingLetterSpacing */) {\n // Pretend there are foreign elements... although not 100% accurate.\n containsForeignElements |= 1 /* Before */;\n }\n else if (lineDecoration.type === 1 /* Before */) {\n containsForeignElements |= 1 /* Before */;\n }\n else if (lineDecoration.type === 2 /* After */) {\n containsForeignElements |= 2 /* After */;\n }\n }\n tokens = _applyInlineDecorations(lineContent, len, tokens, input.lineDecorations);\n }\n if (!input.containsRTL) {\n // We can never split RTL text, as it ruins the rendering\n tokens = splitLargeTokens(lineContent, tokens, !input.isBasicASCII || input.fontLigatures);\n }\n if (input.renderControlCharacters && !input.isBasicASCII) {\n tokens = extractControlCharacters(lineContent, tokens);\n }\n return new ResolvedRenderLineInput(input.useMonospaceOptimizations, input.canUseHalfwidthRightwardsArrow, lineContent, len, isOverflowing, tokens, containsForeignElements, input.fauxIndentLength, input.tabSize, input.startVisibleColumn, input.containsRTL, input.spaceWidth, input.renderSpaceCharCode, input.renderWhitespace, input.renderControlCharacters);\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(tokens, fauxIndentLength, len) {\n let result = [], resultLen = 0;\n // The faux indent part of the line should have no token type\n if (fauxIndentLength > 0) {\n result[resultLen++] = new LinePart(fauxIndentLength, '', 0);\n }\n for (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\n const endIndex = tokens.getEndOffset(tokenIndex);\n if (endIndex <= fauxIndentLength) {\n // The faux indent part of the line should have no token type\n continue;\n }\n const type = tokens.getClassName(tokenIndex);\n if (endIndex >= len) {\n result[resultLen++] = new LinePart(len, type, 0);\n break;\n }\n result[resultLen++] = new LinePart(endIndex, type, 0);\n }\n return result;\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, tokens, onlyAtSpaces) {\n let lastTokenEndIndex = 0;\n let result = [], resultLen = 0;\n if (onlyAtSpaces) {\n // Split only at spaces => we need to walk each character\n for (let i = 0, len = tokens.length; i < len; i++) {\n const token = tokens[i];\n const tokenEndIndex = token.endIndex;\n if (lastTokenEndIndex + 50 /* LongToken */ < tokenEndIndex) {\n const tokenType = token.type;\n const tokenMetadata = token.metadata;\n let lastSpaceOffset = -1;\n let currTokenStart = lastTokenEndIndex;\n for (let j = lastTokenEndIndex; j < tokenEndIndex; j++) {\n if (lineContent.charCodeAt(j) === 32 /* Space */) {\n lastSpaceOffset = j;\n }\n if (lastSpaceOffset !== -1 && j - currTokenStart >= 50 /* LongToken */) {\n // Split at `lastSpaceOffset` + 1\n result[resultLen++] = new LinePart(lastSpaceOffset + 1, tokenType, tokenMetadata);\n currTokenStart = lastSpaceOffset + 1;\n lastSpaceOffset = -1;\n }\n }\n if (currTokenStart !== tokenEndIndex) {\n result[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata);\n }\n }\n else {\n result[resultLen++] = token;\n }\n lastTokenEndIndex = tokenEndIndex;\n }\n }\n else {\n // Split anywhere => we don't need to walk each character\n for (let i = 0, len = tokens.length; i < len; i++) {\n const token = tokens[i];\n const tokenEndIndex = token.endIndex;\n let diff = (tokenEndIndex - lastTokenEndIndex);\n if (diff > 50 /* LongToken */) {\n const tokenType = token.type;\n const tokenMetadata = token.metadata;\n const piecesCount = Math.ceil(diff / 50 /* LongToken */);\n for (let j = 1; j < piecesCount; j++) {\n let pieceEndIndex = lastTokenEndIndex + (j * 50 /* LongToken */);\n result[resultLen++] = new LinePart(pieceEndIndex, tokenType, tokenMetadata);\n }\n result[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata);\n }\n else {\n result[resultLen++] = token;\n }\n lastTokenEndIndex = tokenEndIndex;\n }\n }\n return result;\n}\nfunction isControlCharacter(charCode) {\n if (charCode < 32) {\n return (charCode !== 9 /* Tab */);\n }\n if (charCode === 127) {\n // DEL\n return true;\n }\n if ((charCode >= 0x202A && charCode <= 0x202E)\n || (charCode >= 0x2066 && charCode <= 0x2069)\n || (charCode >= 0x200E && charCode <= 0x200F)\n || charCode === 0x061C) {\n // Unicode Directional Formatting Characters\n // LRE\tU+202A\tLEFT-TO-RIGHT EMBEDDING\n // RLE\tU+202B\tRIGHT-TO-LEFT EMBEDDING\n // PDF\tU+202C\tPOP DIRECTIONAL FORMATTING\n // LRO\tU+202D\tLEFT-TO-RIGHT OVERRIDE\n // RLO\tU+202E\tRIGHT-TO-LEFT OVERRIDE\n // LRI\tU+2066\tLEFT‑TO‑RIGHT ISOLATE\n // RLI\tU+2067\tRIGHT‑TO‑LEFT ISOLATE\n // FSI\tU+2068\tFIRST STRONG ISOLATE\n // PDI\tU+2069\tPOP DIRECTIONAL ISOLATE\n // LRM\tU+200E\tLEFT-TO-RIGHT MARK\n // RLM\tU+200F\tRIGHT-TO-LEFT MARK\n // ALM\tU+061C\tARABIC LETTER MARK\n return true;\n }\n return false;\n}\nfunction extractControlCharacters(lineContent, tokens) {\n let result = [];\n let lastLinePart = new LinePart(0, '', 0);\n let charOffset = 0;\n for (const token of tokens) {\n const tokenEndIndex = token.endIndex;\n for (; charOffset < tokenEndIndex; charOffset++) {\n const charCode = lineContent.charCodeAt(charOffset);\n if (isControlCharacter(charCode)) {\n if (charOffset > lastLinePart.endIndex) {\n // emit previous part if it has text\n lastLinePart = new LinePart(charOffset, token.type, token.metadata);\n result.push(lastLinePart);\n }\n lastLinePart = new LinePart(charOffset + 1, 'mtkcontrol', token.metadata);\n result.push(lastLinePart);\n }\n }\n if (charOffset > lastLinePart.endIndex) {\n // emit previous part if it has text\n lastLinePart = new LinePart(tokenEndIndex, token.type, token.metadata);\n result.push(lastLinePart);\n }\n }\n return result;\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, lineContent, len, tokens) {\n const continuesWithWrappedLine = input.continuesWithWrappedLine;\n const fauxIndentLength = input.fauxIndentLength;\n const tabSize = input.tabSize;\n const startVisibleColumn = input.startVisibleColumn;\n const useMonospaceOptimizations = input.useMonospaceOptimizations;\n const selections = input.selectionsOnLine;\n const onlyBoundary = (input.renderWhitespace === 1 /* Boundary */);\n const onlyTrailing = (input.renderWhitespace === 3 /* Trailing */);\n const generateLinePartForEachWhitespace = (input.renderSpaceWidth !== input.spaceWidth);\n let result = [], resultLen = 0;\n let tokenIndex = 0;\n let tokenType = tokens[tokenIndex].type;\n let tokenEndIndex = tokens[tokenIndex].endIndex;\n const tokensLength = tokens.length;\n let lineIsEmptyOrWhitespace = false;\n let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n let lastNonWhitespaceIndex;\n if (firstNonWhitespaceIndex === -1) {\n lineIsEmptyOrWhitespace = true;\n firstNonWhitespaceIndex = len;\n lastNonWhitespaceIndex = len;\n }\n else {\n lastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n }\n let wasInWhitespace = false;\n let currentSelectionIndex = 0;\n let currentSelection = selections && selections[currentSelectionIndex];\n let tmpIndent = startVisibleColumn % tabSize;\n for (let charIndex = fauxIndentLength; charIndex < len; charIndex++) {\n const chCode = lineContent.charCodeAt(charIndex);\n if (currentSelection && charIndex >= currentSelection.endOffset) {\n currentSelectionIndex++;\n currentSelection = selections && selections[currentSelectionIndex];\n }\n let isInWhitespace;\n if (charIndex < firstNonWhitespaceIndex || charIndex > lastNonWhitespaceIndex) {\n // in leading or trailing whitespace\n isInWhitespace = true;\n }\n else if (chCode === 9 /* Tab */) {\n // a tab character is rendered both in all and boundary cases\n isInWhitespace = true;\n }\n else if (chCode === 32 /* Space */) {\n // hit a space character\n if (onlyBoundary) {\n // rendering only boundary whitespace\n if (wasInWhitespace) {\n isInWhitespace = true;\n }\n else {\n const nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : 0 /* Null */);\n isInWhitespace = (nextChCode === 32 /* Space */ || nextChCode === 9 /* Tab */);\n }\n }\n else {\n isInWhitespace = true;\n }\n }\n else {\n isInWhitespace = false;\n }\n // If rendering whitespace on selection, check that the charIndex falls within a selection\n if (isInWhitespace && selections) {\n isInWhitespace = !!currentSelection && currentSelection.startOffset <= charIndex && currentSelection.endOffset > charIndex;\n }\n // If rendering only trailing whitespace, check that the charIndex points to trailing whitespace.\n if (isInWhitespace && onlyTrailing) {\n isInWhitespace = lineIsEmptyOrWhitespace || charIndex > lastNonWhitespaceIndex;\n }\n if (wasInWhitespace) {\n // was in whitespace token\n if (!isInWhitespace || (!useMonospaceOptimizations && tmpIndent >= tabSize)) {\n // leaving whitespace token or entering a new indent\n if (generateLinePartForEachWhitespace) {\n const lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n for (let i = lastEndIndex + 1; i <= charIndex; i++) {\n result[resultLen++] = new LinePart(i, 'mtkw', 1 /* IS_WHITESPACE */);\n }\n }\n else {\n result[resultLen++] = new LinePart(charIndex, 'mtkw', 1 /* IS_WHITESPACE */);\n }\n tmpIndent = tmpIndent % tabSize;\n }\n }\n else {\n // was in regular token\n if (charIndex === tokenEndIndex || (isInWhitespace && charIndex > fauxIndentLength)) {\n result[resultLen++] = new LinePart(charIndex, tokenType, 0);\n tmpIndent = tmpIndent % tabSize;\n }\n }\n if (chCode === 9 /* Tab */) {\n tmpIndent = tabSize;\n }\n else if (strings.isFullWidthCharacter(chCode)) {\n tmpIndent += 2;\n }\n else {\n tmpIndent++;\n }\n wasInWhitespace = isInWhitespace;\n while (charIndex === tokenEndIndex) {\n tokenIndex++;\n if (tokenIndex < tokensLength) {\n tokenType = tokens[tokenIndex].type;\n tokenEndIndex = tokens[tokenIndex].endIndex;\n }\n else {\n break;\n }\n }\n }\n let generateWhitespace = false;\n if (wasInWhitespace) {\n // was in whitespace token\n if (continuesWithWrappedLine && onlyBoundary) {\n let lastCharCode = (len > 0 ? lineContent.charCodeAt(len - 1) : 0 /* Null */);\n let prevCharCode = (len > 1 ? lineContent.charCodeAt(len - 2) : 0 /* Null */);\n let isSingleTrailingSpace = (lastCharCode === 32 /* Space */ && (prevCharCode !== 32 /* Space */ && prevCharCode !== 9 /* Tab */));\n if (!isSingleTrailingSpace) {\n generateWhitespace = true;\n }\n }\n else {\n generateWhitespace = true;\n }\n }\n if (generateWhitespace) {\n if (generateLinePartForEachWhitespace) {\n const lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n for (let i = lastEndIndex + 1; i <= len; i++) {\n result[resultLen++] = new LinePart(i, 'mtkw', 1 /* IS_WHITESPACE */);\n }\n }\n else {\n result[resultLen++] = new LinePart(len, 'mtkw', 1 /* IS_WHITESPACE */);\n }\n }\n else {\n result[resultLen++] = new LinePart(len, tokenType, 0);\n }\n return result;\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, len, tokens, _lineDecorations) {\n _lineDecorations.sort(LineDecoration.compare);\n const lineDecorations = LineDecorationsNormalizer.normalize(lineContent, _lineDecorations);\n const lineDecorationsLen = lineDecorations.length;\n let lineDecorationIndex = 0;\n let result = [], resultLen = 0, lastResultEndIndex = 0;\n for (let tokenIndex = 0, len = tokens.length; tokenIndex < len; tokenIndex++) {\n const token = tokens[tokenIndex];\n const tokenEndIndex = token.endIndex;\n const tokenType = token.type;\n const tokenMetadata = token.metadata;\n while (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset < tokenEndIndex) {\n const lineDecoration = lineDecorations[lineDecorationIndex];\n if (lineDecoration.startOffset > lastResultEndIndex) {\n lastResultEndIndex = lineDecoration.startOffset;\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata);\n }\n if (lineDecoration.endOffset + 1 <= tokenEndIndex) {\n // This line decoration ends before this token ends\n lastResultEndIndex = lineDecoration.endOffset + 1;\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata);\n lineDecorationIndex++;\n }\n else {\n // This line decoration continues on to the next token\n lastResultEndIndex = tokenEndIndex;\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata);\n break;\n }\n }\n if (tokenEndIndex > lastResultEndIndex) {\n lastResultEndIndex = tokenEndIndex;\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata);\n }\n }\n const lastTokenEndIndex = tokens[tokens.length - 1].endIndex;\n if (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n while (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n const lineDecoration = lineDecorations[lineDecorationIndex];\n result[resultLen++] = new LinePart(lastResultEndIndex, lineDecoration.className, lineDecoration.metadata);\n lineDecorationIndex++;\n }\n }\n return result;\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, sb) {\n const fontIsMonospace = input.fontIsMonospace;\n const canUseHalfwidthRightwardsArrow = input.canUseHalfwidthRightwardsArrow;\n const containsForeignElements = input.containsForeignElements;\n const lineContent = input.lineContent;\n const len = input.len;\n const isOverflowing = input.isOverflowing;\n const parts = input.parts;\n const fauxIndentLength = input.fauxIndentLength;\n const tabSize = input.tabSize;\n const startVisibleColumn = input.startVisibleColumn;\n const containsRTL = input.containsRTL;\n const spaceWidth = input.spaceWidth;\n const renderSpaceCharCode = input.renderSpaceCharCode;\n const renderWhitespace = input.renderWhitespace;\n const renderControlCharacters = input.renderControlCharacters;\n const characterMapping = new CharacterMapping(len + 1, parts.length);\n let lastCharacterMappingDefined = false;\n let charIndex = 0;\n let visibleColumn = startVisibleColumn;\n let charOffsetInPart = 0;\n let partDisplacement = 0;\n let prevPartContentCnt = 0;\n let partAbsoluteOffset = 0;\n if (containsRTL) {\n sb.appendASCIIString('');\n }\n else {\n sb.appendASCIIString('');\n }\n for (let partIndex = 0, tokensLen = parts.length; partIndex < tokensLen; partIndex++) {\n partAbsoluteOffset += prevPartContentCnt;\n const part = parts[partIndex];\n const partEndIndex = part.endIndex;\n const partType = part.type;\n const partRendersWhitespace = (renderWhitespace !== 0 /* None */ && part.isWhitespace());\n const partRendersWhitespaceWithWidth = partRendersWhitespace && !fontIsMonospace && (partType === 'mtkw' /*only whitespace*/ || !containsForeignElements);\n const partIsEmptyAndHasPseudoAfter = (charIndex === partEndIndex && part.isPseudoAfter());\n charOffsetInPart = 0;\n sb.appendASCIIString('= fauxIndentLength) {\n _visibleColumn += charWidth;\n }\n }\n }\n if (partRendersWhitespaceWithWidth) {\n sb.appendASCIIString(' style=\"width:');\n sb.appendASCIIString(String(spaceWidth * partContentCnt));\n sb.appendASCIIString('px\"');\n }\n sb.appendASCII(62 /* GreaterThan */);\n for (; charIndex < partEndIndex; charIndex++) {\n characterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, partAbsoluteOffset);\n partDisplacement = 0;\n const charCode = lineContent.charCodeAt(charIndex);\n let charWidth;\n if (charCode === 9 /* Tab */) {\n charWidth = (tabSize - (visibleColumn % tabSize)) | 0;\n if (!canUseHalfwidthRightwardsArrow || charWidth > 1) {\n sb.write1(0x2192); // RIGHTWARDS ARROW\n }\n else {\n sb.write1(0xFFEB); // HALFWIDTH RIGHTWARDS ARROW\n }\n for (let space = 2; space <= charWidth; space++) {\n sb.write1(0xA0); //  \n }\n }\n else { // must be CharCode.Space\n charWidth = 1;\n sb.write1(renderSpaceCharCode); // · or word separator middle dot\n }\n charOffsetInPart += charWidth;\n if (charIndex >= fauxIndentLength) {\n visibleColumn += charWidth;\n }\n }\n prevPartContentCnt = partContentCnt;\n }\n else {\n let partContentCnt = 0;\n sb.appendASCII(62 /* GreaterThan */);\n for (; charIndex < partEndIndex; charIndex++) {\n characterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, partAbsoluteOffset);\n partDisplacement = 0;\n const charCode = lineContent.charCodeAt(charIndex);\n let producedCharacters = 1;\n let charWidth = 1;\n switch (charCode) {\n case 9 /* Tab */:\n producedCharacters = (tabSize - (visibleColumn % tabSize));\n charWidth = producedCharacters;\n for (let space = 1; space <= producedCharacters; space++) {\n sb.write1(0xA0); //  \n }\n break;\n case 32 /* Space */:\n sb.write1(0xA0); //  \n break;\n case 60 /* LessThan */:\n sb.appendASCIIString('<');\n break;\n case 62 /* GreaterThan */:\n sb.appendASCIIString('>');\n break;\n case 38 /* Ampersand */:\n sb.appendASCIIString('&');\n break;\n case 0 /* Null */:\n if (renderControlCharacters) {\n // See https://unicode-table.com/en/blocks/control-pictures/\n sb.write1(9216);\n }\n else {\n sb.appendASCIIString('�');\n }\n break;\n case 65279 /* UTF8_BOM */:\n case 8232 /* LINE_SEPARATOR */:\n case 8233 /* PARAGRAPH_SEPARATOR */:\n case 133 /* NEXT_LINE */:\n sb.write1(0xFFFD);\n break;\n default:\n if (strings.isFullWidthCharacter(charCode)) {\n charWidth++;\n }\n // See https://unicode-table.com/en/blocks/control-pictures/\n if (renderControlCharacters && charCode < 32) {\n sb.write1(9216 + charCode);\n }\n else if (renderControlCharacters && charCode === 127) {\n // DEL\n sb.write1(9249);\n }\n else if (renderControlCharacters && isControlCharacter(charCode)) {\n sb.appendASCIIString('[U+');\n sb.appendASCIIString(to4CharHex(charCode));\n sb.appendASCIIString(']');\n producedCharacters = 8;\n }\n else {\n sb.write1(charCode);\n }\n }\n charOffsetInPart += producedCharacters;\n partContentCnt += producedCharacters;\n if (charIndex >= fauxIndentLength) {\n visibleColumn += charWidth;\n }\n }\n prevPartContentCnt = partContentCnt;\n }\n if (partIsEmptyAndHasPseudoAfter) {\n partDisplacement++;\n }\n else {\n partDisplacement = 0;\n }\n if (charIndex >= len && !lastCharacterMappingDefined && part.isPseudoAfter()) {\n lastCharacterMappingDefined = true;\n characterMapping.setColumnInfo(charIndex + 1, partIndex, charOffsetInPart, partAbsoluteOffset);\n }\n sb.appendASCIIString('');\n }\n if (!lastCharacterMappingDefined) {\n // When getting client rects for the last character, we will position the\n // text range at the end of the span, insteaf of at the beginning of next span\n characterMapping.setColumnInfo(len + 1, parts.length - 1, charOffsetInPart, partAbsoluteOffset);\n }\n if (isOverflowing) {\n sb.appendASCIIString('');\n }\n sb.appendASCIIString('');\n return new RenderLineOutput(characterMapping, containsRTL, containsForeignElements);\n}\nfunction to4CharHex(n) {\n return n.toString(16).toUpperCase().padStart(4, '0');\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nexport class Viewport {\n constructor(top, left, width, height) {\n this._viewportBrand = undefined;\n this.top = top | 0;\n this.left = left | 0;\n this.width = width | 0;\n this.height = height | 0;\n }\n}\nexport class OutputPosition {\n constructor(outputLineIndex, outputOffset) {\n this.outputLineIndex = outputLineIndex;\n this.outputOffset = outputOffset;\n }\n toString() {\n return `${this.outputLineIndex}:${this.outputOffset}`;\n }\n toPosition(baseLineNumber, wrappedTextIndentLength) {\n const delta = (this.outputLineIndex > 0 ? wrappedTextIndentLength : 0);\n return new Position(baseLineNumber + this.outputLineIndex, delta + this.outputOffset + 1);\n }\n}\nexport class LineBreakData {\n constructor(breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength, injectionOffsets, injectionOptions) {\n this.breakOffsets = breakOffsets;\n this.breakOffsetsVisibleColumn = breakOffsetsVisibleColumn;\n this.wrappedTextIndentLength = wrappedTextIndentLength;\n this.injectionOffsets = injectionOffsets;\n this.injectionOptions = injectionOptions;\n }\n getInputOffsetOfOutputPosition(outputLineIndex, outputOffset) {\n let inputOffset = 0;\n if (outputLineIndex === 0) {\n inputOffset = outputOffset;\n }\n else {\n inputOffset = this.breakOffsets[outputLineIndex - 1] + outputOffset;\n }\n if (this.injectionOffsets !== null) {\n for (let i = 0; i < this.injectionOffsets.length; i++) {\n if (inputOffset > this.injectionOffsets[i]) {\n if (inputOffset < this.injectionOffsets[i] + this.injectionOptions[i].content.length) {\n // `inputOffset` is within injected text\n inputOffset = this.injectionOffsets[i];\n }\n else {\n inputOffset -= this.injectionOptions[i].content.length;\n }\n }\n else {\n break;\n }\n }\n }\n return inputOffset;\n }\n getOutputPositionOfInputOffset(inputOffset, affinity = 2 /* None */) {\n let delta = 0;\n if (this.injectionOffsets !== null) {\n for (let i = 0; i < this.injectionOffsets.length; i++) {\n if (inputOffset < this.injectionOffsets[i]) {\n break;\n }\n if (affinity !== 1 /* Right */ && inputOffset === this.injectionOffsets[i]) {\n break;\n }\n delta += this.injectionOptions[i].content.length;\n }\n }\n inputOffset += delta;\n return this.getOutputPositionOfOffsetInUnwrappedLine(inputOffset, affinity);\n }\n getOutputPositionOfOffsetInUnwrappedLine(inputOffset, affinity = 2 /* None */) {\n let low = 0;\n let high = this.breakOffsets.length - 1;\n let mid = 0;\n let midStart = 0;\n while (low <= high) {\n mid = low + ((high - low) / 2) | 0;\n const midStop = this.breakOffsets[mid];\n midStart = mid > 0 ? this.breakOffsets[mid - 1] : 0;\n if (affinity === 0 /* Left */) {\n if (inputOffset <= midStart) {\n high = mid - 1;\n }\n else if (inputOffset > midStop) {\n low = mid + 1;\n }\n else {\n break;\n }\n }\n else {\n if (inputOffset < midStart) {\n high = mid - 1;\n }\n else if (inputOffset >= midStop) {\n low = mid + 1;\n }\n else {\n break;\n }\n }\n }\n return new OutputPosition(mid, inputOffset - midStart);\n }\n outputPositionToOffsetInUnwrappedLine(outputLineIndex, outputOffset) {\n let result = (outputLineIndex > 0 ? this.breakOffsets[outputLineIndex - 1] : 0) + outputOffset;\n if (outputLineIndex > 0) {\n result -= this.wrappedTextIndentLength;\n }\n return result;\n }\n normalizeOffsetAroundInjections(offsetInUnwrappedLine, affinity) {\n const injectedText = this.getInjectedTextAtOffset(offsetInUnwrappedLine);\n if (!injectedText) {\n return offsetInUnwrappedLine;\n }\n if (affinity === 2 /* None */) {\n if (offsetInUnwrappedLine === injectedText.offsetInUnwrappedLine + injectedText.length) {\n // go to the end of this injected text\n return injectedText.offsetInUnwrappedLine + injectedText.length;\n }\n else {\n // go to the start of this injected text\n return injectedText.offsetInUnwrappedLine;\n }\n }\n if (affinity === 1 /* Right */) {\n let result = injectedText.offsetInUnwrappedLine + injectedText.length;\n let index = injectedText.injectedTextIndex;\n // traverse all injected text that touch eachother\n while (index + 1 < this.injectionOffsets.length && this.injectionOffsets[index + 1] === this.injectionOffsets[index]) {\n result += this.injectionOptions[index + 1].content.length;\n index++;\n }\n return result;\n }\n // affinity is left\n let result = injectedText.offsetInUnwrappedLine;\n let index = injectedText.injectedTextIndex;\n // traverse all injected text that touch eachother\n while (index - 1 >= 0 && this.injectionOffsets[index - 1] === this.injectionOffsets[index]) {\n result -= this.injectionOptions[index - 1].content.length;\n index++;\n }\n return result;\n }\n getInjectedText(outputLineIndex, outputOffset) {\n const offset = this.outputPositionToOffsetInUnwrappedLine(outputLineIndex, outputOffset);\n const injectedText = this.getInjectedTextAtOffset(offset);\n if (!injectedText) {\n return null;\n }\n return {\n options: this.injectionOptions[injectedText.injectedTextIndex]\n };\n }\n getInjectedTextAtOffset(offsetInUnwrappedLine) {\n const injectionOffsets = this.injectionOffsets;\n const injectionOptions = this.injectionOptions;\n if (injectionOffsets !== null) {\n let totalInjectedTextLengthBefore = 0;\n for (let i = 0; i < injectionOffsets.length; i++) {\n const length = injectionOptions[i].content.length;\n const injectedTextStartOffsetInUnwrappedLine = injectionOffsets[i] + totalInjectedTextLengthBefore;\n const injectedTextEndOffsetInUnwrappedLine = injectionOffsets[i] + totalInjectedTextLengthBefore + length;\n if (injectedTextStartOffsetInUnwrappedLine > offsetInUnwrappedLine) {\n // Injected text starts later.\n break; // All later injected texts have an even larger offset.\n }\n if (offsetInUnwrappedLine <= injectedTextEndOffsetInUnwrappedLine) {\n // Injected text ends after or with the given position (but also starts with or before it).\n return {\n injectedTextIndex: i,\n offsetInUnwrappedLine: injectedTextStartOffsetInUnwrappedLine,\n length\n };\n }\n totalInjectedTextLengthBefore += length;\n }\n }\n return undefined;\n }\n}\nexport class InjectedText {\n constructor(options) {\n this.options = options;\n }\n}\nexport class MinimapLinesRenderingData {\n constructor(tabSize, data) {\n this.tabSize = tabSize;\n this.data = data;\n }\n}\nexport class ViewLineData {\n constructor(content, continuesWithWrappedLine, minColumn, maxColumn, startVisibleColumn, tokens, inlineDecorations) {\n this._viewLineDataBrand = undefined;\n this.content = content;\n this.continuesWithWrappedLine = continuesWithWrappedLine;\n this.minColumn = minColumn;\n this.maxColumn = maxColumn;\n this.startVisibleColumn = startVisibleColumn;\n this.tokens = tokens;\n this.inlineDecorations = inlineDecorations;\n }\n}\nexport class ViewLineRenderingData {\n constructor(minColumn, maxColumn, content, continuesWithWrappedLine, mightContainRTL, mightContainNonBasicASCII, tokens, inlineDecorations, tabSize, startVisibleColumn) {\n this.minColumn = minColumn;\n this.maxColumn = maxColumn;\n this.content = content;\n this.continuesWithWrappedLine = continuesWithWrappedLine;\n this.isBasicASCII = ViewLineRenderingData.isBasicASCII(content, mightContainNonBasicASCII);\n this.containsRTL = ViewLineRenderingData.containsRTL(content, this.isBasicASCII, mightContainRTL);\n this.tokens = tokens;\n this.inlineDecorations = inlineDecorations;\n this.tabSize = tabSize;\n this.startVisibleColumn = startVisibleColumn;\n }\n static isBasicASCII(lineContent, mightContainNonBasicASCII) {\n if (mightContainNonBasicASCII) {\n return strings.isBasicASCII(lineContent);\n }\n return true;\n }\n static containsRTL(lineContent, isBasicASCII, mightContainRTL) {\n if (!isBasicASCII && mightContainRTL) {\n return strings.containsRTL(lineContent);\n }\n return false;\n }\n}\nexport class InlineDecoration {\n constructor(range, inlineClassName, type) {\n this.range = range;\n this.inlineClassName = inlineClassName;\n this.type = type;\n }\n}\nexport class SingleLineInlineDecoration {\n constructor(startOffset, endOffset, inlineClassName, inlineClassNameAffectsLetterSpacing) {\n this.startOffset = startOffset;\n this.endOffset = endOffset;\n this.inlineClassName = inlineClassName;\n this.inlineClassNameAffectsLetterSpacing = inlineClassNameAffectsLetterSpacing;\n }\n toInlineDecoration(lineNumber) {\n return new InlineDecoration(new Range(lineNumber, this.startOffset + 1, lineNumber, this.endOffset + 1), this.inlineClassName, this.inlineClassNameAffectsLetterSpacing ? 3 /* RegularAffectingLetterSpacing */ : 0 /* Regular */);\n }\n}\nexport class ViewModelDecoration {\n constructor(range, options) {\n this._viewModelDecorationBrand = undefined;\n this.range = range;\n this.options = options;\n }\n}\nexport class OverviewRulerDecorationsGroup {\n constructor(color, zIndex, \n /**\n * Decorations are encoded in a number array using the following scheme:\n * - 3*i = lane\n * - 3*i+1 = startLineNumber\n * - 3*i+2 = endLineNumber\n */\n data) {\n this.color = color;\n this.zIndex = zIndex;\n this.data = data;\n }\n static cmp(a, b) {\n if (a.zIndex === b.zIndex) {\n if (a.color < b.color) {\n return -1;\n }\n if (a.color > b.color) {\n return 1;\n }\n return 0;\n }\n return a.zIndex - b.zIndex;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function isFuzzyActionArr(what) {\n return (Array.isArray(what));\n}\nexport function isFuzzyAction(what) {\n return !isFuzzyActionArr(what);\n}\nexport function isString(what) {\n return (typeof what === 'string');\n}\nexport function isIAction(what) {\n return !isString(what);\n}\n// Small helper functions\n/**\n * Is a string null, undefined, or empty?\n */\nexport function empty(s) {\n return (s ? false : true);\n}\n/**\n * Puts a string to lower case if 'ignoreCase' is set.\n */\nexport function fixCase(lexer, str) {\n return (lexer.ignoreCase && str ? str.toLowerCase() : str);\n}\n/**\n * Ensures there are no bad characters in a CSS token class.\n */\nexport function sanitize(s) {\n return s.replace(/[&<>'\"_]/g, '-'); // used on all output token CSS classes\n}\n// Logging\n/**\n * Logs a message.\n */\nexport function log(lexer, msg) {\n console.log(`${lexer.languageId}: ${msg}`);\n}\n// Throwing errors\nexport function createError(lexer, msg) {\n return new Error(`${lexer.languageId}: ${msg}`);\n}\n// Helper functions for rule finding and substitution\n/**\n * substituteMatches is used on lexer strings and can substitutes predefined patterns:\n * \t\t$$ => $\n * \t\t$# => id\n * \t\t$n => matched entry n\n * \t\t@attr => contents of lexer[attr]\n *\n * See documentation for more info\n */\nexport function substituteMatches(lexer, str, id, matches, state) {\n const re = /\\$((\\$)|(#)|(\\d\\d?)|[sS](\\d\\d?)|@(\\w+))/g;\n let stateMatches = null;\n return str.replace(re, function (full, sub, dollar, hash, n, s, attr, ofs, total) {\n if (!empty(dollar)) {\n return '$'; // $$\n }\n if (!empty(hash)) {\n return fixCase(lexer, id); // default $#\n }\n if (!empty(n) && n < matches.length) {\n return fixCase(lexer, matches[n]); // $n\n }\n if (!empty(attr) && lexer && typeof (lexer[attr]) === 'string') {\n return lexer[attr]; //@attribute\n }\n if (stateMatches === null) { // split state on demand\n stateMatches = state.split('.');\n stateMatches.unshift(state);\n }\n if (!empty(s) && s < stateMatches.length) {\n return fixCase(lexer, stateMatches[s]); //$Sn\n }\n return '';\n });\n}\n/**\n * Find the tokenizer rules for a specific state (i.e. next action)\n */\nexport function findRules(lexer, inState) {\n let state = inState;\n while (state && state.length > 0) {\n const rules = lexer.tokenizer[state];\n if (rules) {\n return rules;\n }\n const idx = state.lastIndexOf('.');\n if (idx < 0) {\n state = null; // no further parent\n }\n else {\n state = state.substr(0, idx);\n }\n }\n return null;\n}\n/**\n * Is a certain state defined? In contrast to 'findRules' this works on a ILexerMin.\n * This is used during compilation where we may know the defined states\n * but not yet whether the corresponding rules are correct.\n */\nexport function stateExists(lexer, inState) {\n let state = inState;\n while (state && state.length > 0) {\n const exist = lexer.stateNames[state];\n if (exist) {\n return true;\n }\n const idx = state.lastIndexOf('.');\n if (idx < 0) {\n state = null; // no further parent\n }\n else {\n state = state.substr(0, idx);\n }\n }\n return false;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Token, TokenizationResult, TokenizationResult2 } from '../../../common/core/token.js';\nimport * as modes from '../../../common/modes.js';\nimport { NULL_MODE_ID, NULL_STATE } from '../../../common/modes/nullMode.js';\nimport * as monarchCommon from './monarchCommon.js';\nconst CACHE_STACK_DEPTH = 5;\n/**\n * Reuse the same stack elements up to a certain depth.\n */\nclass MonarchStackElementFactory {\n constructor(maxCacheDepth) {\n this._maxCacheDepth = maxCacheDepth;\n this._entries = Object.create(null);\n }\n static create(parent, state) {\n return this._INSTANCE.create(parent, state);\n }\n create(parent, state) {\n if (parent !== null && parent.depth >= this._maxCacheDepth) {\n // no caching above a certain depth\n return new MonarchStackElement(parent, state);\n }\n let stackElementId = MonarchStackElement.getStackElementId(parent);\n if (stackElementId.length > 0) {\n stackElementId += '|';\n }\n stackElementId += state;\n let result = this._entries[stackElementId];\n if (result) {\n return result;\n }\n result = new MonarchStackElement(parent, state);\n this._entries[stackElementId] = result;\n return result;\n }\n}\nMonarchStackElementFactory._INSTANCE = new MonarchStackElementFactory(CACHE_STACK_DEPTH);\nclass MonarchStackElement {\n constructor(parent, state) {\n this.parent = parent;\n this.state = state;\n this.depth = (this.parent ? this.parent.depth : 0) + 1;\n }\n static getStackElementId(element) {\n let result = '';\n while (element !== null) {\n if (result.length > 0) {\n result += '|';\n }\n result += element.state;\n element = element.parent;\n }\n return result;\n }\n static _equals(a, b) {\n while (a !== null && b !== null) {\n if (a === b) {\n return true;\n }\n if (a.state !== b.state) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n }\n if (a === null && b === null) {\n return true;\n }\n return false;\n }\n equals(other) {\n return MonarchStackElement._equals(this, other);\n }\n push(state) {\n return MonarchStackElementFactory.create(this, state);\n }\n pop() {\n return this.parent;\n }\n popall() {\n let result = this;\n while (result.parent) {\n result = result.parent;\n }\n return result;\n }\n switchTo(state) {\n return MonarchStackElementFactory.create(this.parent, state);\n }\n}\nclass EmbeddedModeData {\n constructor(languageId, state) {\n this.languageId = languageId;\n this.state = state;\n }\n equals(other) {\n return (this.languageId === other.languageId\n && this.state.equals(other.state));\n }\n clone() {\n let stateClone = this.state.clone();\n // save an object\n if (stateClone === this.state) {\n return this;\n }\n return new EmbeddedModeData(this.languageId, this.state);\n }\n}\n/**\n * Reuse the same line states up to a certain depth.\n */\nclass MonarchLineStateFactory {\n constructor(maxCacheDepth) {\n this._maxCacheDepth = maxCacheDepth;\n this._entries = Object.create(null);\n }\n static create(stack, embeddedModeData) {\n return this._INSTANCE.create(stack, embeddedModeData);\n }\n create(stack, embeddedModeData) {\n if (embeddedModeData !== null) {\n // no caching when embedding\n return new MonarchLineState(stack, embeddedModeData);\n }\n if (stack !== null && stack.depth >= this._maxCacheDepth) {\n // no caching above a certain depth\n return new MonarchLineState(stack, embeddedModeData);\n }\n let stackElementId = MonarchStackElement.getStackElementId(stack);\n let result = this._entries[stackElementId];\n if (result) {\n return result;\n }\n result = new MonarchLineState(stack, null);\n this._entries[stackElementId] = result;\n return result;\n }\n}\nMonarchLineStateFactory._INSTANCE = new MonarchLineStateFactory(CACHE_STACK_DEPTH);\nclass MonarchLineState {\n constructor(stack, embeddedModeData) {\n this.stack = stack;\n this.embeddedModeData = embeddedModeData;\n }\n clone() {\n let embeddedModeDataClone = this.embeddedModeData ? this.embeddedModeData.clone() : null;\n // save an object\n if (embeddedModeDataClone === this.embeddedModeData) {\n return this;\n }\n return MonarchLineStateFactory.create(this.stack, this.embeddedModeData);\n }\n equals(other) {\n if (!(other instanceof MonarchLineState)) {\n return false;\n }\n if (!this.stack.equals(other.stack)) {\n return false;\n }\n if (this.embeddedModeData === null && other.embeddedModeData === null) {\n return true;\n }\n if (this.embeddedModeData === null || other.embeddedModeData === null) {\n return false;\n }\n return this.embeddedModeData.equals(other.embeddedModeData);\n }\n}\nclass MonarchClassicTokensCollector {\n constructor() {\n this._tokens = [];\n this._languageId = null;\n this._lastTokenType = null;\n this._lastTokenLanguage = null;\n }\n enterMode(startOffset, languageId) {\n this._languageId = languageId;\n }\n emit(startOffset, type) {\n if (this._lastTokenType === type && this._lastTokenLanguage === this._languageId) {\n return;\n }\n this._lastTokenType = type;\n this._lastTokenLanguage = this._languageId;\n this._tokens.push(new Token(startOffset, type, this._languageId));\n }\n nestedModeTokenize(embeddedModeLine, hasEOL, embeddedModeData, offsetDelta) {\n const nestedModeId = embeddedModeData.languageId;\n const embeddedModeState = embeddedModeData.state;\n const nestedModeTokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n if (!nestedModeTokenizationSupport) {\n this.enterMode(offsetDelta, nestedModeId);\n this.emit(offsetDelta, '');\n return embeddedModeState;\n }\n let nestedResult = nestedModeTokenizationSupport.tokenize(embeddedModeLine, hasEOL, embeddedModeState, offsetDelta);\n this._tokens = this._tokens.concat(nestedResult.tokens);\n this._lastTokenType = null;\n this._lastTokenLanguage = null;\n this._languageId = null;\n return nestedResult.endState;\n }\n finalize(endState) {\n return new TokenizationResult(this._tokens, endState);\n }\n}\nclass MonarchModernTokensCollector {\n constructor(modeService, theme) {\n this._modeService = modeService;\n this._theme = theme;\n this._prependTokens = null;\n this._tokens = [];\n this._currentLanguageId = 0 /* Null */;\n this._lastTokenMetadata = 0;\n }\n enterMode(startOffset, languageId) {\n this._currentLanguageId = this._modeService.languageIdCodec.encodeLanguageId(languageId);\n }\n emit(startOffset, type) {\n let metadata = this._theme.match(this._currentLanguageId, type);\n if (this._lastTokenMetadata === metadata) {\n return;\n }\n this._lastTokenMetadata = metadata;\n this._tokens.push(startOffset);\n this._tokens.push(metadata);\n }\n static _merge(a, b, c) {\n let aLen = (a !== null ? a.length : 0);\n let bLen = b.length;\n let cLen = (c !== null ? c.length : 0);\n if (aLen === 0 && bLen === 0 && cLen === 0) {\n return new Uint32Array(0);\n }\n if (aLen === 0 && bLen === 0) {\n return c;\n }\n if (bLen === 0 && cLen === 0) {\n return a;\n }\n let result = new Uint32Array(aLen + bLen + cLen);\n if (a !== null) {\n result.set(a);\n }\n for (let i = 0; i < bLen; i++) {\n result[aLen + i] = b[i];\n }\n if (c !== null) {\n result.set(c, aLen + bLen);\n }\n return result;\n }\n nestedModeTokenize(embeddedModeLine, hasEOL, embeddedModeData, offsetDelta) {\n const nestedModeId = embeddedModeData.languageId;\n const embeddedModeState = embeddedModeData.state;\n const nestedModeTokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n if (!nestedModeTokenizationSupport) {\n this.enterMode(offsetDelta, nestedModeId);\n this.emit(offsetDelta, '');\n return embeddedModeState;\n }\n let nestedResult = nestedModeTokenizationSupport.tokenize2(embeddedModeLine, hasEOL, embeddedModeState, offsetDelta);\n this._prependTokens = MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, nestedResult.tokens);\n this._tokens = [];\n this._currentLanguageId = 0;\n this._lastTokenMetadata = 0;\n return nestedResult.endState;\n }\n finalize(endState) {\n return new TokenizationResult2(MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null), endState);\n }\n}\nexport class MonarchTokenizer {\n constructor(modeService, standaloneThemeService, languageId, lexer) {\n this._modeService = modeService;\n this._standaloneThemeService = standaloneThemeService;\n this._languageId = languageId;\n this._lexer = lexer;\n this._embeddedModes = Object.create(null);\n this.embeddedLoaded = Promise.resolve(undefined);\n // Set up listening for embedded modes\n let emitting = false;\n this._tokenizationRegistryListener = modes.TokenizationRegistry.onDidChange((e) => {\n if (emitting) {\n return;\n }\n let isOneOfMyEmbeddedModes = false;\n for (let i = 0, len = e.changedLanguages.length; i < len; i++) {\n let language = e.changedLanguages[i];\n if (this._embeddedModes[language]) {\n isOneOfMyEmbeddedModes = true;\n break;\n }\n }\n if (isOneOfMyEmbeddedModes) {\n emitting = true;\n modes.TokenizationRegistry.fire([this._languageId]);\n emitting = false;\n }\n });\n }\n dispose() {\n this._tokenizationRegistryListener.dispose();\n }\n getLoadStatus() {\n let promises = [];\n for (let nestedModeId in this._embeddedModes) {\n const tokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n if (tokenizationSupport) {\n // The nested mode is already loaded\n if (tokenizationSupport instanceof MonarchTokenizer) {\n const nestedModeStatus = tokenizationSupport.getLoadStatus();\n if (nestedModeStatus.loaded === false) {\n promises.push(nestedModeStatus.promise);\n }\n }\n continue;\n }\n const tokenizationSupportPromise = modes.TokenizationRegistry.getPromise(nestedModeId);\n if (tokenizationSupportPromise) {\n // The nested mode is in the process of being loaded\n promises.push(tokenizationSupportPromise);\n }\n }\n if (promises.length === 0) {\n return {\n loaded: true\n };\n }\n return {\n loaded: false,\n promise: Promise.all(promises).then(_ => undefined)\n };\n }\n getInitialState() {\n let rootState = MonarchStackElementFactory.create(null, this._lexer.start);\n return MonarchLineStateFactory.create(rootState, null);\n }\n tokenize(line, hasEOL, lineState, offsetDelta) {\n let tokensCollector = new MonarchClassicTokensCollector();\n let endLineState = this._tokenize(line, hasEOL, lineState, offsetDelta, tokensCollector);\n return tokensCollector.finalize(endLineState);\n }\n tokenize2(line, hasEOL, lineState, offsetDelta) {\n let tokensCollector = new MonarchModernTokensCollector(this._modeService, this._standaloneThemeService.getColorTheme().tokenTheme);\n let endLineState = this._tokenize(line, hasEOL, lineState, offsetDelta, tokensCollector);\n return tokensCollector.finalize(endLineState);\n }\n _tokenize(line, hasEOL, lineState, offsetDelta, collector) {\n if (lineState.embeddedModeData) {\n return this._nestedTokenize(line, hasEOL, lineState, offsetDelta, collector);\n }\n else {\n return this._myTokenize(line, hasEOL, lineState, offsetDelta, collector);\n }\n }\n _findLeavingNestedModeOffset(line, state) {\n let rules = this._lexer.tokenizer[state.stack.state];\n if (!rules) {\n rules = monarchCommon.findRules(this._lexer, state.stack.state); // do parent matching\n if (!rules) {\n throw monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state.stack.state);\n }\n }\n let popOffset = -1;\n let hasEmbeddedPopRule = false;\n for (const rule of rules) {\n if (!monarchCommon.isIAction(rule.action) || rule.action.nextEmbedded !== '@pop') {\n continue;\n }\n hasEmbeddedPopRule = true;\n let regex = rule.regex;\n let regexSource = rule.regex.source;\n if (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {\n let flags = (regex.ignoreCase ? 'i' : '') + (regex.unicode ? 'u' : '');\n regex = new RegExp(regexSource.substr(4, regexSource.length - 5), flags);\n }\n let result = line.search(regex);\n if (result === -1 || (result !== 0 && rule.matchOnlyAtLineStart)) {\n continue;\n }\n if (popOffset === -1 || result < popOffset) {\n popOffset = result;\n }\n }\n if (!hasEmbeddedPopRule) {\n throw monarchCommon.createError(this._lexer, 'no rule containing nextEmbedded: \"@pop\" in tokenizer embedded state: ' + state.stack.state);\n }\n return popOffset;\n }\n _nestedTokenize(line, hasEOL, lineState, offsetDelta, tokensCollector) {\n let popOffset = this._findLeavingNestedModeOffset(line, lineState);\n if (popOffset === -1) {\n // tokenization will not leave nested mode\n let nestedEndState = tokensCollector.nestedModeTokenize(line, hasEOL, lineState.embeddedModeData, offsetDelta);\n return MonarchLineStateFactory.create(lineState.stack, new EmbeddedModeData(lineState.embeddedModeData.languageId, nestedEndState));\n }\n let nestedModeLine = line.substring(0, popOffset);\n if (nestedModeLine.length > 0) {\n // tokenize with the nested mode\n tokensCollector.nestedModeTokenize(nestedModeLine, false, lineState.embeddedModeData, offsetDelta);\n }\n let restOfTheLine = line.substring(popOffset);\n return this._myTokenize(restOfTheLine, hasEOL, lineState, offsetDelta + popOffset, tokensCollector);\n }\n _safeRuleName(rule) {\n if (rule) {\n return rule.name;\n }\n return '(unknown)';\n }\n _myTokenize(lineWithoutLF, hasEOL, lineState, offsetDelta, tokensCollector) {\n tokensCollector.enterMode(offsetDelta, this._languageId);\n const lineWithoutLFLength = lineWithoutLF.length;\n const line = (hasEOL && this._lexer.includeLF ? lineWithoutLF + '\\n' : lineWithoutLF);\n const lineLength = line.length;\n let embeddedModeData = lineState.embeddedModeData;\n let stack = lineState.stack;\n let pos = 0;\n let groupMatching = null;\n // See https://github.com/microsoft/monaco-editor/issues/1235\n // Evaluate rules at least once for an empty line\n let forceEvaluation = true;\n while (forceEvaluation || pos < lineLength) {\n const pos0 = pos;\n const stackLen0 = stack.depth;\n const groupLen0 = groupMatching ? groupMatching.groups.length : 0;\n const state = stack.state;\n let matches = null;\n let matched = null;\n let action = null;\n let rule = null;\n let enteringEmbeddedMode = null;\n // check if we need to process group matches first\n if (groupMatching) {\n matches = groupMatching.matches;\n const groupEntry = groupMatching.groups.shift();\n matched = groupEntry.matched;\n action = groupEntry.action;\n rule = groupMatching.rule;\n // cleanup if necessary\n if (groupMatching.groups.length === 0) {\n groupMatching = null;\n }\n }\n else {\n // otherwise we match on the token stream\n if (!forceEvaluation && pos >= lineLength) {\n // nothing to do\n break;\n }\n forceEvaluation = false;\n // get the rules for this state\n let rules = this._lexer.tokenizer[state];\n if (!rules) {\n rules = monarchCommon.findRules(this._lexer, state); // do parent matching\n if (!rules) {\n throw monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state);\n }\n }\n // try each rule until we match\n let restOfLine = line.substr(pos);\n for (const rule of rules) {\n if (pos === 0 || !rule.matchOnlyAtLineStart) {\n matches = restOfLine.match(rule.regex);\n if (matches) {\n matched = matches[0];\n action = rule.action;\n break;\n }\n }\n }\n }\n // We matched 'rule' with 'matches' and 'action'\n if (!matches) {\n matches = [''];\n matched = '';\n }\n if (!action) {\n // bad: we didn't match anything, and there is no action to take\n // we need to advance the stream or we get progress trouble\n if (pos < lineLength) {\n matches = [line.charAt(pos)];\n matched = matches[0];\n }\n action = this._lexer.defaultToken;\n }\n if (matched === null) {\n // should never happen, needed for strict null checking\n break;\n }\n // advance stream\n pos += matched.length;\n // maybe call action function (used for 'cases')\n while (monarchCommon.isFuzzyAction(action) && monarchCommon.isIAction(action) && action.test) {\n action = action.test(matched, matches, state, pos === lineLength);\n }\n let result = null;\n // set the result: either a string or an array of actions\n if (typeof action === 'string' || Array.isArray(action)) {\n result = action;\n }\n else if (action.group) {\n result = action.group;\n }\n else if (action.token !== null && action.token !== undefined) {\n // do $n replacements?\n if (action.tokenSubst) {\n result = monarchCommon.substituteMatches(this._lexer, action.token, matched, matches, state);\n }\n else {\n result = action.token;\n }\n // enter embedded mode?\n if (action.nextEmbedded) {\n if (action.nextEmbedded === '@pop') {\n if (!embeddedModeData) {\n throw monarchCommon.createError(this._lexer, 'cannot pop embedded mode if not inside one');\n }\n embeddedModeData = null;\n }\n else if (embeddedModeData) {\n throw monarchCommon.createError(this._lexer, 'cannot enter embedded mode from within an embedded mode');\n }\n else {\n enteringEmbeddedMode = monarchCommon.substituteMatches(this._lexer, action.nextEmbedded, matched, matches, state);\n }\n }\n // state transformations\n if (action.goBack) { // back up the stream..\n pos = Math.max(0, pos - action.goBack);\n }\n if (action.switchTo && typeof action.switchTo === 'string') {\n let nextState = monarchCommon.substituteMatches(this._lexer, action.switchTo, matched, matches, state); // switch state without a push...\n if (nextState[0] === '@') {\n nextState = nextState.substr(1); // peel off starting '@'\n }\n if (!monarchCommon.findRules(this._lexer, nextState)) {\n throw monarchCommon.createError(this._lexer, 'trying to switch to a state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n }\n else {\n stack = stack.switchTo(nextState);\n }\n }\n else if (action.transform && typeof action.transform === 'function') {\n throw monarchCommon.createError(this._lexer, 'action.transform not supported');\n }\n else if (action.next) {\n if (action.next === '@push') {\n if (stack.depth >= this._lexer.maxStack) {\n throw monarchCommon.createError(this._lexer, 'maximum tokenizer stack size reached: [' +\n stack.state + ',' + stack.parent.state + ',...]');\n }\n else {\n stack = stack.push(state);\n }\n }\n else if (action.next === '@pop') {\n if (stack.depth <= 1) {\n throw monarchCommon.createError(this._lexer, 'trying to pop an empty stack in rule: ' + this._safeRuleName(rule));\n }\n else {\n stack = stack.pop();\n }\n }\n else if (action.next === '@popall') {\n stack = stack.popall();\n }\n else {\n let nextState = monarchCommon.substituteMatches(this._lexer, action.next, matched, matches, state);\n if (nextState[0] === '@') {\n nextState = nextState.substr(1); // peel off starting '@'\n }\n if (!monarchCommon.findRules(this._lexer, nextState)) {\n throw monarchCommon.createError(this._lexer, 'trying to set a next state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n }\n else {\n stack = stack.push(nextState);\n }\n }\n }\n if (action.log && typeof (action.log) === 'string') {\n monarchCommon.log(this._lexer, this._lexer.languageId + ': ' + monarchCommon.substituteMatches(this._lexer, action.log, matched, matches, state));\n }\n }\n // check result\n if (result === null) {\n throw monarchCommon.createError(this._lexer, 'lexer rule has no well-defined action in rule: ' + this._safeRuleName(rule));\n }\n const computeNewStateForEmbeddedMode = (enteringEmbeddedMode) => {\n // substitute language alias to known modes to support syntax highlighting\n let enteringEmbeddedModeId = this._modeService.getModeIdForLanguageName(enteringEmbeddedMode);\n if (enteringEmbeddedModeId) {\n enteringEmbeddedMode = enteringEmbeddedModeId;\n }\n const embeddedModeData = this._getNestedEmbeddedModeData(enteringEmbeddedMode);\n if (pos < lineLength) {\n // there is content from the embedded mode on this line\n const restOfLine = lineWithoutLF.substr(pos);\n return this._nestedTokenize(restOfLine, hasEOL, MonarchLineStateFactory.create(stack, embeddedModeData), offsetDelta + pos, tokensCollector);\n }\n else {\n return MonarchLineStateFactory.create(stack, embeddedModeData);\n }\n };\n // is the result a group match?\n if (Array.isArray(result)) {\n if (groupMatching && groupMatching.groups.length > 0) {\n throw monarchCommon.createError(this._lexer, 'groups cannot be nested: ' + this._safeRuleName(rule));\n }\n if (matches.length !== result.length + 1) {\n throw monarchCommon.createError(this._lexer, 'matched number of groups does not match the number of actions in rule: ' + this._safeRuleName(rule));\n }\n let totalLen = 0;\n for (let i = 1; i < matches.length; i++) {\n totalLen += matches[i].length;\n }\n if (totalLen !== matched.length) {\n throw monarchCommon.createError(this._lexer, 'with groups, all characters should be matched in consecutive groups in rule: ' + this._safeRuleName(rule));\n }\n groupMatching = {\n rule: rule,\n matches: matches,\n groups: []\n };\n for (let i = 0; i < result.length; i++) {\n groupMatching.groups[i] = {\n action: result[i],\n matched: matches[i + 1]\n };\n }\n pos -= matched.length;\n // call recursively to initiate first result match\n continue;\n }\n else {\n // regular result\n // check for '@rematch'\n if (result === '@rematch') {\n pos -= matched.length;\n matched = ''; // better set the next state too..\n matches = null;\n result = '';\n // Even though `@rematch` was specified, if `nextEmbedded` also specified,\n // a state transition should occur.\n if (enteringEmbeddedMode !== null) {\n return computeNewStateForEmbeddedMode(enteringEmbeddedMode);\n }\n }\n // check progress\n if (matched.length === 0) {\n if (lineLength === 0 || stackLen0 !== stack.depth || state !== stack.state || (!groupMatching ? 0 : groupMatching.groups.length) !== groupLen0) {\n continue;\n }\n else {\n throw monarchCommon.createError(this._lexer, 'no progress in tokenizer in rule: ' + this._safeRuleName(rule));\n }\n }\n // return the result (and check for brace matching)\n // todo: for efficiency we could pre-sanitize tokenPostfix and substitutions\n let tokenType = null;\n if (monarchCommon.isString(result) && result.indexOf('@brackets') === 0) {\n let rest = result.substr('@brackets'.length);\n let bracket = findBracket(this._lexer, matched);\n if (!bracket) {\n throw monarchCommon.createError(this._lexer, '@brackets token returned but no bracket defined as: ' + matched);\n }\n tokenType = monarchCommon.sanitize(bracket.token + rest);\n }\n else {\n let token = (result === '' ? '' : result + this._lexer.tokenPostfix);\n tokenType = monarchCommon.sanitize(token);\n }\n if (pos0 < lineWithoutLFLength) {\n tokensCollector.emit(pos0 + offsetDelta, tokenType);\n }\n }\n if (enteringEmbeddedMode !== null) {\n return computeNewStateForEmbeddedMode(enteringEmbeddedMode);\n }\n }\n return MonarchLineStateFactory.create(stack, embeddedModeData);\n }\n _getNestedEmbeddedModeData(mimetypeOrModeId) {\n let nestedModeId = this._locateMode(mimetypeOrModeId);\n if (nestedModeId) {\n let tokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n if (tokenizationSupport) {\n return new EmbeddedModeData(nestedModeId, tokenizationSupport.getInitialState());\n }\n }\n return new EmbeddedModeData(nestedModeId || NULL_MODE_ID, NULL_STATE);\n }\n _locateMode(mimetypeOrModeId) {\n if (!mimetypeOrModeId || !this._modeService.isRegisteredMode(mimetypeOrModeId)) {\n return null;\n }\n if (mimetypeOrModeId === this._languageId) {\n // embedding myself...\n return mimetypeOrModeId;\n }\n const languageId = this._modeService.getModeId(mimetypeOrModeId);\n if (languageId) {\n // Fire mode loading event\n this._modeService.triggerMode(languageId);\n this._embeddedModes[languageId] = true;\n }\n return languageId;\n }\n}\n/**\n * Searches for a bracket in the 'brackets' attribute that matches the input.\n */\nfunction findBracket(lexer, matched) {\n if (!matched) {\n return null;\n }\n matched = monarchCommon.fixCase(lexer, matched);\n let brackets = lexer.brackets;\n for (const bracket of brackets) {\n if (bracket.open === matched) {\n return { token: bracket.token, bracketType: 1 /* Open */ };\n }\n else if (bracket.close === matched) {\n return { token: bracket.token, bracketType: -1 /* Close */ };\n }\n }\n return null;\n}\nexport function createTokenizationSupport(modeService, standaloneThemeService, languageId, lexer) {\n return new MonarchTokenizer(modeService, standaloneThemeService, languageId, lexer);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar _a;\nimport { TimeoutTimer } from '../../../base/common/async.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { LineTokens } from '../../common/core/lineTokens.js';\nimport { TokenizationRegistry } from '../../common/modes.js';\nimport { RenderLineInput, renderViewLine2 as renderViewLine } from '../../common/viewLayout/viewLineRenderer.js';\nimport { ViewLineRenderingData } from '../../common/viewModel/viewModel.js';\nimport { MonarchTokenizer } from '../common/monarch/monarchLexer.js';\nconst ttPolicy = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('standaloneColorizer', { createHTML: value => value });\nexport class Colorizer {\n static colorizeElement(themeService, modeService, domNode, options) {\n options = options || {};\n let theme = options.theme || 'vs';\n let mimeType = options.mimeType || domNode.getAttribute('lang') || domNode.getAttribute('data-lang');\n if (!mimeType) {\n console.error('Mode not detected');\n return Promise.resolve();\n }\n themeService.setTheme(theme);\n let text = domNode.firstChild ? domNode.firstChild.nodeValue : '';\n domNode.className += ' ' + theme;\n let render = (str) => {\n var _a;\n const trustedhtml = (_a = ttPolicy === null || ttPolicy === void 0 ? void 0 : ttPolicy.createHTML(str)) !== null && _a !== void 0 ? _a : str;\n domNode.innerHTML = trustedhtml;\n };\n return this.colorize(modeService, text || '', mimeType, options).then(render, (err) => console.error(err));\n }\n static colorize(modeService, text, mimeType, options) {\n const languageIdCodec = modeService.languageIdCodec;\n let tabSize = 4;\n if (options && typeof options.tabSize === 'number') {\n tabSize = options.tabSize;\n }\n if (strings.startsWithUTF8BOM(text)) {\n text = text.substr(1);\n }\n let lines = strings.splitLines(text);\n let language = modeService.getModeId(mimeType);\n if (!language) {\n return Promise.resolve(_fakeColorize(lines, tabSize, languageIdCodec));\n }\n // Send out the event to create the mode\n modeService.triggerMode(language);\n const tokenizationSupport = TokenizationRegistry.get(language);\n if (tokenizationSupport) {\n return _colorize(lines, tabSize, tokenizationSupport, languageIdCodec);\n }\n const tokenizationSupportPromise = TokenizationRegistry.getPromise(language);\n if (tokenizationSupportPromise) {\n // A tokenizer will be registered soon\n return new Promise((resolve, reject) => {\n tokenizationSupportPromise.then(tokenizationSupport => {\n _colorize(lines, tabSize, tokenizationSupport, languageIdCodec).then(resolve, reject);\n }, reject);\n });\n }\n return new Promise((resolve, reject) => {\n let listener = null;\n let timeout = null;\n const execute = () => {\n if (listener) {\n listener.dispose();\n listener = null;\n }\n if (timeout) {\n timeout.dispose();\n timeout = null;\n }\n const tokenizationSupport = TokenizationRegistry.get(language);\n if (tokenizationSupport) {\n _colorize(lines, tabSize, tokenizationSupport, languageIdCodec).then(resolve, reject);\n return;\n }\n resolve(_fakeColorize(lines, tabSize, languageIdCodec));\n };\n // wait 500ms for mode to load, then give up\n timeout = new TimeoutTimer();\n timeout.cancelAndSet(execute, 500);\n listener = TokenizationRegistry.onDidChange((e) => {\n if (e.changedLanguages.indexOf(language) >= 0) {\n execute();\n }\n });\n });\n }\n static colorizeLine(line, mightContainNonBasicASCII, mightContainRTL, tokens, tabSize = 4) {\n const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, mightContainNonBasicASCII);\n const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, mightContainRTL);\n let renderResult = renderViewLine(new RenderLineInput(false, true, line, false, isBasicASCII, containsRTL, 0, tokens, [], tabSize, 0, 0, 0, 0, -1, 'none', false, false, null));\n return renderResult.html;\n }\n static colorizeModelLine(model, lineNumber, tabSize = 4) {\n let content = model.getLineContent(lineNumber);\n model.forceTokenization(lineNumber);\n let tokens = model.getLineTokens(lineNumber);\n let inflatedTokens = tokens.inflate();\n return this.colorizeLine(content, model.mightContainNonBasicASCII(), model.mightContainRTL(), inflatedTokens, tabSize);\n }\n}\nfunction _colorize(lines, tabSize, tokenizationSupport, languageIdCodec) {\n return new Promise((c, e) => {\n const execute = () => {\n const result = _actualColorize(lines, tabSize, tokenizationSupport, languageIdCodec);\n if (tokenizationSupport instanceof MonarchTokenizer) {\n const status = tokenizationSupport.getLoadStatus();\n if (status.loaded === false) {\n status.promise.then(execute, e);\n return;\n }\n }\n c(result);\n };\n execute();\n });\n}\nfunction _fakeColorize(lines, tabSize, languageIdCodec) {\n let html = [];\n const defaultMetadata = ((0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\n const tokens = new Uint32Array(2);\n tokens[0] = 0;\n tokens[1] = defaultMetadata;\n for (let i = 0, length = lines.length; i < length; i++) {\n let line = lines[i];\n tokens[0] = line.length;\n const lineTokens = new LineTokens(tokens, line, languageIdCodec);\n const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, /* check for basic ASCII */ true);\n const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, /* check for RTL */ true);\n let renderResult = renderViewLine(new RenderLineInput(false, true, line, false, isBasicASCII, containsRTL, 0, lineTokens, [], tabSize, 0, 0, 0, 0, -1, 'none', false, false, null));\n html = html.concat(renderResult.html);\n html.push('
');\n }\n return html.join('');\n}\nfunction _actualColorize(lines, tabSize, tokenizationSupport, languageIdCodec) {\n let html = [];\n let state = tokenizationSupport.getInitialState();\n for (let i = 0, length = lines.length; i < length; i++) {\n let line = lines[i];\n let tokenizeResult = tokenizationSupport.tokenize2(line, true, state, 0);\n LineTokens.convertToEndOffset(tokenizeResult.tokens, line.length);\n let lineTokens = new LineTokens(tokenizeResult.tokens, line, languageIdCodec);\n const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, /* check for basic ASCII */ true);\n const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, /* check for RTL */ true);\n let renderResult = renderViewLine(new RenderLineInput(false, true, line, false, isBasicASCII, containsRTL, 0, lineTokens.inflate(), [], tabSize, 0, 0, 0, 0, -1, 'none', false, false, null));\n html = html.concat(renderResult.html);\n html.push('
');\n state = tokenizeResult.endState;\n }\n return html.join('');\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as editorCommon from '../common/editorCommon.js';\n/**\n *@internal\n */\nexport function isCodeEditor(thing) {\n if (thing && typeof thing.getEditorType === 'function') {\n return thing.getEditorType() === editorCommon.EditorType.ICodeEditor;\n }\n else {\n return false;\n }\n}\n/**\n *@internal\n */\nexport function isDiffEditor(thing) {\n if (thing && typeof thing.getEditorType === 'function') {\n return thing.getEditorType() === editorCommon.EditorType.IDiffEditor;\n }\n else {\n return false;\n }\n}\n/**\n *@internal\n */\nexport function getCodeEditor(thing) {\n if (isCodeEditor(thing)) {\n return thing;\n }\n if (isDiffEditor(thing)) {\n return thing.getModifiedEditor();\n }\n return null;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { isObject } from '../../../base/common/types.js';\nexport const IBulkEditService = createDecorator('IWorkspaceEditService');\nfunction isWorkspaceFileEdit(thing) {\n return isObject(thing) && (Boolean(thing.newUri) || Boolean(thing.oldUri));\n}\nfunction isWorkspaceTextEdit(thing) {\n return isObject(thing) && URI.isUri(thing.resource) && isObject(thing.edit);\n}\nexport class ResourceEdit {\n constructor(metadata) {\n this.metadata = metadata;\n }\n static convert(edit) {\n return edit.edits.map(edit => {\n if (isWorkspaceTextEdit(edit)) {\n return new ResourceTextEdit(edit.resource, edit.edit, edit.modelVersionId, edit.metadata);\n }\n if (isWorkspaceFileEdit(edit)) {\n return new ResourceFileEdit(edit.oldUri, edit.newUri, edit.options, edit.metadata);\n }\n throw new Error('Unsupported edit');\n });\n }\n}\nexport class ResourceTextEdit extends ResourceEdit {\n constructor(resource, textEdit, versionId, metadata) {\n super(metadata);\n this.resource = resource;\n this.textEdit = textEdit;\n this.versionId = versionId;\n }\n}\nexport class ResourceFileEdit extends ResourceEdit {\n constructor(oldResource, newResource, options, metadata) {\n super(metadata);\n this.oldResource = oldResource;\n this.newResource = newResource;\n this.options = options;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Iterates over each entry in the provided dictionary. The iterator allows\n * to remove elements and will stop when the callback returns {{false}}.\n */\nexport function forEach(from, callback) {\n for (let key in from) {\n if (hasOwnProperty.call(from, key)) {\n const result = callback({ key: key, value: from[key] }, function () {\n delete from[key];\n });\n if (result === false) {\n return;\n }\n }\n }\n}\nexport class SetMap {\n constructor() {\n this.map = new Map();\n }\n add(key, value) {\n let values = this.map.get(key);\n if (!values) {\n values = new Set();\n this.map.set(key, values);\n }\n values.add(value);\n }\n delete(key, value) {\n const values = this.map.get(key);\n if (!values) {\n return;\n }\n values.delete(value);\n if (values.size === 0) {\n this.map.delete(key);\n }\n }\n forEach(key, fn) {\n const values = this.map.get(key);\n if (!values) {\n return;\n }\n values.forEach(fn);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as objects from '../../../base/common/objects.js';\nimport * as arrays from '../../../base/common/arrays.js';\nimport { editorOptionsRegistry, ValidatedEditorOptions, ConfigurationChangedEvent, EDITOR_MODEL_DEFAULTS, ComputeOptionsMemory } from './editorOptions.js';\nimport { EditorZoom } from './editorZoom.js';\nimport { BareFontInfo } from './fontInfo.js';\nimport { Extensions } from '../../../platform/configuration/common/configurationRegistry.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\nimport { forEach } from '../../../base/common/collections.js';\nexport const TabFocus = new class {\n constructor() {\n this._tabFocus = false;\n this._onDidChangeTabFocus = new Emitter();\n this.onDidChangeTabFocus = this._onDidChangeTabFocus.event;\n }\n getTabFocusMode() {\n return this._tabFocus;\n }\n setTabFocusMode(tabFocusMode) {\n if (this._tabFocus === tabFocusMode) {\n return;\n }\n this._tabFocus = tabFocusMode;\n this._onDidChangeTabFocus.fire(this._tabFocus);\n }\n};\nconst hasOwnProperty = Object.hasOwnProperty;\nexport class ComputedEditorOptions {\n constructor() {\n this._values = [];\n }\n _read(id) {\n return this._values[id];\n }\n get(id) {\n return this._values[id];\n }\n _write(id, value) {\n this._values[id] = value;\n }\n}\nclass RawEditorOptions {\n constructor() {\n this._values = [];\n }\n _read(id) {\n return this._values[id];\n }\n _write(id, value) {\n this._values[id] = value;\n }\n}\nclass EditorConfiguration2 {\n static readOptions(_options) {\n const options = _options;\n const result = new RawEditorOptions();\n for (const editorOption of editorOptionsRegistry) {\n const value = (editorOption.name === '_never_' ? undefined : options[editorOption.name]);\n result._write(editorOption.id, value);\n }\n return result;\n }\n static validateOptions(options) {\n const result = new ValidatedEditorOptions();\n for (const editorOption of editorOptionsRegistry) {\n result._write(editorOption.id, editorOption.validate(options._read(editorOption.id)));\n }\n return result;\n }\n static computeOptions(options, env) {\n const result = new ComputedEditorOptions();\n for (const editorOption of editorOptionsRegistry) {\n result._write(editorOption.id, editorOption.compute(env, result, options._read(editorOption.id)));\n }\n return result;\n }\n static _deepEquals(a, b) {\n if (typeof a !== 'object' || typeof b !== 'object') {\n return (a === b);\n }\n if (Array.isArray(a) || Array.isArray(b)) {\n return (Array.isArray(a) && Array.isArray(b) ? arrays.equals(a, b) : false);\n }\n for (let key in a) {\n if (!EditorConfiguration2._deepEquals(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n static checkEquals(a, b) {\n const result = [];\n let somethingChanged = false;\n for (const editorOption of editorOptionsRegistry) {\n const changed = !EditorConfiguration2._deepEquals(a._read(editorOption.id), b._read(editorOption.id));\n result[editorOption.id] = changed;\n if (changed) {\n somethingChanged = true;\n }\n }\n return (somethingChanged ? new ConfigurationChangedEvent(result) : null);\n }\n}\n/**\n * Compatibility with old options\n */\nfunction migrateOptions(options) {\n const wordWrap = options.wordWrap;\n if (wordWrap === true) {\n options.wordWrap = 'on';\n }\n else if (wordWrap === false) {\n options.wordWrap = 'off';\n }\n const lineNumbers = options.lineNumbers;\n if (lineNumbers === true) {\n options.lineNumbers = 'on';\n }\n else if (lineNumbers === false) {\n options.lineNumbers = 'off';\n }\n const autoClosingBrackets = options.autoClosingBrackets;\n if (autoClosingBrackets === false) {\n options.autoClosingBrackets = 'never';\n options.autoClosingQuotes = 'never';\n options.autoSurround = 'never';\n }\n const cursorBlinking = options.cursorBlinking;\n if (cursorBlinking === 'visible') {\n options.cursorBlinking = 'solid';\n }\n const renderWhitespace = options.renderWhitespace;\n if (renderWhitespace === true) {\n options.renderWhitespace = 'boundary';\n }\n else if (renderWhitespace === false) {\n options.renderWhitespace = 'none';\n }\n const renderLineHighlight = options.renderLineHighlight;\n if (renderLineHighlight === true) {\n options.renderLineHighlight = 'line';\n }\n else if (renderLineHighlight === false) {\n options.renderLineHighlight = 'none';\n }\n const acceptSuggestionOnEnter = options.acceptSuggestionOnEnter;\n if (acceptSuggestionOnEnter === true) {\n options.acceptSuggestionOnEnter = 'on';\n }\n else if (acceptSuggestionOnEnter === false) {\n options.acceptSuggestionOnEnter = 'off';\n }\n const tabCompletion = options.tabCompletion;\n if (tabCompletion === false) {\n options.tabCompletion = 'off';\n }\n else if (tabCompletion === true) {\n options.tabCompletion = 'onlySnippets';\n }\n const suggest = options.suggest;\n if (suggest && typeof suggest.filteredTypes === 'object' && suggest.filteredTypes) {\n const mapping = {};\n mapping['method'] = 'showMethods';\n mapping['function'] = 'showFunctions';\n mapping['constructor'] = 'showConstructors';\n mapping['deprecated'] = 'showDeprecated';\n mapping['field'] = 'showFields';\n mapping['variable'] = 'showVariables';\n mapping['class'] = 'showClasses';\n mapping['struct'] = 'showStructs';\n mapping['interface'] = 'showInterfaces';\n mapping['module'] = 'showModules';\n mapping['property'] = 'showProperties';\n mapping['event'] = 'showEvents';\n mapping['operator'] = 'showOperators';\n mapping['unit'] = 'showUnits';\n mapping['value'] = 'showValues';\n mapping['constant'] = 'showConstants';\n mapping['enum'] = 'showEnums';\n mapping['enumMember'] = 'showEnumMembers';\n mapping['keyword'] = 'showKeywords';\n mapping['text'] = 'showWords';\n mapping['color'] = 'showColors';\n mapping['file'] = 'showFiles';\n mapping['reference'] = 'showReferences';\n mapping['folder'] = 'showFolders';\n mapping['typeParameter'] = 'showTypeParameters';\n mapping['snippet'] = 'showSnippets';\n forEach(mapping, entry => {\n const value = suggest.filteredTypes[entry.key];\n if (value === false) {\n suggest[entry.value] = value;\n }\n });\n // delete (suggest).filteredTypes;\n }\n const hover = options.hover;\n if (hover === true) {\n options.hover = {\n enabled: true\n };\n }\n else if (hover === false) {\n options.hover = {\n enabled: false\n };\n }\n const parameterHints = options.parameterHints;\n if (parameterHints === true) {\n options.parameterHints = {\n enabled: true\n };\n }\n else if (parameterHints === false) {\n options.parameterHints = {\n enabled: false\n };\n }\n const autoIndent = options.autoIndent;\n if (autoIndent === true) {\n options.autoIndent = 'full';\n }\n else if (autoIndent === false) {\n options.autoIndent = 'advanced';\n }\n const matchBrackets = options.matchBrackets;\n if (matchBrackets === true) {\n options.matchBrackets = 'always';\n }\n else if (matchBrackets === false) {\n options.matchBrackets = 'never';\n }\n const { renderIndentGuides, highlightActiveIndentGuide } = options;\n if (!options.guides) {\n options.guides = {};\n }\n if (renderIndentGuides !== undefined) {\n options.guides.indentation = !!renderIndentGuides;\n }\n if (highlightActiveIndentGuide !== undefined) {\n options.guides.highlightActiveIndentation = !!highlightActiveIndentGuide;\n }\n}\nfunction deepCloneAndMigrateOptions(_options) {\n const options = objects.deepClone(_options);\n migrateOptions(options);\n return options;\n}\nexport class CommonEditorConfiguration extends Disposable {\n constructor(isSimpleWidget, _options) {\n super();\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._onDidChangeFast = this._register(new Emitter());\n this.onDidChangeFast = this._onDidChangeFast.event;\n this.isSimpleWidget = isSimpleWidget;\n this._isDominatedByLongLines = false;\n this._computeOptionsMemory = new ComputeOptionsMemory();\n this._viewLineCount = 1;\n this._lineNumbersDigitCount = 1;\n this._rawOptions = deepCloneAndMigrateOptions(_options);\n this._readOptions = EditorConfiguration2.readOptions(this._rawOptions);\n this._validatedOptions = EditorConfiguration2.validateOptions(this._readOptions);\n this._register(EditorZoom.onDidChangeZoomLevel(_ => this._recomputeOptions()));\n this._register(TabFocus.onDidChangeTabFocus(_ => this._recomputeOptions()));\n }\n observeReferenceElement(dimension) {\n }\n updatePixelRatio() {\n }\n _recomputeOptions() {\n const oldOptions = this.options;\n const newOptions = this._computeInternalOptions();\n if (!oldOptions) {\n this.options = newOptions;\n }\n else {\n const changeEvent = EditorConfiguration2.checkEquals(oldOptions, newOptions);\n if (changeEvent === null) {\n // nothing changed!\n return;\n }\n this.options = newOptions;\n this._onDidChangeFast.fire(changeEvent);\n this._onDidChange.fire(changeEvent);\n }\n }\n getRawOptions() {\n return this._rawOptions;\n }\n _computeInternalOptions() {\n const partialEnv = this._getEnvConfiguration();\n const bareFontInfo = BareFontInfo.createFromValidatedSettings(this._validatedOptions, partialEnv.zoomLevel, partialEnv.pixelRatio, this.isSimpleWidget);\n const env = {\n memory: this._computeOptionsMemory,\n outerWidth: partialEnv.outerWidth,\n outerHeight: partialEnv.outerHeight,\n fontInfo: this.readConfiguration(bareFontInfo),\n extraEditorClassName: partialEnv.extraEditorClassName,\n isDominatedByLongLines: this._isDominatedByLongLines,\n viewLineCount: this._viewLineCount,\n lineNumbersDigitCount: this._lineNumbersDigitCount,\n emptySelectionClipboard: partialEnv.emptySelectionClipboard,\n pixelRatio: partialEnv.pixelRatio,\n tabFocusMode: TabFocus.getTabFocusMode(),\n accessibilitySupport: partialEnv.accessibilitySupport\n };\n return EditorConfiguration2.computeOptions(this._validatedOptions, env);\n }\n static _subsetEquals(base, subset) {\n for (const key in subset) {\n if (hasOwnProperty.call(subset, key)) {\n const subsetValue = subset[key];\n const baseValue = base[key];\n if (baseValue === subsetValue) {\n continue;\n }\n if (Array.isArray(baseValue) && Array.isArray(subsetValue)) {\n if (!arrays.equals(baseValue, subsetValue)) {\n return false;\n }\n continue;\n }\n if (baseValue && typeof baseValue === 'object' && subsetValue && typeof subsetValue === 'object') {\n if (!this._subsetEquals(baseValue, subsetValue)) {\n return false;\n }\n continue;\n }\n return false;\n }\n }\n return true;\n }\n updateOptions(_newOptions) {\n if (typeof _newOptions === 'undefined') {\n return;\n }\n const newOptions = deepCloneAndMigrateOptions(_newOptions);\n if (CommonEditorConfiguration._subsetEquals(this._rawOptions, newOptions)) {\n return;\n }\n this._rawOptions = objects.mixin(this._rawOptions, newOptions || {});\n this._readOptions = EditorConfiguration2.readOptions(this._rawOptions);\n this._validatedOptions = EditorConfiguration2.validateOptions(this._readOptions);\n this._recomputeOptions();\n }\n setIsDominatedByLongLines(isDominatedByLongLines) {\n this._isDominatedByLongLines = isDominatedByLongLines;\n this._recomputeOptions();\n }\n setMaxLineNumber(maxLineNumber) {\n const lineNumbersDigitCount = CommonEditorConfiguration._digitCount(maxLineNumber);\n if (this._lineNumbersDigitCount === lineNumbersDigitCount) {\n return;\n }\n this._lineNumbersDigitCount = lineNumbersDigitCount;\n this._recomputeOptions();\n }\n setViewLineCount(viewLineCount) {\n if (this._viewLineCount === viewLineCount) {\n return;\n }\n this._viewLineCount = viewLineCount;\n this._recomputeOptions();\n }\n static _digitCount(n) {\n let r = 0;\n while (n) {\n n = Math.floor(n / 10);\n r++;\n }\n return r ? r : 1;\n }\n}\nexport const editorConfigurationBaseNode = Object.freeze({\n id: 'editor',\n order: 5,\n type: 'object',\n title: nls.localize('editorConfigurationTitle', \"Editor\"),\n scope: 5 /* LANGUAGE_OVERRIDABLE */,\n});\nconst configurationRegistry = Registry.as(Extensions.Configuration);\nconst editorConfiguration = Object.assign(Object.assign({}, editorConfigurationBaseNode), { properties: {\n 'editor.tabSize': {\n type: 'number',\n default: EDITOR_MODEL_DEFAULTS.tabSize,\n minimum: 1,\n markdownDescription: nls.localize('tabSize', \"The number of spaces a tab is equal to. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.\")\n },\n // 'editor.indentSize': {\n // \t'anyOf': [\n // \t\t{\n // \t\t\ttype: 'string',\n // \t\t\tenum: ['tabSize']\n // \t\t},\n // \t\t{\n // \t\t\ttype: 'number',\n // \t\t\tminimum: 1\n // \t\t}\n // \t],\n // \tdefault: 'tabSize',\n // \tmarkdownDescription: nls.localize('indentSize', \"The number of spaces used for indentation or 'tabSize' to use the value from `#editor.tabSize#`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.\")\n // },\n 'editor.insertSpaces': {\n type: 'boolean',\n default: EDITOR_MODEL_DEFAULTS.insertSpaces,\n markdownDescription: nls.localize('insertSpaces', \"Insert spaces when pressing `Tab`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.\")\n },\n 'editor.detectIndentation': {\n type: 'boolean',\n default: EDITOR_MODEL_DEFAULTS.detectIndentation,\n markdownDescription: nls.localize('detectIndentation', \"Controls whether `#editor.tabSize#` and `#editor.insertSpaces#` will be automatically detected when a file is opened based on the file contents.\")\n },\n 'editor.trimAutoWhitespace': {\n type: 'boolean',\n default: EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,\n description: nls.localize('trimAutoWhitespace', \"Remove trailing auto inserted whitespace.\")\n },\n 'editor.largeFileOptimizations': {\n type: 'boolean',\n default: EDITOR_MODEL_DEFAULTS.largeFileOptimizations,\n description: nls.localize('largeFileOptimizations', \"Special handling for large files to disable certain memory intensive features.\")\n },\n 'editor.wordBasedSuggestions': {\n type: 'boolean',\n default: true,\n description: nls.localize('wordBasedSuggestions', \"Controls whether completions should be computed based on words in the document.\")\n },\n 'editor.wordBasedSuggestionsMode': {\n enum: ['currentDocument', 'matchingDocuments', 'allDocuments'],\n default: 'matchingDocuments',\n enumDescriptions: [\n nls.localize('wordBasedSuggestionsMode.currentDocument', 'Only suggest words from the active document.'),\n nls.localize('wordBasedSuggestionsMode.matchingDocuments', 'Suggest words from all open documents of the same language.'),\n nls.localize('wordBasedSuggestionsMode.allDocuments', 'Suggest words from all open documents.')\n ],\n description: nls.localize('wordBasedSuggestionsMode', \"Controls from which documents word based completions are computed.\")\n },\n 'editor.semanticHighlighting.enabled': {\n enum: [true, false, 'configuredByTheme'],\n enumDescriptions: [\n nls.localize('semanticHighlighting.true', 'Semantic highlighting enabled for all color themes.'),\n nls.localize('semanticHighlighting.false', 'Semantic highlighting disabled for all color themes.'),\n nls.localize('semanticHighlighting.configuredByTheme', 'Semantic highlighting is configured by the current color theme\\'s `semanticHighlighting` setting.')\n ],\n default: 'configuredByTheme',\n description: nls.localize('semanticHighlighting.enabled', \"Controls whether the semanticHighlighting is shown for the languages that support it.\")\n },\n 'editor.stablePeek': {\n type: 'boolean',\n default: false,\n markdownDescription: nls.localize('stablePeek', \"Keep peek editors open even when double clicking their content or when hitting `Escape`.\")\n },\n 'editor.maxTokenizationLineLength': {\n type: 'integer',\n default: 20000,\n description: nls.localize('maxTokenizationLineLength', \"Lines above this length will not be tokenized for performance reasons\")\n },\n 'editor.language.brackets': {\n type: 'array',\n default: false,\n description: nls.localize('schema.brackets', 'Defines the bracket symbols that increase or decrease the indentation.'),\n items: {\n type: 'array',\n items: [\n {\n type: 'string',\n description: nls.localize('schema.openBracket', 'The opening bracket character or string sequence.')\n },\n {\n type: 'string',\n description: nls.localize('schema.closeBracket', 'The closing bracket character or string sequence.')\n }\n ]\n }\n },\n 'editor.language.colorizedBracketPairs': {\n type: 'array',\n default: false,\n description: nls.localize('schema.colorizedBracketPairs', 'Defines the bracket pairs that are colorized by their nesting level if bracket pair colorization is enabled.'),\n items: {\n type: 'array',\n items: [\n {\n type: 'string',\n description: nls.localize('schema.openBracket', 'The opening bracket character or string sequence.')\n },\n {\n type: 'string',\n description: nls.localize('schema.closeBracket', 'The closing bracket character or string sequence.')\n }\n ]\n }\n },\n 'diffEditor.maxComputationTime': {\n type: 'number',\n default: 5000,\n description: nls.localize('maxComputationTime', \"Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.\")\n },\n 'diffEditor.maxFileSize': {\n type: 'number',\n default: 50,\n description: nls.localize('maxFileSize', \"Maximum file size in MB for which to compute diffs. Use 0 for no limit.\")\n },\n 'diffEditor.renderSideBySide': {\n type: 'boolean',\n default: true,\n description: nls.localize('sideBySide', \"Controls whether the diff editor shows the diff side by side or inline.\")\n },\n 'diffEditor.ignoreTrimWhitespace': {\n type: 'boolean',\n default: true,\n description: nls.localize('ignoreTrimWhitespace', \"When enabled, the diff editor ignores changes in leading or trailing whitespace.\")\n },\n 'diffEditor.renderIndicators': {\n type: 'boolean',\n default: true,\n description: nls.localize('renderIndicators', \"Controls whether the diff editor shows +/- indicators for added/removed changes.\")\n },\n 'diffEditor.codeLens': {\n type: 'boolean',\n default: false,\n description: nls.localize('codeLens', \"Controls whether the editor shows CodeLens.\")\n },\n 'diffEditor.wordWrap': {\n type: 'string',\n enum: ['off', 'on', 'inherit'],\n default: 'inherit',\n markdownEnumDescriptions: [\n nls.localize('wordWrap.off', \"Lines will never wrap.\"),\n nls.localize('wordWrap.on', \"Lines will wrap at the viewport width.\"),\n nls.localize('wordWrap.inherit', \"Lines will wrap according to the `#editor.wordWrap#` setting.\"),\n ]\n }\n } });\nfunction isConfigurationPropertySchema(x) {\n return (typeof x.type !== 'undefined' || typeof x.anyOf !== 'undefined');\n}\n// Add properties from the Editor Option Registry\nfor (const editorOption of editorOptionsRegistry) {\n const schema = editorOption.schema;\n if (typeof schema !== 'undefined') {\n if (isConfigurationPropertySchema(schema)) {\n // This is a single schema contribution\n editorConfiguration.properties[`editor.${editorOption.name}`] = schema;\n }\n else {\n for (let key in schema) {\n if (hasOwnProperty.call(schema, key)) {\n editorConfiguration.properties[key] = schema[key];\n }\n }\n }\n }\n}\nlet cachedEditorConfigurationKeys = null;\nfunction getEditorConfigurationKeys() {\n if (cachedEditorConfigurationKeys === null) {\n cachedEditorConfigurationKeys = Object.create(null);\n Object.keys(editorConfiguration.properties).forEach((prop) => {\n cachedEditorConfigurationKeys[prop] = true;\n });\n }\n return cachedEditorConfigurationKeys;\n}\nexport function isEditorConfigurationKey(key) {\n const editorConfigurationKeys = getEditorConfigurationKeys();\n return (editorConfigurationKeys[`editor.${key}`] || false);\n}\nexport function isDiffEditorConfigurationKey(key) {\n const editorConfigurationKeys = getEditorConfigurationKeys();\n return (editorConfigurationKeys[`diffEditor.${key}`] || false);\n}\nconfigurationRegistry.registerConfiguration(editorConfiguration);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Range } from './range.js';\nexport class EditOperation {\n static insert(position, text) {\n return {\n range: new Range(position.lineNumber, position.column, position.lineNumber, position.column),\n text: text,\n forceMoveMarkers: true\n };\n }\n static delete(range) {\n return {\n range: range,\n text: null\n };\n }\n static replace(range, text) {\n return {\n range: range,\n text: text\n };\n }\n static replaceMove(range, text) {\n return {\n range: range,\n text: text,\n forceMoveMarkers: true\n };\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as arrays from '../../../base/common/arrays.js';\nimport { ResourceMap } from '../../../base/common/map.js';\nimport * as objects from '../../../base/common/objects.js';\nimport * as types from '../../../base/common/types.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { addToValueTree, getConfigurationKeys, getConfigurationValue, getDefaultValues, removeFromValueTree, toValuesTree } from './configuration.js';\nimport { overrideIdentifierFromKey, OVERRIDE_PROPERTY_PATTERN } from './configurationRegistry.js';\nexport class ConfigurationModel {\n constructor(_contents = {}, _keys = [], _overrides = []) {\n this._contents = _contents;\n this._keys = _keys;\n this._overrides = _overrides;\n this.isFrozen = false;\n this.overrideConfigurations = new Map();\n }\n get contents() {\n return this.checkAndFreeze(this._contents);\n }\n get overrides() {\n return this.checkAndFreeze(this._overrides);\n }\n get keys() {\n return this.checkAndFreeze(this._keys);\n }\n isEmpty() {\n return this._keys.length === 0 && Object.keys(this._contents).length === 0 && this._overrides.length === 0;\n }\n getValue(section) {\n return section ? getConfigurationValue(this.contents, section) : this.contents;\n }\n override(identifier) {\n let overrideConfigurationModel = this.overrideConfigurations.get(identifier);\n if (!overrideConfigurationModel) {\n overrideConfigurationModel = this.createOverrideConfigurationModel(identifier);\n this.overrideConfigurations.set(identifier, overrideConfigurationModel);\n }\n return overrideConfigurationModel;\n }\n merge(...others) {\n const contents = objects.deepClone(this.contents);\n const overrides = objects.deepClone(this.overrides);\n const keys = [...this.keys];\n for (const other of others) {\n this.mergeContents(contents, other.contents);\n for (const otherOverride of other.overrides) {\n const [override] = overrides.filter(o => arrays.equals(o.identifiers, otherOverride.identifiers));\n if (override) {\n this.mergeContents(override.contents, otherOverride.contents);\n }\n else {\n overrides.push(objects.deepClone(otherOverride));\n }\n }\n for (const key of other.keys) {\n if (keys.indexOf(key) === -1) {\n keys.push(key);\n }\n }\n }\n return new ConfigurationModel(contents, keys, overrides);\n }\n freeze() {\n this.isFrozen = true;\n return this;\n }\n createOverrideConfigurationModel(identifier) {\n const overrideContents = this.getContentsForOverrideIdentifer(identifier);\n if (!overrideContents || typeof overrideContents !== 'object' || !Object.keys(overrideContents).length) {\n // If there are no valid overrides, return self\n return this;\n }\n let contents = {};\n for (const key of arrays.distinct([...Object.keys(this.contents), ...Object.keys(overrideContents)])) {\n let contentsForKey = this.contents[key];\n let overrideContentsForKey = overrideContents[key];\n // If there are override contents for the key, clone and merge otherwise use base contents\n if (overrideContentsForKey) {\n // Clone and merge only if base contents and override contents are of type object otherwise just override\n if (typeof contentsForKey === 'object' && typeof overrideContentsForKey === 'object') {\n contentsForKey = objects.deepClone(contentsForKey);\n this.mergeContents(contentsForKey, overrideContentsForKey);\n }\n else {\n contentsForKey = overrideContentsForKey;\n }\n }\n contents[key] = contentsForKey;\n }\n return new ConfigurationModel(contents, this.keys, this.overrides);\n }\n mergeContents(source, target) {\n for (const key of Object.keys(target)) {\n if (key in source) {\n if (types.isObject(source[key]) && types.isObject(target[key])) {\n this.mergeContents(source[key], target[key]);\n continue;\n }\n }\n source[key] = objects.deepClone(target[key]);\n }\n }\n checkAndFreeze(data) {\n if (this.isFrozen && !Object.isFrozen(data)) {\n return objects.deepFreeze(data);\n }\n return data;\n }\n getContentsForOverrideIdentifer(identifier) {\n for (const override of this.overrides) {\n if (override.identifiers.indexOf(identifier) !== -1) {\n return override.contents;\n }\n }\n return null;\n }\n toJSON() {\n return {\n contents: this.contents,\n overrides: this.overrides,\n keys: this.keys\n };\n }\n // Update methods\n setValue(key, value) {\n this.addKey(key);\n addToValueTree(this.contents, key, value, e => { throw new Error(e); });\n }\n removeValue(key) {\n if (this.removeKey(key)) {\n removeFromValueTree(this.contents, key);\n }\n }\n addKey(key) {\n let index = this.keys.length;\n for (let i = 0; i < index; i++) {\n if (key.indexOf(this.keys[i]) === 0) {\n index = i;\n }\n }\n this.keys.splice(index, 1, key);\n }\n removeKey(key) {\n let index = this.keys.indexOf(key);\n if (index !== -1) {\n this.keys.splice(index, 1);\n return true;\n }\n return false;\n }\n}\nexport class DefaultConfigurationModel extends ConfigurationModel {\n constructor() {\n const contents = getDefaultValues();\n const keys = getConfigurationKeys();\n const overrides = [];\n for (const key of Object.keys(contents)) {\n if (OVERRIDE_PROPERTY_PATTERN.test(key)) {\n overrides.push({\n identifiers: [overrideIdentifierFromKey(key).trim()],\n keys: Object.keys(contents[key]),\n contents: toValuesTree(contents[key], message => console.error(`Conflict in default settings file: ${message}`)),\n });\n }\n }\n super(contents, keys, overrides);\n }\n}\nexport class Configuration {\n constructor(_defaultConfiguration, _localUserConfiguration, _remoteUserConfiguration = new ConfigurationModel(), _workspaceConfiguration = new ConfigurationModel(), _folderConfigurations = new ResourceMap(), _memoryConfiguration = new ConfigurationModel(), _memoryConfigurationByResource = new ResourceMap(), _freeze = true) {\n this._defaultConfiguration = _defaultConfiguration;\n this._localUserConfiguration = _localUserConfiguration;\n this._remoteUserConfiguration = _remoteUserConfiguration;\n this._workspaceConfiguration = _workspaceConfiguration;\n this._folderConfigurations = _folderConfigurations;\n this._memoryConfiguration = _memoryConfiguration;\n this._memoryConfigurationByResource = _memoryConfigurationByResource;\n this._freeze = _freeze;\n this._workspaceConsolidatedConfiguration = null;\n this._foldersConsolidatedConfigurations = new ResourceMap();\n this._userConfiguration = null;\n }\n getValue(section, overrides, workspace) {\n const consolidateConfigurationModel = this.getConsolidateConfigurationModel(overrides, workspace);\n return consolidateConfigurationModel.getValue(section);\n }\n updateValue(key, value, overrides = {}) {\n let memoryConfiguration;\n if (overrides.resource) {\n memoryConfiguration = this._memoryConfigurationByResource.get(overrides.resource);\n if (!memoryConfiguration) {\n memoryConfiguration = new ConfigurationModel();\n this._memoryConfigurationByResource.set(overrides.resource, memoryConfiguration);\n }\n }\n else {\n memoryConfiguration = this._memoryConfiguration;\n }\n if (value === undefined) {\n memoryConfiguration.removeValue(key);\n }\n else {\n memoryConfiguration.setValue(key, value);\n }\n if (!overrides.resource) {\n this._workspaceConsolidatedConfiguration = null;\n }\n }\n get userConfiguration() {\n if (!this._userConfiguration) {\n this._userConfiguration = this._remoteUserConfiguration.isEmpty() ? this._localUserConfiguration : this._localUserConfiguration.merge(this._remoteUserConfiguration);\n if (this._freeze) {\n this._userConfiguration.freeze();\n }\n }\n return this._userConfiguration;\n }\n getConsolidateConfigurationModel(overrides, workspace) {\n let configurationModel = this.getConsolidatedConfigurationModelForResource(overrides, workspace);\n return overrides.overrideIdentifier ? configurationModel.override(overrides.overrideIdentifier) : configurationModel;\n }\n getConsolidatedConfigurationModelForResource({ resource }, workspace) {\n let consolidateConfiguration = this.getWorkspaceConsolidatedConfiguration();\n if (workspace && resource) {\n const root = workspace.getFolder(resource);\n if (root) {\n consolidateConfiguration = this.getFolderConsolidatedConfiguration(root.uri) || consolidateConfiguration;\n }\n const memoryConfigurationForResource = this._memoryConfigurationByResource.get(resource);\n if (memoryConfigurationForResource) {\n consolidateConfiguration = consolidateConfiguration.merge(memoryConfigurationForResource);\n }\n }\n return consolidateConfiguration;\n }\n getWorkspaceConsolidatedConfiguration() {\n if (!this._workspaceConsolidatedConfiguration) {\n this._workspaceConsolidatedConfiguration = this._defaultConfiguration.merge(this.userConfiguration, this._workspaceConfiguration, this._memoryConfiguration);\n if (this._freeze) {\n this._workspaceConfiguration = this._workspaceConfiguration.freeze();\n }\n }\n return this._workspaceConsolidatedConfiguration;\n }\n getFolderConsolidatedConfiguration(folder) {\n let folderConsolidatedConfiguration = this._foldersConsolidatedConfigurations.get(folder);\n if (!folderConsolidatedConfiguration) {\n const workspaceConsolidateConfiguration = this.getWorkspaceConsolidatedConfiguration();\n const folderConfiguration = this._folderConfigurations.get(folder);\n if (folderConfiguration) {\n folderConsolidatedConfiguration = workspaceConsolidateConfiguration.merge(folderConfiguration);\n if (this._freeze) {\n folderConsolidatedConfiguration = folderConsolidatedConfiguration.freeze();\n }\n this._foldersConsolidatedConfigurations.set(folder, folderConsolidatedConfiguration);\n }\n else {\n folderConsolidatedConfiguration = workspaceConsolidateConfiguration;\n }\n }\n return folderConsolidatedConfiguration;\n }\n toData() {\n return {\n defaults: {\n contents: this._defaultConfiguration.contents,\n overrides: this._defaultConfiguration.overrides,\n keys: this._defaultConfiguration.keys\n },\n user: {\n contents: this.userConfiguration.contents,\n overrides: this.userConfiguration.overrides,\n keys: this.userConfiguration.keys\n },\n workspace: {\n contents: this._workspaceConfiguration.contents,\n overrides: this._workspaceConfiguration.overrides,\n keys: this._workspaceConfiguration.keys\n },\n folders: [...this._folderConfigurations.keys()].reduce((result, folder) => {\n const { contents, overrides, keys } = this._folderConfigurations.get(folder);\n result.push([folder, { contents, overrides, keys }]);\n return result;\n }, [])\n };\n }\n static parse(data) {\n const defaultConfiguration = this.parseConfigurationModel(data.defaults);\n const userConfiguration = this.parseConfigurationModel(data.user);\n const workspaceConfiguration = this.parseConfigurationModel(data.workspace);\n const folders = data.folders.reduce((result, value) => {\n result.set(URI.revive(value[0]), this.parseConfigurationModel(value[1]));\n return result;\n }, new ResourceMap());\n return new Configuration(defaultConfiguration, userConfiguration, new ConfigurationModel(), workspaceConfiguration, folders, new ConfigurationModel(), new ResourceMap(), false);\n }\n static parseConfigurationModel(model) {\n return new ConfigurationModel(model.contents, model.keys, model.overrides).freeze();\n }\n}\nexport class ConfigurationChangeEvent {\n constructor(change, previous, currentConfiguraiton, currentWorkspace) {\n this.change = change;\n this.previous = previous;\n this.currentConfiguraiton = currentConfiguraiton;\n this.currentWorkspace = currentWorkspace;\n this._previousConfiguration = undefined;\n const keysSet = new Set();\n change.keys.forEach(key => keysSet.add(key));\n change.overrides.forEach(([, keys]) => keys.forEach(key => keysSet.add(key)));\n this.affectedKeys = [...keysSet.values()];\n const configurationModel = new ConfigurationModel();\n this.affectedKeys.forEach(key => configurationModel.setValue(key, {}));\n this.affectedKeysTree = configurationModel.contents;\n }\n get previousConfiguration() {\n if (!this._previousConfiguration && this.previous) {\n this._previousConfiguration = Configuration.parse(this.previous.data);\n }\n return this._previousConfiguration;\n }\n affectsConfiguration(section, overrides) {\n var _a;\n if (this.doesAffectedKeysTreeContains(this.affectedKeysTree, section)) {\n if (overrides) {\n const value1 = this.previousConfiguration ? this.previousConfiguration.getValue(section, overrides, (_a = this.previous) === null || _a === void 0 ? void 0 : _a.workspace) : undefined;\n const value2 = this.currentConfiguraiton.getValue(section, overrides, this.currentWorkspace);\n return !objects.equals(value1, value2);\n }\n return true;\n }\n return false;\n }\n doesAffectedKeysTreeContains(affectedKeysTree, section) {\n let requestedTree = toValuesTree({ [section]: true }, () => { });\n let key;\n while (typeof requestedTree === 'object' && (key = Object.keys(requestedTree)[0])) { // Only one key should present, since we added only one property\n affectedKeysTree = affectedKeysTree[key];\n if (!affectedKeysTree) {\n return false; // Requested tree is not found\n }\n requestedTree = requestedTree[key];\n }\n return true;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { IntervalTimer, TimeoutTimer } from '../../../base/common/async.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as nls from '../../../nls.js';\nconst HIGH_FREQ_COMMANDS = /^(cursor|delete)/;\nexport class AbstractKeybindingService extends Disposable {\n constructor(_contextKeyService, _commandService, _telemetryService, _notificationService, _logService) {\n super();\n this._contextKeyService = _contextKeyService;\n this._commandService = _commandService;\n this._telemetryService = _telemetryService;\n this._notificationService = _notificationService;\n this._logService = _logService;\n this._onDidUpdateKeybindings = this._register(new Emitter());\n this._currentChord = null;\n this._currentChordChecker = new IntervalTimer();\n this._currentChordStatusMessage = null;\n this._ignoreSingleModifiers = KeybindingModifierSet.EMPTY;\n this._currentSingleModifier = null;\n this._currentSingleModifierClearTimeout = new TimeoutTimer();\n this._logging = false;\n }\n get onDidUpdateKeybindings() {\n return this._onDidUpdateKeybindings ? this._onDidUpdateKeybindings.event : Event.None; // Sinon stubbing walks properties on prototype\n }\n dispose() {\n super.dispose();\n }\n _log(str) {\n if (this._logging) {\n this._logService.info(`[KeybindingService]: ${str}`);\n }\n }\n getKeybindings() {\n return this._getResolver().getKeybindings();\n }\n lookupKeybinding(commandId, context) {\n const result = this._getResolver().lookupPrimaryKeybinding(commandId, context || this._contextKeyService);\n if (!result) {\n return undefined;\n }\n return result.resolvedKeybinding;\n }\n dispatchEvent(e, target) {\n return this._dispatch(e, target);\n }\n softDispatch(e, target) {\n const keybinding = this.resolveKeyboardEvent(e);\n if (keybinding.isChord()) {\n console.warn('Unexpected keyboard event mapped to a chord');\n return null;\n }\n const [firstPart,] = keybinding.getDispatchParts();\n if (firstPart === null) {\n // cannot be dispatched, probably only modifier keys\n return null;\n }\n const contextValue = this._contextKeyService.getContext(target);\n const currentChord = this._currentChord ? this._currentChord.keypress : null;\n return this._getResolver().resolve(contextValue, currentChord, firstPart);\n }\n _enterChordMode(firstPart, keypressLabel) {\n this._currentChord = {\n keypress: firstPart,\n label: keypressLabel\n };\n this._currentChordStatusMessage = this._notificationService.status(nls.localize('first.chord', \"({0}) was pressed. Waiting for second key of chord...\", keypressLabel));\n const chordEnterTime = Date.now();\n this._currentChordChecker.cancelAndSet(() => {\n if (!this._documentHasFocus()) {\n // Focus has been lost => leave chord mode\n this._leaveChordMode();\n return;\n }\n if (Date.now() - chordEnterTime > 5000) {\n // 5 seconds elapsed => leave chord mode\n this._leaveChordMode();\n }\n }, 500);\n }\n _leaveChordMode() {\n if (this._currentChordStatusMessage) {\n this._currentChordStatusMessage.dispose();\n this._currentChordStatusMessage = null;\n }\n this._currentChordChecker.cancel();\n this._currentChord = null;\n }\n _dispatch(e, target) {\n return this._doDispatch(this.resolveKeyboardEvent(e), target, /*isSingleModiferChord*/ false);\n }\n _singleModifierDispatch(e, target) {\n const keybinding = this.resolveKeyboardEvent(e);\n const [singleModifier,] = keybinding.getSingleModifierDispatchParts();\n if (singleModifier) {\n if (this._ignoreSingleModifiers.has(singleModifier)) {\n this._log(`+ Ignoring single modifier ${singleModifier} due to it being pressed together with other keys.`);\n this._ignoreSingleModifiers = KeybindingModifierSet.EMPTY;\n this._currentSingleModifierClearTimeout.cancel();\n this._currentSingleModifier = null;\n return false;\n }\n this._ignoreSingleModifiers = KeybindingModifierSet.EMPTY;\n if (this._currentSingleModifier === null) {\n // we have a valid `singleModifier`, store it for the next keyup, but clear it in 300ms\n this._log(`+ Storing single modifier for possible chord ${singleModifier}.`);\n this._currentSingleModifier = singleModifier;\n this._currentSingleModifierClearTimeout.cancelAndSet(() => {\n this._log(`+ Clearing single modifier due to 300ms elapsed.`);\n this._currentSingleModifier = null;\n }, 300);\n return false;\n }\n if (singleModifier === this._currentSingleModifier) {\n // bingo!\n this._log(`/ Dispatching single modifier chord ${singleModifier} ${singleModifier}`);\n this._currentSingleModifierClearTimeout.cancel();\n this._currentSingleModifier = null;\n return this._doDispatch(keybinding, target, /*isSingleModiferChord*/ true);\n }\n this._log(`+ Clearing single modifier due to modifier mismatch: ${this._currentSingleModifier} ${singleModifier}`);\n this._currentSingleModifierClearTimeout.cancel();\n this._currentSingleModifier = null;\n return false;\n }\n // When pressing a modifier and holding it pressed with any other modifier or key combination,\n // the pressed modifiers should no longer be considered for single modifier dispatch.\n const [firstPart,] = keybinding.getParts();\n this._ignoreSingleModifiers = new KeybindingModifierSet(firstPart);\n if (this._currentSingleModifier !== null) {\n this._log(`+ Clearing single modifier due to other key up.`);\n }\n this._currentSingleModifierClearTimeout.cancel();\n this._currentSingleModifier = null;\n return false;\n }\n _doDispatch(keybinding, target, isSingleModiferChord = false) {\n let shouldPreventDefault = false;\n if (keybinding.isChord()) {\n console.warn('Unexpected keyboard event mapped to a chord');\n return false;\n }\n let firstPart = null; // the first keybinding i.e. Ctrl+K\n let currentChord = null; // the \"second\" keybinding i.e. Ctrl+K \"Ctrl+D\"\n if (isSingleModiferChord) {\n const [dispatchKeyname,] = keybinding.getSingleModifierDispatchParts();\n firstPart = dispatchKeyname;\n currentChord = dispatchKeyname;\n }\n else {\n [firstPart,] = keybinding.getDispatchParts();\n currentChord = this._currentChord ? this._currentChord.keypress : null;\n }\n if (firstPart === null) {\n this._log(`\\\\ Keyboard event cannot be dispatched in keydown phase.`);\n // cannot be dispatched, probably only modifier keys\n return shouldPreventDefault;\n }\n const contextValue = this._contextKeyService.getContext(target);\n const keypressLabel = keybinding.getLabel();\n const resolveResult = this._getResolver().resolve(contextValue, currentChord, firstPart);\n this._logService.trace('KeybindingService#dispatch', keypressLabel, resolveResult === null || resolveResult === void 0 ? void 0 : resolveResult.commandId);\n if (resolveResult && resolveResult.enterChord) {\n shouldPreventDefault = true;\n this._enterChordMode(firstPart, keypressLabel);\n return shouldPreventDefault;\n }\n if (this._currentChord) {\n if (!resolveResult || !resolveResult.commandId) {\n this._notificationService.status(nls.localize('missing.chord', \"The key combination ({0}, {1}) is not a command.\", this._currentChord.label, keypressLabel), { hideAfter: 10 * 1000 /* 10s */ });\n shouldPreventDefault = true;\n }\n }\n this._leaveChordMode();\n if (resolveResult && resolveResult.commandId) {\n if (!resolveResult.bubble) {\n shouldPreventDefault = true;\n }\n if (typeof resolveResult.commandArgs === 'undefined') {\n this._commandService.executeCommand(resolveResult.commandId).then(undefined, err => this._notificationService.warn(err));\n }\n else {\n this._commandService.executeCommand(resolveResult.commandId, resolveResult.commandArgs).then(undefined, err => this._notificationService.warn(err));\n }\n if (!HIGH_FREQ_COMMANDS.test(resolveResult.commandId)) {\n this._telemetryService.publicLog2('workbenchActionExecuted', { id: resolveResult.commandId, from: 'keybinding' });\n }\n }\n return shouldPreventDefault;\n }\n mightProducePrintableCharacter(event) {\n if (event.ctrlKey || event.metaKey) {\n // ignore ctrl/cmd-combination but not shift/alt-combinatios\n return false;\n }\n // weak check for certain ranges. this is properly implemented in a subclass\n // with access to the KeyboardMapperFactory.\n if ((event.keyCode >= 31 /* KeyA */ && event.keyCode <= 56 /* KeyZ */)\n || (event.keyCode >= 21 /* Digit0 */ && event.keyCode <= 30 /* Digit9 */)) {\n return true;\n }\n return false;\n }\n}\nclass KeybindingModifierSet {\n constructor(source) {\n this._ctrlKey = source ? source.ctrlKey : false;\n this._shiftKey = source ? source.shiftKey : false;\n this._altKey = source ? source.altKey : false;\n this._metaKey = source ? source.metaKey : false;\n }\n has(modifier) {\n switch (modifier) {\n case 'ctrl': return this._ctrlKey;\n case 'shift': return this._shiftKey;\n case 'alt': return this._altKey;\n case 'meta': return this._metaKey;\n }\n }\n}\nKeybindingModifierSet.EMPTY = new KeybindingModifierSet(null);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { implies, expressionsAreEqualWithConstantSubstitution } from '../../contextkey/common/contextkey.js';\nexport class KeybindingResolver {\n constructor(defaultKeybindings, overrides, log) {\n this._log = log;\n this._defaultKeybindings = defaultKeybindings;\n this._defaultBoundCommands = new Map();\n for (let i = 0, len = defaultKeybindings.length; i < len; i++) {\n const command = defaultKeybindings[i].command;\n if (command) {\n this._defaultBoundCommands.set(command, true);\n }\n }\n this._map = new Map();\n this._lookupMap = new Map();\n this._keybindings = KeybindingResolver.combine(defaultKeybindings, overrides);\n for (let i = 0, len = this._keybindings.length; i < len; i++) {\n let k = this._keybindings[i];\n if (k.keypressParts.length === 0) {\n // unbound\n continue;\n }\n if (k.when && k.when.type === 0 /* False */) {\n // when condition is false\n continue;\n }\n // TODO@chords\n this._addKeyPress(k.keypressParts[0], k);\n }\n }\n static _isTargetedForRemoval(defaultKb, keypressFirstPart, keypressChordPart, command, when) {\n if (defaultKb.command !== command) {\n return false;\n }\n // TODO@chords\n if (keypressFirstPart && defaultKb.keypressParts[0] !== keypressFirstPart) {\n return false;\n }\n // TODO@chords\n if (keypressChordPart && defaultKb.keypressParts[1] !== keypressChordPart) {\n return false;\n }\n if (when) {\n if (!defaultKb.when) {\n return false;\n }\n if (!expressionsAreEqualWithConstantSubstitution(when, defaultKb.when)) {\n return false;\n }\n }\n return true;\n }\n /**\n * Looks for rules containing -command in `overrides` and removes them directly from `defaults`.\n */\n static combine(defaults, rawOverrides) {\n defaults = defaults.slice(0);\n let overrides = [];\n for (const override of rawOverrides) {\n if (!override.command || override.command.length === 0 || override.command.charAt(0) !== '-') {\n overrides.push(override);\n continue;\n }\n const command = override.command.substr(1);\n // TODO@chords\n const keypressFirstPart = override.keypressParts[0];\n const keypressChordPart = override.keypressParts[1];\n const when = override.when;\n for (let j = defaults.length - 1; j >= 0; j--) {\n if (this._isTargetedForRemoval(defaults[j], keypressFirstPart, keypressChordPart, command, when)) {\n defaults.splice(j, 1);\n }\n }\n }\n return defaults.concat(overrides);\n }\n _addKeyPress(keypress, item) {\n const conflicts = this._map.get(keypress);\n if (typeof conflicts === 'undefined') {\n // There is no conflict so far\n this._map.set(keypress, [item]);\n this._addToLookupMap(item);\n return;\n }\n for (let i = conflicts.length - 1; i >= 0; i--) {\n let conflict = conflicts[i];\n if (conflict.command === item.command) {\n continue;\n }\n const conflictIsChord = (conflict.keypressParts.length > 1);\n const itemIsChord = (item.keypressParts.length > 1);\n // TODO@chords\n if (conflictIsChord && itemIsChord && conflict.keypressParts[1] !== item.keypressParts[1]) {\n // The conflict only shares the chord start with this command\n continue;\n }\n if (KeybindingResolver.whenIsEntirelyIncluded(conflict.when, item.when)) {\n // `item` completely overwrites `conflict`\n // Remove conflict from the lookupMap\n this._removeFromLookupMap(conflict);\n }\n }\n conflicts.push(item);\n this._addToLookupMap(item);\n }\n _addToLookupMap(item) {\n if (!item.command) {\n return;\n }\n let arr = this._lookupMap.get(item.command);\n if (typeof arr === 'undefined') {\n arr = [item];\n this._lookupMap.set(item.command, arr);\n }\n else {\n arr.push(item);\n }\n }\n _removeFromLookupMap(item) {\n if (!item.command) {\n return;\n }\n let arr = this._lookupMap.get(item.command);\n if (typeof arr === 'undefined') {\n return;\n }\n for (let i = 0, len = arr.length; i < len; i++) {\n if (arr[i] === item) {\n arr.splice(i, 1);\n return;\n }\n }\n }\n /**\n * Returns true if it is provable `a` implies `b`.\n */\n static whenIsEntirelyIncluded(a, b) {\n if (!b || b.type === 1 /* True */) {\n return true;\n }\n if (!a || a.type === 1 /* True */) {\n return false;\n }\n return implies(a, b);\n }\n getKeybindings() {\n return this._keybindings;\n }\n lookupPrimaryKeybinding(commandId, context) {\n const items = this._lookupMap.get(commandId);\n if (typeof items === 'undefined' || items.length === 0) {\n return null;\n }\n if (items.length === 1) {\n return items[0];\n }\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n if (context.contextMatchesRules(item.when)) {\n return item;\n }\n }\n return items[items.length - 1];\n }\n resolve(context, currentChord, keypress) {\n this._log(`| Resolving ${keypress}${currentChord ? ` chorded from ${currentChord}` : ``}`);\n let lookupMap = null;\n if (currentChord !== null) {\n // Fetch all chord bindings for `currentChord`\n const candidates = this._map.get(currentChord);\n if (typeof candidates === 'undefined') {\n // No chords starting with `currentChord`\n this._log(`\\\\ No keybinding entries.`);\n return null;\n }\n lookupMap = [];\n for (let i = 0, len = candidates.length; i < len; i++) {\n let candidate = candidates[i];\n // TODO@chords\n if (candidate.keypressParts[1] === keypress) {\n lookupMap.push(candidate);\n }\n }\n }\n else {\n const candidates = this._map.get(keypress);\n if (typeof candidates === 'undefined') {\n // No bindings with `keypress`\n this._log(`\\\\ No keybinding entries.`);\n return null;\n }\n lookupMap = candidates;\n }\n let result = this._findCommand(context, lookupMap);\n if (!result) {\n this._log(`\\\\ From ${lookupMap.length} keybinding entries, no when clauses matched the context.`);\n return null;\n }\n // TODO@chords\n if (currentChord === null && result.keypressParts.length > 1 && result.keypressParts[1] !== null) {\n this._log(`\\\\ From ${lookupMap.length} keybinding entries, matched chord, when: ${printWhenExplanation(result.when)}, source: ${printSourceExplanation(result)}.`);\n return {\n enterChord: true,\n leaveChord: false,\n commandId: null,\n commandArgs: null,\n bubble: false\n };\n }\n this._log(`\\\\ From ${lookupMap.length} keybinding entries, matched ${result.command}, when: ${printWhenExplanation(result.when)}, source: ${printSourceExplanation(result)}.`);\n return {\n enterChord: false,\n leaveChord: result.keypressParts.length > 1,\n commandId: result.command,\n commandArgs: result.commandArgs,\n bubble: result.bubble\n };\n }\n _findCommand(context, matches) {\n for (let i = matches.length - 1; i >= 0; i--) {\n let k = matches[i];\n if (!KeybindingResolver.contextMatchesRules(context, k.when)) {\n continue;\n }\n return k;\n }\n return null;\n }\n static contextMatchesRules(context, rules) {\n if (!rules) {\n return true;\n }\n return rules.evaluate(context);\n }\n}\nfunction printWhenExplanation(when) {\n if (!when) {\n return `no when condition`;\n }\n return `${when.serialize()}`;\n}\nfunction printSourceExplanation(kb) {\n return (kb.extensionId\n ? (kb.isBuiltinExtension ? `built-in extension ${kb.extensionId}` : `user extension ${kb.extensionId}`)\n : (kb.isDefault ? `built-in` : `user`));\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class ResolvedKeybindingItem {\n constructor(resolvedKeybinding, command, commandArgs, when, isDefault, extensionId, isBuiltinExtension) {\n this._resolvedKeybindingItemBrand = undefined;\n this.resolvedKeybinding = resolvedKeybinding;\n this.keypressParts = resolvedKeybinding ? removeElementsAfterNulls(resolvedKeybinding.getDispatchParts()) : [];\n if (resolvedKeybinding && this.keypressParts.length === 0) {\n // handle possible single modifier chord keybindings\n this.keypressParts = removeElementsAfterNulls(resolvedKeybinding.getSingleModifierDispatchParts());\n }\n this.bubble = (command ? command.charCodeAt(0) === 94 /* Caret */ : false);\n this.command = this.bubble ? command.substr(1) : command;\n this.commandArgs = commandArgs;\n this.when = when;\n this.isDefault = isDefault;\n this.extensionId = extensionId;\n this.isBuiltinExtension = isBuiltinExtension;\n }\n}\nexport function removeElementsAfterNulls(arr) {\n let result = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n const element = arr[i];\n if (!element) {\n // stop processing at first encountered null\n return result;\n }\n result.push(element);\n }\n return result;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../nls.js';\nexport class ModifierLabelProvider {\n constructor(mac, windows, linux = windows) {\n this.modifierLabels = [null]; // index 0 will never me accessed.\n this.modifierLabels[2 /* Macintosh */] = mac;\n this.modifierLabels[1 /* Windows */] = windows;\n this.modifierLabels[3 /* Linux */] = linux;\n }\n toLabel(OS, parts, keyLabelProvider) {\n if (parts.length === 0) {\n return null;\n }\n const result = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const part = parts[i];\n const keyLabel = keyLabelProvider(part);\n if (keyLabel === null) {\n // this keybinding cannot be expressed...\n return null;\n }\n result[i] = _simpleAsString(part, keyLabel, this.modifierLabels[OS]);\n }\n return result.join(' ');\n }\n}\n/**\n * A label provider that prints modifiers in a suitable format for displaying in the UI.\n */\nexport const UILabelProvider = new ModifierLabelProvider({\n ctrlKey: '⌃',\n shiftKey: '⇧',\n altKey: '⌥',\n metaKey: '⌘',\n separator: '',\n}, {\n ctrlKey: nls.localize({ key: 'ctrlKey', comment: ['This is the short form for the Control key on the keyboard'] }, \"Ctrl\"),\n shiftKey: nls.localize({ key: 'shiftKey', comment: ['This is the short form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey', comment: ['This is the short form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'windowsKey', comment: ['This is the short form for the Windows key on the keyboard'] }, \"Windows\"),\n separator: '+',\n}, {\n ctrlKey: nls.localize({ key: 'ctrlKey', comment: ['This is the short form for the Control key on the keyboard'] }, \"Ctrl\"),\n shiftKey: nls.localize({ key: 'shiftKey', comment: ['This is the short form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey', comment: ['This is the short form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'superKey', comment: ['This is the short form for the Super key on the keyboard'] }, \"Super\"),\n separator: '+',\n});\n/**\n * A label provider that prints modifiers in a suitable format for ARIA.\n */\nexport const AriaLabelProvider = new ModifierLabelProvider({\n ctrlKey: nls.localize({ key: 'ctrlKey.long', comment: ['This is the long form for the Control key on the keyboard'] }, \"Control\"),\n shiftKey: nls.localize({ key: 'shiftKey.long', comment: ['This is the long form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey.long', comment: ['This is the long form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'cmdKey.long', comment: ['This is the long form for the Command key on the keyboard'] }, \"Command\"),\n separator: '+',\n}, {\n ctrlKey: nls.localize({ key: 'ctrlKey.long', comment: ['This is the long form for the Control key on the keyboard'] }, \"Control\"),\n shiftKey: nls.localize({ key: 'shiftKey.long', comment: ['This is the long form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey.long', comment: ['This is the long form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'windowsKey.long', comment: ['This is the long form for the Windows key on the keyboard'] }, \"Windows\"),\n separator: '+',\n}, {\n ctrlKey: nls.localize({ key: 'ctrlKey.long', comment: ['This is the long form for the Control key on the keyboard'] }, \"Control\"),\n shiftKey: nls.localize({ key: 'shiftKey.long', comment: ['This is the long form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey.long', comment: ['This is the long form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'superKey.long', comment: ['This is the long form for the Super key on the keyboard'] }, \"Super\"),\n separator: '+',\n});\n/**\n * A label provider that prints modifiers in a suitable format for Electron Accelerators.\n * See https://github.com/electron/electron/blob/master/docs/api/accelerator.md\n */\nexport const ElectronAcceleratorLabelProvider = new ModifierLabelProvider({\n ctrlKey: 'Ctrl',\n shiftKey: 'Shift',\n altKey: 'Alt',\n metaKey: 'Cmd',\n separator: '+',\n}, {\n ctrlKey: 'Ctrl',\n shiftKey: 'Shift',\n altKey: 'Alt',\n metaKey: 'Super',\n separator: '+',\n});\nfunction _simpleAsString(modifiers, key, labels) {\n if (key === null) {\n return '';\n }\n const result = [];\n // translate modifier keys: Ctrl-Shift-Alt-Meta\n if (modifiers.ctrlKey) {\n result.push(labels.ctrlKey);\n }\n if (modifiers.shiftKey) {\n result.push(labels.shiftKey);\n }\n if (modifiers.altKey) {\n result.push(labels.altKey);\n }\n if (modifiers.metaKey) {\n result.push(labels.metaKey);\n }\n // the actual key\n if (key !== '') {\n result.push(key);\n }\n return result.join(labels.separator);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { illegalArgument } from '../../../base/common/errors.js';\nimport { AriaLabelProvider, ElectronAcceleratorLabelProvider, UILabelProvider } from '../../../base/common/keybindingLabels.js';\nimport { ResolvedKeybinding, ResolvedKeybindingPart } from '../../../base/common/keybindings.js';\nexport class BaseResolvedKeybinding extends ResolvedKeybinding {\n constructor(os, parts) {\n super();\n if (parts.length === 0) {\n throw illegalArgument(`parts`);\n }\n this._os = os;\n this._parts = parts;\n }\n getLabel() {\n return UILabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getLabel(keybinding));\n }\n getAriaLabel() {\n return AriaLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getAriaLabel(keybinding));\n }\n getElectronAccelerator() {\n if (this._parts.length > 1) {\n // [Electron Accelerators] Electron cannot handle chords\n return null;\n }\n if (this._parts[0].isDuplicateModifierCase()) {\n // [Electron Accelerators] Electron cannot handle modifier only keybindings\n // e.g. \"shift shift\"\n return null;\n }\n return ElectronAcceleratorLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getElectronAccelerator(keybinding));\n }\n isChord() {\n return (this._parts.length > 1);\n }\n getParts() {\n return this._parts.map((keybinding) => this._getPart(keybinding));\n }\n _getPart(keybinding) {\n return new ResolvedKeybindingPart(keybinding.ctrlKey, keybinding.shiftKey, keybinding.altKey, keybinding.metaKey, this._getLabel(keybinding), this._getAriaLabel(keybinding));\n }\n getDispatchParts() {\n return this._parts.map((keybinding) => this._getDispatchPart(keybinding));\n }\n getSingleModifierDispatchParts() {\n return this._parts.map((keybinding) => this._getSingleModifierDispatchPart(keybinding));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { KeyCodeUtils, IMMUTABLE_CODE_TO_KEY_CODE } from '../../../base/common/keyCodes.js';\nimport { ChordKeybinding, SimpleKeybinding } from '../../../base/common/keybindings.js';\nimport { BaseResolvedKeybinding } from './baseResolvedKeybinding.js';\nimport { removeElementsAfterNulls } from './resolvedKeybindingItem.js';\n/**\n * Do not instantiate. Use KeybindingService to get a ResolvedKeybinding seeded with information about the current kb layout.\n */\nexport class USLayoutResolvedKeybinding extends BaseResolvedKeybinding {\n constructor(actual, os) {\n super(os, actual.parts);\n }\n _keyCodeToUILabel(keyCode) {\n if (this._os === 2 /* Macintosh */) {\n switch (keyCode) {\n case 15 /* LeftArrow */:\n return '←';\n case 16 /* UpArrow */:\n return '↑';\n case 17 /* RightArrow */:\n return '→';\n case 18 /* DownArrow */:\n return '↓';\n }\n }\n return KeyCodeUtils.toString(keyCode);\n }\n _getLabel(keybinding) {\n if (keybinding.isDuplicateModifierCase()) {\n return '';\n }\n return this._keyCodeToUILabel(keybinding.keyCode);\n }\n _getAriaLabel(keybinding) {\n if (keybinding.isDuplicateModifierCase()) {\n return '';\n }\n return KeyCodeUtils.toString(keybinding.keyCode);\n }\n _getElectronAccelerator(keybinding) {\n return KeyCodeUtils.toElectronAccelerator(keybinding.keyCode);\n }\n _getDispatchPart(keybinding) {\n return USLayoutResolvedKeybinding.getDispatchStr(keybinding);\n }\n static getDispatchStr(keybinding) {\n if (keybinding.isModifierKey()) {\n return null;\n }\n let result = '';\n if (keybinding.ctrlKey) {\n result += 'ctrl+';\n }\n if (keybinding.shiftKey) {\n result += 'shift+';\n }\n if (keybinding.altKey) {\n result += 'alt+';\n }\n if (keybinding.metaKey) {\n result += 'meta+';\n }\n result += KeyCodeUtils.toString(keybinding.keyCode);\n return result;\n }\n _getSingleModifierDispatchPart(keybinding) {\n if (keybinding.keyCode === 5 /* Ctrl */ && !keybinding.shiftKey && !keybinding.altKey && !keybinding.metaKey) {\n return 'ctrl';\n }\n if (keybinding.keyCode === 4 /* Shift */ && !keybinding.ctrlKey && !keybinding.altKey && !keybinding.metaKey) {\n return 'shift';\n }\n if (keybinding.keyCode === 6 /* Alt */ && !keybinding.ctrlKey && !keybinding.shiftKey && !keybinding.metaKey) {\n return 'alt';\n }\n if (keybinding.keyCode === 57 /* Meta */ && !keybinding.ctrlKey && !keybinding.shiftKey && !keybinding.altKey) {\n return 'meta';\n }\n return null;\n }\n /**\n * *NOTE*: Check return value for `KeyCode.Unknown`.\n */\n static _scanCodeToKeyCode(scanCode) {\n const immutableKeyCode = IMMUTABLE_CODE_TO_KEY_CODE[scanCode];\n if (immutableKeyCode !== -1 /* DependsOnKbLayout */) {\n return immutableKeyCode;\n }\n switch (scanCode) {\n case 10 /* KeyA */: return 31 /* KeyA */;\n case 11 /* KeyB */: return 32 /* KeyB */;\n case 12 /* KeyC */: return 33 /* KeyC */;\n case 13 /* KeyD */: return 34 /* KeyD */;\n case 14 /* KeyE */: return 35 /* KeyE */;\n case 15 /* KeyF */: return 36 /* KeyF */;\n case 16 /* KeyG */: return 37 /* KeyG */;\n case 17 /* KeyH */: return 38 /* KeyH */;\n case 18 /* KeyI */: return 39 /* KeyI */;\n case 19 /* KeyJ */: return 40 /* KeyJ */;\n case 20 /* KeyK */: return 41 /* KeyK */;\n case 21 /* KeyL */: return 42 /* KeyL */;\n case 22 /* KeyM */: return 43 /* KeyM */;\n case 23 /* KeyN */: return 44 /* KeyN */;\n case 24 /* KeyO */: return 45 /* KeyO */;\n case 25 /* KeyP */: return 46 /* KeyP */;\n case 26 /* KeyQ */: return 47 /* KeyQ */;\n case 27 /* KeyR */: return 48 /* KeyR */;\n case 28 /* KeyS */: return 49 /* KeyS */;\n case 29 /* KeyT */: return 50 /* KeyT */;\n case 30 /* KeyU */: return 51 /* KeyU */;\n case 31 /* KeyV */: return 52 /* KeyV */;\n case 32 /* KeyW */: return 53 /* KeyW */;\n case 33 /* KeyX */: return 54 /* KeyX */;\n case 34 /* KeyY */: return 55 /* KeyY */;\n case 35 /* KeyZ */: return 56 /* KeyZ */;\n case 36 /* Digit1 */: return 22 /* Digit1 */;\n case 37 /* Digit2 */: return 23 /* Digit2 */;\n case 38 /* Digit3 */: return 24 /* Digit3 */;\n case 39 /* Digit4 */: return 25 /* Digit4 */;\n case 40 /* Digit5 */: return 26 /* Digit5 */;\n case 41 /* Digit6 */: return 27 /* Digit6 */;\n case 42 /* Digit7 */: return 28 /* Digit7 */;\n case 43 /* Digit8 */: return 29 /* Digit8 */;\n case 44 /* Digit9 */: return 30 /* Digit9 */;\n case 45 /* Digit0 */: return 21 /* Digit0 */;\n case 51 /* Minus */: return 83 /* Minus */;\n case 52 /* Equal */: return 81 /* Equal */;\n case 53 /* BracketLeft */: return 87 /* BracketLeft */;\n case 54 /* BracketRight */: return 89 /* BracketRight */;\n case 55 /* Backslash */: return 88 /* Backslash */;\n case 56 /* IntlHash */: return 0 /* Unknown */; // missing\n case 57 /* Semicolon */: return 80 /* Semicolon */;\n case 58 /* Quote */: return 90 /* Quote */;\n case 59 /* Backquote */: return 86 /* Backquote */;\n case 60 /* Comma */: return 82 /* Comma */;\n case 61 /* Period */: return 84 /* Period */;\n case 62 /* Slash */: return 85 /* Slash */;\n case 106 /* IntlBackslash */: return 92 /* IntlBackslash */;\n }\n return 0 /* Unknown */;\n }\n static _resolveSimpleUserBinding(binding) {\n if (!binding) {\n return null;\n }\n if (binding instanceof SimpleKeybinding) {\n return binding;\n }\n const keyCode = this._scanCodeToKeyCode(binding.scanCode);\n if (keyCode === 0 /* Unknown */) {\n return null;\n }\n return new SimpleKeybinding(binding.ctrlKey, binding.shiftKey, binding.altKey, binding.metaKey, keyCode);\n }\n static resolveUserBinding(input, os) {\n const parts = removeElementsAfterNulls(input.map(keybinding => this._resolveSimpleUserBinding(keybinding)));\n if (parts.length > 0) {\n return [new USLayoutResolvedKeybinding(new ChordKeybinding(parts), os)];\n }\n return [];\n }\n}\n","import { TernarySearchTree } from '../../../base/common/map.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IWorkspaceContextService = createDecorator('contextService');\nexport class Workspace {\n constructor(_id, folders, _transient, _configuration, _ignorePathCasing) {\n this._id = _id;\n this._transient = _transient;\n this._configuration = _configuration;\n this._ignorePathCasing = _ignorePathCasing;\n this._foldersMap = TernarySearchTree.forUris(this._ignorePathCasing);\n this.folders = folders;\n }\n get folders() {\n return this._folders;\n }\n set folders(folders) {\n this._folders = folders;\n this.updateFoldersMap();\n }\n get id() {\n return this._id;\n }\n get transient() {\n return this._transient;\n }\n get configuration() {\n return this._configuration;\n }\n set configuration(configuration) {\n this._configuration = configuration;\n }\n getFolder(resource) {\n if (!resource) {\n return null;\n }\n return this._foldersMap.findSubstr(resource.with({\n scheme: resource.scheme,\n authority: resource.authority,\n path: resource.path\n })) || null;\n }\n updateFoldersMap() {\n this._foldersMap = TernarySearchTree.forUris(this._ignorePathCasing);\n for (const folder of this.folders) {\n this._foldersMap.set(folder.uri, folder);\n }\n }\n toJSON() {\n return { id: this.id, folders: this.folders, transient: this.transient, configuration: this.configuration };\n }\n}\nexport class WorkspaceFolder {\n constructor(data, raw) {\n this.raw = raw;\n this.uri = data.uri;\n this.index = data.index;\n this.name = data.name;\n }\n toJSON() {\n return { uri: this.uri, name: this.name, index: this.index };\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../nls.js';\nexport var AccessibilityHelpNLS;\n(function (AccessibilityHelpNLS) {\n AccessibilityHelpNLS.noSelection = nls.localize(\"noSelection\", \"No selection\");\n AccessibilityHelpNLS.singleSelectionRange = nls.localize(\"singleSelectionRange\", \"Line {0}, Column {1} ({2} selected)\");\n AccessibilityHelpNLS.singleSelection = nls.localize(\"singleSelection\", \"Line {0}, Column {1}\");\n AccessibilityHelpNLS.multiSelectionRange = nls.localize(\"multiSelectionRange\", \"{0} selections ({1} characters selected)\");\n AccessibilityHelpNLS.multiSelection = nls.localize(\"multiSelection\", \"{0} selections\");\n AccessibilityHelpNLS.emergencyConfOn = nls.localize(\"emergencyConfOn\", \"Now changing the setting `accessibilitySupport` to 'on'.\");\n AccessibilityHelpNLS.openingDocs = nls.localize(\"openingDocs\", \"Now opening the Editor Accessibility documentation page.\");\n AccessibilityHelpNLS.readonlyDiffEditor = nls.localize(\"readonlyDiffEditor\", \" in a read-only pane of a diff editor.\");\n AccessibilityHelpNLS.editableDiffEditor = nls.localize(\"editableDiffEditor\", \" in a pane of a diff editor.\");\n AccessibilityHelpNLS.readonlyEditor = nls.localize(\"readonlyEditor\", \" in a read-only code editor\");\n AccessibilityHelpNLS.editableEditor = nls.localize(\"editableEditor\", \" in a code editor\");\n AccessibilityHelpNLS.changeConfigToOnMac = nls.localize(\"changeConfigToOnMac\", \"To configure the editor to be optimized for usage with a Screen Reader press Command+E now.\");\n AccessibilityHelpNLS.changeConfigToOnWinLinux = nls.localize(\"changeConfigToOnWinLinux\", \"To configure the editor to be optimized for usage with a Screen Reader press Control+E now.\");\n AccessibilityHelpNLS.auto_on = nls.localize(\"auto_on\", \"The editor is configured to be optimized for usage with a Screen Reader.\");\n AccessibilityHelpNLS.auto_off = nls.localize(\"auto_off\", \"The editor is configured to never be optimized for usage with a Screen Reader, which is not the case at this time.\");\n AccessibilityHelpNLS.tabFocusModeOnMsg = nls.localize(\"tabFocusModeOnMsg\", \"Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}.\");\n AccessibilityHelpNLS.tabFocusModeOnMsgNoKb = nls.localize(\"tabFocusModeOnMsgNoKb\", \"Pressing Tab in the current editor will move focus to the next focusable element. The command {0} is currently not triggerable by a keybinding.\");\n AccessibilityHelpNLS.tabFocusModeOffMsg = nls.localize(\"tabFocusModeOffMsg\", \"Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}.\");\n AccessibilityHelpNLS.tabFocusModeOffMsgNoKb = nls.localize(\"tabFocusModeOffMsgNoKb\", \"Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding.\");\n AccessibilityHelpNLS.openDocMac = nls.localize(\"openDocMac\", \"Press Command+H now to open a browser window with more information related to editor accessibility.\");\n AccessibilityHelpNLS.openDocWinLinux = nls.localize(\"openDocWinLinux\", \"Press Control+H now to open a browser window with more information related to editor accessibility.\");\n AccessibilityHelpNLS.outroMsg = nls.localize(\"outroMsg\", \"You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape.\");\n AccessibilityHelpNLS.showAccessibilityHelpAction = nls.localize(\"showAccessibilityHelpAction\", \"Show Accessibility Help\");\n})(AccessibilityHelpNLS || (AccessibilityHelpNLS = {}));\nexport var InspectTokensNLS;\n(function (InspectTokensNLS) {\n InspectTokensNLS.inspectTokensAction = nls.localize('inspectTokens', \"Developer: Inspect Tokens\");\n})(InspectTokensNLS || (InspectTokensNLS = {}));\nexport var GoToLineNLS;\n(function (GoToLineNLS) {\n GoToLineNLS.gotoLineActionLabel = nls.localize('gotoLineActionLabel', \"Go to Line/Column...\");\n})(GoToLineNLS || (GoToLineNLS = {}));\nexport var QuickHelpNLS;\n(function (QuickHelpNLS) {\n QuickHelpNLS.helpQuickAccessActionLabel = nls.localize('helpQuickAccess', \"Show all Quick Access Providers\");\n})(QuickHelpNLS || (QuickHelpNLS = {}));\nexport var QuickCommandNLS;\n(function (QuickCommandNLS) {\n QuickCommandNLS.quickCommandActionLabel = nls.localize('quickCommandActionLabel', \"Command Palette\");\n QuickCommandNLS.quickCommandHelp = nls.localize('quickCommandActionHelp', \"Show And Run Commands\");\n})(QuickCommandNLS || (QuickCommandNLS = {}));\nexport var QuickOutlineNLS;\n(function (QuickOutlineNLS) {\n QuickOutlineNLS.quickOutlineActionLabel = nls.localize('quickOutlineActionLabel', \"Go to Symbol...\");\n QuickOutlineNLS.quickOutlineByCategoryActionLabel = nls.localize('quickOutlineByCategoryActionLabel', \"Go to Symbol by Category...\");\n})(QuickOutlineNLS || (QuickOutlineNLS = {}));\nexport var StandaloneCodeEditorNLS;\n(function (StandaloneCodeEditorNLS) {\n StandaloneCodeEditorNLS.editorViewAccessibleLabel = nls.localize('editorViewAccessibleLabel', \"Editor content\");\n StandaloneCodeEditorNLS.accessibilityHelpMessage = nls.localize('accessibilityHelpMessage', \"Press Alt+F1 for Accessibility Options.\");\n})(StandaloneCodeEditorNLS || (StandaloneCodeEditorNLS = {}));\nexport var ToggleHighContrastNLS;\n(function (ToggleHighContrastNLS) {\n ToggleHighContrastNLS.toggleHighContrast = nls.localize('toggleHighContrast', \"Toggle High Contrast Theme\");\n})(ToggleHighContrastNLS || (ToggleHighContrastNLS = {}));\nexport var SimpleServicesNLS;\n(function (SimpleServicesNLS) {\n SimpleServicesNLS.bulkEditServiceSummary = nls.localize('bulkEditServiceSummary', \"Made {0} edits in {1} files\");\n})(SimpleServicesNLS || (SimpleServicesNLS = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as strings from '../../../base/common/strings.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { SimpleKeybinding, createKeybinding } from '../../../base/common/keybindings.js';\nimport { ImmortalReference, toDisposable, DisposableStore, Disposable } from '../../../base/common/lifecycle.js';\nimport { OS, isLinux, isMacintosh } from '../../../base/common/platform.js';\nimport Severity from '../../../base/common/severity.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { isCodeEditor } from '../../browser/editorBrowser.js';\nimport { ResourceTextEdit } from '../../browser/services/bulkEditService.js';\nimport { isDiffEditorConfigurationKey, isEditorConfigurationKey } from '../../common/config/commonEditorConfig.js';\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Position as Pos } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { Configuration, ConfigurationModel, DefaultConfigurationModel, ConfigurationChangeEvent } from '../../../platform/configuration/common/configurationModels.js';\nimport { AbstractKeybindingService } from '../../../platform/keybinding/common/abstractKeybindingService.js';\nimport { KeybindingResolver } from '../../../platform/keybinding/common/keybindingResolver.js';\nimport { KeybindingsRegistry } from '../../../platform/keybinding/common/keybindingsRegistry.js';\nimport { ResolvedKeybindingItem } from '../../../platform/keybinding/common/resolvedKeybindingItem.js';\nimport { USLayoutResolvedKeybinding } from '../../../platform/keybinding/common/usLayoutResolvedKeybinding.js';\nimport { NoOpNotification } from '../../../platform/notification/common/notification.js';\nimport { WorkspaceFolder } from '../../../platform/workspace/common/workspace.js';\nimport { SimpleServicesNLS } from '../../common/standaloneStrings.js';\nexport class SimpleModel {\n constructor(model) {\n this.disposed = false;\n this.model = model;\n this._onWillDispose = new Emitter();\n }\n get textEditorModel() {\n return this.model;\n }\n dispose() {\n this.disposed = true;\n this._onWillDispose.fire();\n }\n}\nfunction withTypedEditor(widget, codeEditorCallback, diffEditorCallback) {\n if (isCodeEditor(widget)) {\n // Single Editor\n return codeEditorCallback(widget);\n }\n else {\n // Diff Editor\n return diffEditorCallback(widget);\n }\n}\nlet SimpleEditorModelResolverService = class SimpleEditorModelResolverService {\n constructor(modelService) {\n this.modelService = modelService;\n }\n setEditor(editor) {\n this.editor = editor;\n }\n createModelReference(resource) {\n let model = null;\n if (this.editor) {\n model = withTypedEditor(this.editor, (editor) => this.findModel(editor, resource), (diffEditor) => this.findModel(diffEditor.getOriginalEditor(), resource) || this.findModel(diffEditor.getModifiedEditor(), resource));\n }\n if (!model) {\n return Promise.reject(new Error(`Model not found`));\n }\n return Promise.resolve(new ImmortalReference(new SimpleModel(model)));\n }\n findModel(editor, resource) {\n let model = this.modelService.getModel(resource);\n if (model && model.uri.toString() !== resource.toString()) {\n return null;\n }\n return model;\n }\n};\nSimpleEditorModelResolverService = __decorate([\n __param(0, IModelService)\n], SimpleEditorModelResolverService);\nexport { SimpleEditorModelResolverService };\nexport class SimpleEditorProgressService {\n show() {\n return SimpleEditorProgressService.NULL_PROGRESS_RUNNER;\n }\n showWhile(promise, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n yield promise;\n });\n }\n}\nSimpleEditorProgressService.NULL_PROGRESS_RUNNER = {\n done: () => { },\n total: () => { },\n worked: () => { }\n};\nexport class SimpleDialogService {\n confirm(confirmation) {\n return this.doConfirm(confirmation).then(confirmed => {\n return {\n confirmed,\n checkboxChecked: false // unsupported\n };\n });\n }\n doConfirm(confirmation) {\n let messageText = confirmation.message;\n if (confirmation.detail) {\n messageText = messageText + '\\n\\n' + confirmation.detail;\n }\n return Promise.resolve(window.confirm(messageText));\n }\n show(severity, message, buttons, options) {\n return Promise.resolve({ choice: 0 });\n }\n}\nexport class SimpleNotificationService {\n info(message) {\n return this.notify({ severity: Severity.Info, message });\n }\n warn(message) {\n return this.notify({ severity: Severity.Warning, message });\n }\n error(error) {\n return this.notify({ severity: Severity.Error, message: error });\n }\n notify(notification) {\n switch (notification.severity) {\n case Severity.Error:\n console.error(notification.message);\n break;\n case Severity.Warning:\n console.warn(notification.message);\n break;\n default:\n console.log(notification.message);\n break;\n }\n return SimpleNotificationService.NO_OP;\n }\n status(message, options) {\n return Disposable.None;\n }\n}\nSimpleNotificationService.NO_OP = new NoOpNotification();\nexport class StandaloneCommandService {\n constructor(instantiationService) {\n this._onWillExecuteCommand = new Emitter();\n this._onDidExecuteCommand = new Emitter();\n this.onDidExecuteCommand = this._onDidExecuteCommand.event;\n this._instantiationService = instantiationService;\n }\n executeCommand(id, ...args) {\n const command = CommandsRegistry.getCommand(id);\n if (!command) {\n return Promise.reject(new Error(`command '${id}' not found`));\n }\n try {\n this._onWillExecuteCommand.fire({ commandId: id, args });\n const result = this._instantiationService.invokeFunction.apply(this._instantiationService, [command.handler, ...args]);\n this._onDidExecuteCommand.fire({ commandId: id, args });\n return Promise.resolve(result);\n }\n catch (err) {\n return Promise.reject(err);\n }\n }\n}\nexport class StandaloneKeybindingService extends AbstractKeybindingService {\n constructor(contextKeyService, commandService, telemetryService, notificationService, logService, domNode) {\n super(contextKeyService, commandService, telemetryService, notificationService, logService);\n this._cachedResolver = null;\n this._dynamicKeybindings = [];\n // for standard keybindings\n this._register(dom.addDisposableListener(domNode, dom.EventType.KEY_DOWN, (e) => {\n const keyEvent = new StandardKeyboardEvent(e);\n const shouldPreventDefault = this._dispatch(keyEvent, keyEvent.target);\n if (shouldPreventDefault) {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n }\n }));\n // for single modifier chord keybindings (e.g. shift shift)\n this._register(dom.addDisposableListener(window, dom.EventType.KEY_UP, (e) => {\n const keyEvent = new StandardKeyboardEvent(e);\n const shouldPreventDefault = this._singleModifierDispatch(keyEvent, keyEvent.target);\n if (shouldPreventDefault) {\n keyEvent.preventDefault();\n }\n }));\n }\n addDynamicKeybinding(commandId, _keybinding, handler, when) {\n const keybinding = createKeybinding(_keybinding, OS);\n const toDispose = new DisposableStore();\n if (keybinding) {\n this._dynamicKeybindings.push({\n keybinding: keybinding.parts,\n command: commandId,\n when: when,\n weight1: 1000,\n weight2: 0,\n extensionId: null,\n isBuiltinExtension: false\n });\n toDispose.add(toDisposable(() => {\n for (let i = 0; i < this._dynamicKeybindings.length; i++) {\n let kb = this._dynamicKeybindings[i];\n if (kb.command === commandId) {\n this._dynamicKeybindings.splice(i, 1);\n this.updateResolver({ source: 1 /* Default */ });\n return;\n }\n }\n }));\n }\n toDispose.add(CommandsRegistry.registerCommand(commandId, handler));\n this.updateResolver({ source: 1 /* Default */ });\n return toDispose;\n }\n updateResolver(event) {\n this._cachedResolver = null;\n this._onDidUpdateKeybindings.fire(event);\n }\n _getResolver() {\n if (!this._cachedResolver) {\n const defaults = this._toNormalizedKeybindingItems(KeybindingsRegistry.getDefaultKeybindings(), true);\n const overrides = this._toNormalizedKeybindingItems(this._dynamicKeybindings, false);\n this._cachedResolver = new KeybindingResolver(defaults, overrides, (str) => this._log(str));\n }\n return this._cachedResolver;\n }\n _documentHasFocus() {\n return document.hasFocus();\n }\n _toNormalizedKeybindingItems(items, isDefault) {\n let result = [], resultLen = 0;\n for (const item of items) {\n const when = item.when || undefined;\n const keybinding = item.keybinding;\n if (!keybinding) {\n // This might be a removal keybinding item in user settings => accept it\n result[resultLen++] = new ResolvedKeybindingItem(undefined, item.command, item.commandArgs, when, isDefault, null, false);\n }\n else {\n const resolvedKeybindings = USLayoutResolvedKeybinding.resolveUserBinding(keybinding, OS);\n for (const resolvedKeybinding of resolvedKeybindings) {\n result[resultLen++] = new ResolvedKeybindingItem(resolvedKeybinding, item.command, item.commandArgs, when, isDefault, null, false);\n }\n }\n }\n return result;\n }\n resolveKeyboardEvent(keyboardEvent) {\n let keybinding = new SimpleKeybinding(keyboardEvent.ctrlKey, keyboardEvent.shiftKey, keyboardEvent.altKey, keyboardEvent.metaKey, keyboardEvent.keyCode).toChord();\n return new USLayoutResolvedKeybinding(keybinding, OS);\n }\n}\nfunction isConfigurationOverrides(thing) {\n return thing\n && typeof thing === 'object'\n && (!thing.overrideIdentifier || typeof thing.overrideIdentifier === 'string')\n && (!thing.resource || thing.resource instanceof URI);\n}\nexport class SimpleConfigurationService {\n constructor() {\n this._onDidChangeConfiguration = new Emitter();\n this.onDidChangeConfiguration = this._onDidChangeConfiguration.event;\n this._configuration = new Configuration(new DefaultConfigurationModel(), new ConfigurationModel());\n }\n getValue(arg1, arg2) {\n const section = typeof arg1 === 'string' ? arg1 : undefined;\n const overrides = isConfigurationOverrides(arg1) ? arg1 : isConfigurationOverrides(arg2) ? arg2 : {};\n return this._configuration.getValue(section, overrides, undefined);\n }\n updateValues(values) {\n const previous = { data: this._configuration.toData() };\n let changedKeys = [];\n for (const entry of values) {\n const [key, value] = entry;\n if (this.getValue(key) === value) {\n continue;\n }\n this._configuration.updateValue(key, value);\n changedKeys.push(key);\n }\n if (changedKeys.length > 0) {\n const configurationChangeEvent = new ConfigurationChangeEvent({ keys: changedKeys, overrides: [] }, previous, this._configuration);\n configurationChangeEvent.source = 7 /* MEMORY */;\n configurationChangeEvent.sourceConfig = null;\n this._onDidChangeConfiguration.fire(configurationChangeEvent);\n }\n return Promise.resolve();\n }\n}\nexport class SimpleResourceConfigurationService {\n constructor(configurationService) {\n this.configurationService = configurationService;\n this._onDidChangeConfiguration = new Emitter();\n this.configurationService.onDidChangeConfiguration((e) => {\n this._onDidChangeConfiguration.fire({ affectedKeys: e.affectedKeys, affectsConfiguration: (resource, configuration) => e.affectsConfiguration(configuration) });\n });\n }\n getValue(resource, arg2, arg3) {\n const position = Pos.isIPosition(arg2) ? arg2 : null;\n const section = position ? (typeof arg3 === 'string' ? arg3 : undefined) : (typeof arg2 === 'string' ? arg2 : undefined);\n if (typeof section === 'undefined') {\n return this.configurationService.getValue();\n }\n return this.configurationService.getValue(section);\n }\n}\nlet SimpleResourcePropertiesService = class SimpleResourcePropertiesService {\n constructor(configurationService) {\n this.configurationService = configurationService;\n }\n getEOL(resource, language) {\n const eol = this.configurationService.getValue('files.eol', { overrideIdentifier: language, resource });\n if (eol && typeof eol === 'string' && eol !== 'auto') {\n return eol;\n }\n return (isLinux || isMacintosh) ? '\\n' : '\\r\\n';\n }\n};\nSimpleResourcePropertiesService = __decorate([\n __param(0, IConfigurationService)\n], SimpleResourcePropertiesService);\nexport { SimpleResourcePropertiesService };\nexport class StandaloneTelemetryService {\n publicLog(eventName, data) {\n return Promise.resolve(undefined);\n }\n publicLog2(eventName, data) {\n return this.publicLog(eventName, data);\n }\n}\nexport class SimpleWorkspaceContextService {\n constructor() {\n const resource = URI.from({ scheme: SimpleWorkspaceContextService.SCHEME, authority: 'model', path: '/' });\n this.workspace = { id: '4064f6ec-cb38-4ad0-af64-ee6467e63c82', folders: [new WorkspaceFolder({ uri: resource, name: '', index: 0 })] };\n }\n getWorkspace() {\n return this.workspace;\n }\n}\nSimpleWorkspaceContextService.SCHEME = 'inmemory';\nexport function updateConfigurationService(configurationService, source, isDiffEditor) {\n if (!source) {\n return;\n }\n if (!(configurationService instanceof SimpleConfigurationService)) {\n return;\n }\n let toUpdate = [];\n Object.keys(source).forEach((key) => {\n if (isEditorConfigurationKey(key)) {\n toUpdate.push([`editor.${key}`, source[key]]);\n }\n if (isDiffEditor && isDiffEditorConfigurationKey(key)) {\n toUpdate.push([`diffEditor.${key}`, source[key]]);\n }\n });\n if (toUpdate.length > 0) {\n configurationService.updateValues(toUpdate);\n }\n}\nexport class SimpleBulkEditService {\n constructor(_modelService) {\n this._modelService = _modelService;\n //\n }\n hasPreviewHandler() {\n return false;\n }\n apply(edits, _options) {\n return __awaiter(this, void 0, void 0, function* () {\n const textEdits = new Map();\n for (let edit of edits) {\n if (!(edit instanceof ResourceTextEdit)) {\n throw new Error('bad edit - only text edits are supported');\n }\n const model = this._modelService.getModel(edit.resource);\n if (!model) {\n throw new Error('bad edit - model not found');\n }\n if (typeof edit.versionId === 'number' && model.getVersionId() !== edit.versionId) {\n throw new Error('bad state - model changed in the meantime');\n }\n let array = textEdits.get(model);\n if (!array) {\n array = [];\n textEdits.set(model, array);\n }\n array.push(EditOperation.replaceMove(Range.lift(edit.textEdit.range), edit.textEdit.text));\n }\n let totalEdits = 0;\n let totalFiles = 0;\n for (const [model, edits] of textEdits) {\n model.pushStackElement();\n model.pushEditOperations([], edits, () => []);\n model.pushStackElement();\n totalFiles += 1;\n totalEdits += edits.length;\n }\n return {\n ariaSummary: strings.format(SimpleServicesNLS.bulkEditServiceSummary, totalEdits, totalFiles)\n };\n });\n }\n}\nexport class SimpleUriLabelService {\n getUriLabel(resource, options) {\n if (resource.scheme === 'file') {\n return resource.fsPath;\n }\n return resource.path;\n }\n}\nexport class SimpleLayoutService {\n constructor(_codeEditorService, _container) {\n this._codeEditorService = _codeEditorService;\n this._container = _container;\n this.onDidLayout = Event.None;\n }\n get dimension() {\n if (!this._dimension) {\n this._dimension = dom.getClientArea(window.document.body);\n }\n return this._dimension;\n }\n get container() {\n return this._container;\n }\n focus() {\n var _a;\n (_a = this._codeEditorService.getFocusedCodeEditor()) === null || _a === void 0 ? void 0 : _a.focus();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const IMarkerDecorationsService = createDecorator('markerDecorationsService');\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { IMarkerDecorationsService } from '../../common/services/markersDecorationService.js';\nimport { registerEditorContribution } from '../editorExtensions.js';\nlet MarkerDecorationsContribution = class MarkerDecorationsContribution {\n constructor(_editor, _markerDecorationsService) {\n // Doesn't do anything, just requires `IMarkerDecorationsService` to make sure it gets instantiated\n }\n dispose() {\n }\n};\nMarkerDecorationsContribution.ID = 'editor.contrib.markerDecorations';\nMarkerDecorationsContribution = __decorate([\n __param(1, IMarkerDecorationsService)\n], MarkerDecorationsContribution);\nexport { MarkerDecorationsContribution };\nregisterEditorContribution(MarkerDecorationsContribution.ID, MarkerDecorationsContribution);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isSafari } from '../../../base/browser/browser.js';\nimport { EDITOR_FONT_DEFAULTS } from '../../common/config/editorOptions.js';\nexport class CharWidthRequest {\n constructor(chr, type) {\n this.chr = chr;\n this.type = type;\n this.width = 0;\n }\n fulfill(width) {\n this.width = width;\n }\n}\nclass DomCharWidthReader {\n constructor(bareFontInfo, requests) {\n this._bareFontInfo = bareFontInfo;\n this._requests = requests;\n this._container = null;\n this._testElements = null;\n }\n read() {\n // Create a test container with all these test elements\n this._createDomElements();\n // Add the container to the DOM\n document.body.appendChild(this._container);\n // Read character widths\n this._readFromDomElements();\n // Remove the container from the DOM\n document.body.removeChild(this._container);\n this._container = null;\n this._testElements = null;\n }\n _createDomElements() {\n const fontFamily = this._bareFontInfo.getMassagedFontFamily(isSafari ? EDITOR_FONT_DEFAULTS.fontFamily : null);\n const container = document.createElement('div');\n container.style.position = 'absolute';\n container.style.top = '-50000px';\n container.style.width = '50000px';\n const regularDomNode = document.createElement('div');\n regularDomNode.style.fontFamily = fontFamily;\n regularDomNode.style.fontWeight = this._bareFontInfo.fontWeight;\n regularDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\n regularDomNode.style.fontFeatureSettings = this._bareFontInfo.fontFeatureSettings;\n regularDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\n regularDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\n container.appendChild(regularDomNode);\n const boldDomNode = document.createElement('div');\n boldDomNode.style.fontFamily = fontFamily;\n boldDomNode.style.fontWeight = 'bold';\n boldDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\n boldDomNode.style.fontFeatureSettings = this._bareFontInfo.fontFeatureSettings;\n boldDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\n boldDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\n container.appendChild(boldDomNode);\n const italicDomNode = document.createElement('div');\n italicDomNode.style.fontFamily = fontFamily;\n italicDomNode.style.fontWeight = this._bareFontInfo.fontWeight;\n italicDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\n italicDomNode.style.fontFeatureSettings = this._bareFontInfo.fontFeatureSettings;\n italicDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\n italicDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\n italicDomNode.style.fontStyle = 'italic';\n container.appendChild(italicDomNode);\n const testElements = [];\n for (const request of this._requests) {\n let parent;\n if (request.type === 0 /* Regular */) {\n parent = regularDomNode;\n }\n if (request.type === 2 /* Bold */) {\n parent = boldDomNode;\n }\n if (request.type === 1 /* Italic */) {\n parent = italicDomNode;\n }\n parent.appendChild(document.createElement('br'));\n const testElement = document.createElement('span');\n DomCharWidthReader._render(testElement, request);\n parent.appendChild(testElement);\n testElements.push(testElement);\n }\n this._container = container;\n this._testElements = testElements;\n }\n static _render(testElement, request) {\n if (request.chr === ' ') {\n let htmlString = '\\u00a0';\n // Repeat character 256 (2^8) times\n for (let i = 0; i < 8; i++) {\n htmlString += htmlString;\n }\n testElement.innerText = htmlString;\n }\n else {\n let testString = request.chr;\n // Repeat character 256 (2^8) times\n for (let i = 0; i < 8; i++) {\n testString += testString;\n }\n testElement.textContent = testString;\n }\n }\n _readFromDomElements() {\n for (let i = 0, len = this._requests.length; i < len; i++) {\n const request = this._requests[i];\n const testElement = this._testElements[i];\n request.fulfill(testElement.offsetWidth / 256);\n }\n }\n}\nexport function readCharWidths(bareFontInfo, requests) {\n const reader = new DomCharWidthReader(bareFontInfo, requests);\n reader.read();\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Disposable } from '../../../base/common/lifecycle.js';\nexport class ElementSizeObserver extends Disposable {\n constructor(referenceDomElement, dimension, changeCallback) {\n super();\n this.referenceDomElement = referenceDomElement;\n this.changeCallback = changeCallback;\n this.width = -1;\n this.height = -1;\n this.resizeObserver = null;\n this.measureReferenceDomElementToken = -1;\n this.measureReferenceDomElement(false, dimension);\n }\n dispose() {\n this.stopObserving();\n super.dispose();\n }\n getWidth() {\n return this.width;\n }\n getHeight() {\n return this.height;\n }\n startObserving() {\n if (typeof ResizeObserver !== 'undefined') {\n if (!this.resizeObserver && this.referenceDomElement) {\n this.resizeObserver = new ResizeObserver((entries) => {\n if (entries && entries[0] && entries[0].contentRect) {\n this.observe({ width: entries[0].contentRect.width, height: entries[0].contentRect.height });\n }\n else {\n this.observe();\n }\n });\n this.resizeObserver.observe(this.referenceDomElement);\n }\n }\n else {\n if (this.measureReferenceDomElementToken === -1) {\n // setInterval type defaults to NodeJS.Timeout instead of number, so specify it as a number\n this.measureReferenceDomElementToken = setInterval(() => this.observe(), 100);\n }\n }\n }\n stopObserving() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.measureReferenceDomElementToken !== -1) {\n clearInterval(this.measureReferenceDomElementToken);\n this.measureReferenceDomElementToken = -1;\n }\n }\n observe(dimension) {\n this.measureReferenceDomElement(true, dimension);\n }\n measureReferenceDomElement(callChangeCallback, dimension) {\n let observedWidth = 0;\n let observedHeight = 0;\n if (dimension) {\n observedWidth = dimension.width;\n observedHeight = dimension.height;\n }\n else if (this.referenceDomElement) {\n observedWidth = this.referenceDomElement.clientWidth;\n observedHeight = this.referenceDomElement.clientHeight;\n }\n observedWidth = Math.max(5, observedWidth);\n observedHeight = Math.max(5, observedHeight);\n if (this.width !== observedWidth || this.height !== observedHeight) {\n this.width = observedWidth;\n this.height = observedHeight;\n if (callChangeCallback) {\n this.changeCallback();\n }\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from '../../../base/browser/browser.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { CharWidthRequest, readCharWidths } from './charWidthReader.js';\nimport { ElementSizeObserver } from './elementSizeObserver.js';\nimport { CommonEditorConfiguration } from '../../common/config/commonEditorConfig.js';\nimport { EditorFontLigatures, EDITOR_FONT_DEFAULTS } from '../../common/config/editorOptions.js';\nimport { FontInfo } from '../../common/config/fontInfo.js';\nclass CSSBasedConfigurationCache {\n constructor() {\n this._keys = Object.create(null);\n this._values = Object.create(null);\n }\n has(item) {\n const itemId = item.getId();\n return !!this._values[itemId];\n }\n get(item) {\n const itemId = item.getId();\n return this._values[itemId];\n }\n put(item, value) {\n const itemId = item.getId();\n this._keys[itemId] = item;\n this._values[itemId] = value;\n }\n remove(item) {\n const itemId = item.getId();\n delete this._keys[itemId];\n delete this._values[itemId];\n }\n getValues() {\n return Object.keys(this._keys).map(id => this._values[id]);\n }\n}\nexport function clearAllFontInfos() {\n CSSBasedConfiguration.INSTANCE.clearCache();\n}\nclass CSSBasedConfiguration extends Disposable {\n constructor() {\n super();\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._cache = new CSSBasedConfigurationCache();\n this._evictUntrustedReadingsTimeout = -1;\n }\n dispose() {\n if (this._evictUntrustedReadingsTimeout !== -1) {\n clearTimeout(this._evictUntrustedReadingsTimeout);\n this._evictUntrustedReadingsTimeout = -1;\n }\n super.dispose();\n }\n clearCache() {\n this._cache = new CSSBasedConfigurationCache();\n this._onDidChange.fire();\n }\n _writeToCache(item, value) {\n this._cache.put(item, value);\n if (!value.isTrusted && this._evictUntrustedReadingsTimeout === -1) {\n // Try reading again after some time\n this._evictUntrustedReadingsTimeout = setTimeout(() => {\n this._evictUntrustedReadingsTimeout = -1;\n this._evictUntrustedReadings();\n }, 5000);\n }\n }\n _evictUntrustedReadings() {\n const values = this._cache.getValues();\n let somethingRemoved = false;\n for (const item of values) {\n if (!item.isTrusted) {\n somethingRemoved = true;\n this._cache.remove(item);\n }\n }\n if (somethingRemoved) {\n this._onDidChange.fire();\n }\n }\n readConfiguration(bareFontInfo) {\n if (!this._cache.has(bareFontInfo)) {\n let readConfig = CSSBasedConfiguration._actualReadConfiguration(bareFontInfo);\n if (readConfig.typicalHalfwidthCharacterWidth <= 2 || readConfig.typicalFullwidthCharacterWidth <= 2 || readConfig.spaceWidth <= 2 || readConfig.maxDigitWidth <= 2) {\n // Hey, it's Bug 14341 ... we couldn't read\n readConfig = new FontInfo({\n zoomLevel: browser.getZoomLevel(),\n pixelRatio: browser.getPixelRatio(),\n fontFamily: readConfig.fontFamily,\n fontWeight: readConfig.fontWeight,\n fontSize: readConfig.fontSize,\n fontFeatureSettings: readConfig.fontFeatureSettings,\n lineHeight: readConfig.lineHeight,\n letterSpacing: readConfig.letterSpacing,\n isMonospace: readConfig.isMonospace,\n typicalHalfwidthCharacterWidth: Math.max(readConfig.typicalHalfwidthCharacterWidth, 5),\n typicalFullwidthCharacterWidth: Math.max(readConfig.typicalFullwidthCharacterWidth, 5),\n canUseHalfwidthRightwardsArrow: readConfig.canUseHalfwidthRightwardsArrow,\n spaceWidth: Math.max(readConfig.spaceWidth, 5),\n middotWidth: Math.max(readConfig.middotWidth, 5),\n wsmiddotWidth: Math.max(readConfig.wsmiddotWidth, 5),\n maxDigitWidth: Math.max(readConfig.maxDigitWidth, 5),\n }, false);\n }\n this._writeToCache(bareFontInfo, readConfig);\n }\n return this._cache.get(bareFontInfo);\n }\n static createRequest(chr, type, all, monospace) {\n const result = new CharWidthRequest(chr, type);\n all.push(result);\n if (monospace) {\n monospace.push(result);\n }\n return result;\n }\n static _actualReadConfiguration(bareFontInfo) {\n const all = [];\n const monospace = [];\n const typicalHalfwidthCharacter = this.createRequest('n', 0 /* Regular */, all, monospace);\n const typicalFullwidthCharacter = this.createRequest('\\uff4d', 0 /* Regular */, all, null);\n const space = this.createRequest(' ', 0 /* Regular */, all, monospace);\n const digit0 = this.createRequest('0', 0 /* Regular */, all, monospace);\n const digit1 = this.createRequest('1', 0 /* Regular */, all, monospace);\n const digit2 = this.createRequest('2', 0 /* Regular */, all, monospace);\n const digit3 = this.createRequest('3', 0 /* Regular */, all, monospace);\n const digit4 = this.createRequest('4', 0 /* Regular */, all, monospace);\n const digit5 = this.createRequest('5', 0 /* Regular */, all, monospace);\n const digit6 = this.createRequest('6', 0 /* Regular */, all, monospace);\n const digit7 = this.createRequest('7', 0 /* Regular */, all, monospace);\n const digit8 = this.createRequest('8', 0 /* Regular */, all, monospace);\n const digit9 = this.createRequest('9', 0 /* Regular */, all, monospace);\n // monospace test: used for whitespace rendering\n const rightwardsArrow = this.createRequest('→', 0 /* Regular */, all, monospace);\n const halfwidthRightwardsArrow = this.createRequest('→', 0 /* Regular */, all, null);\n // U+00B7 - MIDDLE DOT\n const middot = this.createRequest('·', 0 /* Regular */, all, monospace);\n // U+2E31 - WORD SEPARATOR MIDDLE DOT\n const wsmiddotWidth = this.createRequest(String.fromCharCode(0x2E31), 0 /* Regular */, all, null);\n // monospace test: some characters\n const monospaceTestChars = '|/-_ilm%';\n for (let i = 0, len = monospaceTestChars.length; i < len; i++) {\n this.createRequest(monospaceTestChars.charAt(i), 0 /* Regular */, all, monospace);\n this.createRequest(monospaceTestChars.charAt(i), 1 /* Italic */, all, monospace);\n this.createRequest(monospaceTestChars.charAt(i), 2 /* Bold */, all, monospace);\n }\n readCharWidths(bareFontInfo, all);\n const maxDigitWidth = Math.max(digit0.width, digit1.width, digit2.width, digit3.width, digit4.width, digit5.width, digit6.width, digit7.width, digit8.width, digit9.width);\n let isMonospace = (bareFontInfo.fontFeatureSettings === EditorFontLigatures.OFF);\n const referenceWidth = monospace[0].width;\n for (let i = 1, len = monospace.length; isMonospace && i < len; i++) {\n const diff = referenceWidth - monospace[i].width;\n if (diff < -0.001 || diff > 0.001) {\n isMonospace = false;\n break;\n }\n }\n let canUseHalfwidthRightwardsArrow = true;\n if (isMonospace && halfwidthRightwardsArrow.width !== referenceWidth) {\n // using a halfwidth rightwards arrow would break monospace...\n canUseHalfwidthRightwardsArrow = false;\n }\n if (halfwidthRightwardsArrow.width > rightwardsArrow.width) {\n // using a halfwidth rightwards arrow would paint a larger arrow than a regular rightwards arrow\n canUseHalfwidthRightwardsArrow = false;\n }\n // let's trust the zoom level only 2s after it was changed.\n const canTrustBrowserZoomLevel = (browser.getTimeSinceLastZoomLevelChanged() > 2000);\n return new FontInfo({\n zoomLevel: browser.getZoomLevel(),\n pixelRatio: browser.getPixelRatio(),\n fontFamily: bareFontInfo.fontFamily,\n fontWeight: bareFontInfo.fontWeight,\n fontSize: bareFontInfo.fontSize,\n fontFeatureSettings: bareFontInfo.fontFeatureSettings,\n lineHeight: bareFontInfo.lineHeight,\n letterSpacing: bareFontInfo.letterSpacing,\n isMonospace: isMonospace,\n typicalHalfwidthCharacterWidth: typicalHalfwidthCharacter.width,\n typicalFullwidthCharacterWidth: typicalFullwidthCharacter.width,\n canUseHalfwidthRightwardsArrow: canUseHalfwidthRightwardsArrow,\n spaceWidth: space.width,\n middotWidth: middot.width,\n wsmiddotWidth: wsmiddotWidth.width,\n maxDigitWidth: maxDigitWidth\n }, canTrustBrowserZoomLevel);\n }\n}\nCSSBasedConfiguration.INSTANCE = new CSSBasedConfiguration();\nexport class Configuration extends CommonEditorConfiguration {\n constructor(isSimpleWidget, options, referenceDomElement = null, accessibilityService) {\n super(isSimpleWidget, options);\n this.accessibilityService = accessibilityService;\n this._elementSizeObserver = this._register(new ElementSizeObserver(referenceDomElement, options.dimension, () => this._recomputeOptions()));\n this._register(CSSBasedConfiguration.INSTANCE.onDidChange(() => this._recomputeOptions()));\n if (this._validatedOptions.get(10 /* automaticLayout */)) {\n this._elementSizeObserver.startObserving();\n }\n this._register(browser.onDidChangeZoomLevel(_ => this._recomputeOptions()));\n this._register(this.accessibilityService.onDidChangeScreenReaderOptimized(() => this._recomputeOptions()));\n this._recomputeOptions();\n }\n static applyFontInfoSlow(domNode, fontInfo) {\n domNode.style.fontFamily = fontInfo.getMassagedFontFamily(browser.isSafari ? EDITOR_FONT_DEFAULTS.fontFamily : null);\n domNode.style.fontWeight = fontInfo.fontWeight;\n domNode.style.fontSize = fontInfo.fontSize + 'px';\n domNode.style.fontFeatureSettings = fontInfo.fontFeatureSettings;\n domNode.style.lineHeight = fontInfo.lineHeight + 'px';\n domNode.style.letterSpacing = fontInfo.letterSpacing + 'px';\n }\n static applyFontInfo(domNode, fontInfo) {\n domNode.setFontFamily(fontInfo.getMassagedFontFamily(browser.isSafari ? EDITOR_FONT_DEFAULTS.fontFamily : null));\n domNode.setFontWeight(fontInfo.fontWeight);\n domNode.setFontSize(fontInfo.fontSize);\n domNode.setFontFeatureSettings(fontInfo.fontFeatureSettings);\n domNode.setLineHeight(fontInfo.lineHeight);\n domNode.setLetterSpacing(fontInfo.letterSpacing);\n }\n observeReferenceElement(dimension) {\n this._elementSizeObserver.observe(dimension);\n }\n updatePixelRatio() {\n this._recomputeOptions();\n }\n static _getExtraEditorClassName() {\n let extra = '';\n if (!browser.isSafari && !browser.isWebkitWebView) {\n // Use user-select: none in all browsers except Safari and native macOS WebView\n extra += 'no-user-select ';\n }\n if (browser.isSafari) {\n // See https://github.com/microsoft/vscode/issues/108822\n extra += 'no-minimap-shadow ';\n }\n if (platform.isMacintosh) {\n extra += 'mac ';\n }\n return extra;\n }\n _getEnvConfiguration() {\n return {\n extraEditorClassName: Configuration._getExtraEditorClassName(),\n outerWidth: this._elementSizeObserver.getWidth(),\n outerHeight: this._elementSizeObserver.getHeight(),\n emptySelectionClipboard: browser.isWebKit || browser.isFirefox,\n pixelRatio: browser.getPixelRatio(),\n zoomLevel: browser.getZoomLevel(),\n accessibilitySupport: (this.accessibilityService.isScreenReaderOptimized()\n ? 2 /* Enabled */\n : this.accessibilityService.getAccessibilitySupport())\n };\n }\n readConfiguration(bareFontInfo) {\n return CSSBasedConfiguration.INSTANCE.readConfiguration(bareFontInfo);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../base/browser/dom.js';\nimport { GlobalMouseMoveMonitor } from '../../base/browser/globalMouseMoveMonitor.js';\nimport { StandardMouseEvent } from '../../base/browser/mouseEvent.js';\nimport { Disposable } from '../../base/common/lifecycle.js';\n/**\n * Coordinates relative to the whole document (e.g. mouse event's pageX and pageY)\n */\nexport class PageCoordinates {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n this._pageCoordinatesBrand = undefined;\n }\n toClientCoordinates() {\n return new ClientCoordinates(this.x - dom.StandardWindow.scrollX, this.y - dom.StandardWindow.scrollY);\n }\n}\n/**\n * Coordinates within the application's client area (i.e. origin is document's scroll position).\n *\n * For example, clicking in the top-left corner of the client area will\n * always result in a mouse event with a client.x value of 0, regardless\n * of whether the page is scrolled horizontally.\n */\nexport class ClientCoordinates {\n constructor(clientX, clientY) {\n this.clientX = clientX;\n this.clientY = clientY;\n this._clientCoordinatesBrand = undefined;\n }\n toPageCoordinates() {\n return new PageCoordinates(this.clientX + dom.StandardWindow.scrollX, this.clientY + dom.StandardWindow.scrollY);\n }\n}\n/**\n * The position of the editor in the page.\n */\nexport class EditorPagePosition {\n constructor(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this._editorPagePositionBrand = undefined;\n }\n}\nexport function createEditorPagePosition(editorViewDomNode) {\n const editorPos = dom.getDomNodePagePosition(editorViewDomNode);\n return new EditorPagePosition(editorPos.left, editorPos.top, editorPos.width, editorPos.height);\n}\nexport class EditorMouseEvent extends StandardMouseEvent {\n constructor(e, editorViewDomNode) {\n super(e);\n this._editorMouseEventBrand = undefined;\n this.pos = new PageCoordinates(this.posx, this.posy);\n this.editorPos = createEditorPagePosition(editorViewDomNode);\n }\n}\nexport class EditorMouseEventFactory {\n constructor(editorViewDomNode) {\n this._editorViewDomNode = editorViewDomNode;\n }\n _create(e) {\n return new EditorMouseEvent(e, this._editorViewDomNode);\n }\n onContextMenu(target, callback) {\n return dom.addDisposableListener(target, 'contextmenu', (e) => {\n callback(this._create(e));\n });\n }\n onMouseUp(target, callback) {\n return dom.addDisposableListener(target, 'mouseup', (e) => {\n callback(this._create(e));\n });\n }\n onMouseDown(target, callback) {\n return dom.addDisposableListener(target, 'mousedown', (e) => {\n callback(this._create(e));\n });\n }\n onMouseLeave(target, callback) {\n return dom.addDisposableNonBubblingMouseOutListener(target, (e) => {\n callback(this._create(e));\n });\n }\n onMouseMoveThrottled(target, callback, merger, minimumTimeMs) {\n const myMerger = (lastEvent, currentEvent) => {\n return merger(lastEvent, this._create(currentEvent));\n };\n return dom.addDisposableThrottledListener(target, 'mousemove', callback, myMerger, minimumTimeMs);\n }\n}\nexport class EditorPointerEventFactory {\n constructor(editorViewDomNode) {\n this._editorViewDomNode = editorViewDomNode;\n }\n _create(e) {\n return new EditorMouseEvent(e, this._editorViewDomNode);\n }\n onPointerUp(target, callback) {\n return dom.addDisposableListener(target, 'pointerup', (e) => {\n callback(this._create(e));\n });\n }\n onPointerDown(target, callback) {\n return dom.addDisposableListener(target, 'pointerdown', (e) => {\n callback(this._create(e));\n });\n }\n onPointerLeave(target, callback) {\n return dom.addDisposableNonBubblingPointerOutListener(target, (e) => {\n callback(this._create(e));\n });\n }\n onPointerMoveThrottled(target, callback, merger, minimumTimeMs) {\n const myMerger = (lastEvent, currentEvent) => {\n return merger(lastEvent, this._create(currentEvent));\n };\n return dom.addDisposableThrottledListener(target, 'pointermove', callback, myMerger, minimumTimeMs);\n }\n}\nexport class GlobalEditorMouseMoveMonitor extends Disposable {\n constructor(editorViewDomNode) {\n super();\n this._editorViewDomNode = editorViewDomNode;\n this._globalMouseMoveMonitor = this._register(new GlobalMouseMoveMonitor());\n this._keydownListener = null;\n }\n startMonitoring(initialElement, initialButtons, merger, mouseMoveCallback, onStopCallback) {\n // Add a <> keydown event listener that will cancel the monitoring\n // if something other than a modifier key is pressed\n this._keydownListener = dom.addStandardDisposableListener(document, 'keydown', (e) => {\n const kb = e.toKeybinding();\n if (kb.isModifierKey()) {\n // Allow modifier keys\n return;\n }\n this._globalMouseMoveMonitor.stopMonitoring(true, e.browserEvent);\n }, true);\n const myMerger = (lastEvent, currentEvent) => {\n return merger(lastEvent, new EditorMouseEvent(currentEvent, this._editorViewDomNode));\n };\n this._globalMouseMoveMonitor.startMonitoring(initialElement, initialButtons, myMerger, mouseMoveCallback, (e) => {\n this._keydownListener.dispose();\n onStopCallback(e);\n });\n }\n stopMonitoring() {\n this._globalMouseMoveMonitor.stopMonitoring(true);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Disposable } from '../../../base/common/lifecycle.js';\nexport class ViewEventHandler extends Disposable {\n constructor() {\n super();\n this._shouldRender = true;\n }\n shouldRender() {\n return this._shouldRender;\n }\n forceShouldRender() {\n this._shouldRender = true;\n }\n setShouldRender() {\n this._shouldRender = true;\n }\n onDidRender() {\n this._shouldRender = false;\n }\n // --- begin event handlers\n onCompositionStart(e) {\n return false;\n }\n onCompositionEnd(e) {\n return false;\n }\n onConfigurationChanged(e) {\n return false;\n }\n onCursorStateChanged(e) {\n return false;\n }\n onDecorationsChanged(e) {\n return false;\n }\n onFlushed(e) {\n return false;\n }\n onFocusChanged(e) {\n return false;\n }\n onLanguageConfigurationChanged(e) {\n return false;\n }\n onLineMappingChanged(e) {\n return false;\n }\n onLinesChanged(e) {\n return false;\n }\n onLinesDeleted(e) {\n return false;\n }\n onLinesInserted(e) {\n return false;\n }\n onRevealRangeRequest(e) {\n return false;\n }\n onScrollChanged(e) {\n return false;\n }\n onThemeChanged(e) {\n return false;\n }\n onTokensChanged(e) {\n return false;\n }\n onTokensColorsChanged(e) {\n return false;\n }\n onZonesChanged(e) {\n return false;\n }\n // --- end event handlers\n handleEvents(events) {\n let shouldRender = false;\n for (let i = 0, len = events.length; i < len; i++) {\n let e = events[i];\n switch (e.type) {\n case 0 /* ViewCompositionStart */:\n if (this.onCompositionStart(e)) {\n shouldRender = true;\n }\n break;\n case 1 /* ViewCompositionEnd */:\n if (this.onCompositionEnd(e)) {\n shouldRender = true;\n }\n break;\n case 2 /* ViewConfigurationChanged */:\n if (this.onConfigurationChanged(e)) {\n shouldRender = true;\n }\n break;\n case 3 /* ViewCursorStateChanged */:\n if (this.onCursorStateChanged(e)) {\n shouldRender = true;\n }\n break;\n case 4 /* ViewDecorationsChanged */:\n if (this.onDecorationsChanged(e)) {\n shouldRender = true;\n }\n break;\n case 5 /* ViewFlushed */:\n if (this.onFlushed(e)) {\n shouldRender = true;\n }\n break;\n case 6 /* ViewFocusChanged */:\n if (this.onFocusChanged(e)) {\n shouldRender = true;\n }\n break;\n case 7 /* ViewLanguageConfigurationChanged */:\n if (this.onLanguageConfigurationChanged(e)) {\n shouldRender = true;\n }\n break;\n case 8 /* ViewLineMappingChanged */:\n if (this.onLineMappingChanged(e)) {\n shouldRender = true;\n }\n break;\n case 9 /* ViewLinesChanged */:\n if (this.onLinesChanged(e)) {\n shouldRender = true;\n }\n break;\n case 10 /* ViewLinesDeleted */:\n if (this.onLinesDeleted(e)) {\n shouldRender = true;\n }\n break;\n case 11 /* ViewLinesInserted */:\n if (this.onLinesInserted(e)) {\n shouldRender = true;\n }\n break;\n case 12 /* ViewRevealRangeRequest */:\n if (this.onRevealRangeRequest(e)) {\n shouldRender = true;\n }\n break;\n case 13 /* ViewScrollChanged */:\n if (this.onScrollChanged(e)) {\n shouldRender = true;\n }\n break;\n case 15 /* ViewTokensChanged */:\n if (this.onTokensChanged(e)) {\n shouldRender = true;\n }\n break;\n case 14 /* ViewThemeChanged */:\n if (this.onThemeChanged(e)) {\n shouldRender = true;\n }\n break;\n case 16 /* ViewTokensColorsChanged */:\n if (this.onTokensColorsChanged(e)) {\n shouldRender = true;\n }\n break;\n case 17 /* ViewZonesChanged */:\n if (this.onZonesChanged(e)) {\n shouldRender = true;\n }\n break;\n default:\n console.info('View received unknown event: ');\n console.info(e);\n }\n }\n if (shouldRender) {\n this._shouldRender = true;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { FastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\nexport class ViewPart extends ViewEventHandler {\n constructor(context) {\n super();\n this._context = context;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n super.dispose();\n }\n}\nexport class PartFingerprints {\n static write(target, partId) {\n if (target instanceof FastDomNode) {\n target.setAttribute('data-mprt', String(partId));\n }\n else {\n target.setAttribute('data-mprt', String(partId));\n }\n }\n static read(target) {\n const r = target.getAttribute('data-mprt');\n if (r === null) {\n return 0 /* None */;\n }\n return parseInt(r, 10);\n }\n static collect(child, stopAt) {\n let result = [], resultLen = 0;\n while (child && child !== document.body) {\n if (child === stopAt) {\n break;\n }\n if (child.nodeType === child.ELEMENT_NODE) {\n result[resultLen++] = this.read(child);\n }\n child = child.parentElement;\n }\n const r = new Uint8Array(resultLen);\n for (let i = 0; i < resultLen; i++) {\n r[i] = result[resultLen - i - 1];\n }\n return r;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class RestrictedRenderingContext {\n constructor(viewLayout, viewportData) {\n this._restrictedRenderingContextBrand = undefined;\n this._viewLayout = viewLayout;\n this.viewportData = viewportData;\n this.scrollWidth = this._viewLayout.getScrollWidth();\n this.scrollHeight = this._viewLayout.getScrollHeight();\n this.visibleRange = this.viewportData.visibleRange;\n this.bigNumbersDelta = this.viewportData.bigNumbersDelta;\n const vInfo = this._viewLayout.getCurrentViewport();\n this.scrollTop = vInfo.top;\n this.scrollLeft = vInfo.left;\n this.viewportWidth = vInfo.width;\n this.viewportHeight = vInfo.height;\n }\n getScrolledTopFromAbsoluteTop(absoluteTop) {\n return absoluteTop - this.scrollTop;\n }\n getVerticalOffsetForLineNumber(lineNumber) {\n return this._viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n }\n getDecorationsInViewport() {\n return this.viewportData.getDecorationsInViewport();\n }\n}\nexport class RenderingContext extends RestrictedRenderingContext {\n constructor(viewLayout, viewportData, viewLines) {\n super(viewLayout, viewportData);\n this._renderingContextBrand = undefined;\n this._viewLines = viewLines;\n }\n linesVisibleRangesForRange(range, includeNewLines) {\n return this._viewLines.linesVisibleRangesForRange(range, includeNewLines);\n }\n visibleRangeForPosition(position) {\n return this._viewLines.visibleRangeForPosition(position);\n }\n}\nexport class LineVisibleRanges {\n constructor(outsideRenderedLine, lineNumber, ranges) {\n this.outsideRenderedLine = outsideRenderedLine;\n this.lineNumber = lineNumber;\n this.ranges = ranges;\n }\n}\nexport class HorizontalRange {\n constructor(left, width) {\n this._horizontalRangeBrand = undefined;\n this.left = Math.round(left);\n this.width = Math.round(width);\n }\n static from(ranges) {\n const result = new Array(ranges.length);\n for (let i = 0, len = ranges.length; i < len; i++) {\n const range = ranges[i];\n result[i] = new HorizontalRange(range.left, range.width);\n }\n return result;\n }\n toString() {\n return `[${this.left},${this.width}]`;\n }\n}\nexport class FloatHorizontalRange {\n constructor(left, width) {\n this._floatHorizontalRangeBrand = undefined;\n this.left = left;\n this.width = width;\n }\n toString() {\n return `[${this.left},${this.width}]`;\n }\n static compare(a, b) {\n return a.left - b.left;\n }\n}\nexport class HorizontalPosition {\n constructor(outsideRenderedLine, left) {\n this.outsideRenderedLine = outsideRenderedLine;\n this.originalLeft = left;\n this.left = Math.round(this.originalLeft);\n }\n}\nexport class VisibleRanges {\n constructor(outsideRenderedLine, ranges) {\n this.outsideRenderedLine = outsideRenderedLine;\n this.ranges = ranges;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { FloatHorizontalRange } from '../../../common/view/renderingContext.js';\nexport class RangeUtil {\n static _createRange() {\n if (!this._handyReadyRange) {\n this._handyReadyRange = document.createRange();\n }\n return this._handyReadyRange;\n }\n static _detachRange(range, endNode) {\n // Move range out of the span node, IE doesn't like having many ranges in\n // the same spot and will act badly for lines containing dashes ('-')\n range.selectNodeContents(endNode);\n }\n static _readClientRects(startElement, startOffset, endElement, endOffset, endNode) {\n const range = this._createRange();\n try {\n range.setStart(startElement, startOffset);\n range.setEnd(endElement, endOffset);\n return range.getClientRects();\n }\n catch (e) {\n // This is life ...\n return null;\n }\n finally {\n this._detachRange(range, endNode);\n }\n }\n static _mergeAdjacentRanges(ranges) {\n if (ranges.length === 1) {\n // There is nothing to merge\n return ranges;\n }\n ranges.sort(FloatHorizontalRange.compare);\n let result = [], resultLen = 0;\n let prev = ranges[0];\n for (let i = 1, len = ranges.length; i < len; i++) {\n const range = ranges[i];\n if (prev.left + prev.width + 0.9 /* account for browser's rounding errors*/ >= range.left) {\n prev.width = Math.max(prev.width, range.left + range.width - prev.left);\n }\n else {\n result[resultLen++] = prev;\n prev = range;\n }\n }\n result[resultLen++] = prev;\n return result;\n }\n static _createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft) {\n if (!clientRects || clientRects.length === 0) {\n return null;\n }\n // We go through FloatHorizontalRange because it has been observed in bi-di text\n // that the clientRects are not coming in sorted from the browser\n const result = [];\n for (let i = 0, len = clientRects.length; i < len; i++) {\n const clientRect = clientRects[i];\n result[i] = new FloatHorizontalRange(Math.max(0, clientRect.left - clientRectDeltaLeft), clientRect.width);\n }\n return this._mergeAdjacentRanges(result);\n }\n static readHorizontalRanges(domNode, startChildIndex, startOffset, endChildIndex, endOffset, clientRectDeltaLeft, endNode) {\n // Panic check\n const min = 0;\n const max = domNode.children.length - 1;\n if (min > max) {\n return null;\n }\n startChildIndex = Math.min(max, Math.max(min, startChildIndex));\n endChildIndex = Math.min(max, Math.max(min, endChildIndex));\n if (startChildIndex === endChildIndex && startOffset === endOffset && startOffset === 0 && !domNode.children[startChildIndex].firstChild) {\n // We must find the position at the beginning of a \n // To cover cases of empty s, avoid using a range and use the 's bounding box\n const clientRects = domNode.children[startChildIndex].getClientRects();\n return this._createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft);\n }\n // If crossing over to a span only to select offset 0, then use the previous span's maximum offset\n // Chrome is buggy and doesn't handle 0 offsets well sometimes.\n if (startChildIndex !== endChildIndex) {\n if (endChildIndex > 0 && endOffset === 0) {\n endChildIndex--;\n endOffset = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n }\n }\n let startElement = domNode.children[startChildIndex].firstChild;\n let endElement = domNode.children[endChildIndex].firstChild;\n if (!startElement || !endElement) {\n // When having an empty (without any text content), try to move to the previous \n if (!startElement && startOffset === 0 && startChildIndex > 0) {\n startElement = domNode.children[startChildIndex - 1].firstChild;\n startOffset = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n }\n if (!endElement && endOffset === 0 && endChildIndex > 0) {\n endElement = domNode.children[endChildIndex - 1].firstChild;\n endOffset = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n }\n }\n if (!startElement || !endElement) {\n return null;\n }\n startOffset = Math.min(startElement.textContent.length, Math.max(0, startOffset));\n endOffset = Math.min(endElement.textContent.length, Math.max(0, endOffset));\n const clientRects = this._readClientRects(startElement, startOffset, endElement, endOffset, endNode);\n return this._createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from '../../../../base/browser/browser.js';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport { RangeUtil } from './rangeUtil.js';\nimport { FloatHorizontalRange, VisibleRanges } from '../../../common/view/renderingContext.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine, LineRange, DomPosition } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { ColorScheme } from '../../../../platform/theme/common/theme.js';\nimport { EditorFontLigatures } from '../../../common/config/editorOptions.js';\nconst canUseFastRenderedViewLine = (function () {\n if (platform.isNative) {\n // In VSCode we know very well when the zoom level changes\n return true;\n }\n if (platform.isLinux || browser.isFirefox || browser.isSafari) {\n // On Linux, it appears that zooming affects char widths (in pixels), which is unexpected.\n // --\n // Even though we read character widths correctly, having read them at a specific zoom level\n // does not mean they are the same at the current zoom level.\n // --\n // This could be improved if we ever figure out how to get an event when browsers zoom,\n // but until then we have to stick with reading client rects.\n // --\n // The same has been observed with Firefox on Windows7\n // --\n // The same has been oversved with Safari\n return false;\n }\n return true;\n})();\nlet monospaceAssumptionsAreValid = true;\nexport class DomReadingContext {\n constructor(domNode, endNode) {\n this._domNode = domNode;\n this._clientRectDeltaLeft = 0;\n this._clientRectDeltaLeftRead = false;\n this.endNode = endNode;\n }\n get clientRectDeltaLeft() {\n if (!this._clientRectDeltaLeftRead) {\n this._clientRectDeltaLeftRead = true;\n this._clientRectDeltaLeft = this._domNode.getBoundingClientRect().left;\n }\n return this._clientRectDeltaLeft;\n }\n}\nexport class ViewLineOptions {\n constructor(config, themeType) {\n this.themeType = themeType;\n const options = config.options;\n const fontInfo = options.get(43 /* fontInfo */);\n this.renderWhitespace = options.get(87 /* renderWhitespace */);\n this.renderControlCharacters = options.get(82 /* renderControlCharacters */);\n this.spaceWidth = fontInfo.spaceWidth;\n this.middotWidth = fontInfo.middotWidth;\n this.wsmiddotWidth = fontInfo.wsmiddotWidth;\n this.useMonospaceOptimizations = (fontInfo.isMonospace\n && !options.get(29 /* disableMonospaceOptimizations */));\n this.canUseHalfwidthRightwardsArrow = fontInfo.canUseHalfwidthRightwardsArrow;\n this.lineHeight = options.get(58 /* lineHeight */);\n this.stopRenderingLineAfter = options.get(104 /* stopRenderingLineAfter */);\n this.fontLigatures = options.get(44 /* fontLigatures */);\n }\n equals(other) {\n return (this.themeType === other.themeType\n && this.renderWhitespace === other.renderWhitespace\n && this.renderControlCharacters === other.renderControlCharacters\n && this.spaceWidth === other.spaceWidth\n && this.middotWidth === other.middotWidth\n && this.wsmiddotWidth === other.wsmiddotWidth\n && this.useMonospaceOptimizations === other.useMonospaceOptimizations\n && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n && this.lineHeight === other.lineHeight\n && this.stopRenderingLineAfter === other.stopRenderingLineAfter\n && this.fontLigatures === other.fontLigatures);\n }\n}\nexport class ViewLine {\n constructor(options) {\n this._options = options;\n this._isMaybeInvalid = true;\n this._renderedViewLine = null;\n }\n // --- begin IVisibleLineData\n getDomNode() {\n if (this._renderedViewLine && this._renderedViewLine.domNode) {\n return this._renderedViewLine.domNode.domNode;\n }\n return null;\n }\n setDomNode(domNode) {\n if (this._renderedViewLine) {\n this._renderedViewLine.domNode = createFastDomNode(domNode);\n }\n else {\n throw new Error('I have no rendered view line to set the dom node to...');\n }\n }\n onContentChanged() {\n this._isMaybeInvalid = true;\n }\n onTokensChanged() {\n this._isMaybeInvalid = true;\n }\n onDecorationsChanged() {\n this._isMaybeInvalid = true;\n }\n onOptionsChanged(newOptions) {\n this._isMaybeInvalid = true;\n this._options = newOptions;\n }\n onSelectionChanged() {\n if (this._options.themeType === ColorScheme.HIGH_CONTRAST || this._options.renderWhitespace === 'selection') {\n this._isMaybeInvalid = true;\n return true;\n }\n return false;\n }\n renderLine(lineNumber, deltaTop, viewportData, sb) {\n if (this._isMaybeInvalid === false) {\n // it appears that nothing relevant has changed\n return false;\n }\n this._isMaybeInvalid = false;\n const lineData = viewportData.getViewLineRenderingData(lineNumber);\n const options = this._options;\n const actualInlineDecorations = LineDecoration.filter(lineData.inlineDecorations, lineNumber, lineData.minColumn, lineData.maxColumn);\n // Only send selection information when needed for rendering whitespace\n let selectionsOnLine = null;\n if (options.themeType === ColorScheme.HIGH_CONTRAST || this._options.renderWhitespace === 'selection') {\n const selections = viewportData.selections;\n for (const selection of selections) {\n if (selection.endLineNumber < lineNumber || selection.startLineNumber > lineNumber) {\n // Selection does not intersect line\n continue;\n }\n const startColumn = (selection.startLineNumber === lineNumber ? selection.startColumn : lineData.minColumn);\n const endColumn = (selection.endLineNumber === lineNumber ? selection.endColumn : lineData.maxColumn);\n if (startColumn < endColumn) {\n if (options.themeType === ColorScheme.HIGH_CONTRAST || this._options.renderWhitespace !== 'selection') {\n actualInlineDecorations.push(new LineDecoration(startColumn, endColumn, 'inline-selected-text', 0 /* Regular */));\n }\n else {\n if (!selectionsOnLine) {\n selectionsOnLine = [];\n }\n selectionsOnLine.push(new LineRange(startColumn - 1, endColumn - 1));\n }\n }\n }\n }\n const renderLineInput = new RenderLineInput(options.useMonospaceOptimizations, options.canUseHalfwidthRightwardsArrow, lineData.content, lineData.continuesWithWrappedLine, lineData.isBasicASCII, lineData.containsRTL, lineData.minColumn - 1, lineData.tokens, actualInlineDecorations, lineData.tabSize, lineData.startVisibleColumn, options.spaceWidth, options.middotWidth, options.wsmiddotWidth, options.stopRenderingLineAfter, options.renderWhitespace, options.renderControlCharacters, options.fontLigatures !== EditorFontLigatures.OFF, selectionsOnLine);\n if (this._renderedViewLine && this._renderedViewLine.input.equals(renderLineInput)) {\n // no need to do anything, we have the same render input\n return false;\n }\n sb.appendASCIIString('
');\n const output = renderViewLine(renderLineInput, sb);\n sb.appendASCIIString('
');\n let renderedViewLine = null;\n if (monospaceAssumptionsAreValid && canUseFastRenderedViewLine && lineData.isBasicASCII && options.useMonospaceOptimizations && output.containsForeignElements === 0 /* None */) {\n if (lineData.content.length < 300 && renderLineInput.lineTokens.getCount() < 100) {\n // Browser rounding errors have been observed in Chrome and IE, so using the fast\n // view line only for short lines. Please test before removing the length check...\n // ---\n // Another rounding error has been observed on Linux in VSCode, where width\n // rounding errors add up to an observable large number...\n // ---\n // Also see another example of rounding errors on Windows in\n // https://github.com/microsoft/vscode/issues/33178\n renderedViewLine = new FastRenderedViewLine(this._renderedViewLine ? this._renderedViewLine.domNode : null, renderLineInput, output.characterMapping);\n }\n }\n if (!renderedViewLine) {\n renderedViewLine = createRenderedLine(this._renderedViewLine ? this._renderedViewLine.domNode : null, renderLineInput, output.characterMapping, output.containsRTL, output.containsForeignElements);\n }\n this._renderedViewLine = renderedViewLine;\n return true;\n }\n layoutLine(lineNumber, deltaTop) {\n if (this._renderedViewLine && this._renderedViewLine.domNode) {\n this._renderedViewLine.domNode.setTop(deltaTop);\n this._renderedViewLine.domNode.setHeight(this._options.lineHeight);\n }\n }\n // --- end IVisibleLineData\n getWidth() {\n if (!this._renderedViewLine) {\n return 0;\n }\n return this._renderedViewLine.getWidth();\n }\n getWidthIsFast() {\n if (!this._renderedViewLine) {\n return true;\n }\n return this._renderedViewLine.getWidthIsFast();\n }\n needsMonospaceFontCheck() {\n if (!this._renderedViewLine) {\n return false;\n }\n return (this._renderedViewLine instanceof FastRenderedViewLine);\n }\n monospaceAssumptionsAreValid() {\n if (!this._renderedViewLine) {\n return monospaceAssumptionsAreValid;\n }\n if (this._renderedViewLine instanceof FastRenderedViewLine) {\n return this._renderedViewLine.monospaceAssumptionsAreValid();\n }\n return monospaceAssumptionsAreValid;\n }\n onMonospaceAssumptionsInvalidated() {\n if (this._renderedViewLine && this._renderedViewLine instanceof FastRenderedViewLine) {\n this._renderedViewLine = this._renderedViewLine.toSlowRenderedLine();\n }\n }\n getVisibleRangesForRange(lineNumber, startColumn, endColumn, context) {\n if (!this._renderedViewLine) {\n return null;\n }\n startColumn = startColumn | 0; // @perf\n endColumn = endColumn | 0; // @perf\n startColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, startColumn));\n endColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, endColumn));\n const stopRenderingLineAfter = this._renderedViewLine.input.stopRenderingLineAfter | 0; // @perf\n let outsideRenderedLine = false;\n if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter + 1 && endColumn > stopRenderingLineAfter + 1) {\n // This range is obviously not visible\n outsideRenderedLine = true;\n }\n if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter + 1) {\n startColumn = stopRenderingLineAfter + 1;\n }\n if (stopRenderingLineAfter !== -1 && endColumn > stopRenderingLineAfter + 1) {\n endColumn = stopRenderingLineAfter + 1;\n }\n const horizontalRanges = this._renderedViewLine.getVisibleRangesForRange(lineNumber, startColumn, endColumn, context);\n if (horizontalRanges && horizontalRanges.length > 0) {\n return new VisibleRanges(outsideRenderedLine, horizontalRanges);\n }\n return null;\n }\n getColumnOfNodeOffset(lineNumber, spanNode, offset) {\n if (!this._renderedViewLine) {\n return 1;\n }\n return this._renderedViewLine.getColumnOfNodeOffset(lineNumber, spanNode, offset);\n }\n}\nViewLine.CLASS_NAME = 'view-line';\n/**\n * A rendered line which is guaranteed to contain only regular ASCII and is rendered with a monospace font.\n */\nclass FastRenderedViewLine {\n constructor(domNode, renderLineInput, characterMapping) {\n this.domNode = domNode;\n this.input = renderLineInput;\n this._characterMapping = characterMapping;\n this._charWidth = renderLineInput.spaceWidth;\n }\n getWidth() {\n return Math.round(this._getCharPosition(this._characterMapping.length));\n }\n getWidthIsFast() {\n return true;\n }\n monospaceAssumptionsAreValid() {\n if (!this.domNode) {\n return monospaceAssumptionsAreValid;\n }\n const expectedWidth = this.getWidth();\n const actualWidth = this.domNode.domNode.firstChild.offsetWidth;\n if (Math.abs(expectedWidth - actualWidth) >= 2) {\n // more than 2px off\n console.warn(`monospace assumptions have been violated, therefore disabling monospace optimizations!`);\n monospaceAssumptionsAreValid = false;\n }\n return monospaceAssumptionsAreValid;\n }\n toSlowRenderedLine() {\n return createRenderedLine(this.domNode, this.input, this._characterMapping, false, 0 /* None */);\n }\n getVisibleRangesForRange(lineNumber, startColumn, endColumn, context) {\n const startPosition = this._getCharPosition(startColumn);\n const endPosition = this._getCharPosition(endColumn);\n return [new FloatHorizontalRange(startPosition, endPosition - startPosition)];\n }\n _getCharPosition(column) {\n const charOffset = this._characterMapping.getAbsoluteOffset(column);\n return this._charWidth * charOffset;\n }\n getColumnOfNodeOffset(lineNumber, spanNode, offset) {\n const spanNodeTextContentLength = spanNode.textContent.length;\n let spanIndex = -1;\n while (spanNode) {\n spanNode = spanNode.previousSibling;\n spanIndex++;\n }\n return this._characterMapping.getColumn(new DomPosition(spanIndex, offset), spanNodeTextContentLength);\n }\n}\n/**\n * Every time we render a line, we save what we have rendered in an instance of this class.\n */\nclass RenderedViewLine {\n constructor(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements) {\n this.domNode = domNode;\n this.input = renderLineInput;\n this._characterMapping = characterMapping;\n this._isWhitespaceOnly = /^\\s*$/.test(renderLineInput.lineContent);\n this._containsForeignElements = containsForeignElements;\n this._cachedWidth = -1;\n this._pixelOffsetCache = null;\n if (!containsRTL || this._characterMapping.length === 0 /* the line is empty */) {\n this._pixelOffsetCache = new Float32Array(Math.max(2, this._characterMapping.length + 1));\n for (let column = 0, len = this._characterMapping.length; column <= len; column++) {\n this._pixelOffsetCache[column] = -1;\n }\n }\n }\n // --- Reading from the DOM methods\n _getReadingTarget(myDomNode) {\n return myDomNode.domNode.firstChild;\n }\n /**\n * Width of the line in pixels\n */\n getWidth() {\n if (!this.domNode) {\n return 0;\n }\n if (this._cachedWidth === -1) {\n this._cachedWidth = this._getReadingTarget(this.domNode).offsetWidth;\n }\n return this._cachedWidth;\n }\n getWidthIsFast() {\n if (this._cachedWidth === -1) {\n return false;\n }\n return true;\n }\n /**\n * Visible ranges for a model range\n */\n getVisibleRangesForRange(lineNumber, startColumn, endColumn, context) {\n if (!this.domNode) {\n return null;\n }\n if (this._pixelOffsetCache !== null) {\n // the text is LTR\n const startOffset = this._readPixelOffset(this.domNode, lineNumber, startColumn, context);\n if (startOffset === -1) {\n return null;\n }\n const endOffset = this._readPixelOffset(this.domNode, lineNumber, endColumn, context);\n if (endOffset === -1) {\n return null;\n }\n return [new FloatHorizontalRange(startOffset, endOffset - startOffset)];\n }\n return this._readVisibleRangesForRange(this.domNode, lineNumber, startColumn, endColumn, context);\n }\n _readVisibleRangesForRange(domNode, lineNumber, startColumn, endColumn, context) {\n if (startColumn === endColumn) {\n const pixelOffset = this._readPixelOffset(domNode, lineNumber, startColumn, context);\n if (pixelOffset === -1) {\n return null;\n }\n else {\n return [new FloatHorizontalRange(pixelOffset, 0)];\n }\n }\n else {\n return this._readRawVisibleRangesForRange(domNode, startColumn, endColumn, context);\n }\n }\n _readPixelOffset(domNode, lineNumber, column, context) {\n if (this._characterMapping.length === 0) {\n // This line has no content\n if (this._containsForeignElements === 0 /* None */) {\n // We can assume the line is really empty\n return 0;\n }\n if (this._containsForeignElements === 2 /* After */) {\n // We have foreign elements after the (empty) line\n return 0;\n }\n if (this._containsForeignElements === 1 /* Before */) {\n // We have foreign elements before the (empty) line\n return this.getWidth();\n }\n // We have foreign elements before & after the (empty) line\n const readingTarget = this._getReadingTarget(domNode);\n if (readingTarget.firstChild) {\n return readingTarget.firstChild.offsetWidth;\n }\n else {\n return 0;\n }\n }\n if (this._pixelOffsetCache !== null) {\n // the text is LTR\n const cachedPixelOffset = this._pixelOffsetCache[column];\n if (cachedPixelOffset !== -1) {\n return cachedPixelOffset;\n }\n const result = this._actualReadPixelOffset(domNode, lineNumber, column, context);\n this._pixelOffsetCache[column] = result;\n return result;\n }\n return this._actualReadPixelOffset(domNode, lineNumber, column, context);\n }\n _actualReadPixelOffset(domNode, lineNumber, column, context) {\n if (this._characterMapping.length === 0) {\n // This line has no content\n const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), 0, 0, 0, 0, context.clientRectDeltaLeft, context.endNode);\n if (!r || r.length === 0) {\n return -1;\n }\n return r[0].left;\n }\n if (column === this._characterMapping.length && this._isWhitespaceOnly && this._containsForeignElements === 0 /* None */) {\n // This branch helps in the case of whitespace only lines which have a width set\n return this.getWidth();\n }\n const domPosition = this._characterMapping.getDomPosition(column);\n const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), domPosition.partIndex, domPosition.charIndex, domPosition.partIndex, domPosition.charIndex, context.clientRectDeltaLeft, context.endNode);\n if (!r || r.length === 0) {\n return -1;\n }\n const result = r[0].left;\n if (this.input.isBasicASCII) {\n const charOffset = this._characterMapping.getAbsoluteOffset(column);\n const expectedResult = Math.round(this.input.spaceWidth * charOffset);\n if (Math.abs(expectedResult - result) <= 1) {\n return expectedResult;\n }\n }\n return result;\n }\n _readRawVisibleRangesForRange(domNode, startColumn, endColumn, context) {\n if (startColumn === 1 && endColumn === this._characterMapping.length) {\n // This branch helps IE with bidi text & gives a performance boost to other browsers when reading visible ranges for an entire line\n return [new FloatHorizontalRange(0, this.getWidth())];\n }\n const startDomPosition = this._characterMapping.getDomPosition(startColumn);\n const endDomPosition = this._characterMapping.getDomPosition(endColumn);\n return RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), startDomPosition.partIndex, startDomPosition.charIndex, endDomPosition.partIndex, endDomPosition.charIndex, context.clientRectDeltaLeft, context.endNode);\n }\n /**\n * Returns the column for the text found at a specific offset inside a rendered dom node\n */\n getColumnOfNodeOffset(lineNumber, spanNode, offset) {\n const spanNodeTextContentLength = spanNode.textContent.length;\n let spanIndex = -1;\n while (spanNode) {\n spanNode = spanNode.previousSibling;\n spanIndex++;\n }\n return this._characterMapping.getColumn(new DomPosition(spanIndex, offset), spanNodeTextContentLength);\n }\n}\nclass WebKitRenderedViewLine extends RenderedViewLine {\n _readVisibleRangesForRange(domNode, lineNumber, startColumn, endColumn, context) {\n const output = super._readVisibleRangesForRange(domNode, lineNumber, startColumn, endColumn, context);\n if (!output || output.length === 0 || startColumn === endColumn || (startColumn === 1 && endColumn === this._characterMapping.length)) {\n return output;\n }\n // WebKit is buggy and returns an expanded range (to contain words in some cases)\n // The last client rect is enlarged (I think)\n if (!this.input.containsRTL) {\n // This is an attempt to patch things up\n // Find position of last column\n const endPixelOffset = this._readPixelOffset(domNode, lineNumber, endColumn, context);\n if (endPixelOffset !== -1) {\n const lastRange = output[output.length - 1];\n if (lastRange.left < endPixelOffset) {\n // Trim down the width of the last visible range to not go after the last column's position\n lastRange.width = endPixelOffset - lastRange.left;\n }\n }\n }\n return output;\n }\n}\nconst createRenderedLine = (function () {\n if (browser.isWebKit) {\n return createWebKitRenderedLine;\n }\n return createNormalRenderedLine;\n})();\nfunction createWebKitRenderedLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements) {\n return new WebKitRenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements);\n}\nfunction createNormalRenderedLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements) {\n return new RenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { TextModel } from '../model/textModel.js';\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\nexport { CursorColumns } from './cursorColumns.js';\nconst autoCloseAlways = () => true;\nconst autoCloseNever = () => false;\nconst autoCloseBeforeWhitespace = (chr) => (chr === ' ' || chr === '\\t');\nexport class CursorConfiguration {\n constructor(languageId, modelOptions, configuration) {\n this._cursorMoveConfigurationBrand = undefined;\n this._languageId = languageId;\n const options = configuration.options;\n const layoutInfo = options.get(129 /* layoutInfo */);\n this.readOnly = options.get(80 /* readOnly */);\n this.tabSize = modelOptions.tabSize;\n this.indentSize = modelOptions.indentSize;\n this.insertSpaces = modelOptions.insertSpaces;\n this.stickyTabStops = options.get(103 /* stickyTabStops */);\n this.lineHeight = options.get(58 /* lineHeight */);\n this.pageSize = Math.max(1, Math.floor(layoutInfo.height / this.lineHeight) - 2);\n this.useTabStops = options.get(114 /* useTabStops */);\n this.wordSeparators = options.get(115 /* wordSeparators */);\n this.emptySelectionClipboard = options.get(32 /* emptySelectionClipboard */);\n this.copyWithSyntaxHighlighting = options.get(21 /* copyWithSyntaxHighlighting */);\n this.multiCursorMergeOverlapping = options.get(68 /* multiCursorMergeOverlapping */);\n this.multiCursorPaste = options.get(70 /* multiCursorPaste */);\n this.autoClosingBrackets = options.get(5 /* autoClosingBrackets */);\n this.autoClosingQuotes = options.get(8 /* autoClosingQuotes */);\n this.autoClosingDelete = options.get(6 /* autoClosingDelete */);\n this.autoClosingOvertype = options.get(7 /* autoClosingOvertype */);\n this.autoSurround = options.get(11 /* autoSurround */);\n this.autoIndent = options.get(9 /* autoIndent */);\n this.surroundingPairs = {};\n this._electricChars = null;\n this.shouldAutoCloseBefore = {\n quote: CursorConfiguration._getShouldAutoClose(languageId, this.autoClosingQuotes),\n bracket: CursorConfiguration._getShouldAutoClose(languageId, this.autoClosingBrackets)\n };\n this.autoClosingPairs = LanguageConfigurationRegistry.getAutoClosingPairs(languageId);\n let surroundingPairs = CursorConfiguration._getSurroundingPairs(languageId);\n if (surroundingPairs) {\n for (const pair of surroundingPairs) {\n this.surroundingPairs[pair.open] = pair.close;\n }\n }\n }\n static shouldRecreate(e) {\n return (e.hasChanged(129 /* layoutInfo */)\n || e.hasChanged(115 /* wordSeparators */)\n || e.hasChanged(32 /* emptySelectionClipboard */)\n || e.hasChanged(68 /* multiCursorMergeOverlapping */)\n || e.hasChanged(70 /* multiCursorPaste */)\n || e.hasChanged(5 /* autoClosingBrackets */)\n || e.hasChanged(8 /* autoClosingQuotes */)\n || e.hasChanged(6 /* autoClosingDelete */)\n || e.hasChanged(7 /* autoClosingOvertype */)\n || e.hasChanged(11 /* autoSurround */)\n || e.hasChanged(114 /* useTabStops */)\n || e.hasChanged(58 /* lineHeight */)\n || e.hasChanged(80 /* readOnly */));\n }\n get electricChars() {\n if (!this._electricChars) {\n this._electricChars = {};\n let electricChars = CursorConfiguration._getElectricCharacters(this._languageId);\n if (electricChars) {\n for (const char of electricChars) {\n this._electricChars[char] = true;\n }\n }\n }\n return this._electricChars;\n }\n normalizeIndentation(str) {\n return TextModel.normalizeIndentation(str, this.indentSize, this.insertSpaces);\n }\n static _getElectricCharacters(languageId) {\n try {\n return LanguageConfigurationRegistry.getElectricCharacters(languageId);\n }\n catch (e) {\n onUnexpectedError(e);\n return null;\n }\n }\n static _getShouldAutoClose(languageId, autoCloseConfig) {\n switch (autoCloseConfig) {\n case 'beforeWhitespace':\n return autoCloseBeforeWhitespace;\n case 'languageDefined':\n return CursorConfiguration._getLanguageDefinedShouldAutoClose(languageId);\n case 'always':\n return autoCloseAlways;\n case 'never':\n return autoCloseNever;\n }\n }\n static _getLanguageDefinedShouldAutoClose(languageId) {\n try {\n const autoCloseBeforeSet = LanguageConfigurationRegistry.getAutoCloseBeforeSet(languageId);\n return c => autoCloseBeforeSet.indexOf(c) !== -1;\n }\n catch (e) {\n onUnexpectedError(e);\n return autoCloseNever;\n }\n }\n static _getSurroundingPairs(languageId) {\n try {\n return LanguageConfigurationRegistry.getSurroundingPairs(languageId);\n }\n catch (e) {\n onUnexpectedError(e);\n return null;\n }\n }\n}\n/**\n * Represents the cursor state on either the model or on the view model.\n */\nexport class SingleCursorState {\n constructor(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns) {\n this._singleCursorStateBrand = undefined;\n this.selectionStart = selectionStart;\n this.selectionStartLeftoverVisibleColumns = selectionStartLeftoverVisibleColumns;\n this.position = position;\n this.leftoverVisibleColumns = leftoverVisibleColumns;\n this.selection = SingleCursorState._computeSelection(this.selectionStart, this.position);\n }\n equals(other) {\n return (this.selectionStartLeftoverVisibleColumns === other.selectionStartLeftoverVisibleColumns\n && this.leftoverVisibleColumns === other.leftoverVisibleColumns\n && this.position.equals(other.position)\n && this.selectionStart.equalsRange(other.selectionStart));\n }\n hasSelection() {\n return (!this.selection.isEmpty() || !this.selectionStart.isEmpty());\n }\n move(inSelectionMode, lineNumber, column, leftoverVisibleColumns) {\n if (inSelectionMode) {\n // move just position\n return new SingleCursorState(this.selectionStart, this.selectionStartLeftoverVisibleColumns, new Position(lineNumber, column), leftoverVisibleColumns);\n }\n else {\n // move everything\n return new SingleCursorState(new Range(lineNumber, column, lineNumber, column), leftoverVisibleColumns, new Position(lineNumber, column), leftoverVisibleColumns);\n }\n }\n static _computeSelection(selectionStart, position) {\n let startLineNumber, startColumn, endLineNumber, endColumn;\n if (selectionStart.isEmpty()) {\n startLineNumber = selectionStart.startLineNumber;\n startColumn = selectionStart.startColumn;\n endLineNumber = position.lineNumber;\n endColumn = position.column;\n }\n else {\n if (position.isBeforeOrEqual(selectionStart.getStartPosition())) {\n startLineNumber = selectionStart.endLineNumber;\n startColumn = selectionStart.endColumn;\n endLineNumber = position.lineNumber;\n endColumn = position.column;\n }\n else {\n startLineNumber = selectionStart.startLineNumber;\n startColumn = selectionStart.startColumn;\n endLineNumber = position.lineNumber;\n endColumn = position.column;\n }\n }\n return new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n}\nexport class CursorContext {\n constructor(model, viewModel, coordinatesConverter, cursorConfig) {\n this._cursorContextBrand = undefined;\n this.model = model;\n this.viewModel = viewModel;\n this.coordinatesConverter = coordinatesConverter;\n this.cursorConfig = cursorConfig;\n }\n}\nexport class PartialModelCursorState {\n constructor(modelState) {\n this.modelState = modelState;\n this.viewState = null;\n }\n}\nexport class PartialViewCursorState {\n constructor(viewState) {\n this.modelState = null;\n this.viewState = viewState;\n }\n}\nexport class CursorState {\n constructor(modelState, viewState) {\n this._cursorStateBrand = undefined;\n this.modelState = modelState;\n this.viewState = viewState;\n }\n static fromModelState(modelState) {\n return new PartialModelCursorState(modelState);\n }\n static fromViewState(viewState) {\n return new PartialViewCursorState(viewState);\n }\n static fromModelSelection(modelSelection) {\n const selectionStartLineNumber = modelSelection.selectionStartLineNumber;\n const selectionStartColumn = modelSelection.selectionStartColumn;\n const positionLineNumber = modelSelection.positionLineNumber;\n const positionColumn = modelSelection.positionColumn;\n const modelState = new SingleCursorState(new Range(selectionStartLineNumber, selectionStartColumn, selectionStartLineNumber, selectionStartColumn), 0, new Position(positionLineNumber, positionColumn), 0);\n return CursorState.fromModelState(modelState);\n }\n static fromModelSelections(modelSelections) {\n let states = [];\n for (let i = 0, len = modelSelections.length; i < len; i++) {\n states[i] = this.fromModelSelection(modelSelections[i]);\n }\n return states;\n }\n equals(other) {\n return (this.viewState.equals(other.viewState) && this.modelState.equals(other.modelState));\n }\n}\nexport class EditOperationResult {\n constructor(type, commands, opts) {\n this._editOperationResultBrand = undefined;\n this.type = type;\n this.commands = commands;\n this.shouldPushStackElementBefore = opts.shouldPushStackElementBefore;\n this.shouldPushStackElementAfter = opts.shouldPushStackElementAfter;\n }\n}\nexport function isQuote(ch) {\n return (ch === '\\'' || ch === '\"' || ch === '`');\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { CursorColumns } from './cursorCommon.js';\nexport class AtomicTabMoveOperations {\n /**\n * Get the visible column at the position. If we get to a non-whitespace character first\n * or past the end of string then return -1.\n *\n * **Note** `position` and the return value are 0-based.\n */\n static whitespaceVisibleColumn(lineContent, position, tabSize) {\n const lineLength = lineContent.length;\n let visibleColumn = 0;\n let prevTabStopPosition = -1;\n let prevTabStopVisibleColumn = -1;\n for (let i = 0; i < lineLength; i++) {\n if (i === position) {\n return [prevTabStopPosition, prevTabStopVisibleColumn, visibleColumn];\n }\n if (visibleColumn % tabSize === 0) {\n prevTabStopPosition = i;\n prevTabStopVisibleColumn = visibleColumn;\n }\n const chCode = lineContent.charCodeAt(i);\n switch (chCode) {\n case 32 /* Space */:\n visibleColumn += 1;\n break;\n case 9 /* Tab */:\n // Skip to the next multiple of tabSize.\n visibleColumn = CursorColumns.nextRenderTabStop(visibleColumn, tabSize);\n break;\n default:\n return [-1, -1, -1];\n }\n }\n if (position === lineLength) {\n return [prevTabStopPosition, prevTabStopVisibleColumn, visibleColumn];\n }\n return [-1, -1, -1];\n }\n /**\n * Return the position that should result from a move left, right or to the\n * nearest tab, if atomic tabs are enabled. Left and right are used for the\n * arrow key movements, nearest is used for mouse selection. It returns\n * -1 if atomic tabs are not relevant and you should fall back to normal\n * behaviour.\n *\n * **Note**: `position` and the return value are 0-based.\n */\n static atomicPosition(lineContent, position, tabSize, direction) {\n const lineLength = lineContent.length;\n // Get the 0-based visible column corresponding to the position, or return\n // -1 if it is not in the initial whitespace.\n const [prevTabStopPosition, prevTabStopVisibleColumn, visibleColumn] = AtomicTabMoveOperations.whitespaceVisibleColumn(lineContent, position, tabSize);\n if (visibleColumn === -1) {\n return -1;\n }\n // Is the output left or right of the current position. The case for nearest\n // where it is the same as the current position is handled in the switch.\n let left;\n switch (direction) {\n case 0 /* Left */:\n left = true;\n break;\n case 1 /* Right */:\n left = false;\n break;\n case 2 /* Nearest */:\n // The code below assumes the output position is either left or right\n // of the input position. If it is the same, return immediately.\n if (visibleColumn % tabSize === 0) {\n return position;\n }\n // Go to the nearest indentation.\n left = visibleColumn % tabSize <= (tabSize / 2);\n break;\n }\n // If going left, we can just use the info about the last tab stop position and\n // last tab stop visible column that we computed in the first walk over the whitespace.\n if (left) {\n if (prevTabStopPosition === -1) {\n return -1;\n }\n // If the direction is left, we need to keep scanning right to ensure\n // that targetVisibleColumn + tabSize is before non-whitespace.\n // This is so that when we press left at the end of a partial\n // indentation it only goes one character. For example ' foo' with\n // tabSize 4, should jump from position 6 to position 5, not 4.\n let currentVisibleColumn = prevTabStopVisibleColumn;\n for (let i = prevTabStopPosition; i < lineLength; ++i) {\n if (currentVisibleColumn === prevTabStopVisibleColumn + tabSize) {\n // It is a full indentation.\n return prevTabStopPosition;\n }\n const chCode = lineContent.charCodeAt(i);\n switch (chCode) {\n case 32 /* Space */:\n currentVisibleColumn += 1;\n break;\n case 9 /* Tab */:\n currentVisibleColumn = CursorColumns.nextRenderTabStop(currentVisibleColumn, tabSize);\n break;\n default:\n return -1;\n }\n }\n if (currentVisibleColumn === prevTabStopVisibleColumn + tabSize) {\n return prevTabStopPosition;\n }\n // It must have been a partial indentation.\n return -1;\n }\n // We are going right.\n const targetVisibleColumn = CursorColumns.nextRenderTabStop(visibleColumn, tabSize);\n // We can just continue from where whitespaceVisibleColumn got to.\n let currentVisibleColumn = visibleColumn;\n for (let i = position; i < lineLength; i++) {\n if (currentVisibleColumn === targetVisibleColumn) {\n return i;\n }\n const chCode = lineContent.charCodeAt(i);\n switch (chCode) {\n case 32 /* Space */:\n currentVisibleColumn += 1;\n break;\n case 9 /* Tab */:\n currentVisibleColumn = CursorColumns.nextRenderTabStop(currentVisibleColumn, tabSize);\n break;\n default:\n return -1;\n }\n }\n // This condition handles when the target column is at the end of the line.\n if (currentVisibleColumn === targetVisibleColumn) {\n return lineLength;\n }\n return -1;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { PageCoordinates } from '../editorDom.js';\nimport { PartFingerprints } from '../view/viewPart.js';\nimport { ViewLine } from '../viewParts/lines/viewLine.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range as EditorRange } from '../../common/core/range.js';\nimport { CursorColumns } from '../../common/controller/cursorCommon.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { AtomicTabMoveOperations } from '../../common/controller/cursorAtomicMoveOperations.js';\nclass UnknownHitTestResult {\n constructor(hitTarget = null) {\n this.hitTarget = hitTarget;\n this.type = 0 /* Unknown */;\n }\n}\nclass ContentHitTestResult {\n constructor(position, spanNode, injectedText) {\n this.position = position;\n this.spanNode = spanNode;\n this.injectedText = injectedText;\n this.type = 1 /* Content */;\n }\n}\nvar HitTestResult;\n(function (HitTestResult) {\n function createFromDOMInfo(ctx, spanNode, offset) {\n const position = ctx.getPositionFromDOMInfo(spanNode, offset);\n if (position) {\n return new ContentHitTestResult(position, spanNode, null);\n }\n return new UnknownHitTestResult(spanNode);\n }\n HitTestResult.createFromDOMInfo = createFromDOMInfo;\n})(HitTestResult || (HitTestResult = {}));\nexport class PointerHandlerLastRenderData {\n constructor(lastViewCursorsRenderData, lastTextareaPosition) {\n this.lastViewCursorsRenderData = lastViewCursorsRenderData;\n this.lastTextareaPosition = lastTextareaPosition;\n }\n}\nexport class MouseTarget {\n constructor(element, type, mouseColumn = 0, position = null, range = null, detail = null) {\n this.element = element;\n this.type = type;\n this.mouseColumn = mouseColumn;\n this.position = position;\n if (!range && position) {\n range = new EditorRange(position.lineNumber, position.column, position.lineNumber, position.column);\n }\n this.range = range;\n this.detail = detail;\n }\n static _typeToString(type) {\n if (type === 1 /* TEXTAREA */) {\n return 'TEXTAREA';\n }\n if (type === 2 /* GUTTER_GLYPH_MARGIN */) {\n return 'GUTTER_GLYPH_MARGIN';\n }\n if (type === 3 /* GUTTER_LINE_NUMBERS */) {\n return 'GUTTER_LINE_NUMBERS';\n }\n if (type === 4 /* GUTTER_LINE_DECORATIONS */) {\n return 'GUTTER_LINE_DECORATIONS';\n }\n if (type === 5 /* GUTTER_VIEW_ZONE */) {\n return 'GUTTER_VIEW_ZONE';\n }\n if (type === 6 /* CONTENT_TEXT */) {\n return 'CONTENT_TEXT';\n }\n if (type === 7 /* CONTENT_EMPTY */) {\n return 'CONTENT_EMPTY';\n }\n if (type === 8 /* CONTENT_VIEW_ZONE */) {\n return 'CONTENT_VIEW_ZONE';\n }\n if (type === 9 /* CONTENT_WIDGET */) {\n return 'CONTENT_WIDGET';\n }\n if (type === 10 /* OVERVIEW_RULER */) {\n return 'OVERVIEW_RULER';\n }\n if (type === 11 /* SCROLLBAR */) {\n return 'SCROLLBAR';\n }\n if (type === 12 /* OVERLAY_WIDGET */) {\n return 'OVERLAY_WIDGET';\n }\n return 'UNKNOWN';\n }\n static toString(target) {\n return this._typeToString(target.type) + ': ' + target.position + ' - ' + target.range + ' - ' + target.detail;\n }\n toString() {\n return MouseTarget.toString(this);\n }\n}\nclass ElementPath {\n static isTextArea(path) {\n return (path.length === 2\n && path[0] === 3 /* OverflowGuard */\n && path[1] === 6 /* TextArea */);\n }\n static isChildOfViewLines(path) {\n return (path.length >= 4\n && path[0] === 3 /* OverflowGuard */\n && path[3] === 7 /* ViewLines */);\n }\n static isStrictChildOfViewLines(path) {\n return (path.length > 4\n && path[0] === 3 /* OverflowGuard */\n && path[3] === 7 /* ViewLines */);\n }\n static isChildOfScrollableElement(path) {\n return (path.length >= 2\n && path[0] === 3 /* OverflowGuard */\n && path[1] === 5 /* ScrollableElement */);\n }\n static isChildOfMinimap(path) {\n return (path.length >= 2\n && path[0] === 3 /* OverflowGuard */\n && path[1] === 8 /* Minimap */);\n }\n static isChildOfContentWidgets(path) {\n return (path.length >= 4\n && path[0] === 3 /* OverflowGuard */\n && path[3] === 1 /* ContentWidgets */);\n }\n static isChildOfOverflowingContentWidgets(path) {\n return (path.length >= 1\n && path[0] === 2 /* OverflowingContentWidgets */);\n }\n static isChildOfOverlayWidgets(path) {\n return (path.length >= 2\n && path[0] === 3 /* OverflowGuard */\n && path[1] === 4 /* OverlayWidgets */);\n }\n}\nexport class HitTestContext {\n constructor(context, viewHelper, lastRenderData) {\n this.model = context.model;\n const options = context.configuration.options;\n this.layoutInfo = options.get(129 /* layoutInfo */);\n this.viewDomNode = viewHelper.viewDomNode;\n this.lineHeight = options.get(58 /* lineHeight */);\n this.stickyTabStops = options.get(103 /* stickyTabStops */);\n this.typicalHalfwidthCharacterWidth = options.get(43 /* fontInfo */).typicalHalfwidthCharacterWidth;\n this.lastRenderData = lastRenderData;\n this._context = context;\n this._viewHelper = viewHelper;\n }\n getZoneAtCoord(mouseVerticalOffset) {\n return HitTestContext.getZoneAtCoord(this._context, mouseVerticalOffset);\n }\n static getZoneAtCoord(context, mouseVerticalOffset) {\n // The target is either a view zone or the empty space after the last view-line\n const viewZoneWhitespace = context.viewLayout.getWhitespaceAtVerticalOffset(mouseVerticalOffset);\n if (viewZoneWhitespace) {\n const viewZoneMiddle = viewZoneWhitespace.verticalOffset + viewZoneWhitespace.height / 2;\n const lineCount = context.model.getLineCount();\n let positionBefore = null;\n let position;\n let positionAfter = null;\n if (viewZoneWhitespace.afterLineNumber !== lineCount) {\n // There are more lines after this view zone\n positionAfter = new Position(viewZoneWhitespace.afterLineNumber + 1, 1);\n }\n if (viewZoneWhitespace.afterLineNumber > 0) {\n // There are more lines above this view zone\n positionBefore = new Position(viewZoneWhitespace.afterLineNumber, context.model.getLineMaxColumn(viewZoneWhitespace.afterLineNumber));\n }\n if (positionAfter === null) {\n position = positionBefore;\n }\n else if (positionBefore === null) {\n position = positionAfter;\n }\n else if (mouseVerticalOffset < viewZoneMiddle) {\n position = positionBefore;\n }\n else {\n position = positionAfter;\n }\n return {\n viewZoneId: viewZoneWhitespace.id,\n afterLineNumber: viewZoneWhitespace.afterLineNumber,\n positionBefore: positionBefore,\n positionAfter: positionAfter,\n position: position\n };\n }\n return null;\n }\n getFullLineRangeAtCoord(mouseVerticalOffset) {\n if (this._context.viewLayout.isAfterLines(mouseVerticalOffset)) {\n // Below the last line\n const lineNumber = this._context.model.getLineCount();\n const maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);\n return {\n range: new EditorRange(lineNumber, maxLineColumn, lineNumber, maxLineColumn),\n isAfterLines: true\n };\n }\n const lineNumber = this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);\n const maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);\n return {\n range: new EditorRange(lineNumber, 1, lineNumber, maxLineColumn),\n isAfterLines: false\n };\n }\n getLineNumberAtVerticalOffset(mouseVerticalOffset) {\n return this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);\n }\n isAfterLines(mouseVerticalOffset) {\n return this._context.viewLayout.isAfterLines(mouseVerticalOffset);\n }\n isInTopPadding(mouseVerticalOffset) {\n return this._context.viewLayout.isInTopPadding(mouseVerticalOffset);\n }\n isInBottomPadding(mouseVerticalOffset) {\n return this._context.viewLayout.isInBottomPadding(mouseVerticalOffset);\n }\n getVerticalOffsetForLineNumber(lineNumber) {\n return this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n }\n findAttribute(element, attr) {\n return HitTestContext._findAttribute(element, attr, this._viewHelper.viewDomNode);\n }\n static _findAttribute(element, attr, stopAt) {\n while (element && element !== document.body) {\n if (element.hasAttribute && element.hasAttribute(attr)) {\n return element.getAttribute(attr);\n }\n if (element === stopAt) {\n return null;\n }\n element = element.parentNode;\n }\n return null;\n }\n getLineWidth(lineNumber) {\n return this._viewHelper.getLineWidth(lineNumber);\n }\n visibleRangeForPosition(lineNumber, column) {\n return this._viewHelper.visibleRangeForPosition(lineNumber, column);\n }\n getPositionFromDOMInfo(spanNode, offset) {\n return this._viewHelper.getPositionFromDOMInfo(spanNode, offset);\n }\n getCurrentScrollTop() {\n return this._context.viewLayout.getCurrentScrollTop();\n }\n getCurrentScrollLeft() {\n return this._context.viewLayout.getCurrentScrollLeft();\n }\n}\nclass BareHitTestRequest {\n constructor(ctx, editorPos, pos) {\n this.editorPos = editorPos;\n this.pos = pos;\n this.mouseVerticalOffset = Math.max(0, ctx.getCurrentScrollTop() + pos.y - editorPos.y);\n this.mouseContentHorizontalOffset = ctx.getCurrentScrollLeft() + pos.x - editorPos.x - ctx.layoutInfo.contentLeft;\n this.isInMarginArea = (pos.x - editorPos.x < ctx.layoutInfo.contentLeft && pos.x - editorPos.x >= ctx.layoutInfo.glyphMarginLeft);\n this.isInContentArea = !this.isInMarginArea;\n this.mouseColumn = Math.max(0, MouseTargetFactory._getMouseColumn(this.mouseContentHorizontalOffset, ctx.typicalHalfwidthCharacterWidth));\n }\n}\nclass HitTestRequest extends BareHitTestRequest {\n constructor(ctx, editorPos, pos, target) {\n super(ctx, editorPos, pos);\n this._ctx = ctx;\n if (target) {\n this.target = target;\n this.targetPath = PartFingerprints.collect(target, ctx.viewDomNode);\n }\n else {\n this.target = null;\n this.targetPath = new Uint8Array(0);\n }\n }\n toString() {\n return `pos(${this.pos.x},${this.pos.y}), editorPos(${this.editorPos.x},${this.editorPos.y}), mouseVerticalOffset: ${this.mouseVerticalOffset}, mouseContentHorizontalOffset: ${this.mouseContentHorizontalOffset}\\n\\ttarget: ${this.target ? this.target.outerHTML : null}`;\n }\n // public fulfill(type: MouseTargetType.OVERVIEW_RULER, position?: Position | null, range?: EditorRange | null, detail?: any): MouseTarget;\n // public fulfill(type: MouseTargetType.OUTSIDE_EDITOR, position?: Position | null, range?: EditorRange | null, detail?: any): MouseTarget;\n fulfill(type, position = null, range = null, detail = null) {\n let mouseColumn = this.mouseColumn;\n if (position && position.column < this._ctx.model.getLineMaxColumn(position.lineNumber)) {\n // Most likely, the line contains foreign decorations...\n mouseColumn = CursorColumns.visibleColumnFromColumn(this._ctx.model.getLineContent(position.lineNumber), position.column, this._ctx.model.getTextModelOptions().tabSize) + 1;\n }\n return new MouseTarget(this.target, type, mouseColumn, position, range, detail);\n }\n withTarget(target) {\n return new HitTestRequest(this._ctx, this.editorPos, this.pos, target);\n }\n}\nconst EMPTY_CONTENT_AFTER_LINES = { isAfterLines: true };\nfunction createEmptyContentDataInLines(horizontalDistanceToText) {\n return {\n isAfterLines: false,\n horizontalDistanceToText: horizontalDistanceToText\n };\n}\nexport class MouseTargetFactory {\n constructor(context, viewHelper) {\n this._context = context;\n this._viewHelper = viewHelper;\n }\n mouseTargetIsWidget(e) {\n const t = e.target;\n const path = PartFingerprints.collect(t, this._viewHelper.viewDomNode);\n // Is it a content widget?\n if (ElementPath.isChildOfContentWidgets(path) || ElementPath.isChildOfOverflowingContentWidgets(path)) {\n return true;\n }\n // Is it an overlay widget?\n if (ElementPath.isChildOfOverlayWidgets(path)) {\n return true;\n }\n return false;\n }\n createMouseTarget(lastRenderData, editorPos, pos, target) {\n const ctx = new HitTestContext(this._context, this._viewHelper, lastRenderData);\n const request = new HitTestRequest(ctx, editorPos, pos, target);\n try {\n const r = MouseTargetFactory._createMouseTarget(ctx, request, false);\n // console.log(r.toString());\n return r;\n }\n catch (err) {\n // console.log(err);\n return request.fulfill(0 /* UNKNOWN */);\n }\n }\n static _createMouseTarget(ctx, request, domHitTestExecuted) {\n // console.log(`${domHitTestExecuted ? '=>' : ''}CAME IN REQUEST: ${request}`);\n // First ensure the request has a target\n if (request.target === null) {\n if (domHitTestExecuted) {\n // Still no target... and we have already executed hit test...\n return request.fulfill(0 /* UNKNOWN */);\n }\n const hitTestResult = MouseTargetFactory._doHitTest(ctx, request);\n if (hitTestResult.type === 1 /* Content */) {\n return MouseTargetFactory.createMouseTargetFromHitTestPosition(ctx, request, hitTestResult.spanNode, hitTestResult.position, hitTestResult.injectedText);\n }\n return this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true);\n }\n // we know for a fact that request.target is not null\n const resolvedRequest = request;\n let result = null;\n result = result || MouseTargetFactory._hitTestContentWidget(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestOverlayWidget(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestMinimap(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestScrollbarSlider(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestViewZone(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestMargin(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestViewCursor(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestTextArea(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestViewLines(ctx, resolvedRequest, domHitTestExecuted);\n result = result || MouseTargetFactory._hitTestScrollbar(ctx, resolvedRequest);\n return (result || request.fulfill(0 /* UNKNOWN */));\n }\n static _hitTestContentWidget(ctx, request) {\n // Is it a content widget?\n if (ElementPath.isChildOfContentWidgets(request.targetPath) || ElementPath.isChildOfOverflowingContentWidgets(request.targetPath)) {\n const widgetId = ctx.findAttribute(request.target, 'widgetId');\n if (widgetId) {\n return request.fulfill(9 /* CONTENT_WIDGET */, null, null, widgetId);\n }\n else {\n return request.fulfill(0 /* UNKNOWN */);\n }\n }\n return null;\n }\n static _hitTestOverlayWidget(ctx, request) {\n // Is it an overlay widget?\n if (ElementPath.isChildOfOverlayWidgets(request.targetPath)) {\n const widgetId = ctx.findAttribute(request.target, 'widgetId');\n if (widgetId) {\n return request.fulfill(12 /* OVERLAY_WIDGET */, null, null, widgetId);\n }\n else {\n return request.fulfill(0 /* UNKNOWN */);\n }\n }\n return null;\n }\n static _hitTestViewCursor(ctx, request) {\n if (request.target) {\n // Check if we've hit a painted cursor\n const lastViewCursorsRenderData = ctx.lastRenderData.lastViewCursorsRenderData;\n for (const d of lastViewCursorsRenderData) {\n if (request.target === d.domNode) {\n return request.fulfill(6 /* CONTENT_TEXT */, d.position, null, { mightBeForeignElement: false });\n }\n }\n }\n if (request.isInContentArea) {\n // Edge has a bug when hit-testing the exact position of a cursor,\n // instead of returning the correct dom node, it returns the\n // first or last rendered view line dom node, therefore help it out\n // and first check if we are on top of a cursor\n const lastViewCursorsRenderData = ctx.lastRenderData.lastViewCursorsRenderData;\n const mouseContentHorizontalOffset = request.mouseContentHorizontalOffset;\n const mouseVerticalOffset = request.mouseVerticalOffset;\n for (const d of lastViewCursorsRenderData) {\n if (mouseContentHorizontalOffset < d.contentLeft) {\n // mouse position is to the left of the cursor\n continue;\n }\n if (mouseContentHorizontalOffset > d.contentLeft + d.width) {\n // mouse position is to the right of the cursor\n continue;\n }\n const cursorVerticalOffset = ctx.getVerticalOffsetForLineNumber(d.position.lineNumber);\n if (cursorVerticalOffset <= mouseVerticalOffset\n && mouseVerticalOffset <= cursorVerticalOffset + d.height) {\n return request.fulfill(6 /* CONTENT_TEXT */, d.position, null, { mightBeForeignElement: false });\n }\n }\n }\n return null;\n }\n static _hitTestViewZone(ctx, request) {\n const viewZoneData = ctx.getZoneAtCoord(request.mouseVerticalOffset);\n if (viewZoneData) {\n const mouseTargetType = (request.isInContentArea ? 8 /* CONTENT_VIEW_ZONE */ : 5 /* GUTTER_VIEW_ZONE */);\n return request.fulfill(mouseTargetType, viewZoneData.position, null, viewZoneData);\n }\n return null;\n }\n static _hitTestTextArea(ctx, request) {\n // Is it the textarea?\n if (ElementPath.isTextArea(request.targetPath)) {\n if (ctx.lastRenderData.lastTextareaPosition) {\n return request.fulfill(6 /* CONTENT_TEXT */, ctx.lastRenderData.lastTextareaPosition, null, { mightBeForeignElement: false });\n }\n return request.fulfill(1 /* TEXTAREA */, ctx.lastRenderData.lastTextareaPosition);\n }\n return null;\n }\n static _hitTestMargin(ctx, request) {\n if (request.isInMarginArea) {\n const res = ctx.getFullLineRangeAtCoord(request.mouseVerticalOffset);\n const pos = res.range.getStartPosition();\n let offset = Math.abs(request.pos.x - request.editorPos.x);\n const detail = {\n isAfterLines: res.isAfterLines,\n glyphMarginLeft: ctx.layoutInfo.glyphMarginLeft,\n glyphMarginWidth: ctx.layoutInfo.glyphMarginWidth,\n lineNumbersWidth: ctx.layoutInfo.lineNumbersWidth,\n offsetX: offset\n };\n offset -= ctx.layoutInfo.glyphMarginLeft;\n if (offset <= ctx.layoutInfo.glyphMarginWidth) {\n // On the glyph margin\n return request.fulfill(2 /* GUTTER_GLYPH_MARGIN */, pos, res.range, detail);\n }\n offset -= ctx.layoutInfo.glyphMarginWidth;\n if (offset <= ctx.layoutInfo.lineNumbersWidth) {\n // On the line numbers\n return request.fulfill(3 /* GUTTER_LINE_NUMBERS */, pos, res.range, detail);\n }\n offset -= ctx.layoutInfo.lineNumbersWidth;\n // On the line decorations\n return request.fulfill(4 /* GUTTER_LINE_DECORATIONS */, pos, res.range, detail);\n }\n return null;\n }\n static _hitTestViewLines(ctx, request, domHitTestExecuted) {\n if (!ElementPath.isChildOfViewLines(request.targetPath)) {\n return null;\n }\n if (ctx.isInTopPadding(request.mouseVerticalOffset)) {\n return request.fulfill(7 /* CONTENT_EMPTY */, new Position(1, 1), null, EMPTY_CONTENT_AFTER_LINES);\n }\n // Check if it is below any lines and any view zones\n if (ctx.isAfterLines(request.mouseVerticalOffset) || ctx.isInBottomPadding(request.mouseVerticalOffset)) {\n // This most likely indicates it happened after the last view-line\n const lineCount = ctx.model.getLineCount();\n const maxLineColumn = ctx.model.getLineMaxColumn(lineCount);\n return request.fulfill(7 /* CONTENT_EMPTY */, new Position(lineCount, maxLineColumn), null, EMPTY_CONTENT_AFTER_LINES);\n }\n if (domHitTestExecuted) {\n // Check if we are hitting a view-line (can happen in the case of inline decorations on empty lines)\n // See https://github.com/microsoft/vscode/issues/46942\n if (ElementPath.isStrictChildOfViewLines(request.targetPath)) {\n const lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n if (ctx.model.getLineLength(lineNumber) === 0) {\n const lineWidth = ctx.getLineWidth(lineNumber);\n const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\n return request.fulfill(7 /* CONTENT_EMPTY */, new Position(lineNumber, 1), null, detail);\n }\n const lineWidth = ctx.getLineWidth(lineNumber);\n if (request.mouseContentHorizontalOffset >= lineWidth) {\n const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\n const pos = new Position(lineNumber, ctx.model.getLineMaxColumn(lineNumber));\n return request.fulfill(7 /* CONTENT_EMPTY */, pos, null, detail);\n }\n }\n // We have already executed hit test...\n return request.fulfill(0 /* UNKNOWN */);\n }\n const hitTestResult = MouseTargetFactory._doHitTest(ctx, request);\n if (hitTestResult.type === 1 /* Content */) {\n return MouseTargetFactory.createMouseTargetFromHitTestPosition(ctx, request, hitTestResult.spanNode, hitTestResult.position, hitTestResult.injectedText);\n }\n return this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true);\n }\n static _hitTestMinimap(ctx, request) {\n if (ElementPath.isChildOfMinimap(request.targetPath)) {\n const possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n const maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\n return request.fulfill(11 /* SCROLLBAR */, new Position(possibleLineNumber, maxColumn));\n }\n return null;\n }\n static _hitTestScrollbarSlider(ctx, request) {\n if (ElementPath.isChildOfScrollableElement(request.targetPath)) {\n if (request.target && request.target.nodeType === 1) {\n const className = request.target.className;\n if (className && /\\b(slider|scrollbar)\\b/.test(className)) {\n const possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n const maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\n return request.fulfill(11 /* SCROLLBAR */, new Position(possibleLineNumber, maxColumn));\n }\n }\n }\n return null;\n }\n static _hitTestScrollbar(ctx, request) {\n // Is it the overview ruler?\n // Is it a child of the scrollable element?\n if (ElementPath.isChildOfScrollableElement(request.targetPath)) {\n const possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n const maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\n return request.fulfill(11 /* SCROLLBAR */, new Position(possibleLineNumber, maxColumn));\n }\n return null;\n }\n getMouseColumn(editorPos, pos) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(129 /* layoutInfo */);\n const mouseContentHorizontalOffset = this._context.viewLayout.getCurrentScrollLeft() + pos.x - editorPos.x - layoutInfo.contentLeft;\n return MouseTargetFactory._getMouseColumn(mouseContentHorizontalOffset, options.get(43 /* fontInfo */).typicalHalfwidthCharacterWidth);\n }\n static _getMouseColumn(mouseContentHorizontalOffset, typicalHalfwidthCharacterWidth) {\n if (mouseContentHorizontalOffset < 0) {\n return 1;\n }\n const chars = Math.round(mouseContentHorizontalOffset / typicalHalfwidthCharacterWidth);\n return (chars + 1);\n }\n static createMouseTargetFromHitTestPosition(ctx, request, spanNode, pos, injectedText) {\n const lineNumber = pos.lineNumber;\n const column = pos.column;\n const lineWidth = ctx.getLineWidth(lineNumber);\n if (request.mouseContentHorizontalOffset > lineWidth) {\n const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\n return request.fulfill(7 /* CONTENT_EMPTY */, pos, null, detail);\n }\n const visibleRange = ctx.visibleRangeForPosition(lineNumber, column);\n if (!visibleRange) {\n return request.fulfill(0 /* UNKNOWN */, pos);\n }\n const columnHorizontalOffset = visibleRange.left;\n if (request.mouseContentHorizontalOffset === columnHorizontalOffset) {\n return request.fulfill(6 /* CONTENT_TEXT */, pos, null, { mightBeForeignElement: !!injectedText });\n }\n const points = [];\n points.push({ offset: visibleRange.left, column: column });\n if (column > 1) {\n const visibleRange = ctx.visibleRangeForPosition(lineNumber, column - 1);\n if (visibleRange) {\n points.push({ offset: visibleRange.left, column: column - 1 });\n }\n }\n const lineMaxColumn = ctx.model.getLineMaxColumn(lineNumber);\n if (column < lineMaxColumn) {\n const visibleRange = ctx.visibleRangeForPosition(lineNumber, column + 1);\n if (visibleRange) {\n points.push({ offset: visibleRange.left, column: column + 1 });\n }\n }\n points.sort((a, b) => a.offset - b.offset);\n const mouseCoordinates = request.pos.toClientCoordinates();\n const spanNodeClientRect = spanNode.getBoundingClientRect();\n const mouseIsOverSpanNode = (spanNodeClientRect.left <= mouseCoordinates.clientX && mouseCoordinates.clientX <= spanNodeClientRect.right);\n for (let i = 1; i < points.length; i++) {\n const prev = points[i - 1];\n const curr = points[i];\n if (prev.offset <= request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset <= curr.offset) {\n const rng = new EditorRange(lineNumber, prev.column, lineNumber, curr.column);\n return request.fulfill(6 /* CONTENT_TEXT */, pos, rng, { mightBeForeignElement: !mouseIsOverSpanNode || !!injectedText });\n }\n }\n return request.fulfill(6 /* CONTENT_TEXT */, pos, null, { mightBeForeignElement: !mouseIsOverSpanNode || !!injectedText });\n }\n /**\n * Most probably WebKit browsers and Edge\n */\n static _doHitTestWithCaretRangeFromPoint(ctx, request) {\n // In Chrome, especially on Linux it is possible to click between lines,\n // so try to adjust the `hity` below so that it lands in the center of a line\n const lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n const lineVerticalOffset = ctx.getVerticalOffsetForLineNumber(lineNumber);\n const lineCenteredVerticalOffset = lineVerticalOffset + Math.floor(ctx.lineHeight / 2);\n let adjustedPageY = request.pos.y + (lineCenteredVerticalOffset - request.mouseVerticalOffset);\n if (adjustedPageY <= request.editorPos.y) {\n adjustedPageY = request.editorPos.y + 1;\n }\n if (adjustedPageY >= request.editorPos.y + ctx.layoutInfo.height) {\n adjustedPageY = request.editorPos.y + ctx.layoutInfo.height - 1;\n }\n const adjustedPage = new PageCoordinates(request.pos.x, adjustedPageY);\n const r = this._actualDoHitTestWithCaretRangeFromPoint(ctx, adjustedPage.toClientCoordinates());\n if (r.type === 1 /* Content */) {\n return r;\n }\n // Also try to hit test without the adjustment (for the edge cases that we are near the top or bottom)\n return this._actualDoHitTestWithCaretRangeFromPoint(ctx, request.pos.toClientCoordinates());\n }\n static _actualDoHitTestWithCaretRangeFromPoint(ctx, coords) {\n const shadowRoot = dom.getShadowRoot(ctx.viewDomNode);\n let range;\n if (shadowRoot) {\n if (typeof shadowRoot.caretRangeFromPoint === 'undefined') {\n range = shadowCaretRangeFromPoint(shadowRoot, coords.clientX, coords.clientY);\n }\n else {\n range = shadowRoot.caretRangeFromPoint(coords.clientX, coords.clientY);\n }\n }\n else {\n range = document.caretRangeFromPoint(coords.clientX, coords.clientY);\n }\n if (!range || !range.startContainer) {\n return new UnknownHitTestResult();\n }\n // Chrome always hits a TEXT_NODE, while Edge sometimes hits a token span\n const startContainer = range.startContainer;\n if (startContainer.nodeType === startContainer.TEXT_NODE) {\n // startContainer is expected to be the token text\n const parent1 = startContainer.parentNode; // expected to be the token span\n const parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span\n const parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div\n const parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? parent3.className : null;\n if (parent3ClassName === ViewLine.CLASS_NAME) {\n return HitTestResult.createFromDOMInfo(ctx, parent1, range.startOffset);\n }\n else {\n return new UnknownHitTestResult(startContainer.parentNode);\n }\n }\n else if (startContainer.nodeType === startContainer.ELEMENT_NODE) {\n // startContainer is expected to be the token span\n const parent1 = startContainer.parentNode; // expected to be the view line container span\n const parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line div\n const parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? parent2.className : null;\n if (parent2ClassName === ViewLine.CLASS_NAME) {\n return HitTestResult.createFromDOMInfo(ctx, startContainer, startContainer.textContent.length);\n }\n else {\n return new UnknownHitTestResult(startContainer);\n }\n }\n return new UnknownHitTestResult();\n }\n /**\n * Most probably Gecko\n */\n static _doHitTestWithCaretPositionFromPoint(ctx, coords) {\n const hitResult = document.caretPositionFromPoint(coords.clientX, coords.clientY);\n if (hitResult.offsetNode.nodeType === hitResult.offsetNode.TEXT_NODE) {\n // offsetNode is expected to be the token text\n const parent1 = hitResult.offsetNode.parentNode; // expected to be the token span\n const parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span\n const parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div\n const parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? parent3.className : null;\n if (parent3ClassName === ViewLine.CLASS_NAME) {\n return HitTestResult.createFromDOMInfo(ctx, hitResult.offsetNode.parentNode, hitResult.offset);\n }\n else {\n return new UnknownHitTestResult(hitResult.offsetNode.parentNode);\n }\n }\n // For inline decorations, Gecko sometimes returns the `` of the line and the offset is the `` with the inline decoration\n // Some other times, it returns the `` with the inline decoration\n if (hitResult.offsetNode.nodeType === hitResult.offsetNode.ELEMENT_NODE) {\n const parent1 = hitResult.offsetNode.parentNode;\n const parent1ClassName = parent1 && parent1.nodeType === parent1.ELEMENT_NODE ? parent1.className : null;\n const parent2 = parent1 ? parent1.parentNode : null;\n const parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? parent2.className : null;\n if (parent1ClassName === ViewLine.CLASS_NAME) {\n // it returned the `` of the line and the offset is the `` with the inline decoration\n const tokenSpan = hitResult.offsetNode.childNodes[Math.min(hitResult.offset, hitResult.offsetNode.childNodes.length - 1)];\n if (tokenSpan) {\n return HitTestResult.createFromDOMInfo(ctx, tokenSpan, 0);\n }\n }\n else if (parent2ClassName === ViewLine.CLASS_NAME) {\n // it returned the `` with the inline decoration\n return HitTestResult.createFromDOMInfo(ctx, hitResult.offsetNode, 0);\n }\n }\n return new UnknownHitTestResult(hitResult.offsetNode);\n }\n static _snapToSoftTabBoundary(position, viewModel) {\n const lineContent = viewModel.getLineContent(position.lineNumber);\n const { tabSize } = viewModel.getTextModelOptions();\n const newPosition = AtomicTabMoveOperations.atomicPosition(lineContent, position.column - 1, tabSize, 2 /* Nearest */);\n if (newPosition !== -1) {\n return new Position(position.lineNumber, newPosition + 1);\n }\n return position;\n }\n static _doHitTest(ctx, request) {\n let result = new UnknownHitTestResult();\n if (typeof document.caretRangeFromPoint === 'function') {\n result = this._doHitTestWithCaretRangeFromPoint(ctx, request);\n }\n else if (document.caretPositionFromPoint) {\n result = this._doHitTestWithCaretPositionFromPoint(ctx, request.pos.toClientCoordinates());\n }\n if (result.type === 1 /* Content */) {\n const injectedText = ctx.model.getInjectedTextAt(result.position);\n const normalizedPosition = ctx.model.normalizePosition(result.position, 2 /* None */);\n if (injectedText || !normalizedPosition.equals(result.position)) {\n result = new ContentHitTestResult(normalizedPosition, result.spanNode, injectedText);\n }\n }\n // Snap to the nearest soft tab boundary if atomic soft tabs are enabled.\n if (result.type === 1 /* Content */ && ctx.stickyTabStops) {\n result = new ContentHitTestResult(this._snapToSoftTabBoundary(result.position, ctx.model), result.spanNode, result.injectedText);\n }\n return result;\n }\n}\nexport function shadowCaretRangeFromPoint(shadowRoot, x, y) {\n const range = document.createRange();\n // Get the element under the point\n let el = shadowRoot.elementFromPoint(x, y);\n if (el !== null) {\n // Get the last child of the element until its firstChild is a text node\n // This assumes that the pointer is on the right of the line, out of the tokens\n // and that we want to get the offset of the last token of the line\n while (el && el.firstChild && el.firstChild.nodeType !== el.firstChild.TEXT_NODE && el.lastChild && el.lastChild.firstChild) {\n el = el.lastChild;\n }\n // Grab its rect\n const rect = el.getBoundingClientRect();\n // And its font\n const font = window.getComputedStyle(el, null).getPropertyValue('font');\n // And also its txt content\n const text = el.innerText;\n // Position the pixel cursor at the left of the element\n let pixelCursor = rect.left;\n let offset = 0;\n let step;\n // If the point is on the right of the box put the cursor after the last character\n if (x > rect.left + rect.width) {\n offset = text.length;\n }\n else {\n const charWidthReader = CharWidthReader.getInstance();\n // Goes through all the characters of the innerText, and checks if the x of the point\n // belongs to the character.\n for (let i = 0; i < text.length + 1; i++) {\n // The step is half the width of the character\n step = charWidthReader.getCharWidth(text.charAt(i), font) / 2;\n // Move to the center of the character\n pixelCursor += step;\n // If the x of the point is smaller that the position of the cursor, the point is over that character\n if (x < pixelCursor) {\n offset = i;\n break;\n }\n // Move between the current character and the next\n pixelCursor += step;\n }\n }\n // Creates a range with the text node of the element and set the offset found\n range.setStart(el.firstChild, offset);\n range.setEnd(el.firstChild, offset);\n }\n return range;\n}\nclass CharWidthReader {\n constructor() {\n this._cache = {};\n this._canvas = document.createElement('canvas');\n }\n static getInstance() {\n if (!CharWidthReader._INSTANCE) {\n CharWidthReader._INSTANCE = new CharWidthReader();\n }\n return CharWidthReader._INSTANCE;\n }\n getCharWidth(char, font) {\n const cacheKey = char + font;\n if (this._cache[cacheKey]) {\n return this._cache[cacheKey];\n }\n const context = this._canvas.getContext('2d');\n context.font = font;\n const metrics = context.measureText(char);\n const width = metrics.width;\n this._cache[cacheKey] = width;\n return width;\n }\n}\nCharWidthReader._INSTANCE = null;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport { StandardWheelEvent } from '../../../base/browser/mouseEvent.js';\nimport { TimeoutTimer } from '../../../base/common/async.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { HitTestContext, MouseTarget, MouseTargetFactory } from './mouseTarget.js';\nimport { ClientCoordinates, EditorMouseEventFactory, GlobalEditorMouseMoveMonitor, createEditorPagePosition } from '../editorDom.js';\nimport { EditorZoom } from '../../common/config/editorZoom.js';\nimport { Position } from '../../common/core/position.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\n/**\n * Merges mouse events when mouse move events are throttled\n */\nexport function createMouseMoveEventMerger(mouseTargetFactory) {\n return function (lastEvent, currentEvent) {\n let targetIsWidget = false;\n if (mouseTargetFactory) {\n targetIsWidget = mouseTargetFactory.mouseTargetIsWidget(currentEvent);\n }\n if (!targetIsWidget) {\n currentEvent.preventDefault();\n }\n return currentEvent;\n };\n}\nexport class MouseHandler extends ViewEventHandler {\n constructor(context, viewController, viewHelper) {\n super();\n this._context = context;\n this.viewController = viewController;\n this.viewHelper = viewHelper;\n this.mouseTargetFactory = new MouseTargetFactory(this._context, viewHelper);\n this._mouseDownOperation = this._register(new MouseDownOperation(this._context, this.viewController, this.viewHelper, (e, testEventTarget) => this._createMouseTarget(e, testEventTarget), (e) => this._getMouseColumn(e)));\n this.lastMouseLeaveTime = -1;\n this._height = this._context.configuration.options.get(129 /* layoutInfo */).height;\n const mouseEvents = new EditorMouseEventFactory(this.viewHelper.viewDomNode);\n this._register(mouseEvents.onContextMenu(this.viewHelper.viewDomNode, (e) => this._onContextMenu(e, true)));\n this._register(mouseEvents.onMouseMoveThrottled(this.viewHelper.viewDomNode, (e) => this._onMouseMove(e), createMouseMoveEventMerger(this.mouseTargetFactory), MouseHandler.MOUSE_MOVE_MINIMUM_TIME));\n this._register(mouseEvents.onMouseUp(this.viewHelper.viewDomNode, (e) => this._onMouseUp(e)));\n this._register(mouseEvents.onMouseLeave(this.viewHelper.viewDomNode, (e) => this._onMouseLeave(e)));\n this._register(mouseEvents.onMouseDown(this.viewHelper.viewDomNode, (e) => this._onMouseDown(e)));\n const onMouseWheel = (browserEvent) => {\n this.viewController.emitMouseWheel(browserEvent);\n if (!this._context.configuration.options.get(67 /* mouseWheelZoom */)) {\n return;\n }\n const e = new StandardWheelEvent(browserEvent);\n const doMouseWheelZoom = (platform.isMacintosh\n // on macOS we support cmd + two fingers scroll (`metaKey` set)\n // and also the two fingers pinch gesture (`ctrKey` set)\n ? ((browserEvent.metaKey || browserEvent.ctrlKey) && !browserEvent.shiftKey && !browserEvent.altKey)\n : (browserEvent.ctrlKey && !browserEvent.metaKey && !browserEvent.shiftKey && !browserEvent.altKey));\n if (doMouseWheelZoom) {\n const zoomLevel = EditorZoom.getZoomLevel();\n const delta = e.deltaY > 0 ? 1 : -1;\n EditorZoom.setZoomLevel(zoomLevel + delta);\n e.preventDefault();\n e.stopPropagation();\n }\n };\n this._register(dom.addDisposableListener(this.viewHelper.viewDomNode, dom.EventType.MOUSE_WHEEL, onMouseWheel, { capture: true, passive: false }));\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n if (e.hasChanged(129 /* layoutInfo */)) {\n // layout change\n const height = this._context.configuration.options.get(129 /* layoutInfo */).height;\n if (this._height !== height) {\n this._height = height;\n this._mouseDownOperation.onHeightChanged();\n }\n }\n return false;\n }\n onCursorStateChanged(e) {\n this._mouseDownOperation.onCursorStateChanged(e);\n return false;\n }\n onFocusChanged(e) {\n return false;\n }\n onScrollChanged(e) {\n this._mouseDownOperation.onScrollChanged();\n return false;\n }\n // --- end event handlers\n getTargetAtClientPoint(clientX, clientY) {\n const clientPos = new ClientCoordinates(clientX, clientY);\n const pos = clientPos.toPageCoordinates();\n const editorPos = createEditorPagePosition(this.viewHelper.viewDomNode);\n if (pos.y < editorPos.y || pos.y > editorPos.y + editorPos.height || pos.x < editorPos.x || pos.x > editorPos.x + editorPos.width) {\n return null;\n }\n return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(), editorPos, pos, null);\n }\n _createMouseTarget(e, testEventTarget) {\n let target = e.target;\n if (!this.viewHelper.viewDomNode.contains(target)) {\n const shadowRoot = dom.getShadowRoot(this.viewHelper.viewDomNode);\n if (shadowRoot) {\n target = shadowRoot.elementsFromPoint(e.posx, e.posy).find((el) => this.viewHelper.viewDomNode.contains(el));\n }\n }\n return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(), e.editorPos, e.pos, testEventTarget ? target : null);\n }\n _getMouseColumn(e) {\n return this.mouseTargetFactory.getMouseColumn(e.editorPos, e.pos);\n }\n _onContextMenu(e, testEventTarget) {\n this.viewController.emitContextMenu({\n event: e,\n target: this._createMouseTarget(e, testEventTarget)\n });\n }\n _onMouseMove(e) {\n if (this._mouseDownOperation.isActive()) {\n // In selection/drag operation\n return;\n }\n const actualMouseMoveTime = e.timestamp;\n if (actualMouseMoveTime < this.lastMouseLeaveTime) {\n // Due to throttling, this event occurred before the mouse left the editor, therefore ignore it.\n return;\n }\n this.viewController.emitMouseMove({\n event: e,\n target: this._createMouseTarget(e, true)\n });\n }\n _onMouseLeave(e) {\n this.lastMouseLeaveTime = (new Date()).getTime();\n this.viewController.emitMouseLeave({\n event: e,\n target: null\n });\n }\n _onMouseUp(e) {\n this.viewController.emitMouseUp({\n event: e,\n target: this._createMouseTarget(e, true)\n });\n }\n _onMouseDown(e) {\n const t = this._createMouseTarget(e, true);\n const targetIsContent = (t.type === 6 /* CONTENT_TEXT */ || t.type === 7 /* CONTENT_EMPTY */);\n const targetIsGutter = (t.type === 2 /* GUTTER_GLYPH_MARGIN */ || t.type === 3 /* GUTTER_LINE_NUMBERS */ || t.type === 4 /* GUTTER_LINE_DECORATIONS */);\n const targetIsLineNumbers = (t.type === 3 /* GUTTER_LINE_NUMBERS */);\n const selectOnLineNumbers = this._context.configuration.options.get(97 /* selectOnLineNumbers */);\n const targetIsViewZone = (t.type === 8 /* CONTENT_VIEW_ZONE */ || t.type === 5 /* GUTTER_VIEW_ZONE */);\n const targetIsWidget = (t.type === 9 /* CONTENT_WIDGET */);\n let shouldHandle = e.leftButton || e.middleButton;\n if (platform.isMacintosh && e.leftButton && e.ctrlKey) {\n shouldHandle = false;\n }\n const focus = () => {\n e.preventDefault();\n this.viewHelper.focusTextArea();\n };\n if (shouldHandle && (targetIsContent || (targetIsLineNumbers && selectOnLineNumbers))) {\n focus();\n this._mouseDownOperation.start(t.type, e);\n }\n else if (targetIsGutter) {\n // Do not steal focus\n e.preventDefault();\n }\n else if (targetIsViewZone) {\n const viewZoneData = t.detail;\n if (this.viewHelper.shouldSuppressMouseDownOnViewZone(viewZoneData.viewZoneId)) {\n focus();\n this._mouseDownOperation.start(t.type, e);\n e.preventDefault();\n }\n }\n else if (targetIsWidget && this.viewHelper.shouldSuppressMouseDownOnWidget(t.detail)) {\n focus();\n e.preventDefault();\n }\n this.viewController.emitMouseDown({\n event: e,\n target: t\n });\n }\n}\nMouseHandler.MOUSE_MOVE_MINIMUM_TIME = 100; // ms\nclass MouseDownOperation extends Disposable {\n constructor(context, viewController, viewHelper, createMouseTarget, getMouseColumn) {\n super();\n this._context = context;\n this._viewController = viewController;\n this._viewHelper = viewHelper;\n this._createMouseTarget = createMouseTarget;\n this._getMouseColumn = getMouseColumn;\n this._mouseMoveMonitor = this._register(new GlobalEditorMouseMoveMonitor(this._viewHelper.viewDomNode));\n this._onScrollTimeout = this._register(new TimeoutTimer());\n this._mouseState = new MouseDownState();\n this._currentSelection = new Selection(1, 1, 1, 1);\n this._isActive = false;\n this._lastMouseEvent = null;\n }\n dispose() {\n super.dispose();\n }\n isActive() {\n return this._isActive;\n }\n _onMouseDownThenMove(e) {\n this._lastMouseEvent = e;\n this._mouseState.setModifiers(e);\n const position = this._findMousePosition(e, true);\n if (!position) {\n // Ignoring because position is unknown\n return;\n }\n if (this._mouseState.isDragAndDrop) {\n this._viewController.emitMouseDrag({\n event: e,\n target: position\n });\n }\n else {\n this._dispatchMouse(position, true);\n }\n }\n start(targetType, e) {\n this._lastMouseEvent = e;\n this._mouseState.setStartedOnLineNumbers(targetType === 3 /* GUTTER_LINE_NUMBERS */);\n this._mouseState.setStartButtons(e);\n this._mouseState.setModifiers(e);\n const position = this._findMousePosition(e, true);\n if (!position || !position.position) {\n // Ignoring because position is unknown\n return;\n }\n this._mouseState.trySetCount(e.detail, position.position);\n // Overwrite the detail of the MouseEvent, as it will be sent out in an event and contributions might rely on it.\n e.detail = this._mouseState.count;\n const options = this._context.configuration.options;\n if (!options.get(80 /* readOnly */)\n && options.get(31 /* dragAndDrop */)\n && !options.get(18 /* columnSelection */)\n && !this._mouseState.altKey // we don't support multiple mouse\n && e.detail < 2 // only single click on a selection can work\n && !this._isActive // the mouse is not down yet\n && !this._currentSelection.isEmpty() // we don't drag single cursor\n && (position.type === 6 /* CONTENT_TEXT */) // single click on text\n && position.position && this._currentSelection.containsPosition(position.position) // single click on a selection\n ) {\n this._mouseState.isDragAndDrop = true;\n this._isActive = true;\n this._mouseMoveMonitor.startMonitoring(e.target, e.buttons, createMouseMoveEventMerger(null), (e) => this._onMouseDownThenMove(e), (browserEvent) => {\n const position = this._findMousePosition(this._lastMouseEvent, true);\n if (browserEvent && browserEvent instanceof KeyboardEvent) {\n // cancel\n this._viewController.emitMouseDropCanceled();\n }\n else {\n this._viewController.emitMouseDrop({\n event: this._lastMouseEvent,\n target: (position ? this._createMouseTarget(this._lastMouseEvent, true) : null) // Ignoring because position is unknown, e.g., Content View Zone\n });\n }\n this._stop();\n });\n return;\n }\n this._mouseState.isDragAndDrop = false;\n this._dispatchMouse(position, e.shiftKey);\n if (!this._isActive) {\n this._isActive = true;\n this._mouseMoveMonitor.startMonitoring(e.target, e.buttons, createMouseMoveEventMerger(null), (e) => this._onMouseDownThenMove(e), () => this._stop());\n }\n }\n _stop() {\n this._isActive = false;\n this._onScrollTimeout.cancel();\n }\n onHeightChanged() {\n this._mouseMoveMonitor.stopMonitoring();\n }\n onScrollChanged() {\n if (!this._isActive) {\n return;\n }\n this._onScrollTimeout.setIfNotSet(() => {\n if (!this._lastMouseEvent) {\n return;\n }\n const position = this._findMousePosition(this._lastMouseEvent, false);\n if (!position) {\n // Ignoring because position is unknown\n return;\n }\n if (this._mouseState.isDragAndDrop) {\n // Ignoring because users are dragging the text\n return;\n }\n this._dispatchMouse(position, true);\n }, 10);\n }\n onCursorStateChanged(e) {\n this._currentSelection = e.selections[0];\n }\n _getPositionOutsideEditor(e) {\n const editorContent = e.editorPos;\n const model = this._context.model;\n const viewLayout = this._context.viewLayout;\n const mouseColumn = this._getMouseColumn(e);\n if (e.posy < editorContent.y) {\n const verticalOffset = Math.max(viewLayout.getCurrentScrollTop() - (editorContent.y - e.posy), 0);\n const viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);\n if (viewZoneData) {\n const newPosition = this._helpPositionJumpOverViewZone(viewZoneData);\n if (newPosition) {\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, newPosition);\n }\n }\n const aboveLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(aboveLineNumber, 1));\n }\n if (e.posy > editorContent.y + editorContent.height) {\n const verticalOffset = viewLayout.getCurrentScrollTop() + (e.posy - editorContent.y);\n const viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);\n if (viewZoneData) {\n const newPosition = this._helpPositionJumpOverViewZone(viewZoneData);\n if (newPosition) {\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, newPosition);\n }\n }\n const belowLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(belowLineNumber, model.getLineMaxColumn(belowLineNumber)));\n }\n const possibleLineNumber = viewLayout.getLineNumberAtVerticalOffset(viewLayout.getCurrentScrollTop() + (e.posy - editorContent.y));\n if (e.posx < editorContent.x) {\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(possibleLineNumber, 1));\n }\n if (e.posx > editorContent.x + editorContent.width) {\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(possibleLineNumber, model.getLineMaxColumn(possibleLineNumber)));\n }\n return null;\n }\n _findMousePosition(e, testEventTarget) {\n const positionOutsideEditor = this._getPositionOutsideEditor(e);\n if (positionOutsideEditor) {\n return positionOutsideEditor;\n }\n const t = this._createMouseTarget(e, testEventTarget);\n const hintedPosition = t.position;\n if (!hintedPosition) {\n return null;\n }\n if (t.type === 8 /* CONTENT_VIEW_ZONE */ || t.type === 5 /* GUTTER_VIEW_ZONE */) {\n const newPosition = this._helpPositionJumpOverViewZone(t.detail);\n if (newPosition) {\n return new MouseTarget(t.element, t.type, t.mouseColumn, newPosition, null, t.detail);\n }\n }\n return t;\n }\n _helpPositionJumpOverViewZone(viewZoneData) {\n // Force position on view zones to go above or below depending on where selection started from\n const selectionStart = new Position(this._currentSelection.selectionStartLineNumber, this._currentSelection.selectionStartColumn);\n const positionBefore = viewZoneData.positionBefore;\n const positionAfter = viewZoneData.positionAfter;\n if (positionBefore && positionAfter) {\n if (positionBefore.isBefore(selectionStart)) {\n return positionBefore;\n }\n else {\n return positionAfter;\n }\n }\n return null;\n }\n _dispatchMouse(position, inSelectionMode) {\n if (!position.position) {\n return;\n }\n this._viewController.dispatchMouse({\n position: position.position,\n mouseColumn: position.mouseColumn,\n startedOnLineNumbers: this._mouseState.startedOnLineNumbers,\n inSelectionMode: inSelectionMode,\n mouseDownCount: this._mouseState.count,\n altKey: this._mouseState.altKey,\n ctrlKey: this._mouseState.ctrlKey,\n metaKey: this._mouseState.metaKey,\n shiftKey: this._mouseState.shiftKey,\n leftButton: this._mouseState.leftButton,\n middleButton: this._mouseState.middleButton,\n });\n }\n}\nclass MouseDownState {\n constructor() {\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._leftButton = false;\n this._middleButton = false;\n this._startedOnLineNumbers = false;\n this._lastMouseDownPosition = null;\n this._lastMouseDownPositionEqualCount = 0;\n this._lastMouseDownCount = 0;\n this._lastSetMouseDownCountTime = 0;\n this.isDragAndDrop = false;\n }\n get altKey() { return this._altKey; }\n get ctrlKey() { return this._ctrlKey; }\n get metaKey() { return this._metaKey; }\n get shiftKey() { return this._shiftKey; }\n get leftButton() { return this._leftButton; }\n get middleButton() { return this._middleButton; }\n get startedOnLineNumbers() { return this._startedOnLineNumbers; }\n get count() {\n return this._lastMouseDownCount;\n }\n setModifiers(source) {\n this._altKey = source.altKey;\n this._ctrlKey = source.ctrlKey;\n this._metaKey = source.metaKey;\n this._shiftKey = source.shiftKey;\n }\n setStartButtons(source) {\n this._leftButton = source.leftButton;\n this._middleButton = source.middleButton;\n }\n setStartedOnLineNumbers(startedOnLineNumbers) {\n this._startedOnLineNumbers = startedOnLineNumbers;\n }\n trySetCount(setMouseDownCount, newMouseDownPosition) {\n // a. Invalidate multiple clicking if too much time has passed (will be hit by IE because the detail field of mouse events contains garbage in IE10)\n const currentTime = (new Date()).getTime();\n if (currentTime - this._lastSetMouseDownCountTime > MouseDownState.CLEAR_MOUSE_DOWN_COUNT_TIME) {\n setMouseDownCount = 1;\n }\n this._lastSetMouseDownCountTime = currentTime;\n // b. Ensure that we don't jump from single click to triple click in one go (will be hit by IE because the detail field of mouse events contains garbage in IE10)\n if (setMouseDownCount > this._lastMouseDownCount + 1) {\n setMouseDownCount = this._lastMouseDownCount + 1;\n }\n // c. Invalidate multiple clicking if the logical position is different\n if (this._lastMouseDownPosition && this._lastMouseDownPosition.equals(newMouseDownPosition)) {\n this._lastMouseDownPositionEqualCount++;\n }\n else {\n this._lastMouseDownPositionEqualCount = 1;\n }\n this._lastMouseDownPosition = newMouseDownPosition;\n // Finally set the lastMouseDownCount\n this._lastMouseDownCount = Math.min(setMouseDownCount, this._lastMouseDownPositionEqualCount);\n }\n}\nMouseDownState.CLEAR_MOUSE_DOWN_COUNT_TIME = 400; // ms\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nexport const _debugComposition = false;\nexport class TextAreaState {\n constructor(value, selectionStart, selectionEnd, selectionStartPosition, selectionEndPosition) {\n this.value = value;\n this.selectionStart = selectionStart;\n this.selectionEnd = selectionEnd;\n this.selectionStartPosition = selectionStartPosition;\n this.selectionEndPosition = selectionEndPosition;\n }\n toString() {\n return '[ <' + this.value + '>, selectionStart: ' + this.selectionStart + ', selectionEnd: ' + this.selectionEnd + ']';\n }\n static readFromTextArea(textArea) {\n return new TextAreaState(textArea.getValue(), textArea.getSelectionStart(), textArea.getSelectionEnd(), null, null);\n }\n collapseSelection() {\n return new TextAreaState(this.value, this.value.length, this.value.length, null, null);\n }\n writeToTextArea(reason, textArea, select) {\n if (_debugComposition) {\n console.log('writeToTextArea ' + reason + ': ' + this.toString());\n }\n textArea.setValue(reason, this.value);\n if (select) {\n textArea.setSelectionRange(reason, this.selectionStart, this.selectionEnd);\n }\n }\n deduceEditorPosition(offset) {\n if (offset <= this.selectionStart) {\n const str = this.value.substring(offset, this.selectionStart);\n return this._finishDeduceEditorPosition(this.selectionStartPosition, str, -1);\n }\n if (offset >= this.selectionEnd) {\n const str = this.value.substring(this.selectionEnd, offset);\n return this._finishDeduceEditorPosition(this.selectionEndPosition, str, 1);\n }\n const str1 = this.value.substring(this.selectionStart, offset);\n if (str1.indexOf(String.fromCharCode(8230)) === -1) {\n return this._finishDeduceEditorPosition(this.selectionStartPosition, str1, 1);\n }\n const str2 = this.value.substring(offset, this.selectionEnd);\n return this._finishDeduceEditorPosition(this.selectionEndPosition, str2, -1);\n }\n _finishDeduceEditorPosition(anchor, deltaText, signum) {\n let lineFeedCnt = 0;\n let lastLineFeedIndex = -1;\n while ((lastLineFeedIndex = deltaText.indexOf('\\n', lastLineFeedIndex + 1)) !== -1) {\n lineFeedCnt++;\n }\n return [anchor, signum * deltaText.length, lineFeedCnt];\n }\n static selectedText(text) {\n return new TextAreaState(text, 0, text.length, null, null);\n }\n static deduceInput(previousState, currentState, couldBeEmojiInput) {\n if (!previousState) {\n // This is the EMPTY state\n return {\n text: '',\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n if (_debugComposition) {\n console.log('------------------------deduceInput');\n console.log('PREVIOUS STATE: ' + previousState.toString());\n console.log('CURRENT STATE: ' + currentState.toString());\n }\n let previousValue = previousState.value;\n let previousSelectionStart = previousState.selectionStart;\n let previousSelectionEnd = previousState.selectionEnd;\n let currentValue = currentState.value;\n let currentSelectionStart = currentState.selectionStart;\n let currentSelectionEnd = currentState.selectionEnd;\n // Strip the previous suffix from the value (without interfering with the current selection)\n const previousSuffix = previousValue.substring(previousSelectionEnd);\n const currentSuffix = currentValue.substring(currentSelectionEnd);\n const suffixLength = strings.commonSuffixLength(previousSuffix, currentSuffix);\n currentValue = currentValue.substring(0, currentValue.length - suffixLength);\n previousValue = previousValue.substring(0, previousValue.length - suffixLength);\n const previousPrefix = previousValue.substring(0, previousSelectionStart);\n const currentPrefix = currentValue.substring(0, currentSelectionStart);\n const prefixLength = strings.commonPrefixLength(previousPrefix, currentPrefix);\n currentValue = currentValue.substring(prefixLength);\n previousValue = previousValue.substring(prefixLength);\n currentSelectionStart -= prefixLength;\n previousSelectionStart -= prefixLength;\n currentSelectionEnd -= prefixLength;\n previousSelectionEnd -= prefixLength;\n if (_debugComposition) {\n console.log('AFTER DIFFING PREVIOUS STATE: <' + previousValue + '>, selectionStart: ' + previousSelectionStart + ', selectionEnd: ' + previousSelectionEnd);\n console.log('AFTER DIFFING CURRENT STATE: <' + currentValue + '>, selectionStart: ' + currentSelectionStart + ', selectionEnd: ' + currentSelectionEnd);\n }\n if (couldBeEmojiInput && currentSelectionStart === currentSelectionEnd && previousValue.length > 0) {\n // on OSX, emojis from the emoji picker are inserted at random locations\n // the only hints we can use is that the selection is immediately after the inserted emoji\n // and that none of the old text has been deleted\n let potentialEmojiInput = null;\n if (currentSelectionStart === currentValue.length) {\n // emoji potentially inserted \"somewhere\" after the previous selection => it should appear at the end of `currentValue`\n if (currentValue.startsWith(previousValue)) {\n // only if all of the old text is accounted for\n potentialEmojiInput = currentValue.substring(previousValue.length);\n }\n }\n else {\n // emoji potentially inserted \"somewhere\" before the previous selection => it should appear at the start of `currentValue`\n if (currentValue.endsWith(previousValue)) {\n // only if all of the old text is accounted for\n potentialEmojiInput = currentValue.substring(0, currentValue.length - previousValue.length);\n }\n }\n if (potentialEmojiInput !== null && potentialEmojiInput.length > 0) {\n // now we check that this is indeed an emoji\n // emojis can grow quite long, so a length check is of no help\n // e.g. 1F3F4 E0067 E0062 E0065 E006E E0067 E007F ; fully-qualified # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 England\n // Oftentimes, emojis use Variation Selector-16 (U+FE0F), so that is a good hint\n // http://emojipedia.org/variation-selector-16/\n // > An invisible codepoint which specifies that the preceding character\n // > should be displayed with emoji presentation. Only required if the\n // > preceding character defaults to text presentation.\n if (/\\uFE0F/.test(potentialEmojiInput) || strings.containsEmoji(potentialEmojiInput)) {\n return {\n text: potentialEmojiInput,\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n }\n }\n if (currentSelectionStart === currentSelectionEnd) {\n // composition accept case (noticed in FF + Japanese)\n // [blahblah] => blahblah|\n if (previousValue === currentValue\n && previousSelectionStart === 0\n && previousSelectionEnd === previousValue.length\n && currentSelectionStart === currentValue.length\n && currentValue.indexOf('\\n') === -1) {\n if (strings.containsFullWidthCharacter(currentValue)) {\n return {\n text: '',\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n }\n // no current selection\n const replacePreviousCharacters = (previousPrefix.length - prefixLength);\n if (_debugComposition) {\n console.log('REMOVE PREVIOUS: ' + (previousPrefix.length - prefixLength) + ' chars');\n }\n return {\n text: currentValue,\n replacePrevCharCnt: replacePreviousCharacters,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n // there is a current selection => composition case\n const replacePreviousCharacters = previousSelectionEnd - previousSelectionStart;\n return {\n text: currentValue,\n replacePrevCharCnt: replacePreviousCharacters,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n static deduceAndroidCompositionInput(previousState, currentState) {\n if (!previousState) {\n // This is the EMPTY state\n return {\n text: '',\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n if (_debugComposition) {\n console.log('------------------------deduceAndroidCompositionInput');\n console.log('PREVIOUS STATE: ' + previousState.toString());\n console.log('CURRENT STATE: ' + currentState.toString());\n }\n if (previousState.value === currentState.value) {\n return {\n text: '',\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: currentState.selectionEnd - previousState.selectionEnd\n };\n }\n const prefixLength = Math.min(strings.commonPrefixLength(previousState.value, currentState.value), previousState.selectionEnd);\n const suffixLength = Math.min(strings.commonSuffixLength(previousState.value, currentState.value), previousState.value.length - previousState.selectionEnd);\n const previousValue = previousState.value.substring(prefixLength, previousState.value.length - suffixLength);\n const currentValue = currentState.value.substring(prefixLength, currentState.value.length - suffixLength);\n const previousSelectionStart = previousState.selectionStart - prefixLength;\n const previousSelectionEnd = previousState.selectionEnd - prefixLength;\n const currentSelectionStart = currentState.selectionStart - prefixLength;\n const currentSelectionEnd = currentState.selectionEnd - prefixLength;\n if (_debugComposition) {\n console.log('AFTER DIFFING PREVIOUS STATE: <' + previousValue + '>, selectionStart: ' + previousSelectionStart + ', selectionEnd: ' + previousSelectionEnd);\n console.log('AFTER DIFFING CURRENT STATE: <' + currentValue + '>, selectionStart: ' + currentSelectionStart + ', selectionEnd: ' + currentSelectionEnd);\n }\n return {\n text: currentValue,\n replacePrevCharCnt: previousSelectionEnd,\n replaceNextCharCnt: previousValue.length - previousSelectionEnd,\n positionDelta: currentSelectionEnd - currentValue.length\n };\n }\n}\nTextAreaState.EMPTY = new TextAreaState('', 0, 0, null, null);\nexport class PagedScreenReaderStrategy {\n static _getPageOfLine(lineNumber, linesPerPage) {\n return Math.floor((lineNumber - 1) / linesPerPage);\n }\n static _getRangeForPage(page, linesPerPage) {\n const offset = page * linesPerPage;\n const startLineNumber = offset + 1;\n const endLineNumber = offset + linesPerPage;\n return new Range(startLineNumber, 1, endLineNumber + 1, 1);\n }\n static fromEditorSelection(previousState, model, selection, linesPerPage, trimLongText) {\n const selectionStartPage = PagedScreenReaderStrategy._getPageOfLine(selection.startLineNumber, linesPerPage);\n const selectionStartPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionStartPage, linesPerPage);\n const selectionEndPage = PagedScreenReaderStrategy._getPageOfLine(selection.endLineNumber, linesPerPage);\n const selectionEndPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionEndPage, linesPerPage);\n const pretextRange = selectionStartPageRange.intersectRanges(new Range(1, 1, selection.startLineNumber, selection.startColumn));\n let pretext = model.getValueInRange(pretextRange, 1 /* LF */);\n const lastLine = model.getLineCount();\n const lastLineMaxColumn = model.getLineMaxColumn(lastLine);\n const posttextRange = selectionEndPageRange.intersectRanges(new Range(selection.endLineNumber, selection.endColumn, lastLine, lastLineMaxColumn));\n let posttext = model.getValueInRange(posttextRange, 1 /* LF */);\n let text;\n if (selectionStartPage === selectionEndPage || selectionStartPage + 1 === selectionEndPage) {\n // take full selection\n text = model.getValueInRange(selection, 1 /* LF */);\n }\n else {\n const selectionRange1 = selectionStartPageRange.intersectRanges(selection);\n const selectionRange2 = selectionEndPageRange.intersectRanges(selection);\n text = (model.getValueInRange(selectionRange1, 1 /* LF */)\n + String.fromCharCode(8230)\n + model.getValueInRange(selectionRange2, 1 /* LF */));\n }\n // Chromium handles very poorly text even of a few thousand chars\n // Cut text to avoid stalling the entire UI\n if (trimLongText) {\n const LIMIT_CHARS = 500;\n if (pretext.length > LIMIT_CHARS) {\n pretext = pretext.substring(pretext.length - LIMIT_CHARS, pretext.length);\n }\n if (posttext.length > LIMIT_CHARS) {\n posttext = posttext.substring(0, LIMIT_CHARS);\n }\n if (text.length > 2 * LIMIT_CHARS) {\n text = text.substring(0, LIMIT_CHARS) + String.fromCharCode(8230) + text.substring(text.length - LIMIT_CHARS, text.length);\n }\n }\n return new TextAreaState(pretext + text + posttext, pretext.length, pretext.length + text.length, new Position(selection.startLineNumber, selection.startColumn), new Position(selection.endLineNumber, selection.endColumn));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from '../../../base/browser/browser.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { Mimes } from '../../../base/common/mime.js';\nimport * as platform from '../../../base/common/platform.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { TextAreaState, _debugComposition } from './textAreaState.js';\nimport { Position } from '../../common/core/position.js';\nimport { Selection } from '../../common/core/selection.js';\nexport var TextAreaSyntethicEvents;\n(function (TextAreaSyntethicEvents) {\n TextAreaSyntethicEvents.Tap = '-monaco-textarea-synthetic-tap';\n})(TextAreaSyntethicEvents || (TextAreaSyntethicEvents = {}));\nexport const CopyOptions = {\n forceCopyWithSyntaxHighlighting: false\n};\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n constructor() {\n this._lastState = null;\n }\n set(lastCopiedValue, data) {\n this._lastState = { lastCopiedValue, data };\n }\n get(pastedText) {\n if (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n // match!\n return this._lastState.data;\n }\n this._lastState = null;\n return null;\n }\n}\nInMemoryClipboardMetadataManager.INSTANCE = new InMemoryClipboardMetadataManager();\n/**\n * Writes screen reader content to the textarea and is able to analyze its input events to generate:\n * - onCut\n * - onPaste\n * - onType\n *\n * Composition events are generated for presentation purposes (composition input is reflected in onType).\n */\nexport class TextAreaInput extends Disposable {\n constructor(host, textArea) {\n super();\n this.textArea = textArea;\n this._onFocus = this._register(new Emitter());\n this.onFocus = this._onFocus.event;\n this._onBlur = this._register(new Emitter());\n this.onBlur = this._onBlur.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._onKeyUp = this._register(new Emitter());\n this.onKeyUp = this._onKeyUp.event;\n this._onCut = this._register(new Emitter());\n this.onCut = this._onCut.event;\n this._onPaste = this._register(new Emitter());\n this.onPaste = this._onPaste.event;\n this._onType = this._register(new Emitter());\n this.onType = this._onType.event;\n this._onCompositionStart = this._register(new Emitter());\n this.onCompositionStart = this._onCompositionStart.event;\n this._onCompositionUpdate = this._register(new Emitter());\n this.onCompositionUpdate = this._onCompositionUpdate.event;\n this._onCompositionEnd = this._register(new Emitter());\n this.onCompositionEnd = this._onCompositionEnd.event;\n this._onSelectionChangeRequest = this._register(new Emitter());\n this.onSelectionChangeRequest = this._onSelectionChangeRequest.event;\n this._host = host;\n this._textArea = this._register(new TextAreaWrapper(textArea));\n this._asyncTriggerCut = this._register(new RunOnceScheduler(() => this._onCut.fire(), 0));\n this._asyncFocusGainWriteScreenReaderContent = this._register(new RunOnceScheduler(() => this.writeScreenReaderContent('asyncFocusGain'), 0));\n this._textAreaState = TextAreaState.EMPTY;\n this._selectionChangeListener = null;\n this.writeScreenReaderContent('ctor');\n this._hasFocus = false;\n this._isDoingComposition = false;\n this._nextCommand = 0 /* Type */;\n let lastKeyDown = null;\n this._register(dom.addStandardDisposableListener(textArea.domNode, 'keydown', (e) => {\n if (e.keyCode === 109 /* KEY_IN_COMPOSITION */\n || (this._isDoingComposition && e.keyCode === 1 /* Backspace */)) {\n // Stop propagation for keyDown events if the IME is processing key input\n e.stopPropagation();\n }\n if (e.equals(9 /* Escape */)) {\n // Prevent default always for `Esc`, otherwise it will generate a keypress\n // See https://msdn.microsoft.com/en-us/library/ie/ms536939(v=vs.85).aspx\n e.preventDefault();\n }\n lastKeyDown = e;\n this._onKeyDown.fire(e);\n }));\n this._register(dom.addStandardDisposableListener(textArea.domNode, 'keyup', (e) => {\n this._onKeyUp.fire(e);\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'compositionstart', (e) => {\n if (_debugComposition) {\n console.log(`[compositionstart]`, e);\n }\n if (this._isDoingComposition) {\n return;\n }\n this._isDoingComposition = true;\n if (platform.isMacintosh\n && this._textAreaState.selectionStart === this._textAreaState.selectionEnd\n && this._textAreaState.selectionStart > 0\n && this._textAreaState.value.substr(this._textAreaState.selectionStart - 1, 1) === e.data) {\n const isArrowKey = (lastKeyDown && lastKeyDown.equals(109 /* KEY_IN_COMPOSITION */)\n && (lastKeyDown.code === 'ArrowRight' || lastKeyDown.code === 'ArrowLeft'));\n if (isArrowKey || browser.isFirefox) {\n // Handling long press case on Chromium/Safari macOS + arrow key => pretend the character was selected\n // or long press case on Firefox on macOS\n if (_debugComposition) {\n console.log(`[compositionstart] Handling long press case on macOS + arrow key or Firefox`, e);\n }\n this._textAreaState = new TextAreaState(this._textAreaState.value, this._textAreaState.selectionStart - 1, this._textAreaState.selectionEnd, this._textAreaState.selectionStartPosition ? new Position(this._textAreaState.selectionStartPosition.lineNumber, this._textAreaState.selectionStartPosition.column - 1) : null, this._textAreaState.selectionEndPosition);\n this._onCompositionStart.fire({ revealDeltaColumns: -1 });\n return;\n }\n }\n if (browser.isAndroid) {\n // when tapping on the editor, Android enters composition mode to edit the current word\n // so we cannot clear the textarea on Android and we must pretend the current word was selected\n this._onCompositionStart.fire({ revealDeltaColumns: -this._textAreaState.selectionStart });\n return;\n }\n this._setAndWriteTextAreaState('compositionstart', TextAreaState.EMPTY);\n this._onCompositionStart.fire({ revealDeltaColumns: 0 });\n }));\n /**\n * Deduce the typed input from a text area's value and the last observed state.\n */\n const deduceInputFromTextAreaValue = (couldBeEmojiInput) => {\n const oldState = this._textAreaState;\n const newState = TextAreaState.readFromTextArea(this._textArea);\n return [newState, TextAreaState.deduceInput(oldState, newState, couldBeEmojiInput)];\n };\n const deduceAndroidCompositionInput = () => {\n const oldState = this._textAreaState;\n const newState = TextAreaState.readFromTextArea(this._textArea);\n return [newState, TextAreaState.deduceAndroidCompositionInput(oldState, newState)];\n };\n /**\n * Deduce the composition input from a string.\n */\n const deduceComposition = (text) => {\n const oldState = this._textAreaState;\n const newState = TextAreaState.selectedText(text);\n const typeInput = {\n text: newState.value,\n replacePrevCharCnt: oldState.selectionEnd - oldState.selectionStart,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n return [newState, typeInput];\n };\n this._register(dom.addDisposableListener(textArea.domNode, 'compositionupdate', (e) => {\n if (_debugComposition) {\n console.log(`[compositionupdate]`, e);\n }\n if (browser.isAndroid) {\n // On Android, the data sent with the composition update event is unusable.\n // For example, if the cursor is in the middle of a word like Mic|osoft\n // and Microsoft is chosen from the keyboard's suggestions, the e.data will contain \"Microsoft\".\n // This is not really usable because it doesn't tell us where the edit began and where it ended.\n const [newState, typeInput] = deduceAndroidCompositionInput();\n this._textAreaState = newState;\n this._onType.fire(typeInput);\n this._onCompositionUpdate.fire(e);\n return;\n }\n const [newState, typeInput] = deduceComposition(e.data || '');\n this._textAreaState = newState;\n this._onType.fire(typeInput);\n this._onCompositionUpdate.fire(e);\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'compositionend', (e) => {\n if (_debugComposition) {\n console.log(`[compositionend]`, e);\n }\n // https://github.com/microsoft/monaco-editor/issues/1663\n // On iOS 13.2, Chinese system IME randomly trigger an additional compositionend event with empty data\n if (!this._isDoingComposition) {\n return;\n }\n this._isDoingComposition = false;\n if (browser.isAndroid) {\n // On Android, the data sent with the composition update event is unusable.\n // For example, if the cursor is in the middle of a word like Mic|osoft\n // and Microsoft is chosen from the keyboard's suggestions, the e.data will contain \"Microsoft\".\n // This is not really usable because it doesn't tell us where the edit began and where it ended.\n const [newState, typeInput] = deduceAndroidCompositionInput();\n this._textAreaState = newState;\n this._onType.fire(typeInput);\n this._onCompositionEnd.fire();\n return;\n }\n const [newState, typeInput] = deduceComposition(e.data || '');\n this._textAreaState = newState;\n this._onType.fire(typeInput);\n // isChrome: the textarea is not updated correctly when composition ends\n // isFirefox: the textarea is not updated correctly after inserting emojis\n // => we cannot assume the text at the end consists only of the composited text\n if (browser.isChrome || browser.isFirefox) {\n this._textAreaState = TextAreaState.readFromTextArea(this._textArea);\n }\n this._onCompositionEnd.fire();\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'input', () => {\n // Pretend here we touched the text area, as the `input` event will most likely\n // result in a `selectionchange` event which we want to ignore\n this._textArea.setIgnoreSelectionChangeTime('received input event');\n if (this._isDoingComposition) {\n return;\n }\n const [newState, typeInput] = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/ platform.isMacintosh);\n if (typeInput.replacePrevCharCnt === 0 && typeInput.text.length === 1 && strings.isHighSurrogate(typeInput.text.charCodeAt(0))) {\n // Ignore invalid input but keep it around for next time\n return;\n }\n this._textAreaState = newState;\n if (this._nextCommand === 0 /* Type */) {\n if (typeInput.text !== '' || typeInput.replacePrevCharCnt !== 0) {\n this._onType.fire(typeInput);\n }\n }\n else {\n if (typeInput.text !== '' || typeInput.replacePrevCharCnt !== 0) {\n this._firePaste(typeInput.text, null);\n }\n this._nextCommand = 0 /* Type */;\n }\n }));\n // --- Clipboard operations\n this._register(dom.addDisposableListener(textArea.domNode, 'cut', (e) => {\n // Pretend here we touched the text area, as the `cut` event will most likely\n // result in a `selectionchange` event which we want to ignore\n this._textArea.setIgnoreSelectionChangeTime('received cut event');\n this._ensureClipboardGetsEditorSelection(e);\n this._asyncTriggerCut.schedule();\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'copy', (e) => {\n this._ensureClipboardGetsEditorSelection(e);\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'paste', (e) => {\n // Pretend here we touched the text area, as the `paste` event will most likely\n // result in a `selectionchange` event which we want to ignore\n this._textArea.setIgnoreSelectionChangeTime('received paste event');\n if (ClipboardEventUtils.canUseTextData(e)) {\n const [pastePlainText, metadata] = ClipboardEventUtils.getTextData(e);\n if (pastePlainText !== '') {\n this._firePaste(pastePlainText, metadata);\n }\n }\n else {\n if (this._textArea.getSelectionStart() !== this._textArea.getSelectionEnd()) {\n // Clean up the textarea, to get a clean paste\n this._setAndWriteTextAreaState('paste', TextAreaState.EMPTY);\n }\n this._nextCommand = 1 /* Paste */;\n }\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'focus', () => {\n const hadFocus = this._hasFocus;\n this._setHasFocus(true);\n if (browser.isSafari && !hadFocus && this._hasFocus) {\n // When \"tabbing into\" the textarea, immediately after dispatching the 'focus' event,\n // Safari will always move the selection at offset 0 in the textarea\n this._asyncFocusGainWriteScreenReaderContent.schedule();\n }\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'blur', () => {\n if (this._isDoingComposition) {\n // See https://github.com/microsoft/vscode/issues/112621\n // where compositionend is not triggered when the editor\n // is taken off-dom during a composition\n // Clear the flag to be able to write to the textarea\n this._isDoingComposition = false;\n // Clear the textarea to avoid an unwanted cursor type\n this.writeScreenReaderContent('blurWithoutCompositionEnd');\n // Fire artificial composition end\n this._onCompositionEnd.fire();\n }\n this._setHasFocus(false);\n }));\n this._register(dom.addDisposableListener(textArea.domNode, TextAreaSyntethicEvents.Tap, () => {\n if (browser.isAndroid && this._isDoingComposition) {\n // on Android, tapping does not cancel the current composition, so the\n // textarea is stuck showing the old composition\n // Clear the flag to be able to write to the textarea\n this._isDoingComposition = false;\n // Clear the textarea to avoid an unwanted cursor type\n this.writeScreenReaderContent('tapWithoutCompositionEnd');\n // Fire artificial composition end\n this._onCompositionEnd.fire();\n }\n }));\n }\n _installSelectionChangeListener() {\n // See https://github.com/microsoft/vscode/issues/27216 and https://github.com/microsoft/vscode/issues/98256\n // When using a Braille display, it is possible for users to reposition the\n // system caret. This is reflected in Chrome as a `selectionchange` event.\n //\n // The `selectionchange` event appears to be emitted under numerous other circumstances,\n // so it is quite a challenge to distinguish a `selectionchange` coming in from a user\n // using a Braille display from all the other cases.\n //\n // The problems with the `selectionchange` event are:\n // * the event is emitted when the textarea is focused programmatically -- textarea.focus()\n // * the event is emitted when the selection is changed in the textarea programmatically -- textarea.setSelectionRange(...)\n // * the event is emitted when the value of the textarea is changed programmatically -- textarea.value = '...'\n // * the event is emitted when tabbing into the textarea\n // * the event is emitted asynchronously (sometimes with a delay as high as a few tens of ms)\n // * the event sometimes comes in bursts for a single logical textarea operation\n // `selectionchange` events often come multiple times for a single logical change\n // so throttle multiple `selectionchange` events that burst in a short period of time.\n let previousSelectionChangeEventTime = 0;\n return dom.addDisposableListener(document, 'selectionchange', (e) => {\n if (!this._hasFocus) {\n return;\n }\n if (this._isDoingComposition) {\n return;\n }\n if (!browser.isChrome) {\n // Support only for Chrome until testing happens on other browsers\n return;\n }\n const now = Date.now();\n const delta1 = now - previousSelectionChangeEventTime;\n previousSelectionChangeEventTime = now;\n if (delta1 < 5) {\n // received another `selectionchange` event within 5ms of the previous `selectionchange` event\n // => ignore it\n return;\n }\n const delta2 = now - this._textArea.getIgnoreSelectionChangeTime();\n this._textArea.resetSelectionChangeTime();\n if (delta2 < 100) {\n // received a `selectionchange` event within 100ms since we touched the textarea\n // => ignore it, since we caused it\n return;\n }\n if (!this._textAreaState.selectionStartPosition || !this._textAreaState.selectionEndPosition) {\n // Cannot correlate a position in the textarea with a position in the editor...\n return;\n }\n const newValue = this._textArea.getValue();\n if (this._textAreaState.value !== newValue) {\n // Cannot correlate a position in the textarea with a position in the editor...\n return;\n }\n const newSelectionStart = this._textArea.getSelectionStart();\n const newSelectionEnd = this._textArea.getSelectionEnd();\n if (this._textAreaState.selectionStart === newSelectionStart && this._textAreaState.selectionEnd === newSelectionEnd) {\n // Nothing to do...\n return;\n }\n const _newSelectionStartPosition = this._textAreaState.deduceEditorPosition(newSelectionStart);\n const newSelectionStartPosition = this._host.deduceModelPosition(_newSelectionStartPosition[0], _newSelectionStartPosition[1], _newSelectionStartPosition[2]);\n const _newSelectionEndPosition = this._textAreaState.deduceEditorPosition(newSelectionEnd);\n const newSelectionEndPosition = this._host.deduceModelPosition(_newSelectionEndPosition[0], _newSelectionEndPosition[1], _newSelectionEndPosition[2]);\n const newSelection = new Selection(newSelectionStartPosition.lineNumber, newSelectionStartPosition.column, newSelectionEndPosition.lineNumber, newSelectionEndPosition.column);\n this._onSelectionChangeRequest.fire(newSelection);\n });\n }\n dispose() {\n super.dispose();\n if (this._selectionChangeListener) {\n this._selectionChangeListener.dispose();\n this._selectionChangeListener = null;\n }\n }\n focusTextArea() {\n // Setting this._hasFocus and writing the screen reader content\n // will result in a focus() and setSelectionRange() in the textarea\n this._setHasFocus(true);\n // If the editor is off DOM, focus cannot be really set, so let's double check that we have managed to set the focus\n this.refreshFocusState();\n }\n isFocused() {\n return this._hasFocus;\n }\n refreshFocusState() {\n const shadowRoot = dom.getShadowRoot(this.textArea.domNode);\n if (shadowRoot) {\n this._setHasFocus(shadowRoot.activeElement === this.textArea.domNode);\n }\n else if (dom.isInDOM(this.textArea.domNode)) {\n this._setHasFocus(document.activeElement === this.textArea.domNode);\n }\n else {\n this._setHasFocus(false);\n }\n }\n _setHasFocus(newHasFocus) {\n if (this._hasFocus === newHasFocus) {\n // no change\n return;\n }\n this._hasFocus = newHasFocus;\n if (this._selectionChangeListener) {\n this._selectionChangeListener.dispose();\n this._selectionChangeListener = null;\n }\n if (this._hasFocus) {\n this._selectionChangeListener = this._installSelectionChangeListener();\n }\n if (this._hasFocus) {\n this.writeScreenReaderContent('focusgain');\n }\n if (this._hasFocus) {\n this._onFocus.fire();\n }\n else {\n this._onBlur.fire();\n }\n }\n _setAndWriteTextAreaState(reason, textAreaState) {\n if (!this._hasFocus) {\n textAreaState = textAreaState.collapseSelection();\n }\n textAreaState.writeToTextArea(reason, this._textArea, this._hasFocus);\n this._textAreaState = textAreaState;\n }\n writeScreenReaderContent(reason) {\n if (this._isDoingComposition) {\n // Do not write to the text area when doing composition\n return;\n }\n this._setAndWriteTextAreaState(reason, this._host.getScreenReaderContent(this._textAreaState));\n }\n _ensureClipboardGetsEditorSelection(e) {\n const dataToCopy = this._host.getDataToCopy(ClipboardEventUtils.canUseTextData(e));\n const storedMetadata = {\n version: 1,\n isFromEmptySelection: dataToCopy.isFromEmptySelection,\n multicursorText: dataToCopy.multicursorText,\n mode: dataToCopy.mode\n };\n InMemoryClipboardMetadataManager.INSTANCE.set(\n // When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n // Firefox pastes \"LINE\\n\", so let's work around this quirk\n (browser.isFirefox ? dataToCopy.text.replace(/\\r\\n/g, '\\n') : dataToCopy.text), storedMetadata);\n if (!ClipboardEventUtils.canUseTextData(e)) {\n // Looks like an old browser. The strategy is to place the text\n // we'd like to be copied to the clipboard in the textarea and select it.\n this._setAndWriteTextAreaState('copy or cut', TextAreaState.selectedText(dataToCopy.text));\n return;\n }\n ClipboardEventUtils.setTextData(e, dataToCopy.text, dataToCopy.html, storedMetadata);\n }\n _firePaste(text, metadata) {\n if (!metadata) {\n // try the in-memory store\n metadata = InMemoryClipboardMetadataManager.INSTANCE.get(text);\n }\n this._onPaste.fire({\n text: text,\n metadata: metadata\n });\n }\n}\nclass ClipboardEventUtils {\n static canUseTextData(e) {\n if (e.clipboardData) {\n return true;\n }\n return false;\n }\n static getTextData(e) {\n if (e.clipboardData) {\n e.preventDefault();\n const text = e.clipboardData.getData(Mimes.text);\n let metadata = null;\n const rawmetadata = e.clipboardData.getData('vscode-editor-data');\n if (typeof rawmetadata === 'string') {\n try {\n metadata = JSON.parse(rawmetadata);\n if (metadata.version !== 1) {\n metadata = null;\n }\n }\n catch (err) {\n // no problem!\n }\n }\n return [text, metadata];\n }\n throw new Error('ClipboardEventUtils.getTextData: Cannot use text data!');\n }\n static setTextData(e, text, html, metadata) {\n if (e.clipboardData) {\n e.clipboardData.setData(Mimes.text, text);\n if (typeof html === 'string') {\n e.clipboardData.setData('text/html', html);\n }\n e.clipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n e.preventDefault();\n return;\n }\n throw new Error('ClipboardEventUtils.setTextData: Cannot use text data!');\n }\n}\nclass TextAreaWrapper extends Disposable {\n constructor(_textArea) {\n super();\n this._actual = _textArea;\n this._ignoreSelectionChangeTime = 0;\n }\n setIgnoreSelectionChangeTime(reason) {\n this._ignoreSelectionChangeTime = Date.now();\n }\n getIgnoreSelectionChangeTime() {\n return this._ignoreSelectionChangeTime;\n }\n resetSelectionChangeTime() {\n this._ignoreSelectionChangeTime = 0;\n }\n getValue() {\n // console.log('current value: ' + this._textArea.value);\n return this._actual.domNode.value;\n }\n setValue(reason, value) {\n const textArea = this._actual.domNode;\n if (textArea.value === value) {\n // No change\n return;\n }\n // console.log('reason: ' + reason + ', current value: ' + textArea.value + ' => new value: ' + value);\n this.setIgnoreSelectionChangeTime('setValue');\n textArea.value = value;\n }\n getSelectionStart() {\n return this._actual.domNode.selectionDirection === 'backward' ? this._actual.domNode.selectionEnd : this._actual.domNode.selectionStart;\n }\n getSelectionEnd() {\n return this._actual.domNode.selectionDirection === 'backward' ? this._actual.domNode.selectionStart : this._actual.domNode.selectionEnd;\n }\n setSelectionRange(reason, selectionStart, selectionEnd) {\n const textArea = this._actual.domNode;\n let activeElement = null;\n const shadowRoot = dom.getShadowRoot(textArea);\n if (shadowRoot) {\n activeElement = shadowRoot.activeElement;\n }\n else {\n activeElement = document.activeElement;\n }\n const currentIsFocused = (activeElement === textArea);\n const currentSelectionStart = textArea.selectionStart;\n const currentSelectionEnd = textArea.selectionEnd;\n if (currentIsFocused && currentSelectionStart === selectionStart && currentSelectionEnd === selectionEnd) {\n // No change\n // Firefox iframe bug https://github.com/microsoft/monaco-editor/issues/643#issuecomment-367871377\n if (browser.isFirefox && window.parent !== window) {\n textArea.focus();\n }\n return;\n }\n // console.log('reason: ' + reason + ', setSelectionRange: ' + selectionStart + ' -> ' + selectionEnd);\n if (currentIsFocused) {\n // No need to focus, only need to change the selection range\n this.setIgnoreSelectionChangeTime('setSelectionRange');\n textArea.setSelectionRange(selectionStart, selectionEnd);\n if (browser.isFirefox && window.parent !== window) {\n textArea.focus();\n }\n return;\n }\n // If the focus is outside the textarea, browsers will try really hard to reveal the textarea.\n // Here, we try to undo the browser's desperate reveal.\n try {\n const scrollState = dom.saveParentsScrollTop(textArea);\n this.setIgnoreSelectionChangeTime('setSelectionRange');\n textArea.focus();\n textArea.setSelectionRange(selectionStart, selectionEnd);\n dom.restoreParentsScrollTop(textArea, scrollState);\n }\n catch (e) {\n // Sometimes IE throws when setting selection (e.g. textarea is off-DOM)\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { EventType, Gesture } from '../../../base/browser/touch.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { MouseHandler, createMouseMoveEventMerger } from './mouseHandler.js';\nimport { EditorMouseEvent, EditorPointerEventFactory } from '../editorDom.js';\nimport { BrowserFeatures } from '../../../base/browser/canIUse.js';\nimport { TextAreaSyntethicEvents } from './textAreaInput.js';\n/**\n * Currently only tested on iOS 13/ iPadOS.\n */\nexport class PointerEventHandler extends MouseHandler {\n constructor(context, viewController, viewHelper) {\n super(context, viewController, viewHelper);\n this._register(Gesture.addTarget(this.viewHelper.linesContentDomNode));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Tap, (e) => this.onTap(e)));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Change, (e) => this.onChange(e)));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Contextmenu, (e) => this._onContextMenu(new EditorMouseEvent(e, this.viewHelper.viewDomNode), false)));\n this._lastPointerType = 'mouse';\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, 'pointerdown', (e) => {\n const pointerType = e.pointerType;\n if (pointerType === 'mouse') {\n this._lastPointerType = 'mouse';\n return;\n }\n else if (pointerType === 'touch') {\n this._lastPointerType = 'touch';\n }\n else {\n this._lastPointerType = 'pen';\n }\n }));\n // PonterEvents\n const pointerEvents = new EditorPointerEventFactory(this.viewHelper.viewDomNode);\n this._register(pointerEvents.onPointerMoveThrottled(this.viewHelper.viewDomNode, (e) => this._onMouseMove(e), createMouseMoveEventMerger(this.mouseTargetFactory), MouseHandler.MOUSE_MOVE_MINIMUM_TIME));\n this._register(pointerEvents.onPointerUp(this.viewHelper.viewDomNode, (e) => this._onMouseUp(e)));\n this._register(pointerEvents.onPointerLeave(this.viewHelper.viewDomNode, (e) => this._onMouseLeave(e)));\n this._register(pointerEvents.onPointerDown(this.viewHelper.viewDomNode, (e) => this._onMouseDown(e)));\n }\n onTap(event) {\n if (!event.initialTarget || !this.viewHelper.linesContentDomNode.contains(event.initialTarget)) {\n return;\n }\n event.preventDefault();\n this.viewHelper.focusTextArea();\n const target = this._createMouseTarget(new EditorMouseEvent(event, this.viewHelper.viewDomNode), false);\n if (target.position) {\n // this.viewController.moveTo(target.position);\n this.viewController.dispatchMouse({\n position: target.position,\n mouseColumn: target.position.column,\n startedOnLineNumbers: false,\n mouseDownCount: event.tapCount,\n inSelectionMode: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n leftButton: false,\n middleButton: false,\n });\n }\n }\n onChange(e) {\n if (this._lastPointerType === 'touch') {\n this._context.model.deltaScrollNow(-e.translationX, -e.translationY);\n }\n }\n _onMouseDown(e) {\n if (e.browserEvent.pointerType === 'touch') {\n return;\n }\n super._onMouseDown(e);\n }\n}\nclass TouchHandler extends MouseHandler {\n constructor(context, viewController, viewHelper) {\n super(context, viewController, viewHelper);\n this._register(Gesture.addTarget(this.viewHelper.linesContentDomNode));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Tap, (e) => this.onTap(e)));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Change, (e) => this.onChange(e)));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Contextmenu, (e) => this._onContextMenu(new EditorMouseEvent(e, this.viewHelper.viewDomNode), false)));\n }\n onTap(event) {\n event.preventDefault();\n this.viewHelper.focusTextArea();\n const target = this._createMouseTarget(new EditorMouseEvent(event, this.viewHelper.viewDomNode), false);\n if (target.position) {\n // Send the tap event also to the